1#include "../../../include/vki/vki-scnums-x86-linux.h" 2 3#include <assert.h> 4#include <errno.h> 5#include <fcntl.h> 6#include <stdio.h> 7#include <stdlib.h> 8#include <sys/syscall.h> 9#include <sys/stat.h> 10#include <sys/ptrace.h> 11#include <sys/types.h> 12#include <sys/mman.h> 13 14// Since we use vki_unistd.h, we can't include <unistd.h>. So we have to 15// declare this ourselves. 16extern long int syscall (long int __sysno, ...) __THROW; 17 18// Thorough syscall scalar arg checking. Also serves as thorough checking 19// for (very) basic syscall use. Generally not trying to do anything 20// meaningful with the syscalls. 21 22#define GO(__NR_xxx, s) \ 23 fprintf(stderr, "-----------------------------------------------------\n" \ 24 "%3d:%20s %s\n" \ 25 "-----------------------------------------------------\n", \ 26 __NR_xxx, #__NR_xxx, s); 27 28#define SY res = syscall 29 30#define FAIL assert(-1 == res); 31#define SUCC assert(-1 != res); 32#define SUCC_OR_FAIL /* no test */ 33 34#define FAILx(E) \ 35 do { \ 36 int myerrno = errno; \ 37 if (-1 == res) { \ 38 if (E == myerrno) { \ 39 /* as expected */ \ 40 } else { \ 41 fprintf(stderr, "Expected error %s (%d), got %d\n", #E, E, myerrno); \ 42 exit(1); \ 43 } \ 44 } else { \ 45 fprintf(stderr, "Expected error %s (%d), got success\n", #E, E); \ 46 exit(1); \ 47 } \ 48 } while (0); 49 50#define SUCC_OR_FAILx(E) \ 51 do { \ 52 int myerrno = errno; \ 53 if (-1 == res) { \ 54 if (E == myerrno) { \ 55 /* as expected */ \ 56 } else { \ 57 fprintf(stderr, "Expected error %s (%d), got %d\n", #E, E, myerrno); \ 58 exit(1); \ 59 } \ 60 } \ 61 } while (0); 62