/* Process record and replay target code for GNU/Linux.
- Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+ Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
This file is part of GDB.
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_itimerspec;
int size_mq_attr;
int size_siginfo;
-
int size_termios;
int size_termios2;
int size_pid_t;
int size_serial_struct;
int size_serial_icounter_struct;
int size_hayes_esp_config;
+ int size_size_t;
+ int size_iovec;
/* The values of the second argument of system call "sys_ioctl". */
int ioctl_TCGETS;
int arg3;
int arg4;
int arg5;
+ int arg6;
};
-extern int record_linux_system_call (int num, struct regcache *regcache,
- struct linux_record_tdep *tdep);
+/* 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 {
+ 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_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_ */