scalar.h revision b32f58018498ea2225959b0ba11c18f0c433deef
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