summaryrefslogtreecommitdiff
path: root/regress/hsyscalls.i4
blob: 2efa879bb8a943588cfc7a5d0cabbe6bdbaf83ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
m4_dnl hsyscalls.i4
m4_dnl (part of complex test harness, not of the library)
m4_dnl - list of syscalls to override/log and their args

m4_dnl  This file is part of adns, which is
m4_dnl    Copyright (C) 1997-2000,2003,2006,2014  Ian Jackson
m4_dnl    Copyright (C) 2014  Mark Wooding
m4_dnl    Copyright (C) 1999-2000,2003,2006  Tony Finch
m4_dnl    Copyright (C) 1991 Massachusetts Institute of Technology
m4_dnl  (See the file INSTALL for full details.)
m4_dnl  
m4_dnl  This program is free software; you can redistribute it and/or modify
m4_dnl  it under the terms of the GNU General Public License as published by
m4_dnl  the Free Software Foundation; either version 3, or (at your option)
m4_dnl  any later version.
m4_dnl  
m4_dnl  This program is distributed in the hope that it will be useful,
m4_dnl  but WITHOUT ANY WARRANTY; without even the implied warranty of
m4_dnl  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
m4_dnl  GNU General Public License for more details.
m4_dnl  
m4_dnl  You should have received a copy of the GNU General Public License
m4_dnl  along with this program; if not, write to the Free Software Foundation.

m4_dnl each system call has
m4_dnl  hm_syscall(<name>,<returnvalue>,<args>)
m4_dnl <returnvalue> is one of
m4_dnl  hm_rv_must       must succeed and return 0
m4_dnl  hm_rv_any        any nonnegative return allowed, -1 means see errno
m4_dnl  hm_rv_fd         file descriptor is returned, -1 means see errno
m4_dnl  hm_rv_succfail   returns 0 (ok) or -1 (see errno)
m4_dnl  hm_rv_len(<max>) returns length read/written, must be <=max, -1 => errno
m4_dnl  hm_rv_fcntl      syscall is fcntl, do special processing
m4_dnl <args> is list of macros for arguments, each followed by hm_na
m4_dnl  hm_arg_nullptr(<type>,<arg>)    pointer of type type, must be null
m4_dnl  hm_arg_int(<arg>)               signed integer
m4_dnl  hm_arg_fdset_io(<arg>,<max>)    fd_set, max bit set is in max
m4_dnl  hm_arg_timeval_in_rel_null(<t>) struct timeval*, pass in, relative, may be null
m4_dnl  hm_arg_must(<type>,<arg>,<val>) must have correct value, or abort test
m4_dnl  hm_arg_socktype(<arg>)          SOCK_STREAM or SOCK_DGRAM (an int)
m4_dnl  hm_arg_addrfam(<arg>)           a supported address family
m4_dnl  hm_arg_ign(<type>,<arg>)        input parameter ignored
m4_dnl  hm_arg_fd(<arg>)                fd
m4_dnl  hm_arg_fcntl_cmd_arg(<ca>,<aa>) syscall is fcntl, do special processing
m4_dnl  hm_arg_addr_in(<arg>,<len>)     struct sockaddr*, length given by <len> (an int)
m4_dnl  hm_arg_bytes_in(<objtype>,<objarg>,<lentype>,<lenarg>)
m4_dnl   some data from caller; <objarg> is of type pointer to const <objtype>
m4_dnl   and points to <lenarg> bytes (<lenarg> is of type <lentype>)
m4_dnl  hm_arg_bytes_out(<objtype>,<objarg>,<lentype>,<buflenarg>)
m4_dnl   buffer for data from syscall; <objarg> is of type pointer to const <objtype>
m4_dnl   and points to at least <lenarg> bytes (<lenarg> is of type <lentype>)
m4_dnl   return value from syscall is supposed to be returned length
m4_dnl  hm_arg_addr_out(<arg>,<lenptr>) struct sockaddr*, length io at <lenptr> (an int*)

hm_syscall(
	select, `hm_rv_any', `
	hm_arg_int(max) hm_na
	hm_arg_fdset_io(rfds,max) hm_na
	hm_arg_fdset_io(wfds,max) hm_na
	hm_arg_fdset_io(efds,max) hm_na
	hm_arg_timeval_in_rel_null(to) hm_na
')

#ifdef HAVE_POLL
hm_syscall(
	poll, `hm_rv_any', `
        hm_arg_pollfds_io(fds,nfds) hm_na
	hm_arg_int(timeout) hm_na
')
#endif

hm_syscall(
	socket, `hm_rv_fd', `
	hm_arg_addrfam(domain) hm_na
	hm_arg_socktype(type) hm_na
	hm_arg_ign(int,protocol) hm_na
')

hm_syscall(
	fcntl, `hm_rv_fcntl', `
	hm_arg_fd(fd) hm_na
	hm_arg_fcntl_cmd_arg(cmd,arg) hm_na
')

hm_syscall(
	connect, `hm_rv_succfail', `
	hm_arg_fd(fd) hm_na
	hm_arg_addr_in(addr,addrlen) hm_na
')

hm_syscall(
	bind, `hm_rv_succfail', `
	hm_arg_fd(fd) hm_na
	hm_arg_addr_in(addr,addrlen) hm_na
')

hm_syscall(
	listen, `hm_rv_succfail', `
	hm_arg_fd(fd) hm_na
	hm_arg_int(backlog) hm_na
')

hm_syscall(
	close, `hm_rv_succfail', `
	hm_arg_fd(fd) hm_na
')

hm_syscall(
	sendto, `hm_rv_any', `
	hm_arg_fd(fd) hm_na
	hm_arg_bytes_in(void,msg,int,msglen) hm_na
	hm_arg_must(unsigned int,flags,0) hm_na
	hm_arg_addr_in(addr,addrlen) hm_na
')

hm_syscall(
	recvfrom, `hm_rv_len(buflen)', `
	hm_arg_fd(fd) hm_na
	hm_arg_bytes_out(void,buf,int,buflen) hm_na
	hm_arg_must(unsigned int,flags,0) hm_na
	hm_arg_addr_out(addr,addrlen) hm_na
')

hm_syscall(
	read, `hm_rv_len(buflen)', `
	hm_arg_fd(fd) hm_na
	hm_arg_bytes_out(void,buf,size_t,buflen) hm_na
')

hm_syscall(
	write, `hm_rv_any', `
	hm_arg_fd(fd) hm_na
	hm_arg_bytes_in(void,buf,size_t,len) hm_na
')

hm_specsyscall(int, writev, `int fd, const struct iovec *vector, size_t count')
hm_specsyscall(int, gettimeofday, `struct timeval *tv, struct timezone *tz')
hm_specsyscall(pid_t, getpid, `void')

hm_specsyscall(void*, malloc, `size_t sz')
hm_specsyscall(void, free, `void *ptr')
hm_specsyscall(void*, realloc, `void *op, size_t nsz')
hm_specsyscall(void, exit, `int rv', NONRETURNING)