* output.cc (Output_file::open): Add execute permission to empty file.
[deliverable/binutils-gdb.git] / gdb / amd64-linux-tdep.c
CommitLineData
51433e4b 1/* Target-dependent code for GNU/Linux x86-64.
a4b6fc86 2
0fb0cc75 3 Copyright (C) 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009
6aba47ca 4 Free Software Foundation, Inc.
53e95fcf
JS
5 Contributed by Jiri Smid, SuSE Labs.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
53e95fcf
JS
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
53e95fcf
JS
21
22#include "defs.h"
35669430 23#include "arch-utils.h"
187e21d1 24#include "frame.h"
53e95fcf
JS
25#include "gdbcore.h"
26#include "regcache.h"
84dc46cb 27#include "osabi.h"
911bc6ee 28#include "symtab.h"
8695c747
DJ
29#include "gdbtypes.h"
30#include "reggroups.h"
31#include "amd64-linux-tdep.h"
4aa995e1 32#include "linux-tdep.h"
53e95fcf 33
c4f35dd8 34#include "gdb_string.h"
53e95fcf 35
9c1488cb 36#include "amd64-tdep.h"
187e21d1 37#include "solib-svr4.h"
eba29c8c 38
952b2d63
HZ
39#include "record.h"
40#include "linux-record.h"
41
eba29c8c 42/* Mapping between the general-purpose registers in `struct user'
187e21d1 43 format and GDB's register cache layout. */
eba29c8c 44
187e21d1
MK
45/* From <sys/reg.h>. */
46static int amd64_linux_gregset_reg_offset[] =
eba29c8c 47{
187e21d1
MK
48 10 * 8, /* %rax */
49 5 * 8, /* %rbx */
50 11 * 8, /* %rcx */
51 12 * 8, /* %rdx */
52 13 * 8, /* %rsi */
53 14 * 8, /* %rdi */
54 4 * 8, /* %rbp */
55 19 * 8, /* %rsp */
56 9 * 8, /* %r8 ... */
57 8 * 8,
58 7 * 8,
59 6 * 8,
60 3 * 8,
61 2 * 8,
62 1 * 8,
63 0 * 8, /* ... %r15 */
64 16 * 8, /* %rip */
65 18 * 8, /* %eflags */
66 17 * 8, /* %cs */
67 20 * 8, /* %ss */
68 23 * 8, /* %ds */
69 24 * 8, /* %es */
70 25 * 8, /* %fs */
71 26 * 8 /* %gs */
eba29c8c 72};
187e21d1 73\f
eba29c8c 74
187e21d1 75/* Support for signal handlers. */
c4f35dd8
MK
76
77#define LINUX_SIGTRAMP_INSN0 0x48 /* mov $NNNNNNNN, %rax */
78#define LINUX_SIGTRAMP_OFFSET0 0
79#define LINUX_SIGTRAMP_INSN1 0x0f /* syscall */
80#define LINUX_SIGTRAMP_OFFSET1 7
81
4252dc94 82static const gdb_byte linux_sigtramp_code[] =
c4f35dd8
MK
83{
84 /* mov $__NR_rt_sigreturn, %rax */
baed091b
ML
85 LINUX_SIGTRAMP_INSN0, 0xc7, 0xc0, 0x0f, 0x00, 0x00, 0x00,
86 /* syscall */
87 LINUX_SIGTRAMP_INSN1, 0x05
53e95fcf
JS
88};
89
90#define LINUX_SIGTRAMP_LEN (sizeof linux_sigtramp_code)
91
92/* If PC is in a sigtramp routine, return the address of the start of
93 the routine. Otherwise, return 0. */
94
95static CORE_ADDR
10458914 96amd64_linux_sigtramp_start (struct frame_info *this_frame)
53e95fcf 97{
10458914 98 CORE_ADDR pc = get_frame_pc (this_frame);
4252dc94 99 gdb_byte buf[LINUX_SIGTRAMP_LEN];
c4f35dd8
MK
100
101 /* We only recognize a signal trampoline if PC is at the start of
102 one of the two instructions. We optimize for finding the PC at
103 the start, as will be the case when the trampoline is not the
104 first frame on the stack. We assume that in the case where the
105 PC is not at the start of the instruction sequence, there will be
106 a few trailing readable bytes on the stack. */
107
10458914 108 if (!safe_frame_unwind_memory (this_frame, pc, buf, sizeof buf))
53e95fcf
JS
109 return 0;
110
111 if (buf[0] != LINUX_SIGTRAMP_INSN0)
112 {
113 if (buf[0] != LINUX_SIGTRAMP_INSN1)
114 return 0;
115
116 pc -= LINUX_SIGTRAMP_OFFSET1;
10458914 117 if (!safe_frame_unwind_memory (this_frame, pc, buf, sizeof buf))
53e95fcf
JS
118 return 0;
119 }
120
121 if (memcmp (buf, linux_sigtramp_code, LINUX_SIGTRAMP_LEN) != 0)
122 return 0;
123
124 return pc;
125}
126
10458914
DJ
127/* Return whether THIS_FRAME corresponds to a GNU/Linux sigtramp
128 routine. */
baed091b 129
c4f35dd8 130static int
10458914 131amd64_linux_sigtramp_p (struct frame_info *this_frame)
baed091b 132{
10458914 133 CORE_ADDR pc = get_frame_pc (this_frame);
911bc6ee
MK
134 char *name;
135
136 find_pc_partial_function (pc, &name, NULL, NULL);
137
c4f35dd8
MK
138 /* If we have NAME, we can optimize the search. The trampoline is
139 named __restore_rt. However, it isn't dynamically exported from
140 the shared C library, so the trampoline may appear to be part of
141 the preceding function. This should always be sigaction,
142 __sigaction, or __libc_sigaction (all aliases to the same
143 function). */
144 if (name == NULL || strstr (name, "sigaction") != NULL)
10458914 145 return (amd64_linux_sigtramp_start (this_frame) != 0);
c4f35dd8
MK
146
147 return (strcmp ("__restore_rt", name) == 0);
baed091b
ML
148}
149
c4f35dd8 150/* Offset to struct sigcontext in ucontext, from <asm/ucontext.h>. */
51433e4b 151#define AMD64_LINUX_UCONTEXT_SIGCONTEXT_OFFSET 40
b64bbf8c 152
10458914
DJ
153/* Assuming THIS_FRAME is a GNU/Linux sigtramp routine, return the
154 address of the associated sigcontext structure. */
baed091b 155
c4f35dd8 156static CORE_ADDR
10458914 157amd64_linux_sigcontext_addr (struct frame_info *this_frame)
baed091b 158{
e17a4113
UW
159 struct gdbarch *gdbarch = get_frame_arch (this_frame);
160 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
c4f35dd8 161 CORE_ADDR sp;
4252dc94 162 gdb_byte buf[8];
c4f35dd8 163
10458914 164 get_frame_register (this_frame, AMD64_RSP_REGNUM, buf);
e17a4113 165 sp = extract_unsigned_integer (buf, 8, byte_order);
c4f35dd8
MK
166
167 /* The sigcontext structure is part of the user context. A pointer
168 to the user context is passed as the third argument to the signal
169 handler, i.e. in %rdx. Unfortunately %rdx isn't preserved across
170 function calls so we can't use it. Fortunately the user context
171 is part of the signal frame and the unwound %rsp directly points
172 at it. */
51433e4b 173 return sp + AMD64_LINUX_UCONTEXT_SIGCONTEXT_OFFSET;
baed091b 174}
2213a65d
MK
175\f
176
2b5e0749 177/* From <asm/sigcontext.h>. */
51433e4b 178static int amd64_linux_sc_reg_offset[] =
2b5e0749
MK
179{
180 13 * 8, /* %rax */
181 11 * 8, /* %rbx */
182 14 * 8, /* %rcx */
183 12 * 8, /* %rdx */
184 9 * 8, /* %rsi */
185 8 * 8, /* %rdi */
186 10 * 8, /* %rbp */
187 15 * 8, /* %rsp */
188 0 * 8, /* %r8 */
189 1 * 8, /* %r9 */
190 2 * 8, /* %r10 */
191 3 * 8, /* %r11 */
192 4 * 8, /* %r12 */
193 5 * 8, /* %r13 */
194 6 * 8, /* %r14 */
195 7 * 8, /* %r15 */
196 16 * 8, /* %rip */
197 17 * 8, /* %eflags */
2b5e0749 198
af233647 199 /* FIXME: kettenis/2002030531: The registers %cs, %fs and %gs are
2b5e0749
MK
200 available in `struct sigcontext'. However, they only occupy two
201 bytes instead of four, which makes using them here rather
202 difficult. Leave them out for now. */
af233647
MK
203 -1, /* %cs */
204 -1, /* %ss */
205 -1, /* %ds */
206 -1, /* %es */
2b5e0749
MK
207 -1, /* %fs */
208 -1 /* %gs */
209};
210
8695c747
DJ
211/* Replacement register functions which know about %orig_rax. */
212
213static const char *
d93859e2 214amd64_linux_register_name (struct gdbarch *gdbarch, int reg)
8695c747
DJ
215{
216 if (reg == AMD64_LINUX_ORIG_RAX_REGNUM)
217 return "orig_rax";
218
d93859e2 219 return amd64_register_name (gdbarch, reg);
8695c747
DJ
220}
221
222static struct type *
223amd64_linux_register_type (struct gdbarch *gdbarch, int reg)
224{
225 if (reg == AMD64_LINUX_ORIG_RAX_REGNUM)
df4df182 226 return builtin_type (gdbarch)->builtin_int64;
8695c747
DJ
227
228 return amd64_register_type (gdbarch, reg);
229}
230
231static int
232amd64_linux_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
233 struct reggroup *group)
234{
235 if (regnum == AMD64_LINUX_ORIG_RAX_REGNUM)
236 return (group == system_reggroup
237 || group == save_reggroup
238 || group == restore_reggroup);
239 return default_register_reggroup_p (gdbarch, regnum, group);
240}
241
242/* Set the program counter for process PTID to PC. */
243
244static void
61a1198a 245amd64_linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
8695c747 246{
61a1198a 247 regcache_cooked_write_unsigned (regcache, AMD64_RIP_REGNUM, pc);
8695c747
DJ
248
249 /* We must be careful with modifying the program counter. If we
250 just interrupted a system call, the kernel might try to restart
251 it when we resume the inferior. On restarting the system call,
252 the kernel will try backing up the program counter even though it
253 no longer points at the system call. This typically results in a
254 SIGSEGV or SIGILL. We can prevent this by writing `-1' in the
255 "orig_rax" pseudo-register.
256
257 Note that "orig_rax" is saved when setting up a dummy call frame.
258 This means that it is properly restored when that frame is
259 popped, and that the interrupted system call will be restarted
260 when we resume the inferior on return from a function call from
261 within GDB. In all other cases the system call will not be
262 restarted. */
61a1198a 263 regcache_cooked_write_unsigned (regcache, AMD64_LINUX_ORIG_RAX_REGNUM, -1);
8695c747
DJ
264}
265
952b2d63
HZ
266/* Parse the arguments of current system call instruction and record
267 the values of the registers and memory that will be changed into
268 "record_arch_list". This instruction is "syscall".
269
270 Return -1 if something wrong. */
271
272static struct linux_record_tdep amd64_linux_record_tdep;
273
274#define RECORD_ARCH_GET_FS 0x1003
275#define RECORD_ARCH_GET_GS 0x1004
276
277static int
278amd64_linux_syscall_record (struct regcache *regcache)
279{
280 int ret, num = -1;
281 ULONGEST tmpulongest;
282
283 regcache_raw_read_unsigned (regcache, AMD64_RAX_REGNUM, &tmpulongest);
284
285 /* Convert tmpulongest to number in record_linux_system_call. */
286 switch (tmpulongest)
287 {
288 /* sys_read */
289 case 0:
290 num = 3;
291 break;
292 /* sys_write */
293 case 1:
294 num = 4;
295 break;
296 /* sys_open */
297 case 2:
298 num = 5;
299 break;
300 /* sys_close */
301 case 3:
302 num = 6;
303 break;
304 /* sys_newstat */
305 case 4:
306 num = 106;
307 break;
308 /* sys_newfstat */
309 case 5:
310 num = 108;
311 break;
312 /* sys_newlstat */
313 case 6:
314 num = 107;
315 break;
316 /* sys_poll */
317 case 7:
318 num = 168;
319 break;
320 /* sys_lseek */
321 case 8:
322 num = 19;
323 break;
324 /* sys_mmap */
325 case 9:
326 num = 192;
327 break;
328 /* sys_mprotect */
329 case 10:
330 num = 125;
331 break;
332 /* sys_munmap */
333 case 11:
334 num = 91;
335 break;
336 /* sys_brk */
337 case 12:
338 num = 45;
339 break;
340 /* sys_rt_sigaction */
341 case 13:
342 num = 174;
343 break;
344 /* sys_rt_sigprocmask */
345 case 14:
346 num = 175;
347 break;
348 /* sys_rt_sigreturn */
349 case 15:
350 num = 173;
351 break;
352 /* sys_ioctl */
353 case 16:
354 num = 54;
355 break;
356 /* sys_pread64 */
357 case 17:
358 num = 180;
359 break;
360 /* sys_pwrite64 */
361 case 18:
362 num = 181;
363 break;
364 /* sys_readv */
365 case 19:
366 num = 145;
367 break;
368 /* sys_writev */
369 case 20:
370 num = 146;
371 break;
372 /* sys_access */
373 case 21:
374 num = 33;
375 break;
376 /* sys_pipe */
377 case 22:
378 num = 42;
379 break;
380 /* sys_select */
381 case 23:
382 num = 142;
383 break;
384 /* sys_sched_yield */
385 case 24:
386 num = 158;
387 break;
388 /* sys_mremap */
389 case 25:
390 num = 163;
391 break;
392 /* sys_msync */
393 case 26:
394 num = 144;
395 break;
396 /* sys_mincore */
397 case 27:
398 num = 218;
399 break;
400 /* sys_madvise */
401 case 28:
402 num = 219;
403 break;
404 /* sys_shmget */
405 case 29:
406 num = 520;
407 break;
408 /* sys_shmat */
409 case 30:
410 num = 521;
411 break;
412 /* sys_shmctl */
413 case 31:
414 num = 522;
415 break;
416 /* sys_dup */
417 case 32:
418 num = 41;
419 break;
420 /* sys_dup2 */
421 case 33:
422 num = 63;
423 break;
424 /* sys_pause */
425 case 34:
426 num = 29;
427 break;
428 /* sys_nanosleep */
429 case 35:
430 num = 162;
431 break;
432 /* sys_getitimer */
433 case 36:
434 num = 105;
435 break;
436 /* sys_alarm */
437 case 37:
438 num = 27;
439 break;
440 /* sys_setitimer */
441 case 38:
442 num = 104;
443 break;
444 /* sys_getpid */
445 case 39:
446 num = 20;
447 break;
448 /* sys_sendfile64 */
449 case 40:
450 num = 239;
451 break;
452 /* sys_socket */
453 case 41:
454 num = 500;
455 break;
456 /* sys_connect */
457 case 42:
458 num = 501;
459 break;
460 /* sys_accept */
461 case 43:
462 num = 502;
463 break;
464 /* sys_sendto */
465 case 44:
466 num = 503;
467 break;
468 /* sys_recvfrom */
469 case 45:
470 num = 504;
471 break;
472 /* sys_sendmsg */
473 case 46:
474 num = 505;
475 break;
476 /* sys_recvmsg */
477 case 47:
478 num = 506;
479 break;
480 /* sys_shutdown */
481 case 48:
482 num = 507;
483 break;
484 /* sys_bind */
485 case 49:
486 num = 508;
487 break;
488 /* sys_listen */
489 case 50:
490 num = 509;
491 break;
492 /* sys_getsockname */
493 case 51:
494 num = 510;
495 break;
496 /* sys_getpeername */
497 case 52:
498 num = 511;
499 break;
500 /* sys_socketpair */
501 case 53:
502 num = 512;
503 break;
504 /* sys_setsockopt */
505 case 54:
506 num = 513;
507 break;
508 /* sys_getsockopt */
509 case 55:
510 num = 514;
511 break;
512 /* sys_clone */
513 case 56:
514 num = 120;
515 break;
516 /* sys_fork */
517 case 57:
518 num = 2;
519 break;
520 /* sys_vfork */
521 case 58:
522 num = 190;
523 break;
524 /* sys_execve */
525 case 59:
526 num = 11;
527 break;
528 /* sys_exit */
529 case 60:
530 num = 1;
531 break;
532 /* sys_wait4 */
533 case 61:
534 num = 114;
535 break;
536 /* sys_kill */
537 case 62:
538 num = 37;
539 break;
540 /* sys_uname */
541 case 63:
542 num = 109;
543 break;
544 /* sys_semget */
545 case 64:
546 num = 523;
547 break;
548 /* sys_semop */
549 case 65:
550 num = 524;
551 break;
552 /* sys_semctl */
553 case 66:
554 num = 525;
555 break;
556 /* sys_shmdt */
557 case 67:
558 num = 527;
559 break;
560 /* sys_msgget */
561 case 68:
562 num = 528;
563 break;
564 /* sys_msgsnd */
565 case 69:
566 num = 529;
567 break;
568 /* sys_msgrcv */
569 case 70:
570 num = 530;
571 break;
572 /* sys_msgctl */
573 case 71:
574 num = 531;
575 break;
576 /* sys_fcntl */
577 case 72:
578 num = 55;
579 break;
580 /* sys_flock */
581 case 73:
582 num = 143;
583 break;
584 /* sys_fsync */
585 case 74:
586 num = 118;
587 break;
588 /* sys_fdatasync */
589 case 75:
590 num = 148;
591 break;
592 /* sys_truncate */
593 case 76:
594 num = 92;
595 break;
596 /* sys_ftruncate */
597 case 77:
598 num = 93;
599 break;
600 /* sys_getdents */
601 case 78:
602 num = 141;
603 break;
604 /* sys_getcwd */
605 case 79:
606 num = 183;
607 break;
608 /* sys_chdir */
609 case 80:
610 num = 12;
611 break;
612 /* sys_fchdir */
613 case 81:
614 num = 133;
615 break;
616 /* sys_rename */
617 case 82:
618 num = 38;
619 break;
620 /* sys_mkdir */
621 case 83:
622 num = 39;
623 break;
624 /* sys_rmdir */
625 case 84:
626 num = 40;
627 break;
628 /* sys_creat */
629 case 85:
630 num = 8;
631 break;
632 /* sys_link */
633 case 86:
634 num = 9;
635 break;
636 /* sys_unlink */
637 case 87:
638 num = 10;
639 break;
640 /* sys_symlink */
641 case 88:
642 num = 83;
643 break;
644 /* sys_readlink */
645 case 89:
646 num = 85;
647 break;
648 /* sys_chmod */
649 case 90:
650 num = 15;
651 break;
652 /* sys_fchmod */
653 case 91:
654 num = 94;
655 break;
656 /* sys_chown */
657 case 92:
658 num = 212;
659 break;
660 /* sys_fchown */
661 case 93:
662 num = 207;
663 break;
664 /* sys_lchown */
665 case 94:
666 num = 198;
667 break;
668 /* sys_umask */
669 case 95:
670 num = 60;
671 break;
672 /* sys_gettimeofday */
673 case 96:
674 num = 78;
675 break;
676 /* sys_getrlimit */
677 case 97:
678 num = 191;
679 break;
680 /* sys_getrusage */
681 case 98:
682 num = 77;
683 break;
684 /* sys_sysinfo */
685 case 99:
686 num = 116;
687 break;
688 /* sys_times */
689 case 100:
690 num = 43;
691 break;
692 /* sys_ptrace */
693 case 101:
694 num = 26;
695 break;
696 /* sys_getuid */
697 case 102:
698 num = 199;
699 break;
700 /* sys_syslog */
701 case 103:
702 num = 103;
703 break;
704 /* sys_getgid */
705 case 104:
706 num = 200;
707 break;
708 /* sys_setuid */
709 case 105:
710 num = 213;
711 break;
712 /* sys_setgid */
713 case 106:
714 num = 214;
715 break;
716 /* sys_geteuid */
717 case 107:
718 num = 201;
719 break;
720 /* sys_getegid */
721 case 108:
722 num = 202;
723 break;
724 /* sys_setpgid */
725 case 109:
726 num = 57;
727 break;
728 /* sys_getppid */
729 case 110:
730 num = 64;
731 break;
732 /* sys_getpgrp */
733 case 111:
734 num = 65;
735 break;
736 /* sys_setsid */
737 case 112:
738 num = 66;
739 break;
740 /* sys_setreuid */
741 case 113:
742 num = 203;
743 break;
744 /* sys_setregid */
745 case 114:
746 num = 204;
747 break;
748 /* sys_getgroups */
749 case 115:
750 num = 205;
751 break;
752 /* sys_setgroups */
753 case 116:
754 num = 206;
755 break;
756 /* sys_setresuid */
757 case 117:
758 num = 208;
759 break;
760 /* sys_getresuid */
761 case 118:
762 num = 209;
763 break;
764 /* sys_setresgid */
765 case 119:
766 num = 210;
767 break;
768 /* sys_getresgid */
769 case 120:
770 num = 211;
771 break;
772 /* sys_getpgid */
773 case 121:
774 num = 132;
775 break;
776 /* sys_setfsuid */
777 case 122:
778 num = 215;
779 break;
780 /* sys_setfsgid */
781 case 123:
782 num = 216;
783 break;
784 /* sys_getsid */
785 case 124:
786 num = 147;
787 break;
788 /* sys_capget */
789 case 125:
790 num = 184;
791 break;
792 /* sys_capset */
793 case 126:
794 num = 185;
795 break;
796 /* sys_rt_sigpending */
797 case 127:
798 num = 176;
799 break;
800 /* sys_rt_sigtimedwait */
801 case 128:
802 num = 177;
803 break;
804 /* sys_rt_sigqueueinfo */
805 case 129:
806 num = 178;
807 break;
808 /* sys_rt_sigsuspend */
809 case 130:
810 num = 179;
811 break;
812 /* sys_sigaltstack */
813 case 131:
814 num = 186;
815 break;
816 /* sys_utime */
817 case 132:
818 num = 30;
819 break;
820 /* sys_mknod */
821 case 133:
822 num = 14;
823 break;
824 /* sys_personality */
825 case 135:
826 num = 136;
827 break;
828 /* sys_ustat */
829 case 136:
830 num = 62;
831 break;
832 /* sys_statfs */
833 case 137:
834 num = 99;
835 break;
836 /* sys_fstatfs */
837 case 138:
838 num = 100;
839 break;
840 /* sys_sysfs */
841 case 139:
842 num = 135;
843 break;
844 /* sys_getpriority */
845 case 140:
846 num = 96;
847 break;
848 /* sys_setpriority */
849 case 141:
850 num = 97;
851 break;
852 /* sys_sched_setparam */
853 case 142:
854 num = 154;
855 break;
856 /* sys_sched_getparam */
857 case 143:
858 num = 155;
859 break;
860 /* sys_sched_setscheduler */
861 case 144:
862 num = 156;
863 break;
864 /* sys_sched_getscheduler */
865 case 145:
866 num = 157;
867 break;
868 /* sys_sched_get_priority_max */
869 case 146:
870 num = 159;
871 break;
872 /* sys_sched_get_priority_min */
873 case 147:
874 num = 160;
875 break;
876 /* sys_sched_rr_get_interval */
877 case 148:
878 num = 161;
879 break;
880 /* sys_mlock */
881 case 149:
882 num = 150;
883 break;
884 /* sys_munlock */
885 case 150:
886 num = 151;
887 break;
888 /* sys_mlockall */
889 case 151:
890 num = 152;
891 break;
892 /* sys_munlockall */
893 case 152:
894 num = 153;
895 break;
896 /* sys_vhangup */
897 case 153:
898 num = 111;
899 break;
900 /* sys_modify_ldt */
901 case 154:
902 num = 123;
903 break;
904 /* sys_pivot_root */
905 case 155:
906 num = 217;
907 break;
908 /* sys_sysctl */
909 case 156:
910 num = 149;
911 break;
912 /* sys_prctl */
913 case 157:
914 num = 172;
915 break;
916 /* sys_arch_prctl */
917 case 158:
918 regcache_raw_read_unsigned (regcache, amd64_linux_record_tdep.arg3,
919 &tmpulongest);
920 if (tmpulongest == RECORD_ARCH_GET_FS
921 || tmpulongest == RECORD_ARCH_GET_GS)
922 {
923 regcache_raw_read_unsigned (regcache, amd64_linux_record_tdep.arg2,
924 &tmpulongest);
925 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
926 amd64_linux_record_tdep.size_ulong))
927 return -1;
928 }
929 break;
930 /* sys_adjtimex */
931 case 159:
932 num = 124;
933 break;
934 /* sys_setrlimit */
935 case 160:
936 num = 75;
937 break;
938 /* sys_chroot */
939 case 161:
940 num = 61;
941 break;
942 /* sys_sync */
943 case 162:
944 num = 36;
945 break;
946 /* sys_acct */
947 case 163:
948 num = 51;
949 break;
950 /* sys_settimeofday */
951 case 164:
952 num = 79;
953 break;
954 /* sys_mount */
955 case 165:
956 num = 21;
957 break;
958 /* sys_umount */
959 case 166:
960 num = 52;
961 break;
962 /* sys_swapon */
963 case 167:
964 num = 87;
965 break;
966 /* sys_swapoff */
967 case 168:
968 num = 115;
969 break;
970 /* sys_reboot */
971 case 169:
972 num = 88;
973 break;
974 /* sys_sethostname */
975 case 170:
976 num = 74;
977 break;
978 /* sys_setdomainname */
979 case 171:
980 num = 121;
981 break;
982 /* sys_iopl */
983 case 172:
984 num = 110;
985 break;
986 /* sys_ioperm */
987 case 173:
988 num = 101;
989 break;
990 /* sys_init_module */
991 case 175:
992 num = 128;
993 break;
994 /* sys_delete_module */
995 case 176:
996 num = 129;
997 break;
998 /* sys_quotactl */
999 case 179:
1000 num = 131;
1001 break;
1002 /* sys_nfsservctl */
1003 case 180:
1004 num = 169;
1005 break;
1006 /* sys_gettid */
1007 case 186:
1008 num = 224;
1009 break;
1010 /* sys_readahead */
1011 case 187:
1012 num = 225;
1013 break;
1014 /* sys_setxattr */
1015 case 188:
1016 num = 226;
1017 break;
1018 /* sys_lsetxattr */
1019 case 189:
1020 num = 227;
1021 break;
1022 /* sys_fsetxattr */
1023 case 190:
1024 num = 228;
1025 break;
1026 /* sys_getxattr */
1027 case 191:
1028 num = 229;
1029 break;
1030 /* sys_lgetxattr */
1031 case 192:
1032 num = 230;
1033 break;
1034 /* sys_fgetxattr */
1035 case 193:
1036 num = 231;
1037 break;
1038 /* sys_listxattr */
1039 case 194:
1040 num = 232;
1041 break;
1042 /* sys_llistxattr */
1043 case 195:
1044 num = 233;
1045 break;
1046 /* sys_flistxattr */
1047 case 196:
1048 num = 234;
1049 break;
1050 /* sys_removexattr */
1051 case 197:
1052 num = 235;
1053 break;
1054 /* sys_lremovexattr */
1055 case 198:
1056 num = 236;
1057 break;
1058 /* sys_fremovexattr */
1059 case 199:
1060 num = 237;
1061 break;
1062 /* sys_tkill */
1063 case 200:
1064 num = 238;
1065 break;
1066 /* sys_time */
1067 case 201:
1068 num = 13;
1069 break;
1070 /* sys_futex */
1071 case 202:
1072 num = 240;
1073 break;
1074 /* sys_sched_setaffinity */
1075 case 203:
1076 num = 241;
1077 break;
1078 /* sys_sched_getaffinity */
1079 case 204:
1080 num = 242;
1081 break;
1082 /* sys_io_setup */
1083 case 206:
1084 num = 245;
1085 break;
1086 /* sys_io_destroy */
1087 case 207:
1088 num = 246;
1089 break;
1090 /* sys_io_getevents */
1091 case 208:
1092 num = 247;
1093 break;
1094 /* sys_io_submit */
1095 case 209:
1096 num = 248;
1097 break;
1098 /* sys_io_cancel */
1099 case 210:
1100 num = 249;
1101 break;
1102 /* sys_lookup_dcookie */
1103 case 212:
1104 num = 253;
1105 break;
1106 /* sys_epoll_create */
1107 case 213:
1108 num = 254;
1109 break;
1110 /* sys_remap_file_pages */
1111 case 216:
1112 num = 257;
1113 break;
1114 /* sys_getdents64 */
1115 case 217:
1116 num = 220;
1117 break;
1118 /* sys_set_tid_address */
1119 case 218:
1120 num = 258;
1121 break;
1122 /* sys_restart_syscall */
1123 case 219:
1124 num = 0;
1125 break;
1126 /* sys_semtimedop */
1127 case 220:
1128 num = 532;
1129 break;
1130 /* sys_fadvise64 */
1131 case 221:
1132 num = 250;
1133 break;
1134 /* sys_timer_create */
1135 case 222:
1136 num = 259;
1137 break;
1138 /* sys_timer_settime */
1139 case 223:
1140 num = 260;
1141 break;
1142 /* sys_timer_gettime */
1143 case 224:
1144 num = 261;
1145 break;
1146 /* sys_timer_getoverrun */
1147 case 225:
1148 num = 262;
1149 break;
1150 /* sys_timer_delete */
1151 case 226:
1152 num = 263;
1153 break;
1154 /* sys_clock_settime */
1155 case 227:
1156 num = 264;
1157 break;
1158 /* sys_clock_gettime */
1159 case 228:
1160 num = 265;
1161 break;
1162 /* sys_clock_getres */
1163 case 229:
1164 num = 266;
1165 break;
1166 /* sys_clock_nanosleep */
1167 case 230:
1168 num = 267;
1169 break;
1170 /* sys_exit_group */
1171 case 231:
1172 num = 252;
1173 break;
1174 /* sys_epoll_wait */
1175 case 232:
1176 num = 256;
1177 break;
1178 /* sys_epoll_ctl */
1179 case 233:
1180 num = 255;
1181 break;
1182 /* sys_tgkill */
1183 case 234:
1184 num = 270;
1185 break;
1186 /* sys_utimes */
1187 case 235:
1188 num = 271;
1189 break;
1190 /* sys_mbind */
1191 case 237:
1192 num = 274;
1193 break;
1194 /* sys_set_mempolicy */
1195 case 238:
1196 num = 276;
1197 break;
1198 /* sys_get_mempolicy */
1199 case 239:
1200 num = 275;
1201 break;
1202 /* sys_mq_open */
1203 case 240:
1204 num = 277;
1205 break;
1206 /* sys_mq_unlink */
1207 case 241:
1208 num = 278;
1209 break;
1210 /* sys_mq_timedsend */
1211 case 242:
1212 num = 279;
1213 break;
1214 /* sys_mq_timedreceive */
1215 case 243:
1216 num = 280;
1217 break;
1218 /* sys_mq_notify */
1219 case 244:
1220 num = 281;
1221 break;
1222 /* sys_mq_getsetattr */
1223 case 245:
1224 num = 282;
1225 break;
1226 /* sys_kexec_load */
1227 case 246:
1228 num = 283;
1229 break;
1230 /* sys_waitid */
1231 case 247:
1232 num = 284;
1233 break;
1234 /* sys_add_key */
1235 case 248:
1236 num = 286;
1237 break;
1238 /* sys_request_key */
1239 case 249:
1240 num = 287;
1241 break;
1242 /* sys_keyctl */
1243 case 250:
1244 num = 288;
1245 break;
1246 /* sys_ioprio_set */
1247 case 251:
1248 num = 289;
1249 break;
1250 /* sys_ioprio_get */
1251 case 252:
1252 num = 290;
1253 break;
1254 /* sys_inotify_init */
1255 case 253:
1256 num = 291;
1257 break;
1258 /* sys_inotify_add_watch */
1259 case 254:
1260 num = 292;
1261 break;
1262 /* sys_inotify_rm_watch */
1263 case 255:
1264 num = 293;
1265 break;
1266 /* sys_migrate_pages */
1267 case 256:
1268 num = 294;
1269 break;
1270 /* sys_openat */
1271 case 257:
1272 num = 295;
1273 break;
1274 /* sys_mkdirat */
1275 case 258:
1276 num = 296;
1277 break;
1278 /* sys_mknodat */
1279 case 259:
1280 num = 297;
1281 break;
1282 /* sys_fchownat */
1283 case 260:
1284 num = 298;
1285 break;
1286 /* sys_futimesat */
1287 case 261:
1288 num = 299;
1289 break;
1290 /* sys_newfstatat */
1291 case 262:
1292 num = 540;
1293 break;
1294 /* sys_unlinkat */
1295 case 263:
1296 num = 301;
1297 break;
1298 /* sys_renameat */
1299 case 264:
1300 num = 302;
1301 break;
1302 /* sys_linkat */
1303 case 265:
1304 num = 303;
1305 break;
1306 /* sys_symlinkat */
1307 case 266:
1308 num = 304;
1309 break;
1310 /* sys_readlinkat */
1311 case 267:
1312 num = 305;
1313 break;
1314 /* sys_fchmodat */
1315 case 268:
1316 num = 306;
1317 break;
1318 /* sys_faccessat */
1319 case 269:
1320 num = 307;
1321 break;
1322 /* sys_pselect6 */
1323 case 270:
1324 num = 308;
1325 break;
1326 /* sys_ppoll */
1327 case 271:
1328 num = 309;
1329 break;
1330 /* sys_unshare */
1331 case 272:
1332 num = 310;
1333 break;
1334 /* sys_set_robust_list */
1335 case 273:
1336 num = 311;
1337 break;
1338 /* sys_get_robust_list */
1339 case 274:
1340 num = 312;
1341 break;
1342 /* sys_splice */
1343 case 275:
1344 num = 313;
1345 break;
1346 /* sys_tee */
1347 case 276:
1348 num = 315;
1349 break;
1350 /* sys_sync_file_range */
1351 case 277:
1352 num = 314;
1353 break;
1354 /* sys_vmsplice */
1355 case 278:
1356 num = 316;
1357 break;
1358 /* sys_move_pages */
1359 case 279:
1360 num = 317;
1361 break;
1362 default:
1363 printf_unfiltered (_("Process record and replay target doesn't "
1364 "support syscall number %d\n"), (int) tmpulongest);
1365 return -1;
1366 break;
1367 }
1368
1369 if (num >= 0)
1370 {
1371 ret = record_linux_system_call (num, regcache,
1372 &amd64_linux_record_tdep);
1373 if (ret)
1374 return ret;
1375 }
1376
1377 /* Record the return value of the system call. */
1378 if (record_arch_list_add_reg (regcache, AMD64_RCX_REGNUM))
1379 return -1;
1380 if (record_arch_list_add_reg (regcache, AMD64_R11_REGNUM))
1381 return -1;
1382
1383
1384 return 0;
1385}
1386
2213a65d 1387static void
51433e4b 1388amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
2213a65d 1389{
c4f35dd8 1390 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
187e21d1
MK
1391
1392 tdep->gregset_reg_offset = amd64_linux_gregset_reg_offset;
1393 tdep->gregset_num_regs = ARRAY_SIZE (amd64_linux_gregset_reg_offset);
1394 tdep->sizeof_gregset = 27 * 8;
1395
90f90721 1396 amd64_init_abi (info, gdbarch);
c4f35dd8 1397
911bc6ee 1398 tdep->sigtramp_p = amd64_linux_sigtramp_p;
51433e4b
MK
1399 tdep->sigcontext_addr = amd64_linux_sigcontext_addr;
1400 tdep->sc_reg_offset = amd64_linux_sc_reg_offset;
1401 tdep->sc_num_regs = ARRAY_SIZE (amd64_linux_sc_reg_offset);
187e21d1
MK
1402
1403 /* GNU/Linux uses SVR4-style shared libraries. */
1404 set_solib_svr4_fetch_link_map_offsets
1405 (gdbarch, svr4_lp64_fetch_link_map_offsets);
b2756930 1406
8695c747
DJ
1407 /* Add the %orig_rax register used for syscall restarting. */
1408 set_gdbarch_write_pc (gdbarch, amd64_linux_write_pc);
1409 set_gdbarch_num_regs (gdbarch, AMD64_LINUX_NUM_REGS);
1410 set_gdbarch_register_name (gdbarch, amd64_linux_register_name);
1411 set_gdbarch_register_type (gdbarch, amd64_linux_register_type);
1412 set_gdbarch_register_reggroup_p (gdbarch, amd64_linux_register_reggroup_p);
1413
b2756930
KB
1414 /* Enable TLS support. */
1415 set_gdbarch_fetch_tls_load_module_address (gdbarch,
1416 svr4_fetch_objfile_link_map);
35669430 1417
872761f4
MS
1418 /* GNU/Linux uses SVR4-style shared libraries. */
1419 set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
1420
35669430
DE
1421 /* Displaced stepping. */
1422 set_gdbarch_displaced_step_copy_insn (gdbarch,
1423 amd64_displaced_step_copy_insn);
1424 set_gdbarch_displaced_step_fixup (gdbarch, amd64_displaced_step_fixup);
1425 set_gdbarch_displaced_step_free_closure (gdbarch,
1426 simple_displaced_step_free_closure);
1427 set_gdbarch_displaced_step_location (gdbarch,
1428 displaced_step_at_entry_point);
4aa995e1
PA
1429
1430 set_gdbarch_get_siginfo_type (gdbarch, linux_get_siginfo_type);
952b2d63
HZ
1431
1432 set_gdbarch_process_record (gdbarch, i386_process_record);
1433
1434 /* Initialize the amd64_linux_record_tdep. */
1435 /* These values are the size of the type that will be used in a system
1436 call. They are obtained from Linux Kernel source. */
1437 amd64_linux_record_tdep.size_pointer
1438 = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
1439 amd64_linux_record_tdep.size__old_kernel_stat = 32;
1440 amd64_linux_record_tdep.size_tms = 32;
1441 amd64_linux_record_tdep.size_loff_t = 8;
1442 amd64_linux_record_tdep.size_flock = 32;
1443 amd64_linux_record_tdep.size_oldold_utsname = 45;
1444 amd64_linux_record_tdep.size_ustat = 32;
1445 /* ADM64 doesn't need this size because it doesn't have sys_sigaction
1446 but sys_rt_sigaction. */
1447 amd64_linux_record_tdep.size_old_sigaction = 152;
1448 /* ADM64 doesn't need this size because it doesn't have sys_sigpending
1449 but sys_rt_sigpending. */
1450 amd64_linux_record_tdep.size_old_sigset_t = 128;
1451 amd64_linux_record_tdep.size_rlimit = 16;
1452 amd64_linux_record_tdep.size_rusage = 144;
1453 amd64_linux_record_tdep.size_timeval = 16;
1454 amd64_linux_record_tdep.size_timezone = 8;
1455 /* ADM64 doesn't need this size because it doesn't have sys_getgroups16
1456 but sys_getgroups. */
1457 amd64_linux_record_tdep.size_old_gid_t = 2;
1458 /* ADM64 doesn't need this size because it doesn't have sys_getresuid16
1459 but sys_getresuid. */
1460 amd64_linux_record_tdep.size_old_uid_t = 2;
1461 amd64_linux_record_tdep.size_fd_set = 128;
1462 amd64_linux_record_tdep.size_dirent = 280;
1463 amd64_linux_record_tdep.size_dirent64 = 280;
1464 amd64_linux_record_tdep.size_statfs = 120;
1465 amd64_linux_record_tdep.size_statfs64 = 120;
1466 amd64_linux_record_tdep.size_sockaddr = 16;
1467 amd64_linux_record_tdep.size_int
1468 = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
1469 amd64_linux_record_tdep.size_long
1470 = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
1471 amd64_linux_record_tdep.size_ulong
1472 = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
1473 amd64_linux_record_tdep.size_msghdr = 56;
1474 amd64_linux_record_tdep.size_itimerval = 32;
1475 amd64_linux_record_tdep.size_stat = 144;
1476 amd64_linux_record_tdep.size_old_utsname = 325;
1477 amd64_linux_record_tdep.size_sysinfo = 112;
1478 amd64_linux_record_tdep.size_msqid_ds = 120;
1479 amd64_linux_record_tdep.size_shmid_ds = 112;
1480 amd64_linux_record_tdep.size_new_utsname = 390;
1481 amd64_linux_record_tdep.size_timex = 208;
1482 amd64_linux_record_tdep.size_mem_dqinfo = 24;
1483 amd64_linux_record_tdep.size_if_dqblk = 72;
1484 amd64_linux_record_tdep.size_fs_quota_stat = 80;
1485 amd64_linux_record_tdep.size_timespec = 16;
1486 amd64_linux_record_tdep.size_pollfd = 8;
1487 amd64_linux_record_tdep.size_NFS_FHSIZE = 32;
1488 amd64_linux_record_tdep.size_knfsd_fh = 132;
1489 amd64_linux_record_tdep.size_TASK_COMM_LEN = 16;
1490 amd64_linux_record_tdep.size_sigaction = 152;
1491 amd64_linux_record_tdep.size_sigset_t = 128;
1492 amd64_linux_record_tdep.size_siginfo_t = 128;
1493 amd64_linux_record_tdep.size_cap_user_data_t = 8;
1494 amd64_linux_record_tdep.size_stack_t = 24;
1495 amd64_linux_record_tdep.size_off_t = 8;
1496 amd64_linux_record_tdep.size_stat64 = 144;
1497 amd64_linux_record_tdep.size_gid_t = 4;
1498 amd64_linux_record_tdep.size_uid_t = 4;
1499 amd64_linux_record_tdep.size_PAGE_SIZE = 4096;
1500 amd64_linux_record_tdep.size_flock64 = 32;
1501 amd64_linux_record_tdep.size_user_desc = 16;
1502 amd64_linux_record_tdep.size_io_event = 32;
1503 amd64_linux_record_tdep.size_iocb = 64;
1504 amd64_linux_record_tdep.size_epoll_event = 12;
1505 amd64_linux_record_tdep.size_itimerspec = 32;
1506 amd64_linux_record_tdep.size_mq_attr = 64;
1507 amd64_linux_record_tdep.size_siginfo = 128;
1508 amd64_linux_record_tdep.size_termios = 60;
1509 amd64_linux_record_tdep.size_termios2 = 44;
1510 amd64_linux_record_tdep.size_pid_t = 4;
1511 amd64_linux_record_tdep.size_winsize = 8;
1512 amd64_linux_record_tdep.size_serial_struct = 72;
1513 amd64_linux_record_tdep.size_serial_icounter_struct = 80;
1514 amd64_linux_record_tdep.size_hayes_esp_config = 12;
1515 amd64_linux_record_tdep.size_size_t = 8;
1516 amd64_linux_record_tdep.size_iovec = 16;
1517
1518 /* These values are the second argument of system call "sys_ioctl".
1519 They are obtained from Linux Kernel source. */
1520 amd64_linux_record_tdep.ioctl_TCGETS = 0x5401;
1521 amd64_linux_record_tdep.ioctl_TCSETS = 0x5402;
1522 amd64_linux_record_tdep.ioctl_TCSETSW = 0x5403;
1523 amd64_linux_record_tdep.ioctl_TCSETSF = 0x5404;
1524 amd64_linux_record_tdep.ioctl_TCGETA = 0x5405;
1525 amd64_linux_record_tdep.ioctl_TCSETA = 0x5406;
1526 amd64_linux_record_tdep.ioctl_TCSETAW = 0x5407;
1527 amd64_linux_record_tdep.ioctl_TCSETAF = 0x5408;
1528 amd64_linux_record_tdep.ioctl_TCSBRK = 0x5409;
1529 amd64_linux_record_tdep.ioctl_TCXONC = 0x540A;
1530 amd64_linux_record_tdep.ioctl_TCFLSH = 0x540B;
1531 amd64_linux_record_tdep.ioctl_TIOCEXCL = 0x540C;
1532 amd64_linux_record_tdep.ioctl_TIOCNXCL = 0x540D;
1533 amd64_linux_record_tdep.ioctl_TIOCSCTTY = 0x540E;
1534 amd64_linux_record_tdep.ioctl_TIOCGPGRP = 0x540F;
1535 amd64_linux_record_tdep.ioctl_TIOCSPGRP = 0x5410;
1536 amd64_linux_record_tdep.ioctl_TIOCOUTQ = 0x5411;
1537 amd64_linux_record_tdep.ioctl_TIOCSTI = 0x5412;
1538 amd64_linux_record_tdep.ioctl_TIOCGWINSZ = 0x5413;
1539 amd64_linux_record_tdep.ioctl_TIOCSWINSZ = 0x5414;
1540 amd64_linux_record_tdep.ioctl_TIOCMGET = 0x5415;
1541 amd64_linux_record_tdep.ioctl_TIOCMBIS = 0x5416;
1542 amd64_linux_record_tdep.ioctl_TIOCMBIC = 0x5417;
1543 amd64_linux_record_tdep.ioctl_TIOCMSET = 0x5418;
1544 amd64_linux_record_tdep.ioctl_TIOCGSOFTCAR = 0x5419;
1545 amd64_linux_record_tdep.ioctl_TIOCSSOFTCAR = 0x541A;
1546 amd64_linux_record_tdep.ioctl_FIONREAD = 0x541B;
1547 amd64_linux_record_tdep.ioctl_TIOCINQ
1548 = amd64_linux_record_tdep.ioctl_FIONREAD;
1549 amd64_linux_record_tdep.ioctl_TIOCLINUX = 0x541C;
1550 amd64_linux_record_tdep.ioctl_TIOCCONS = 0x541D;
1551 amd64_linux_record_tdep.ioctl_TIOCGSERIAL = 0x541E;
1552 amd64_linux_record_tdep.ioctl_TIOCSSERIAL = 0x541F;
1553 amd64_linux_record_tdep.ioctl_TIOCPKT = 0x5420;
1554 amd64_linux_record_tdep.ioctl_FIONBIO = 0x5421;
1555 amd64_linux_record_tdep.ioctl_TIOCNOTTY = 0x5422;
1556 amd64_linux_record_tdep.ioctl_TIOCSETD = 0x5423;
1557 amd64_linux_record_tdep.ioctl_TIOCGETD = 0x5424;
1558 amd64_linux_record_tdep.ioctl_TCSBRKP = 0x5425;
1559 amd64_linux_record_tdep.ioctl_TIOCTTYGSTRUCT = 0x5426;
1560 amd64_linux_record_tdep.ioctl_TIOCSBRK = 0x5427;
1561 amd64_linux_record_tdep.ioctl_TIOCCBRK = 0x5428;
1562 amd64_linux_record_tdep.ioctl_TIOCGSID = 0x5429;
1563 amd64_linux_record_tdep.ioctl_TCGETS2 = 0x802c542a;
1564 amd64_linux_record_tdep.ioctl_TCSETS2 = 0x402c542b;
1565 amd64_linux_record_tdep.ioctl_TCSETSW2 = 0x402c542c;
1566 amd64_linux_record_tdep.ioctl_TCSETSF2 = 0x402c542d;
1567 amd64_linux_record_tdep.ioctl_TIOCGPTN = 0x80045430;
1568 amd64_linux_record_tdep.ioctl_TIOCSPTLCK = 0x40045431;
1569 amd64_linux_record_tdep.ioctl_FIONCLEX = 0x5450;
1570 amd64_linux_record_tdep.ioctl_FIOCLEX = 0x5451;
1571 amd64_linux_record_tdep.ioctl_FIOASYNC = 0x5452;
1572 amd64_linux_record_tdep.ioctl_TIOCSERCONFIG = 0x5453;
1573 amd64_linux_record_tdep.ioctl_TIOCSERGWILD = 0x5454;
1574 amd64_linux_record_tdep.ioctl_TIOCSERSWILD = 0x5455;
1575 amd64_linux_record_tdep.ioctl_TIOCGLCKTRMIOS = 0x5456;
1576 amd64_linux_record_tdep.ioctl_TIOCSLCKTRMIOS = 0x5457;
1577 amd64_linux_record_tdep.ioctl_TIOCSERGSTRUCT = 0x5458;
1578 amd64_linux_record_tdep.ioctl_TIOCSERGETLSR = 0x5459;
1579 amd64_linux_record_tdep.ioctl_TIOCSERGETMULTI = 0x545A;
1580 amd64_linux_record_tdep.ioctl_TIOCSERSETMULTI = 0x545B;
1581 amd64_linux_record_tdep.ioctl_TIOCMIWAIT = 0x545C;
1582 amd64_linux_record_tdep.ioctl_TIOCGICOUNT = 0x545D;
1583 amd64_linux_record_tdep.ioctl_TIOCGHAYESESP = 0x545E;
1584 amd64_linux_record_tdep.ioctl_TIOCSHAYESESP = 0x545F;
1585 amd64_linux_record_tdep.ioctl_FIOQSIZE = 0x5460;
1586
1587 /* These values are the second argument of system call "sys_fcntl"
1588 and "sys_fcntl64". They are obtained from Linux Kernel source. */
1589 amd64_linux_record_tdep.fcntl_F_GETLK = 5;
1590 amd64_linux_record_tdep.fcntl_F_GETLK64 = 12;
1591 amd64_linux_record_tdep.fcntl_F_SETLK64 = 13;
1592 amd64_linux_record_tdep.fcntl_F_SETLKW64 = 14;
1593
1594 amd64_linux_record_tdep.arg1 = AMD64_RDI_REGNUM;
1595 amd64_linux_record_tdep.arg2 = AMD64_RSI_REGNUM;
1596 amd64_linux_record_tdep.arg3 = AMD64_RDX_REGNUM;
1597 amd64_linux_record_tdep.arg4 = AMD64_R10_REGNUM;
1598 amd64_linux_record_tdep.arg5 = AMD64_R8_REGNUM;
1599 amd64_linux_record_tdep.arg6 = AMD64_R9_REGNUM;
1600
1601 tdep->i386_syscall_record = amd64_linux_syscall_record;
2213a65d 1602}
c4f35dd8 1603\f
2213a65d
MK
1604
1605/* Provide a prototype to silence -Wmissing-prototypes. */
51433e4b 1606extern void _initialize_amd64_linux_tdep (void);
2213a65d
MK
1607
1608void
51433e4b 1609_initialize_amd64_linux_tdep (void)
2213a65d 1610{
51433e4b
MK
1611 gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64,
1612 GDB_OSABI_LINUX, amd64_linux_init_abi);
2213a65d 1613}
This page took 0.659178 seconds and 4 git commands to generate.