/* Process record and replay target code for GNU/Linux.

   Copyright (C) 2008, 2009 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 <http://www.gnu.org/licenses/>.  */

#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__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_dirent;
  int size_dirent64;
  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_siginfo;

  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;

  /* 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;
};

extern int record_linux_system_call (int num, struct regcache *regcache,
				     struct linux_record_tdep *tdep);

#endif /* _LINUX_RECORD_H_ */
