• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
13 extern 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