#include "../../memcheck.h"
#include "scalar.h"
#include <unistd.h>
#include <sched.h>
#include <signal.h>
#include <sys/shm.h>

// See memcheck/tests/x86-linux/scalar.c for an explanation of what this test
// is doing.

int main(void)
{
   // uninitialised, but we know px[0] is 0x0
   long* px  = malloc(sizeof(long));
   long  x0  = px[0];
   long  res;

   VALGRIND_MAKE_MEM_NOACCESS(0, 0x1000);

   // The nocancel syscalls all use the same wrappers as the corresponding
   // non-nocancel syscall.  This means that if we try to test both in the
   // same file, the nocancel ones won't result in errors being generated
   // because errors are too similar.  So we test them in this separate file.

   // __NR_read_nocancel 396
   // __NR_write_nocancel 397
   // __NR_open_nocancel 398
   // __NR_close_nocancel 399
   // __NR_wait4_nocancel 400
   // __NR_recvmsg_nocancel 401
   // __NR_sendmsg_nocancel 402
   // __NR_recvfrom_nocancel 403
   // __NR_accept_nocancel 404
   // __NR_msync_nocancel 405
   // __NR_fcntl_nocancel 406
   // __NR_select_nocancel 407
   // __NR_fsync_nocancel 408
   // __NR_connect_nocancel 409
   // __NR_sigsuspend_nocancel 410
   // __NR_readv_nocancel 411
   // __NR_writev_nocancel 412
   // __NR_sendto_nocancel 413
   // __NR_pread_nocancel 414
   // __NR_pwrite_nocancel 415
   // __NR_waitid_nocancel 416
   // __NR_poll_nocancel 417
   // __NR_msgsnd_nocancel 418
   // __NR_msgrcv_nocancel 419

   // The error doesn't appear because it's a dup of the one from sem_wait.
   GO(__NR_sem_wait_nocancel, 420, "1s 0m");
   SY(__NR_sem_wait_nocancel, x0); FAIL;

   // __NR_aio_suspend_nocancel 421
   // __NR___sigwait_nocancel 422
   // __NR___semwait_signal_nocancel 423

   return 0;
}

