blob: 072b9c67a4e451084f43a1b942cbd7b49cec2a08 [file] [log] [blame]
sewardj4eee4762006-10-14 15:51:32 +00001#include "../../../include/vki/vki-scnums-x86-linux.h"
nethercotee365ff52004-11-12 17:12:04 +00002
nethercote75a8c982004-11-11 19:03:34 +00003#include <assert.h>
nethercote92b2fd52004-11-16 16:15:41 +00004#include <errno.h>
nethercote75a8c982004-11-11 19:03:34 +00005#include <fcntl.h>
6#include <stdio.h>
7#include <stdlib.h>
nethercote75a8c982004-11-11 19:03:34 +00008#include <sys/syscall.h>
nethercote9a3beb92004-11-12 17:07:26 +00009#include <sys/stat.h>
10#include <sys/ptrace.h>
nethercote75a8c982004-11-11 19:03:34 +000011#include <sys/types.h>
12
nethercotee365ff52004-11-12 17:12:04 +000013// Since we use vki_unistd.h, we can't include <unistd.h>. So we have to
14// declare this ourselves.
15extern long int syscall (long int __sysno, ...) __THROW;
16
nethercote75a8c982004-11-11 19:03:34 +000017// Thorough syscall scalar arg checking. Also serves as thorough checking
18// for (very) basic syscall use. Generally not trying to do anything
19// meaningful with the syscalls.
20
21#define GO(__NR_xxx, s) \
22 fprintf(stderr, "-----------------------------------------------------\n" \
23 "%3d:%20s %s\n" \
24 "-----------------------------------------------------\n", \
25 __NR_xxx, #__NR_xxx, s);
26
nethercote92b2fd52004-11-16 16:15:41 +000027#define SY res = syscall
nethercote75a8c982004-11-11 19:03:34 +000028
nethercote92b2fd52004-11-16 16:15:41 +000029#define FAIL assert(-1 == res);
30#define SUCC assert(-1 != res);
31#define SUCC_OR_FAIL /* no test */
32
33#define FAILx(E) \
34 do { \
35 int myerrno = errno; \
36 if (-1 == res) { \
37 if (E == myerrno) { \
38 /* as expected */ \
39 } else { \
40 fprintf(stderr, "Expected error %s (%d), got %d\n", #E, E, myerrno); \
41 exit(1); \
42 } \
43 } else { \
44 fprintf(stderr, "Expected error %s (%d), got success\n", #E, E); \
45 exit(1); \
46 } \
47 } while (0);
nethercote75a8c982004-11-11 19:03:34 +000048
sewardjb5f6f512005-03-10 23:59:00 +000049#define SUCC_OR_FAILx(E) \
50 do { \
51 int myerrno = errno; \
52 if (-1 == res) { \
53 if (E == myerrno) { \
54 /* as expected */ \
55 } else { \
56 fprintf(stderr, "Expected error %s (%d), got %d\n", #E, E, myerrno); \
57 exit(1); \
58 } \
59 } \
60 } while (0);