/* Process record and replay target code for GNU/Linux. Copyright (C) 2008-2022 Free Software Foundation, Inc. This file is part of GDB. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef LINUX_RECORD_H #define LINUX_RECORD_H struct linux_record_tdep { /* The size of the type that will be used in a system call. */ int size_pointer; int size__old_kernel_stat; int size_tms; int size_loff_t; int size_flock; int size_oldold_utsname; int size_ustat; int size_old_sigaction; int size_old_sigset_t; int size_rlimit; int size_rusage; int size_timeval; int size_timezone; int size_old_gid_t; int size_old_uid_t; int size_fd_set; int size_old_dirent; int size_statfs; int size_statfs64; int size_sockaddr; int size_int; int size_long; int size_ulong; int size_msghdr; int size_itimerval; int size_stat; int size_old_utsname; int size_sysinfo; int size_msqid_ds; int size_shmid_ds; int size_new_utsname; int size_timex; int size_mem_dqinfo; int size_if_dqblk; int size_fs_quota_stat; int size_timespec; int size_pollfd; int size_NFS_FHSIZE; int size_knfsd_fh; int size_TASK_COMM_LEN; int size_sigaction; int size_sigset_t; int size_siginfo_t; int size_cap_user_data_t; int size_stack_t; int size_off_t; int size_stat64; int size_gid_t; int size_uid_t; int size_PAGE_SIZE; int size_flock64; int size_user_desc; int size_io_event; int size_iocb; int size_epoll_event; int size_itimerspec; int size_mq_attr; int size_termios; int size_termios2; int size_pid_t; int size_winsize; int size_serial_struct; int size_serial_icounter_struct; int size_hayes_esp_config; int size_size_t; int size_iovec; int size_time_t; /* The values of the second argument of system call "sys_ioctl". */ int ioctl_TCGETS; int ioctl_TCSETS; int ioctl_TCSETSW; int ioctl_TCSETSF; int ioctl_TCGETA; int ioctl_TCSETA; int ioctl_TCSETAW; int ioctl_TCSETAF; int ioctl_TCSBRK; int ioctl_TCXONC; int ioctl_TCFLSH; int ioctl_TIOCEXCL; int ioctl_TIOCNXCL; int ioctl_TIOCSCTTY; int ioctl_TIOCGPGRP; int ioctl_TIOCSPGRP; int ioctl_TIOCOUTQ; int ioctl_TIOCSTI; int ioctl_TIOCGWINSZ; int ioctl_TIOCSWINSZ; int ioctl_TIOCMGET; int ioctl_TIOCMBIS; int ioctl_TIOCMBIC; int ioctl_TIOCMSET; int ioctl_TIOCGSOFTCAR; int ioctl_TIOCSSOFTCAR; int ioctl_FIONREAD; int ioctl_TIOCINQ; int ioctl_TIOCLINUX; int ioctl_TIOCCONS; int ioctl_TIOCGSERIAL; int ioctl_TIOCSSERIAL; int ioctl_TIOCPKT; int ioctl_FIONBIO; int ioctl_TIOCNOTTY; int ioctl_TIOCSETD; int ioctl_TIOCGETD; int ioctl_TCSBRKP; int ioctl_TIOCTTYGSTRUCT; int ioctl_TIOCSBRK; int ioctl_TIOCCBRK; int ioctl_TIOCGSID; int ioctl_TCGETS2; int ioctl_TCSETS2; int ioctl_TCSETSW2; int ioctl_TCSETSF2; int ioctl_TIOCGPTN; int ioctl_TIOCSPTLCK; int ioctl_FIONCLEX; int ioctl_FIOCLEX; int ioctl_FIOASYNC; int ioctl_TIOCSERCONFIG; int ioctl_TIOCSERGWILD; int ioctl_TIOCSERSWILD; int ioctl_TIOCGLCKTRMIOS; int ioctl_TIOCSLCKTRMIOS; int ioctl_TIOCSERGSTRUCT; int ioctl_TIOCSERGETLSR; int ioctl_TIOCSERGETMULTI; int ioctl_TIOCSERSETMULTI; int ioctl_TIOCMIWAIT; int ioctl_TIOCGICOUNT; int ioctl_TIOCGHAYESESP; int ioctl_TIOCSHAYESESP; int ioctl_FIOQSIZE; /* The values of the second argument of system call "sys_fcntl" and "sys_fcntl64". */ int fcntl_F_GETLK; int fcntl_F_GETLK64; int fcntl_F_SETLK64; int fcntl_F_SETLKW64; /* The number of the registers that are used as the arguments of a system call. */ int arg1; int arg2; int arg3; int arg4; int arg5; int arg6; int arg7; }; /* Enum that defines the gdb-canonical set of Linux syscall identifiers. Different architectures will have different sets of syscall ids, and each must provide a mapping from their set to this one. */ enum gdb_syscall { /* An unknown GDB syscall, not a real syscall. */ gdb_sys_no_syscall = -1, gdb_sys_restart_syscall = 0, gdb_sys_exit = 1, gdb_sys_fork = 2, gdb_sys_read = 3, gdb_sys_write = 4, gdb_sys_open = 5, gdb_sys_close = 6, gdb_sys_waitpid = 7, gdb_sys_creat = 8, gdb_sys_link = 9, gdb_sys_unlink = 10, gdb_sys_execve = 11, gdb_sys_chdir = 12, gdb_sys_time = 13, gdb_sys_mknod = 14, gdb_sys_chmod = 15, gdb_sys_lchown16 = 16, gdb_sys_ni_syscall17 = 17, gdb_sys_stat = 18, gdb_sys_lseek = 19, gdb_sys_getpid = 20, gdb_sys_mount = 21, gdb_sys_oldumount = 22, gdb_sys_setuid16 = 23, gdb_sys_getuid16 = 24, gdb_sys_stime = 25, gdb_sys_ptrace = 26, gdb_sys_alarm = 27, gdb_sys_fstat = 28, gdb_sys_pause = 29, gdb_sys_utime = 30, gdb_sys_ni_syscall31 = 31, gdb_sys_ni_syscall32 = 32, gdb_sys_access = 33, gdb_sys_nice = 34, gdb_sys_ni_syscall35 = 35, gdb_sys_sync = 36, gdb_sys_kill = 37, gdb_sys_rename = 38, gdb_sys_mkdir = 39, gdb_sys_rmdir = 40, gdb_sys_dup = 41, gdb_sys_pipe = 42, gdb_sys_times = 43, gdb_sys_ni_syscall44 = 44, gdb_sys_brk = 45, gdb_sys_setgid16 = 46, gdb_sys_getgid16 = 47, gdb_sys_signal = 48, gdb_sys_geteuid16 = 49, gdb_sys_getegid16 = 50, gdb_sys_acct = 51, gdb_sys_umount = 52, gdb_sys_ni_syscall53 = 53, gdb_sys_ioctl = 54, gdb_sys_fcntl = 55, gdb_sys_ni_syscall56 = 56, gdb_sys_setpgid = 57, gdb_sys_ni_syscall58 = 58, gdb_sys_olduname = 59, gdb_sys_umask = 60, gdb_sys_chroot = 61, gdb_sys_ustat = 62, gdb_sys_dup2 = 63, gdb_sys_getppid = 64, gdb_sys_getpgrp = 65, gdb_sys_setsid = 66, gdb_sys_sigaction = 67, gdb_sys_sgetmask = 68, gdb_sys_ssetmask = 69, gdb_sys_setreuid16 = 70, gdb_sys_setregid16 = 71, gdb_sys_sigsuspend = 72, gdb_sys_sigpending = 73, gdb_sys_sethostname = 74, gdb_sys_setrlimit = 75, gdb_sys_old_getrlimit = 76, gdb_sys_getrusage = 77, gdb_sys_gettimeofday = 78, gdb_sys_settimeofday = 79, gdb_sys_getgroups16 = 80, gdb_sys_setgroups16 = 81, gdb_old_select = 82, gdb_sys_symlink = 83, gdb_sys_lstat = 84, gdb_sys_readlink = 85, gdb_sys_uselib = 86, gdb_sys_swapon = 87, gdb_sys_reboot = 88, gdb_old_readdir = 89, gdb_old_mmap = 90, gdb_sys_munmap = 91, gdb_sys_truncate = 92, gdb_sys_ftruncate = 93, gdb_sys_fchmod = 94, gdb_sys_fchown16 = 95, gdb_sys_getpriority = 96, gdb_sys_setpriority = 97, gdb_sys_ni_syscall98 = 98, gdb_sys_statfs = 99, gdb_sys_fstatfs = 100, gdb_sys_ioperm = 101, gdb_sys_socketcall = 102, gdb_sys_syslog = 103, gdb_sys_setitimer = 104, gdb_sys_getitimer = 105, gdb_sys_newstat = 106, gdb_sys_newlstat = 107, gdb_sys_newfstat = 108, gdb_sys_uname = 109, gdb_sys_iopl = 110, gdb_sys_vhangup = 111, gdb_sys_ni_syscall112 = 112, gdb_sys_vm86old = 113, gdb_sys_wait4 = 114, gdb_sys_swapoff = 115, gdb_sys_sysinfo = 116, gdb_sys_ipc = 117, gdb_sys_fsync = 118, gdb_sys_sigreturn = 119, gdb_sys_clone = 120, gdb_sys_setdomainname = 121, gdb_sys_newuname = 122, gdb_sys_modify_ldt = 123, gdb_sys_adjtimex = 124, gdb_sys_mprotect = 125, gdb_sys_sigprocmask = 126, gdb_sys_ni_syscall127 = 127, gdb_sys_init_module = 128, gdb_sys_delete_module = 129, gdb_sys_ni_syscall130 = 130, gdb_sys_quotactl = 131, gdb_sys_getpgid = 132, gdb_sys_fchdir = 133, gdb_sys_bdflush = 134, gdb_sys_sysfs = 135, gdb_sys_personality = 136, gdb_sys_ni_syscall137 = 137, gdb_sys_setfsuid16 = 138, gdb_sys_setfsgid16 = 139, gdb_sys_llseek = 140, gdb_sys_getdents = 141, gdb_sys_select = 142, gdb_sys_flock = 143, gdb_sys_msync = 144, gdb_sys_readv = 145, gdb_sys_writev = 146, gdb_sys_getsid = 147, gdb_sys_fdatasync = 148, gdb_sys_sysctl = 149, gdb_sys_mlock = 150, gdb_sys_munlock = 151, gdb_sys_mlockall = 152, gdb_sys_munlockall = 153, gdb_sys_sched_setparam = 154, gdb_sys_sched_getparam = 155, gdb_sys_sched_setscheduler = 156, gdb_sys_sched_getscheduler = 157, gdb_sys_sched_yield = 158, gdb_sys_sched_get_priority_max = 159, gdb_sys_sched_get_priority_min = 160, gdb_sys_sched_rr_get_interval = 161, gdb_sys_nanosleep = 162, gdb_sys_mremap = 163, gdb_sys_setresuid16 = 164, gdb_sys_getresuid16 = 165, gdb_sys_vm86 = 166, gdb_sys_ni_syscall167 = 167, gdb_sys_poll = 168, gdb_sys_nfsservctl = 169, gdb_sys_setresgid16 = 170, gdb_sys_getresgid16 = 171, gdb_sys_prctl = 172, gdb_sys_rt_sigreturn = 173, gdb_sys_rt_sigaction = 174, gdb_sys_rt_sigprocmask = 175, gdb_sys_rt_sigpending = 176, gdb_sys_rt_sigtimedwait = 177, gdb_sys_rt_sigqueueinfo = 178, gdb_sys_rt_sigsuspend = 179, gdb_sys_pread64 = 180, gdb_sys_pwrite64 = 181, gdb_sys_chown16 = 182, gdb_sys_getcwd = 183, gdb_sys_capget = 184, gdb_sys_capset = 185, gdb_sys_sigaltstack = 186, gdb_sys_sendfile = 187, gdb_sys_ni_syscall188 = 188, gdb_sys_ni_syscall189 = 189, gdb_sys_vfork = 190, gdb_sys_getrlimit = 191, gdb_sys_mmap2 = 192, gdb_sys_truncate64 = 193, gdb_sys_ftruncate64 = 194, gdb_sys_stat64 = 195, gdb_sys_lstat64 = 196, gdb_sys_fstat64 = 197, gdb_sys_lchown = 198, gdb_sys_getuid = 199, gdb_sys_getgid = 200, gdb_sys_geteuid = 201, gdb_sys_getegid = 202, gdb_sys_setreuid = 203, gdb_sys_setregid = 204, gdb_sys_getgroups = 205, gdb_sys_setgroups = 206, gdb_sys_fchown = 207, gdb_sys_setresuid = 208, gdb_sys_getresuid = 209, gdb_sys_setresgid = 210, gdb_sys_getresgid = 211, gdb_sys_chown = 212, gdb_sys_setuid = 213, gdb_sys_setgid = 214, gdb_sys_setfsuid = 215, gdb_sys_setfsgid = 216, gdb_sys_pivot_root = 217, gdb_sys_mincore = 218, gdb_sys_madvise = 219, gdb_sys_getdents64 = 220, gdb_sys_fcntl64 = 221, gdb_sys_ni_syscall222 = 222, gdb_sys_ni_syscall223 = 223, gdb_sys_gettid = 224, gdb_sys_readahead = 225, gdb_sys_setxattr = 226, gdb_sys_lsetxattr = 227, gdb_sys_fsetxattr = 228, gdb_sys_getxattr = 229, gdb_sys_lgetxattr = 230, gdb_sys_fgetxattr = 231, gdb_sys_listxattr = 232, gdb_sys_llistxattr = 233, gdb_sys_flistxattr = 234, gdb_sys_removexattr = 235, gdb_sys_lremovexattr = 236, gdb_sys_fremovexattr = 237, gdb_sys_tkill = 238, gdb_sys_sendfile64 = 239, gdb_sys_futex = 240, gdb_sys_sched_setaffinity = 241, gdb_sys_sched_getaffinity = 242, gdb_sys_set_thread_area = 243, gdb_sys_get_thread_area = 244, gdb_sys_io_setup = 245, gdb_sys_io_destroy = 246, gdb_sys_io_getevents = 247, gdb_sys_io_submit = 248, gdb_sys_io_cancel = 249, gdb_sys_fadvise64 = 250, gdb_sys_ni_syscall251 = 251, gdb_sys_exit_group = 252, gdb_sys_lookup_dcookie = 253, gdb_sys_epoll_create = 254, gdb_sys_epoll_ctl = 255, gdb_sys_epoll_wait = 256, gdb_sys_remap_file_pages = 257, gdb_sys_set_tid_address = 258, gdb_sys_timer_create = 259, gdb_sys_timer_settime = 260, gdb_sys_timer_gettime = 261, gdb_sys_timer_getoverrun = 262, gdb_sys_timer_delete = 263, gdb_sys_clock_settime = 264, gdb_sys_clock_gettime = 265, gdb_sys_clock_getres = 266, gdb_sys_clock_nanosleep = 267, gdb_sys_statfs64 = 268, gdb_sys_fstatfs64 = 269, gdb_sys_tgkill = 270, gdb_sys_utimes = 271, gdb_sys_fadvise64_64 = 272, gdb_sys_ni_syscall273 = 273, gdb_sys_mbind = 274, gdb_sys_get_mempolicy = 275, gdb_sys_set_mempolicy = 276, gdb_sys_mq_open = 277, gdb_sys_mq_unlink = 278, gdb_sys_mq_timedsend = 279, gdb_sys_mq_timedreceive = 280, gdb_sys_mq_notify = 281, gdb_sys_mq_getsetattr = 282, gdb_sys_kexec_load = 283, gdb_sys_waitid = 284, gdb_sys_ni_syscall285 = 285, gdb_sys_add_key = 286, gdb_sys_request_key = 287, gdb_sys_keyctl = 288, gdb_sys_ioprio_set = 289, gdb_sys_ioprio_get = 290, gdb_sys_inotify_init = 291, gdb_sys_inotify_add_watch = 292, gdb_sys_inotify_rm_watch = 293, gdb_sys_migrate_pages = 294, gdb_sys_openat = 295, gdb_sys_mkdirat = 296, gdb_sys_mknodat = 297, gdb_sys_fchownat = 298, gdb_sys_futimesat = 299, gdb_sys_fstatat64 = 300, gdb_sys_unlinkat = 301, gdb_sys_renameat = 302, gdb_sys_linkat = 303, gdb_sys_symlinkat = 304, gdb_sys_readlinkat = 305, gdb_sys_fchmodat = 306, gdb_sys_faccessat = 307, gdb_sys_pselect6 = 308, gdb_sys_ppoll = 309, gdb_sys_unshare = 310, gdb_sys_set_robust_list = 311, gdb_sys_get_robust_list = 312, gdb_sys_splice = 313, gdb_sys_sync_file_range = 314, gdb_sys_tee = 315, gdb_sys_vmsplice = 316, gdb_sys_move_pages = 317, gdb_sys_getcpu = 318, gdb_sys_epoll_pwait = 319, gdb_sys_fallocate = 324, gdb_sys_eventfd2 = 328, gdb_sys_epoll_create1 = 329, gdb_sys_dup3 = 330, gdb_sys_pipe2 = 331, gdb_sys_inotify_init1 = 332, gdb_sys_statx = 383, gdb_sys_socket = 500, gdb_sys_connect = 501, gdb_sys_accept = 502, gdb_sys_sendto = 503, gdb_sys_recvfrom = 504, gdb_sys_sendmsg = 505, gdb_sys_recvmsg = 506, gdb_sys_shutdown = 507, gdb_sys_bind = 508, gdb_sys_listen = 509, gdb_sys_getsockname = 510, gdb_sys_getpeername = 511, gdb_sys_socketpair = 512, gdb_sys_setsockopt = 513, gdb_sys_getsockopt = 514, gdb_sys_recv = 515, gdb_sys_shmget = 520, gdb_sys_shmat = 521, gdb_sys_shmctl = 522, gdb_sys_semget = 523, gdb_sys_semop = 524, gdb_sys_semctl = 525, gdb_sys_shmdt = 527, gdb_sys_msgget = 528, gdb_sys_msgsnd = 529, gdb_sys_msgrcv = 530, gdb_sys_msgctl = 531, gdb_sys_semtimedop = 532, gdb_sys_newfstatat = 540, }; /* Record a linux syscall. */ extern int record_linux_system_call (enum gdb_syscall num, struct regcache *regcache, struct linux_record_tdep *tdep); #endif /* LINUX_RECORD_H */