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