/* This file is used to test the 'catch syscall' feature on GDB.
 
   Please, if you are going to edit this file DO NOT change the syscalls
   being called (nor the order of them).  If you really must do this, then
   take a look at catch-syscall.exp and modify there too.

   Written by Sergio Durigan Junior <sergiodj@linux.vnet.ibm.com>
   September, 2008 */

#include <unistd.h>
#include <sys/syscall.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sched.h>

/* These are the syscalls numbers used by the test.  */

int close_syscall = SYS_close;
int chroot_syscall = SYS_chroot;
/* GDB had a bug where it couldn't catch syscall number 0 (PR 16297).
   In most GNU/Linux architectures, syscall number 0 is
   restart_syscall, which can't be called from userspace.  However,
   the "read" syscall is zero on x86_64.  */
int read_syscall = SYS_read;
#ifdef SYS_pipe
int pipe_syscall = SYS_pipe;
#else
int pipe2_syscall = SYS_pipe2;
#endif
int write_syscall = SYS_write;
#if defined(__arm__)
/* Although 123456789 is an illegal syscall umber on arm linux, kernel
   sends SIGILL rather than returns -ENOSYS.  However, arm linux kernel
   returns -ENOSYS if syscall number is within 0xf0001..0xf07ff, so we
   can use 0xf07ff for unknown_syscall in test.  */
int unknown_syscall = 0x0f07ff;
#else
int unknown_syscall = 123456789;
#endif
int exit_group_syscall = SYS_exit_group;

/* Set by the test when it wants execve.  */
int do_execve = 0;

int
main (int argc, char *const argv[])
{
	int fd[2];
	char buf1[2] = "a";
	char buf2[2];

	/* Test a simple self-exec, but only on request.  */
	if (do_execve)
	  execv (*argv, argv);

	/* A close() with a wrong argument.  We are only
	   interested in the syscall.  */
	close (-1);

	chroot (".");

	pipe (fd);

	write (fd[1], buf1, sizeof (buf1));
	read (fd[0], buf2, sizeof (buf2));

	/* Test vfork-event interactions.  Child exits immediately.
	   (Plain fork won't work on no-mmu kernel configurations.)  */
	if (vfork () == 0)
	  _exit (0);

	/* Trigger an intentional ENOSYS.  */
	syscall (unknown_syscall);

	/* The last syscall.  Do not change this.  */
	_exit (0);
}
