#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);

   // __NR_syscall 0
   // XXX

   GO(__NR_exit, 1, "below");
   // (see below)

   GO(__NR_fork, 2, "other");
   // (sse scalar_fork.c)

   // Nb: here we are also getting an error from the syscall arg itself.
   GO(__NR_read, 3, "1+3s 1m");
   SY(__NR_read+(int)x0, x0, x0, x0+1); FAILx(EFAULT);

   GO(__NR_write, 4, "3s 1m");
   SY(__NR_write, x0, x0, x0+1); FAIL;
   //res = write(x0, x0, x0+1); FAIL;

   GO(__NR_open, 5, "(2-args) 2s 1m");
   SY(__NR_open, x0, x0); FAIL;
   // Only 1s 0m errors -- the other 2s 1m have been checked in the previous
   // open test, and if we test them they may be commoned up but they also
   // may not.
   GO(__NR_open, 5, "(3-args) 1s 0m");    
   SY(__NR_open, "scalar.c", O_CREAT|O_EXCL, x0); FAIL;

   GO(__NR_close, 6, "1s 0m");
   SY(__NR_close, x0-1); FAIL;

   GO(__NR_wait4, 7, "4s 2m");
   SY(__NR_wait4, x0, x0+1, x0, x0+1); FAIL;

   GO_UNIMP(8, "old creat");

   GO(__NR_link, 9, "2s 2m");
   SY(__NR_link, x0, x0); FAIL;

   GO(__NR_unlink, 10, "1s 1m");
   SY(__NR_unlink, x0); FAIL;

   GO_UNIMP(11, "old execv");

   GO(__NR_chdir, 12, "1s 1m");
   SY(__NR_chdir, x0); FAIL;

   GO(__NR_fchdir, 13, "1s 0m");
   SY(__NR_fchdir, x0-1); FAIL;

   GO(__NR_mknod, 14, "3s 1m");
   SY(__NR_mknod, x0, x0, x0); FAIL;

   GO(__NR_chmod, 15, "2s 1m");
   SY(__NR_chmod, x0, x0); FAIL;

   GO(__NR_chown, 16, "3s 1m");
   SY(__NR_chown, x0, x0, x0); FAIL;

   GO_UNIMP(17, "old break");

   GO(__NR_getfsstat, 18, "3s 1m");
   SY(__NR_getfsstat, x0+1, x0+1, x0); SUCC; // This should fail...

   GO_UNIMP(19, "old lseek");

   // __NR_getpid 20

   GO_UNIMP(21, "old mount");

   GO_UNIMP(22, "old umount");

   // __NR_setuid 23
   // __NR_getuid 24
   // __NR_geteuid 25
   // __NR_ptrace 26
   // __NR_recvmsg 27
   // __NR_sendmsg 28
   // __NR_recvfrom 29
   // __NR_accept 30
   // __NR_getpeername 31
   // __NR_getsockname 32
   // __NR_access 33
   // __NR_chflags 34
   // __NR_fchflags 35
   // __NR_sync 36
   // __NR_kill 37

   GO_UNIMP(38, "old stat");

   // __NR_getppid 39

   GO_UNIMP(40, "old lstat");

   // __NR_dup 41
   // __NR_pipe           VG_DARWIN_SYSCALL_CONSTRUCT_UX64(42
   // __NR_getegid 43
   // __NR_profil 44

   GO_UNIMP(45, "old ktrace");

   // __NR_sigaction 46
   // __NR_getgid 47
   // __NR_sigprocmask 48
   // __NR_getlogin 49
   // __NR_setlogin 50
   // __NR_acct 51
   // __NR_sigpending 52
   // __NR_sigaltstack 53
   // __NR_ioctl 54
   // __NR_reboot 55
   // __NR_revoke 56
   // __NR_symlink 57
   // __NR_readlink 58
   // __NR_execve 59
   // __NR_umask 60
   // __NR_chroot 61

   GO_UNIMP(62, "old fstat");

   GO_UNIMP(63, "used internally, reserved");

   GO_UNIMP(64, "old getpagesize");

   // __NR_msync 65
   // __NR_vfork 66

   GO_UNIMP(67, "old vread");

   GO_UNIMP(68, "old vwrite");

   GO_UNIMP(69, "old sbrk");

   GO_UNIMP(70, "old sstk");

   GO_UNIMP(71, "old mmap");

   GO_UNIMP(72, "old vadvise");

   // __NR_munmap 73
   // __NR_mprotect 74
   // __NR_madvise 75

   GO_UNIMP(76, "old vhangup");

   GO_UNIMP(77, "old vlimit");

   GO(__NR_mincore, 78, "3s 1m");
   SY(__NR_mincore, x0, x0+40960, x0); FAIL;

   // __NR_getgroups 79
   // __NR_setgroups 80
   // __NR_getpgrp 81

   GO(__NR_setpgid, 82, "2s 0m");
   SY(__NR_setpgid, x0-1, x0-1); FAIL;

   // __NR_setitimer 83

   GO_UNIMP(78, "old wait");

   // __NR_swapon 85
   // __NR_getitimer 86

   GO_UNIMP(87, "old gethostname");

   GO_UNIMP(88, "old sethostname");

   // __NR_getdtablesize 89
   // __NR_dup2 90

   GO_UNIMP(91, "old getdopt");

   // __NR_fcntl 92
   // __NR_select 93

   GO_UNIMP(94, "old setdopt");

   // __NR_fsync 95
   // __NR_setpriority 96
   // __NR_socket 97
   // __NR_connect 98

   GO_UNIMP(99, "old accept");

   // __NR_getpriority 100

   GO_UNIMP(101, "old send");

   GO_UNIMP(102, "old recv");

   GO_UNIMP(103, "old sigreturn");

   // __NR_bind 104

   GO(__NR_setsockopt, 105, "5s 1m");
   SY(__NR_setsockopt, x0, x0, x0, x0+1, x0+1); FAIL;

   // __NR_listen 106

   GO_UNIMP(107, "old vtimes");

   GO_UNIMP(108, "old sigvec");

   GO_UNIMP(109, "old sigblock");

   GO_UNIMP(110, "old sigsetmask");

   GO(__NR_sigsuspend, 111, "ignore");
   // (I don't know how to test this...)

   GO_UNIMP(112, "old sigstack");

   GO_UNIMP(113, "old recvmsg");

   GO_UNIMP(114, "old sendmsg");

   GO_UNIMP(115, "old vtrace");

   // __NR_gettimeofday 116
   // __NR_getrusage 117

   // Nb: there's no "getsockopt(optlen) points to unaddressable byte(s)";
   // difficult to get with arg4 being checked with buf_and_len_pre_check.
   GO(__NR_getsockopt, 118, "5s 1m");
   SY(__NR_getsockopt, x0, x0, x0, x0+1, x0+&px[1]); FAIL;

   GO_UNIMP(119, "old resuba");

   // __NR_readv 120
   // __NR_writev 121
   // __NR_settimeofday 122
   // __NR_fchown 123
   // __NR_fchmod 124

   GO_UNIMP(125, "old recvfrom");

   // __NR_setreuid 126
   // __NR_setregid 127
   // __NR_rename 128

   GO_UNIMP(129, "old truncate");

   GO_UNIMP(130, "old ftruncate");

   // __NR_flock 131

   GO(__NR_mkfifo, 132, "2s 1m");
   SY(__NR_mkfifo, x0, x0); FAIL;

   // __NR_sendto 133
   // __NR_shutdown 134
   // __NR_socketpair 135
   // __NR_mkdir 136
   // __NR_rmdir 137
   // __NR_utimes 138
   // __NR_futimes 139
   // __NR_adjtime 140

   GO_UNIMP(141, "old getpeername");

   // __NR_gethostuuid 142

   GO_UNIMP(143, "old sethostid");

   GO_UNIMP(144, "old getrlimit");

   GO_UNIMP(145, "old setrlimit");

   GO_UNIMP(146, "old killpg");

   // __NR_setsid 147

   GO_UNIMP(148, "old setquota");

   GO_UNIMP(149, "old qquota");

   GO_UNIMP(150, "old getsockname");

   // __NR_getpgid 151
   // __NR_setprivexec 152
   // __NR_pread 153
   // __NR_pwrite 154
   // __NR_nfssvc 155

   GO_UNIMP(156, "old getdirentries");

   // __NR_statfs 157
   // __NR_fstatfs 158
   // __NR_unmount 159

   GO_UNIMP(160, "old async_daemon");

   // __NR_getfh 161

   GO_UNIMP(162, "old getdomainname");

   GO_UNIMP(163, "old setdomainname");

   // /* 164 */

   // __NR_quotactl 165

   GO_UNIMP(166, "old exportfs");

   GO(__NR_mount, 167, "4s 2m");
   SY(__NR_mount, x0, x0, x0, x0); FAIL;

   GO_UNIMP(168, "old ustat");

   GO(__NR_csops, 169, "4s 1m");
   SY(__NR_csops, x0, x0, x0+1, x0+1); FAILx(EFAULT);

   GO_UNIMP(170, "old table");

   GO_UNIMP(171, "old wait3");

   GO_UNIMP(172, "old rpause");

   // __NR_waitid 173

   GO_UNIMP(174, "old getdents");

   GO_UNIMP(175, "old gc_control");

   // __NR_add_profil 176

   GO_UNIMP(177-179, "unused");

   // __NR_kdebug_trace 180
   // __NR_setgid 181
   // __NR_setegid 182
   // __NR_seteuid 183
   // __NR_sigreturn 184
   // __NR_chud 185

   GO_UNIMP(186-187, "unused");

   // __NR_stat 188
   // __NR_fstat 189
   // __NR_lstat 190
   // __NR_pathconf 191
   // __NR_fpathconf 192

   GO_UNIMP(193, "unused");

   // __NR_getrlimit 194
   // __NR_setrlimit 195
   // __NR_getdirentries 196
   // __NR_mmap 197

   // /* 198  __syscall */

   // __NR_lseek          VG_DARWIN_SYSCALL_CONSTRUCT_UX64(199
   // __NR_truncate 200
   // __NR_ftruncate 201
   // __NR___sysctl 202
   // __NR_mlock 203
   // __NR_munlock 204
   // __NR_undelete 205
   // __NR_ATsocket 206
   // __NR_ATgetmsg 207
   // __NR_ATputmsg 208
   // __NR_ATPsndreq 209
   // __NR_ATPsndrsp 210
   // __NR_ATPgetreq 211
   // __NR_ATPgetrsp 212

   GO_UNIMP(213, "reserved for AppleTalk");

   // __NR_kqueue_from_portset_np 214
   // __NR_kqueue_portset_np 215
   // __NR_mkcomplex 216
   // __NR_statv 217
   // __NR_lstatv 218
   // __NR_fstatv 219
   // __NR_getattrlist 220
   // __NR_setattrlist 221
   // __NR_getdirentriesattr 222

   GO(__NR_exchangedata, 223, "3s 2m");
   SY(__NR_exchangedata, x0, x0, x0); FAIL;

   // /* 224  checkuseraccess */

   // __NR_searchfs 225
   // __NR_delete 226
   // __NR_copyfile 227

   GO_UNIMP(228-229, "unused");

   // __NR_poll 230
   // __NR_watchevent 231
   // __NR_waitevent 232
   // __NR_modwatch 233
   // __NR_getxattr 234
   // __NR_fgetxattr 235
   // __NR_setxattr 236
   // __NR_fsetxattr 237
   // __NR_removexattr 238
   // __NR_fremovexattr 239
   // __NR_listxattr 240
   // __NR_flistxattr 241
   // __NR_fsctl 242
   // __NR_initgroups 243
   // __NR_posix_spawn 244

   GO_UNIMP(245-246, "unused");

   // __NR_nfsclnt 247
   // __NR_fhopen 248

   GO_UNIMP(249, "unused");

   // __NR_minherit 250
   // __NR_semsys 251
   // __NR_msgsys 252
   // __NR_shmsys 253
   // __NR_semctl 254
   // __NR_semget 255
   // __NR_semop 256

   GO_UNIMP(257, "unused");

   // __NR_msgctl 258
   // __NR_msgget 259
   // __NR_msgsnd 260
   // __NR_msgrcv 261

   GO(__NR_shmat, 262, "3s 0m");
   SY(__NR_shmat, x0, x0, x0); FAIL;

   GO(__NR_shmctl, 263, "3s 1m");
   SY(__NR_shmctl, x0, x0+IPC_STAT, x0+1); FAIL;

   GO(__NR_shmdt, 264, "1s 0m");
   SY(__NR_shmdt, x0); FAIL;

   GO(__NR_shmget, 265, "3s 0m");
   SY(__NR_shmget, x0, x0, x0); FAIL;

   // __NR_shm_open 266
   // __NR_shm_unlink 267

   GO(__NR_sem_open, 268, "2s 1m");
   SY(__NR_sem_open, x0, x0); FAIL;

   GO(__NR_sem_open, 268, "(4-args) 2s 0m");
   SY(__NR_sem_open, "my_sem", O_CREAT|O_EXCL, x0, x0); SUCC_OR_FAIL;

   // Nb: we add 0x12345 to make sure it's not a valid semaphore descriptor.
   GO(__NR_sem_close, 269, "1s 0m");
   SY(__NR_sem_close, x0+0x12345); FAIL;

   GO(__NR_sem_unlink, 270, "1s 1m");
   SY(__NR_sem_unlink, x0); FAIL;

   GO(__NR_sem_wait, 271, "1s 0m");
   SY(__NR_sem_wait, x0); FAIL;

   GO(__NR_sem_trywait, 272, "1s 0m");
   SY(__NR_sem_trywait, x0); FAIL;

   GO(__NR_sem_post, 273, "1s 0m");
   SY(__NR_sem_post, x0); FAIL;

   // __NR_sem_getvalue 274

   GO(__NR_sem_init, 275, "3s 1m");
   SY(__NR_sem_init, x0+1, x0, x0); FAILx(ENOSYS);

   GO(__NR_sem_destroy, 276, "1s 1m");
   SY(__NR_sem_destroy, x0+1); FAILx(ENOSYS);

   // __NR_open_extended 277
   // __NR_umask_extended 278

   {
      size_t one = 1;
      GO(__NR_stat_extended, 279, "4s 4m");
      SY(__NR_stat_extended, x0, x0, x0, x0); FAIL;
      // Go again to get a complaint about where the 3rd arg points;  it
      // requires the 4th arg to point to a valid value.
      SY(__NR_stat_extended, 0, 0, 0, &one); FAIL;

      GO(__NR_lstat_extended, 280, "4s 4m");
      SY(__NR_lstat_extended, x0, x0, x0, x0); FAIL;
      // Go again to get a complaint about where the 3rd arg points;  it
      // requires the 4th arg to point to a valid value.
      SY(__NR_lstat_extended, 0, 0, 0, &one); FAIL;

      GO(__NR_fstat_extended, 280, "4s 3m");
      SY(__NR_fstat_extended, x0, x0, x0, x0); FAIL;
      // Go again to get a complaint about where the 3rd arg points;  it
      // requires the 4th arg to point to a valid value.
      SY(__NR_fstat_extended, 0, 0, 0, &one); FAIL;
   }

   // __NR_chmod_extended 282
   // __NR_fchmod_extended 283

   // XXX: we don't check the 'results' (too hard, see the wrapper code).  If
   // we did, it would be 2m.
   GO(__NR_access_extended, 284, "4s 1m");
   SY(__NR_access_extended, x0, x0+1, x0, x0); FAIL;

   // __NR_settid 285
   // __NR_gettid 286
   // __NR_setsgroups 287
   // __NR_getsgroups 288
   // __NR_setwgroups 289
   // __NR_getwgroups 290
   // __NR_mkfifo_extended 291
   // __NR_mkdir_extended 292
   // __NR_identitysvc 293
   // __NR_shared_region_check_np 294
   // __NR_shared_region_map_np 295

   GO_UNIMP(296, "old load_shared_file");

   GO_UNIMP(297, "old reset_shared_file");

   GO_UNIMP(298, "old new_system_shared_regions");

   GO_UNIMP(299, "old shared_region_map_file_np");

   GO_UNIMP(300, "old shared_region_make_private_np");

   // __NR___pthread_mutex_destroy 301
   // __NR___pthread_mutex_init 302
   // __NR___pthread_mutex_lock 303
   // __NR___pthread_mutex_trylock 304
   // __NR___pthread_mutex_unlock 305
   // __NR___pthread_cond_init 306
   // __NR___pthread_cond_destroy 307
   // __NR___pthread_cond_broadcast 308
   // __NR___pthread_cond_signal 309
   // __NR_getsid 310
   // __NR_settid_with_pid 311
   // __NR___pthread_cond_timedwait 312
   // __NR_aio_fsync 313

   GO(__NR_aio_return, 314, "1s 0m");
   SY(__NR_aio_return, x0); FAIL;

   GO(__NR_aio_suspend, 315, "1s 0m");
   SY(__NR_aio_suspend, x0, x0+1, x0); FAIL;

   // __NR_aio_cancel 316

   GO(__NR_aio_error, 317, "1s 0m");
   SY(__NR_aio_error, x0); FAIL;

   GO(__NR_aio_read, 318, "1s 1m");
   SY(__NR_aio_read, x0); FAIL;

   GO(__NR_aio_write, 319, "1s 1m");
   SY(__NR_aio_write, x0); FAIL;

   // __NR_lio_listio 320
   // __NR___pthread_cond_wait 321
   // __NR_iopolicysys 322

   GO_UNIMP(323, "unused");

   // __NR_mlockall 324
   // __NR_munlockall 325

   GO_UNIMP(326, "unused");

   // __NR_issetugid 327

   GO(__NR___pthread_kill, 328, "2s 0m");
   SY(__NR___pthread_kill, x0, x0); FAIL;

   // __NR___pthread_sigmask 329
   // __NR___sigwait 330
   // __NR_sigwait 330) // GrP fixme hack
   // __NR___disable_threadsignal 331
   // __NR___pthread_markcancel 332
   // __NR___pthread_canceled 333
   // __NR___semwait_signal 334

   GO_UNIMP(335, "old utrace");

   // __NR_proc_info 336
   // __NR_sendfile 337
   // __NR_stat64 338
   // __NR_fstat64 339
   // __NR_lstat64 340

   {
      size_t one = 1;
      GO(__NR_stat64_extended, 341, "4s 4m");
      SY(__NR_stat64_extended, x0, x0, x0, x0); FAIL;
      // Go again to get a complaint about where the 3rd arg points;  it
      // requires the 4th arg to point to a valid value.
      SY(__NR_stat64_extended, 0, 0, 0, &one); FAIL;

      GO(__NR_lstat64_extended, 342, "4s 4m");
      SY(__NR_lstat64_extended, x0, x0, x0, x0); FAIL;
      // Go again to get a complaint about where the 3rd arg points;  it
      // requires the 4th arg to point to a valid value.
      SY(__NR_lstat64_extended, 0, 0, 0, &one); FAIL;

      GO(__NR_fstat64_extended, 342, "4s 3m");
      SY(__NR_fstat64_extended, x0, x0, x0, x0); FAIL;
      // Go again to get a complaint about where the 3rd arg points;  it
      // requires the 4th arg to point to a valid value.
      SY(__NR_fstat64_extended, 0, 0, 0, &one); FAIL;
   }

   // __NR_fstat64_extended 343
   // __NR_getdirentries64 344
   // __NR_statfs64 345
   // __NR_fstatfs64 346

   GO(__NR_getfsstat64, 347, "3s 1m");
   SY(__NR_getfsstat64, x0+1, x0+1, x0); SUCC; // This should fail...

   // __NR___pthread_chdir 348
   // __NR___pthread_fchdir 349
   // __NR_audit 350
   // __NR_auditon 351

   // /* 352 */

   // __NR_getauid 353
   // __NR_setauid 354
   // __NR_getaudit 355
   // __NR_setaudit 356
   // __NR_getaudit_addr 357
   // __NR_setaudit_addr 358
   // __NR_auditctl 359
   // __NR_bsdthread_create 360
   // __NR_bsdthread_terminate 361
   // __NR_kqueue 362
   // __NR_kevent 363
   // __NR_lchown 364
   // __NR_stack_snapshot 365
   // __NR_bsdthread_register 366
   // __NR_workq_open 367
   // __NR_workq_ops 368

   GO_UNIMP(369-379, "unused");

   // __NR___mac_execve 380
   // __NR___mac_syscall 381
   // __NR___mac_get_file 382
   // __NR___mac_set_file 383
   // __NR___mac_get_link 384
   // __NR___mac_set_link 385
   // __NR___mac_get_proc 386
   // __NR___mac_set_proc 387
   // __NR___mac_get_fd 388
   // __NR___mac_set_fd 389
   // __NR___mac_get_pid 390
   // __NR___mac_get_lcid 391
   // __NR___mac_get_lctx 392
   // __NR___mac_set_lctx 393
   // __NR_setlcid 394
   // __NR_getlcid 395

   // The nocancel syscalls (396--423) are tested in scalar_nocancel.c.

   // __NR___mac_mount 424
   // __NR___mac_get_mount 425
   // __NR___mac_getfsstat 426
   // __NR_MAXSYSCALL 427

#if 0
   // XXX: all these are copied from x86-linux/scalar.c.

   // __NR_creat 8
   GO(__NR_creat, "2s 1m");
   SY(__NR_creat, x0, x0); FAIL;

   // __NR_execve 11
   // Nb: could have 3 memory errors if we pass x0+1 as the 2nd and 3rd
   // args, except for bug #93174.
   GO(__NR_execve, "3s 1m");
   SY(__NR_execve, x0, x0, x0); FAIL;

   // __NR_time 13
   GO(__NR_time, "1s 1m");
   SY(__NR_time, x0+1); FAIL;

   // __NR_lchown 16
   GO(__NR_lchown, "n/a");
 //SY(__NR_lchown); // (Not yet handled by Valgrind) FAIL;

   // __NR_break 17
   GO(__NR_break, "ni");
   SY(__NR_break); FAIL;

   // __NR_oldstat 18
   GO(__NR_oldstat, "n/a");
   // (obsolete, not handled by Valgrind)

   // __NR_lseek 19
   GO(__NR_lseek, "3s 0m");
   SY(__NR_lseek, x0-1, x0, x0); FAILx(EBADF);

   // __NR_getpid 20
   GO(__NR_getpid, "0s 0m");
   SY(__NR_getpid); SUCC;

   // __NR_mount 21
   GO(__NR_mount, "5s 3m");
   SY(__NR_mount, x0, x0, x0, x0, x0); FAIL;
   
   // __NR_umount 22
   GO(__NR_umount, "1s 1m");
   SY(__NR_umount, x0); FAIL;

   // __NR_setuid 23
   GO(__NR_setuid, "1s 0m");
   SY(__NR_setuid, x0); FAIL;

   // __NR_getuid 24
   GO(__NR_getuid, "0s 0m");
   SY(__NR_getuid); SUCC;

   // __NR_stime 25
   GO(__NR_stime, "n/a");
 //SY(__NR_stime); // (Not yet handled by Valgrind) FAIL;

   // __NR_ptrace 26
   // XXX: memory pointed to by arg3 goes unchecked... otherwise would be 2m
   GO(__NR_ptrace, "4s 1m");
   SY(__NR_ptrace, x0+PTRACE_GETREGS, x0, x0, x0); FAIL;

   // __NR_alarm 27
   GO(__NR_alarm, "1s 0m");
   SY(__NR_alarm, x0); SUCC;

   // __NR_oldfstat 28
   GO(__NR_oldfstat, "n/a");
   // (obsolete, not handled by Valgrind)

   // __NR_pause 29
   GO(__NR_pause, "ignore");
   // (hard to test, and no args so not much to be gained -- don't bother)

   // __NR_utime 30
   GO(__NR_utime, "2s 2m");
   SY(__NR_utime, x0, x0+1); FAIL;

   // __NR_stty 31
   GO(__NR_stty, "ni");
   SY(__NR_stty); FAIL;

   // __NR_gtty 32
   GO(__NR_gtty, "ni");
   SY(__NR_gtty); FAIL;

   // __NR_access 33
   GO(__NR_access, "2s 1m");
   SY(__NR_access, x0, x0); FAIL;

   // __NR_nice 34
   GO(__NR_nice, "1s 0m");
   SY(__NR_nice, x0); SUCC;

   // __NR_ftime 35
   GO(__NR_ftime, "ni");
   SY(__NR_ftime); FAIL;

   // __NR_sync 36
   GO(__NR_sync, "0s 0m");
   SY(__NR_sync); SUCC;

   // __NR_kill 37
   GO(__NR_kill, "2s 0m");
   SY(__NR_kill, x0, x0); SUCC;

   // __NR_rename 38
   GO(__NR_rename, "2s 2m");
   SY(__NR_rename, x0, x0); FAIL;

   // __NR_mkdir 39
   GO(__NR_mkdir, "2s 1m");
   SY(__NR_mkdir, x0, x0); FAIL;

   // __NR_rmdir 40
   GO(__NR_rmdir, "1s 1m");
   SY(__NR_rmdir, x0); FAIL;

   // __NR_dup 41
   GO(__NR_dup, "1s 0m");
   SY(__NR_dup, x0-1); FAIL;

   // __NR_pipe 42
   GO(__NR_pipe, "1s 1m");
   SY(__NR_pipe, x0); FAIL;

   // __NR_times 43
   GO(__NR_times, "1s 1m");
   SY(__NR_times, x0+1); FAIL;

   // __NR_prof 44
   GO(__NR_prof, "ni");
   SY(__NR_prof); FAIL;

   // __NR_brk 45
   GO(__NR_brk, "1s 0m");
   SY(__NR_brk, x0); SUCC;

   // __NR_setgid 46
   GO(__NR_setgid, "1s 0m");
   SY(__NR_setgid, x0); FAIL;

   // __NR_getgid 47
   GO(__NR_getgid, "0s 0m");
   SY(__NR_getgid); SUCC;

   // __NR_signal 48
   GO(__NR_signal, "n/a");
 //SY(__NR_signal); // (Not yet handled by Valgrind) FAIL;

   // __NR_geteuid 49
   GO(__NR_geteuid, "0s 0m");
   SY(__NR_geteuid); SUCC;

   // __NR_getegid 50
   GO(__NR_getegid, "0s 0m");
   SY(__NR_getegid); SUCC;

   // __NR_acct 51
   GO(__NR_acct, "1s 1m");
   SY(__NR_acct, x0); FAIL;

   // __NR_umount2 52
   GO(__NR_umount2, "2s 1m");
   SY(__NR_umount2, x0, x0); FAIL;

   // __NR_lock 53
   GO(__NR_lock, "ni");
   SY(__NR_lock); FAIL;

   // __NR_ioctl 54
   #include <asm/ioctls.h>
   GO(__NR_ioctl, "3s 1m");
   SY(__NR_ioctl, x0, x0+TCSETS, x0); FAIL;

   // __NR_fcntl 55
   // As with sys_open(), the 'fd' error is suppressed for the later ones.
   // For F_GETFD the 3rd arg is ignored
   GO(__NR_fcntl, "(GETFD) 2s 0m");
   SY(__NR_fcntl, x0-1, x0+F_GETFD, x0); FAILx(EBADF);

   // For F_DUPFD the 3rd arg is 'arg'.  We don't check the 1st two args
   // because any errors may or may not be commoned up with the ones from
   // the previous fcntl call.
   GO(__NR_fcntl, "(DUPFD) 1s 0m");
   SY(__NR_fcntl, -1, F_DUPFD, x0); FAILx(EBADF);

   // For F_GETLK the 3rd arg is 'lock'.  On x86, this fails w/EBADF.  But
   // on amd64 in 32-bit mode it fails w/EFAULT.  We don't check the 1st two
   // args for the reason given above.
   GO(__NR_fcntl, "(GETLK) 1s 0m");
   SY(__NR_fcntl, -1, F_GETLK, x0); FAIL; //FAILx(EBADF);

   // __NR_mpx 56
   GO(__NR_mpx, "ni");
   SY(__NR_mpx); FAIL;

   // __NR_setpgid 57
   GO(__NR_setpgid, "2s 0m");
   SY(__NR_setpgid, x0, x0-1); FAIL;

   // __NR_ulimit 58
   GO(__NR_ulimit, "ni");
   SY(__NR_ulimit); FAIL;

   // __NR_oldolduname 59
   GO(__NR_oldolduname, "n/a");
   // (obsolete, not handled by Valgrind)

   // __NR_umask 60
   GO(__NR_umask, "1s 0m");
   SY(__NR_umask, x0+022); SUCC;

   // __NR_chroot 61
   GO(__NR_chroot, "1s 1m");
   SY(__NR_chroot, x0); FAIL;

   // __NR_ustat 62
   GO(__NR_ustat, "n/a");
   // (deprecated, not handled by Valgrind)

   // __NR_dup2 63
   GO(__NR_dup2, "2s 0m");
   SY(__NR_dup2, x0-1, x0); FAIL;

   // __NR_getppid 64
   GO(__NR_getppid, "0s 0m");
   SY(__NR_getppid); SUCC;

   // __NR_getpgrp 65
   GO(__NR_getpgrp, "0s 0m");
   SY(__NR_getpgrp); SUCC;

   // __NR_setsid 66
   GO(__NR_setsid, "0s 0m");
   SY(__NR_setsid); SUCC_OR_FAIL;

   // __NR_sigaction 67
   GO(__NR_sigaction, "3s 4m");
   SY(__NR_sigaction, x0, x0+&px[1], x0+&px[1]); FAIL;

   // __NR_sgetmask 68 sys_sgetmask()
   GO(__NR_sgetmask, "n/a");
 //SY(__NR_sgetmask); // (Not yet handled by Valgrind) FAIL;

   // __NR_ssetmask 69
   GO(__NR_ssetmask, "n/a");
 //SY(__NR_ssetmask); // (Not yet handled by Valgrind) FAIL;

   // __NR_setreuid 70
   GO(__NR_setreuid, "2s 0m");
   SY(__NR_setreuid, x0, x0); FAIL;

   // __NR_setregid 71
   GO(__NR_setregid, "2s 0m");
   SY(__NR_setregid, x0, x0); FAIL;

   // __NR_sigsuspend 72
   // XXX: how do you use this function?
   GO(__NR_sigsuspend, "ignore");
   // (I don't know how to test this...)

   // __NR_sigpending 73
   GO(__NR_sigpending, "1s 1m");
   SY(__NR_sigpending, x0); FAIL;

   // __NR_sethostname 74
   GO(__NR_sethostname, "n/a");
 //SY(__NR_sethostname); // (Not yet handled by Valgrind) FAIL;

   // __NR_setrlimit 75
   GO(__NR_setrlimit, "2s 1m");
   SY(__NR_setrlimit, x0, x0); FAIL;

   // __NR_getrlimit 76
   GO(__NR_getrlimit, "2s 1m");
   SY(__NR_getrlimit, x0, x0); FAIL;

   // __NR_getrusage 77
   GO(__NR_getrusage, "2s 1m");
   SY(__NR_getrusage, x0, x0); FAIL;

   // __NR_gettimeofday 78
   GO(__NR_gettimeofday, "2s 2m");
   SY(__NR_gettimeofday, x0, x0+1); FAIL;

   // __NR_settimeofday 79
   GO(__NR_settimeofday, "2s 2m");
   SY(__NR_settimeofday, x0, x0+1); FAIL;

   // __NR_getgroups 80
   GO(__NR_getgroups, "2s 1m");
   SY(__NR_getgroups, x0+1, x0+1); FAIL;

   // __NR_setgroups 81
   GO(__NR_setgroups, "2s 1m");
   SY(__NR_setgroups, x0+1, x0+1); FAIL;

   // __NR_select 82
   {
      long args[5] = { x0+8, x0+0xffffffee, x0+1, x0+1, x0+1 };
      GO(__NR_select, "1s 5m");
      SY(__NR_select, args+x0); FAIL;
   }

   // __NR_symlink 83
   GO(__NR_symlink, "2s 2m");
   SY(__NR_symlink, x0, x0); FAIL;

   // __NR_oldlstat 84
   GO(__NR_oldlstat, "n/a");
   // (obsolete, not handled by Valgrind)

   // __NR_readlink 85
   GO(__NR_readlink, "3s 2m");
   SY(__NR_readlink, x0+1, x0+1, x0+1); FAIL;

   // __NR_uselib 86
   GO(__NR_uselib, "n/a");
 //SY(__NR_uselib); // (Not yet handled by Valgrind) FAIL;

   // __NR_swapon 87
   GO(__NR_swapon, "n/a");
 //SY(__NR_swapon); // (Not yet handled by Valgrind) FAIL;

   // __NR_reboot 88
   GO(__NR_reboot, "n/a");
 //SY(__NR_reboot); // (Not yet handled by Valgrind) FAIL;

   // __NR_readdir 89
   GO(__NR_readdir, "n/a");
   // (superseded, not handled by Valgrind)

   // __NR_mmap 90
   {
      long args[6] = { x0, x0, x0, x0, x0-1, x0 };
      GO(__NR_mmap, "1s 1m");
      SY(__NR_mmap, args+x0); FAIL;
   }

   // __NR_munmap 91
   GO(__NR_munmap, "2s 0m");
   SY(__NR_munmap, x0, x0); FAIL;

   // __NR_truncate 92
   GO(__NR_truncate, "2s 1m");
   SY(__NR_truncate, x0, x0); FAIL;

   // __NR_ftruncate 93
   GO(__NR_ftruncate, "2s 0m");
   SY(__NR_ftruncate, x0, x0); FAIL;

   // __NR_fchmod 94
   GO(__NR_fchmod, "2s 0m");
   SY(__NR_fchmod, x0-1, x0); FAIL;

   // __NR_fchown 95
   GO(__NR_fchown, "3s 0m");
   SY(__NR_fchown, x0, x0, x0); FAIL;

   // __NR_getpriority 96
   GO(__NR_getpriority, "2s 0m");
   SY(__NR_getpriority, x0-1, x0); FAIL;

   // __NR_setpriority 97
   GO(__NR_setpriority, "3s 0m");
   SY(__NR_setpriority, x0-1, x0, x0); FAIL;

   // __NR_profil 98
   GO(__NR_profil, "ni");
   SY(__NR_profil); FAIL;

   // __NR_statfs 99
   GO(__NR_statfs, "2s 2m");
   SY(__NR_statfs, x0, x0); FAIL;

   // __NR_fstatfs 100
   GO(__NR_fstatfs, "2s 1m");
   SY(__NR_fstatfs, x0, x0); FAIL;

   // __NR_ioperm 101
   GO(__NR_ioperm, "3s 0m");
   SY(__NR_ioperm, x0, x0, x0); FAIL;

   // __NR_socketcall 102
   GO(__NR_socketcall, "XXX");
   // (XXX: need to do all sub-cases properly)

   // __NR_syslog 103
   GO(__NR_syslog, "3s 1m");
   SY(__NR_syslog, x0+2, x0, x0+1); FAIL;

   // __NR_setitimer 104
   GO(__NR_setitimer, "3s 2m");
   SY(__NR_setitimer, x0, x0+1, x0+1); FAIL;

   // __NR_getitimer 105
   GO(__NR_getitimer, "2s 1m");
   SY(__NR_getitimer, x0, x0, x0); FAIL;

   // __NR_stat 106
   GO(__NR_stat, "2s 2m");
   SY(__NR_stat, x0, x0); FAIL;

   // __NR_lstat 107
   GO(__NR_lstat, "2s 2m");
   SY(__NR_lstat, x0, x0); FAIL;

   // __NR_fstat 108
   GO(__NR_fstat, "2s 1m");
   SY(__NR_fstat, x0, x0); FAIL;

   // __NR_olduname 109
   GO(__NR_olduname, "n/a");
   // (obsolete, not handled by Valgrind)

   // __NR_iopl 110
   GO(__NR_iopl, "1s 0m");
   SY(__NR_iopl, x0+100); FAIL;

   // __NR_vhangup 111
   GO(__NR_vhangup, "0s 0m");
   SY(__NR_vhangup); SUCC_OR_FAIL;  // Will succeed for superuser
   
   // __NR_idle 112
   GO(__NR_idle, "ni");
   SY(__NR_idle); FAIL;

   // __NR_vm86old 113
   GO(__NR_vm86old, "n/a");
   // (will probably never be handled by Valgrind)

   // __NR_swapoff 115
   GO(__NR_swapoff, "n/a");
 //SY(__NR_swapoff); // (Not yet handled by Valgrind) FAIL;

   // __NR_sysinfo 116
   GO(__NR_sysinfo, "1s 1m");
   SY(__NR_sysinfo, x0); FAIL;

   // __NR_ipc 117
   // XXX: This is simplistic -- need to do all the sub-cases properly.
   // XXX: Also, should be 6 scalar errors, except glibc's syscall() doesn't
   //      use the 6th one!
   GO(__NR_ipc, "5s 0m");
   SY(__NR_ipc, x0+4, x0, x0, x0, x0, x0); FAIL;

   // __NR_fsync 118
   GO(__NR_fsync, "1s 0m");
   SY(__NR_fsync, x0-1); FAIL;

   // __NR_sigreturn 119
   GO(__NR_sigreturn, "n/a");
 //SY(__NR_sigreturn); // (Not yet handled by Valgrind) FAIL;

   // __NR_clone 120
#ifndef CLONE_PARENT_SETTID
#define CLONE_PARENT_SETTID   0x00100000
#endif
   // XXX: should really be "4s 2m"?  Not sure... (see PRE(sys_clone))
   GO(__NR_clone, "4s 0m");
   SY(__NR_clone, x0|CLONE_PARENT_SETTID|SIGCHLD, x0, x0, x0); FAIL;
   if (0 == res) {
      SY(__NR_exit, 0); FAIL;
   }

   // __NR_setdomainname 121
   GO(__NR_setdomainname, "n/a");
 //SY(__NR_setdomainname); // (Not yet handled by Valgrind) FAIL;

   // __NR_uname 122
   GO(__NR_uname, "1s 1m");
   SY(__NR_uname, x0); FAIL;

   // __NR_modify_ldt 123
   GO(__NR_modify_ldt, "3s 1m");
   SY(__NR_modify_ldt, x0+1, x0, x0+1); FAILx(EINVAL);

   // __NR_adjtimex 124
   // XXX: need to do properly, but deref'ing NULL causing Valgrind to crash...
     GO(__NR_adjtimex, "XXX");
//   SY(__NR_adjtimex, x0); FAIL;

   // __NR_mprotect 125
   GO(__NR_mprotect, "3s 0m");
   SY(__NR_mprotect, x0+1, x0, x0); FAILx(EINVAL);

   // __NR_sigprocmask 126
   GO(__NR_sigprocmask, "3s 2m");
   SY(__NR_sigprocmask, x0, x0+&px[1], x0+&px[1]); SUCC;

   // __NR_create_module 127
   GO(__NR_create_module, "ni");
   SY(__NR_create_module); FAIL;

   // __NR_init_module 128
   GO(__NR_init_module, "3s 2m");
   SY(__NR_init_module, x0, x0+1, x0); FAIL;

   // __NR_delete_module 129
   GO(__NR_delete_module, "n/a");
 //SY(__NR_delete_module); // (Not yet handled by Valgrind) FAIL;

   // __NR_get_kernel_syms 130
   GO(__NR_get_kernel_syms, "ni");
   SY(__NR_get_kernel_syms); FAIL;

   // __NR_quotactl 131
   GO(__NR_quotactl, "4s 1m");
   SY(__NR_quotactl, x0, x0, x0, x0); FAIL;

   // __NR_getpgid 132
   GO(__NR_getpgid, "1s 0m");
   SY(__NR_getpgid, x0-1); FAIL;

   // __NR_bdflush 134
   GO(__NR_bdflush, "n/a");
 //SY(__NR_bdflush); // (Not yet handled by Valgrind) FAIL;

   // __NR_sysfs 135
   GO(__NR_sysfs, "n/a");
 //SY(__NR_sysfs); // (Not yet handled by Valgrind) FAIL;

   // __NR_personality 136
   GO(__NR_personality, "1s 0m");
   SY(__NR_personality, x0+0xffffffff); SUCC;

   // __NR_afs_syscall 137
   GO(__NR_afs_syscall, "ni");
   SY(__NR_afs_syscall); FAIL;

   // __NR_setfsuid 138
   GO(__NR_setfsuid, "1s 0m");
   SY(__NR_setfsuid, x0); SUCC;  // This syscall has a stupid return value

   // __NR_setfsgid 139
   GO(__NR_setfsgid, "1s 0m");
   SY(__NR_setfsgid, x0); SUCC;  // This syscall has a stupid return value

   // __NR__llseek 140
   GO(__NR__llseek, "5s 1m");
   SY(__NR__llseek, x0, x0, x0, x0, x0); FAIL;

   // __NR_getdents 141
   GO(__NR_getdents, "3s 1m");
   SY(__NR_getdents, x0, x0, x0+1); FAIL;

   // __NR__newselect 142
   GO(__NR__newselect, "5s 4m");
   SY(__NR__newselect, x0+8, x0+0xffffffff, x0+1, x0+1, x0+1); FAIL;

   // __NR_flock 143
   GO(__NR_flock, "2s 0m");
   SY(__NR_flock, x0, x0); FAIL;

   // __NR_msync 144
   GO(__NR_msync, "3s 1m");
   SY(__NR_msync, x0, x0+1, x0); FAIL;

   // __NR_readv 145
   GO(__NR_readv, "3s 1m");
   SY(__NR_readv, x0, x0, x0+1); FAIL;

   // __NR_writev 146
   GO(__NR_writev, "3s 1m");
   SY(__NR_writev, x0, x0, x0+1); FAIL;

   // __NR_getsid 147
   GO(__NR_getsid, "1s 0m");
   SY(__NR_getsid, x0-1); FAIL;

   // __NR_fdatasync 148
   GO(__NR_fdatasync, "1s 0m");
   SY(__NR_fdatasync, x0-1); FAIL;

   // __NR__sysctl 149
   GO(__NR__sysctl, "1s 1m");
   SY(__NR__sysctl, x0); FAIL;

   // __NR_mlock 150
   GO(__NR_mlock, "2s 0m");
   SY(__NR_mlock, x0, x0+1); FAIL;

   // __NR_munlock 151
   GO(__NR_munlock, "2s 0m");
   SY(__NR_munlock, x0, x0+1); FAIL;

   // __NR_mlockall 152
   GO(__NR_mlockall, "1s 0m");
   SY(__NR_mlockall, x0-1); FAIL;

   // __NR_munlockall 153
   GO(__NR_munlockall, "0s 0m");
   SY(__NR_munlockall); SUCC_OR_FAILx(EPERM);

   // __NR_sched_setparam 154
   GO(__NR_sched_setparam, "2s 1m");
   SY(__NR_sched_setparam, x0, x0); FAIL;

   // __NR_sched_getparam 155
   GO(__NR_sched_getparam, "2s 1m");
   SY(__NR_sched_getparam, x0, x0); FAIL;

   // __NR_sched_setscheduler 156
   GO(__NR_sched_setscheduler, "3s 1m");
   SY(__NR_sched_setscheduler, x0-1, x0, x0+1); FAIL;

   // __NR_sched_getscheduler 157
   GO(__NR_sched_getscheduler, "1s 0m");
   SY(__NR_sched_getscheduler, x0-1); FAIL;

   // __NR_sched_yield 158
   GO(__NR_sched_yield, "0s 0m");
   SY(__NR_sched_yield); SUCC;

   // __NR_sched_get_priority_max 159
   GO(__NR_sched_get_priority_max, "1s 0m");
   SY(__NR_sched_get_priority_max, x0-1); FAIL;

   // __NR_sched_get_priority_min 160
   GO(__NR_sched_get_priority_min, "1s 0m");
   SY(__NR_sched_get_priority_min, x0-1); FAIL;

   // __NR_sched_rr_get_interval 161
   GO(__NR_sched_rr_get_interval, "n/a");
 //SY(__NR_sched_rr_get_interval); // (Not yet handled by Valgrind) FAIL;

   // __NR_nanosleep 162
   GO(__NR_nanosleep, "2s 2m");
   SY(__NR_nanosleep, x0, x0+1); FAIL;

   // __NR_mremap 163
   GO(__NR_mremap, "5s 0m");
   SY(__NR_mremap, x0+1, x0, x0, x0+MREMAP_FIXED, x0); FAILx(EINVAL);

   // __NR_setresuid 164
   GO(__NR_setresuid, "3s 0m");
   SY(__NR_setresuid, x0, x0, x0); FAIL;

   // __NR_getresuid 165
   GO(__NR_getresuid, "3s 3m");
   SY(__NR_getresuid, x0, x0, x0); FAIL;

   // __NR_vm86 166
   GO(__NR_vm86, "n/a");
   // (will probably never be handled by Valgrind)

   // __NR_query_module 167
   GO(__NR_query_module, "ni");
   SY(__NR_query_module); FAIL;

   // __NR_poll 168
   GO(__NR_poll, "3s 1m");
   SY(__NR_poll, x0, x0+1, x0); FAIL;

   // __NR_nfsservctl 169
   GO(__NR_nfsservctl, "n/a");
 //SY(__NR_nfsservctl); // (Not yet handled by Valgrind) FAIL;

   // __NR_setresgid 170
   GO(__NR_setresgid, "3s 0m");
   SY(__NR_setresgid, x0, x0, x0); FAIL;

   // __NR_getresgid 171
   GO(__NR_getresgid, "3s 3m");
   SY(__NR_getresgid, x0, x0, x0); FAIL;

   // __NR_prctl 172
   GO(__NR_prctl, "5s 0m");
   SY(__NR_prctl, x0, x0, x0, x0, x0); FAIL;

   // __NR_rt_sigreturn 173
   GO(__NR_rt_sigreturn, "n/a");
 //SY(__NR_rt_sigreturn); // (Not yet handled by Valgrind) FAIL;

   // __NR_rt_sigaction 174
   GO(__NR_rt_sigaction, "4s 4m");
   SY(__NR_rt_sigaction, x0, x0+&px[2], x0+&px[2], x0); FAIL;

   // __NR_rt_sigprocmask 175
   GO(__NR_rt_sigprocmask, "4s 2m");
   SY(__NR_rt_sigprocmask, x0, x0+1, x0+1, x0); FAIL;

   // __NR_rt_sigpending 176
   GO(__NR_rt_sigpending, "2s 1m");
   SY(__NR_rt_sigpending, x0, x0+1); FAIL;

   // __NR_rt_sigtimedwait 177
   GO(__NR_rt_sigtimedwait, "4s 3m");
   SY(__NR_rt_sigtimedwait, x0+1, x0+1, x0+1, x0); FAIL;

   // __NR_rt_sigqueueinfo 178
   GO(__NR_rt_sigqueueinfo, "3s 1m");
   SY(__NR_rt_sigqueueinfo, x0, x0+1, x0); FAIL;

   // __NR_rt_sigsuspend 179
   GO(__NR_rt_sigsuspend, "ignore");
   // (I don't know how to test this...)

   // __NR_pread64 180
   GO(__NR_pread64, "5s 1m");
   SY(__NR_pread64, x0, x0, x0+1, x0, x0); FAIL;

   // __NR_pwrite64 181
   GO(__NR_pwrite64, "5s 1m");
   SY(__NR_pwrite64, x0, x0, x0+1, x0, x0); FAIL;

   // __NR_getcwd 183
   GO(__NR_getcwd, "2s 1m");
   SY(__NR_getcwd, x0, x0+1); FAIL;

   // __NR_capget 184
   GO(__NR_capget, "2s 2m");
   SY(__NR_capget, x0, x0); FAIL;

   // __NR_capset 185
   GO(__NR_capset, "2s 2m");
   SY(__NR_capset, x0, x0); FAIL;

   // __NR_sigaltstack 186
   {
      struct our_sigaltstack {
              void *ss_sp;
              int ss_flags;
              size_t ss_size;
      } ss;
      ss.ss_sp     = NULL;
      ss.ss_flags  = 0;
      ss.ss_size   = 0;
      VALGRIND_MAKE_MEM_NOACCESS(& ss, sizeof(struct our_sigaltstack));
      GO(__NR_sigaltstack, "2s 2m");
      SY(__NR_sigaltstack, x0+&ss, x0+&ss); SUCC;
   }

   // __NR_sendfile 187
   GO(__NR_sendfile, "4s 1m");
   SY(__NR_sendfile, x0, x0, x0+1, x0); FAIL;

   // __NR_getpmsg 188
   // Could do 5s 4m with more effort, but I can't be bothered for this
   // crappy non-standard syscall.
   GO(__NR_getpmsg, "5s 0m");
   SY(__NR_getpmsg, x0, x0, x0, x0); FAIL;

   // __NR_putpmsg 189
   // Could do 5s 2m with more effort, but I can't be bothered for this
   // crappy non-standard syscall.
   GO(__NR_putpmsg, "5s 0m");
   SY(__NR_putpmsg, x0, x0, x0, x0, x0); FAIL;

   // __NR_vfork 190
   GO(__NR_vfork, "other");
   // (sse scalar_vfork.c)

   // __NR_ugetrlimit 191
   GO(__NR_ugetrlimit, "2s 1m");
   SY(__NR_ugetrlimit, x0, x0); FAIL;

   // __NR_mmap2 192
   GO(__NR_mmap2, "6s 0m");
   SY(__NR_mmap2, x0, x0, x0, x0, x0-1, x0); FAIL;

   // __NR_truncate64 193
   GO(__NR_truncate64, "3s 1m");
   SY(__NR_truncate64, x0, x0, x0); FAIL;

   // __NR_ftruncate64 194
   GO(__NR_ftruncate64, "3s 0m");
   SY(__NR_ftruncate64, x0, x0, x0); FAIL;

   // __NR_stat64 195
   GO(__NR_stat64, "2s 2m");
   SY(__NR_stat64, x0, x0); FAIL;

   // __NR_lstat64 196
   GO(__NR_lstat64, "2s 2m");
   SY(__NR_lstat64, x0, x0); FAIL;

   // __NR_fstat64 197
   GO(__NR_fstat64, "2s 1m");
   SY(__NR_fstat64, x0, x0); FAIL;

   // __NR_lchown32 198
   GO(__NR_lchown32, "3s 1m");
   SY(__NR_lchown32, x0, x0, x0); FAIL;

   // __NR_getuid32 199
   GO(__NR_getuid32, "0s 0m");
   SY(__NR_getuid32); SUCC;

   // __NR_getgid32 200
   GO(__NR_getgid32, "0s 0m");
   SY(__NR_getgid32); SUCC;

   // __NR_geteuid32 201
   GO(__NR_geteuid32, "0s 0m");
   SY(__NR_geteuid32); SUCC;

   // __NR_getegid32 202
   GO(__NR_getegid32, "0s 0m");
   SY(__NR_getegid32); SUCC;

   // __NR_setreuid32 203
   GO(__NR_setreuid32, "2s 0m");
   SY(__NR_setreuid32, x0, x0); FAIL;

   // __NR_setregid32 204
   GO(__NR_setregid32, "2s 0m");
   SY(__NR_setregid32, x0, x0); FAIL;

   // __NR_getgroups32 205
   GO(__NR_getgroups32, "2s 1m");
   SY(__NR_getgroups32, x0+1, x0+1); FAIL;

   // __NR_setgroups32 206
   GO(__NR_setgroups32, "2s 1m");
   SY(__NR_setgroups32, x0+1, x0+1); FAIL;

   // __NR_fchown32 207
   GO(__NR_fchown32, "3s 0m");
   SY(__NR_fchown32, x0, x0, x0); FAIL;

   // __NR_setresuid32 208
   GO(__NR_setresuid32, "3s 0m");
   SY(__NR_setresuid32, x0, x0, x0); FAIL;

   // __NR_getresuid32 209
   GO(__NR_getresuid32, "3s 3m");
   SY(__NR_getresuid32, x0, x0, x0); FAIL;

   // __NR_setresgid32 210
   GO(__NR_setresgid32, "3s 0m");
   SY(__NR_setresgid32, x0, x0, x0); FAIL;

   // __NR_getresgid32 211
   GO(__NR_getresgid32, "3s 3m");
   SY(__NR_getresgid32, x0, x0, x0); FAIL;

   // __NR_chown32 212
   GO(__NR_chown32, "3s 1m");
   SY(__NR_chown32, x0, x0, x0); FAIL;

   // __NR_setuid32 213
   GO(__NR_setuid32, "1s 0m");
   SY(__NR_setuid32, x0); FAIL;

   // __NR_setgid32 214
   GO(__NR_setgid32, "1s 0m");
   SY(__NR_setgid32, x0); FAIL;

   // __NR_setfsuid32 215
   GO(__NR_setfsuid32, "1s 0m");
   SY(__NR_setfsuid32, x0); SUCC;  // This syscall has a stupid return value

   // __NR_setfsgid32 216
   GO(__NR_setfsgid32, "1s 0m");
   SY(__NR_setfsgid32, x0); SUCC;  // This syscall has a stupid return value

   // __NR_pivot_root 217
   GO(__NR_pivot_root, "n/a");
 //SY(__NR_pivot_root); // (Not yet handled by Valgrind) FAIL;

   // __NR_mincore 218
   GO(__NR_mincore, "3s 1m");
   SY(__NR_mincore, x0, x0+40960, x0); FAIL;

   // __NR_madvise 219
   GO(__NR_madvise, "3s 0m");
   SY(__NR_madvise, x0, x0+1, x0); FAILx(ENOMEM);

   // __NR_getdents64 220
   GO(__NR_getdents64, "3s 1m");
   SY(__NR_getdents64, x0, x0, x0+1); FAIL;

   // __NR_fcntl64 221
   // As with sys_open(), we don't trigger errors for the 1st two args for
   // the later ones.
   // For F_GETFD the 3rd arg is ignored.
   GO(__NR_fcntl64, "(GETFD) 2s 0m");
   SY(__NR_fcntl64, x0-1, x0+F_GETFD, x0); FAILx(EBADF);

   // For F_DUPFD the 3rd arg is 'arg'
   GO(__NR_fcntl64, "(DUPFD) 1s 0m");
   SY(__NR_fcntl64, -1, F_DUPFD, x0); FAILx(EBADF);

   // For F_GETLK the 3rd arg is 'lock'.
   // On x86, this fails w/EBADF.  But on amd64 in 32-bit mode it fails
   // w/EFAULT.
   GO(__NR_fcntl64, "(GETLK) 1s 0m"); 
   SY(__NR_fcntl64, -1, +F_GETLK, x0); FAIL; //FAILx(EBADF);

   // 222
   GO(222, "ni");
   SY(222); FAIL;

   // 223
   GO(223, "ni");
   SY(223); FAIL;

   // __NR_gettid 224
   GO(__NR_gettid, "n/a");
 //SY(__NR_gettid); // (Not yet handled by Valgrind) FAIL;

   // __NR_readahead 225
   GO(__NR_readahead, "n/a");
 //SY(__NR_readahead); // (Not yet handled by Valgrind) FAIL;

   // __NR_setxattr 226
   GO(__NR_setxattr, "5s 3m");
   SY(__NR_setxattr, x0, x0, x0, x0+1, x0); FAIL;

   // __NR_lsetxattr 227
   GO(__NR_lsetxattr, "5s 3m");
   SY(__NR_lsetxattr, x0, x0, x0, x0+1, x0); FAIL;

   // __NR_fsetxattr 228
   GO(__NR_fsetxattr, "5s 2m");
   SY(__NR_fsetxattr, x0, x0, x0, x0+1, x0); FAIL;

   // __NR_getxattr 229
   GO(__NR_getxattr, "4s 3m");
   SY(__NR_getxattr, x0, x0, x0, x0+1); FAIL;

   // __NR_lgetxattr 230
   GO(__NR_lgetxattr, "4s 3m");
   SY(__NR_lgetxattr, x0, x0, x0, x0+1); FAIL;

   // __NR_fgetxattr 231
   GO(__NR_fgetxattr, "4s 2m");
   SY(__NR_fgetxattr, x0, x0, x0, x0+1); FAIL;

   // __NR_listxattr 232
   GO(__NR_listxattr, "3s 2m");
   SY(__NR_listxattr, x0, x0, x0+1); FAIL;

   // __NR_llistxattr 233
   GO(__NR_llistxattr, "3s 2m");
   SY(__NR_llistxattr, x0, x0, x0+1); FAIL;

   // __NR_flistxattr 234
   GO(__NR_flistxattr, "3s 1m");
   SY(__NR_flistxattr, x0-1, x0, x0+1); FAIL; /* kernel returns EBADF, but both seem correct */

   // __NR_removexattr 235
   GO(__NR_removexattr, "2s 2m");
   SY(__NR_removexattr, x0, x0); FAIL;

   // __NR_lremovexattr 236
   GO(__NR_lremovexattr, "2s 2m");
   SY(__NR_lremovexattr, x0, x0); FAIL;

   // __NR_fremovexattr 237
   GO(__NR_fremovexattr, "2s 1m");
   SY(__NR_fremovexattr, x0, x0); FAIL;

   // __NR_tkill 238
   GO(__NR_tkill, "n/a");
 //SY(__NR_tkill); // (Not yet handled by Valgrind) FAIL;

   // __NR_sendfile64 239
   GO(__NR_sendfile64, "4s 1m");
   SY(__NR_sendfile64, x0, x0, x0+1, x0); FAIL;

   // __NR_futex 240
   #ifndef FUTEX_WAIT
   #define FUTEX_WAIT   0
   #endif
   // XXX: again, glibc not doing 6th arg means we have only 5s errors
   GO(__NR_futex, "5s 2m");
   SY(__NR_futex, x0+FUTEX_WAIT, x0, x0, x0+1, x0, x0); FAIL;

   // __NR_sched_setaffinity 241
   GO(__NR_sched_setaffinity, "3s 1m");
   SY(__NR_sched_setaffinity, x0, x0+1, x0); FAIL;

   // __NR_sched_getaffinity 242
   GO(__NR_sched_getaffinity, "3s 1m");
   SY(__NR_sched_getaffinity, x0, x0+1, x0); FAIL;

   // __NR_set_thread_area 243
   GO(__NR_set_thread_area, "1s 1m");
   SY(__NR_set_thread_area, x0); FAILx(EFAULT);

   // __NR_get_thread_area 244
   GO(__NR_get_thread_area, "1s 1m");
   SY(__NR_get_thread_area, x0); FAILx(EFAULT);

   // __NR_io_setup 245
   GO(__NR_io_setup, "2s 1m");
   SY(__NR_io_setup, x0, x0); FAIL;

   // __NR_io_destroy 246
   {
      // jump through hoops to prevent the PRE(io_destroy) wrapper crashing.
      struct fake_aio_ring {   
        unsigned        id;     /* kernel internal index number */
        unsigned        nr;     /* number of io_events */
        // There are more fields in the real aio_ring, but the 'nr' field is
        // the only one used by the PRE() wrapper.
      } ring = { 0, 0 };
      struct fake_aio_ring* ringptr = &ring;
      GO(__NR_io_destroy, "1s 0m");
      SY(__NR_io_destroy, x0+&ringptr); FAIL;
   }

   // __NR_io_getevents 247
   GO(__NR_io_getevents, "5s 2m");
   SY(__NR_io_getevents, x0, x0, x0+1, x0, x0+1); FAIL;

   // __NR_io_submit 248
   GO(__NR_io_submit, "3s 1m");
   SY(__NR_io_submit, x0, x0+1, x0); FAIL;

   // __NR_io_cancel 249
   GO(__NR_io_cancel, "3s 2m");
   SY(__NR_io_cancel, x0, x0, x0); FAIL;

   // __NR_fadvise64 250
   GO(__NR_fadvise64, "n/a");
 //SY(__NR_fadvise64); // (Not yet handled by Valgrind) FAIL;

   // 251
   GO(251, "ni");
   SY(251); FAIL;

   // __NR_exit_group 252
   GO(__NR_exit_group, "other");
   // (see scalar_exit_group.c)

   // __NR_lookup_dcookie 253
   GO(__NR_lookup_dcookie, "4s 1m");
   SY(__NR_lookup_dcookie, x0, x0, x0, x0+1); FAIL;

   // __NR_epoll_create 254
   GO(__NR_epoll_create, "1s 0m");
   SY(__NR_epoll_create, x0); SUCC_OR_FAIL;

   // __NR_epoll_ctl 255
   GO(__NR_epoll_ctl, "4s 1m");
   SY(__NR_epoll_ctl, x0, x0, x0, x0); FAIL;

   // __NR_epoll_wait 256
   GO(__NR_epoll_wait, "4s 1m");
   SY(__NR_epoll_wait, x0, x0, x0+1, x0); FAIL;

   // __NR_remap_file_pages 257
   GO(__NR_remap_file_pages, "n/a");
 //SY(__NR_remap_file_pages); // (Not yet handled by Valgrind) FAIL;

   // __NR_set_tid_address 258
   GO(__NR_set_tid_address, "1s 0m");
   SY(__NR_set_tid_address, x0); SUCC_OR_FAILx(ENOSYS);

   // __NR_timer_create 259
   GO(__NR_timer_create, "3s 2m");
   SY(__NR_timer_create, x0, x0+1, x0); FAIL;

   // __NR_timer_settime (__NR_timer_create+1)
   GO(__NR_timer_settime, "4s 2m");
   SY(__NR_timer_settime, x0, x0, x0, x0+1); FAIL;

   // __NR_timer_gettime (__NR_timer_create+2)
   GO(__NR_timer_gettime, "2s 1m");
   SY(__NR_timer_gettime, x0, x0); FAIL;

   // __NR_timer_getoverrun (__NR_timer_create+3)
   GO(__NR_timer_getoverrun, "1s 0m");
   SY(__NR_timer_getoverrun, x0); FAIL;

   // __NR_timer_delete (__NR_timer_create+4)
   GO(__NR_timer_delete, "1s 0m");
   SY(__NR_timer_delete, x0); FAIL;

   // __NR_clock_settime (__NR_timer_create+5)
   GO(__NR_clock_settime, "2s 1m");
   SY(__NR_clock_settime, x0, x0);  FAIL; FAIL;

   // __NR_clock_gettime (__NR_timer_create+6)
   GO(__NR_clock_gettime, "2s 1m");
   SY(__NR_clock_gettime, x0, x0); FAIL;

   // __NR_clock_getres (__NR_timer_create+7)
   GO(__NR_clock_getres, "2s 1m");
   SY(__NR_clock_getres, x0+1, x0+1); FAIL; FAIL;

   // __NR_clock_nanosleep (__NR_timer_create+8)
   GO(__NR_clock_nanosleep, "n/a");
 //SY(__NR_clock_nanosleep); // (Not yet handled by Valgrind) FAIL;

   // __NR_statfs64 268
   GO(__NR_statfs64, "3s 2m");
   SY(__NR_statfs64, x0, x0+1, x0); FAIL;

   // __NR_fstatfs64 269
   GO(__NR_fstatfs64, "3s 1m");
   SY(__NR_fstatfs64, x0, x0+1, x0); FAIL;

   // __NR_tgkill 270
   GO(__NR_tgkill, "n/a");
 //SY(__NR_tgkill); // (Not yet handled by Valgrind) FAIL;

   // __NR_utimes 271
   GO(__NR_utimes, "2s 2m");
   SY(__NR_utimes, x0, x0+1); FAIL;

   // __NR_fadvise64_64 272
   GO(__NR_fadvise64_64, "n/a");
 //SY(__NR_fadvise64_64); // (Not yet handled by Valgrind) FAIL;

   // __NR_vserver 273
   GO(__NR_vserver, "ni");
   SY(__NR_vserver); FAIL;

   // __NR_mbind 274
   GO(__NR_mbind, "n/a");
 //SY(__NR_mbind); // (Not yet handled by Valgrind) FAIL;

   // __NR_get_mempolicy 275
   GO(__NR_get_mempolicy, "n/a");
 //SY(__NR_get_mempolicy); // (Not yet handled by Valgrind) FAIL;

   // __NR_set_mempolicy 276
   GO(__NR_set_mempolicy, "n/a");
 //SY(__NR_set_mempolicy); // (Not yet handled by Valgrind) FAIL;

   // __NR_mq_open 277
   GO(__NR_mq_open, "4s 3m");
   SY(__NR_mq_open, x0, x0+O_CREAT, x0, x0+1); FAIL;

   // __NR_mq_unlink (__NR_mq_open+1)
   GO(__NR_mq_unlink, "1s 1m");
   SY(__NR_mq_unlink, x0); FAIL;

   // __NR_mq_timedsend (__NR_mq_open+2)
   GO(__NR_mq_timedsend, "5s 2m");
   SY(__NR_mq_timedsend, x0, x0, x0+1, x0, x0+1); FAIL;

   // __NR_mq_timedreceive (__NR_mq_open+3)
   GO(__NR_mq_timedreceive, "5s 3m");
   SY(__NR_mq_timedreceive, x0, x0, x0+1, x0+1, x0+1); FAIL;
  
   // __NR_mq_notify (__NR_mq_open+4)
   GO(__NR_mq_notify, "2s 1m");
   SY(__NR_mq_notify, x0, x0+1); FAIL;

   // __NR_mq_getsetattr (__NR_mq_open+5)
   GO(__NR_mq_getsetattr, "3s 2m");
   SY(__NR_mq_getsetattr, x0, x0+1, x0+1); FAIL;
   
   // __NR_sys_kexec_load 283
   GO(__NR_sys_kexec_load, "ni");
   SY(__NR_sys_kexec_load); FAIL;
#endif

   // no such syscall...
   GO(9999, 9999, "1e");
   SY(9999); FAIL;

   // __NR_exit 1
   GO(__NR_exit, 1, "1s 0m");
   SY(__NR_exit, x0); FAIL;

   assert(0);
}

