1m4_dnl hsyscalls.i4 2m4_dnl (part of complex test harness, not of the library) 3m4_dnl - list of syscalls to override/log and their args 4 5m4_dnl This file is part of adns, which is 6m4_dnl Copyright (C) 1997-2000,2003,2006,2014-2016,2020 Ian Jackson 7m4_dnl Copyright (C) 2014 Mark Wooding 8m4_dnl Copyright (C) 1999-2000,2003,2006 Tony Finch 9m4_dnl Copyright (C) 1991 Massachusetts Institute of Technology 10m4_dnl (See the file INSTALL for full details.) 11m4_dnl 12m4_dnl This program is free software; you can redistribute it and/or modify 13m4_dnl it under the terms of the GNU General Public License as published by 14m4_dnl the Free Software Foundation; either version 3, or (at your option) 15m4_dnl any later version. 16m4_dnl 17m4_dnl This program is distributed in the hope that it will be useful, 18m4_dnl but WITHOUT ANY WARRANTY; without even the implied warranty of 19m4_dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20m4_dnl GNU General Public License for more details. 21m4_dnl 22m4_dnl You should have received a copy of the GNU General Public License 23m4_dnl along with this program; if not, write to the Free Software Foundation. 24 25m4_dnl each system call has 26m4_dnl hm_syscall(<name>,<returnvalue>,<args>) 27m4_dnl <returnvalue> is one of 28m4_dnl hm_rv_must must succeed and return 0 29m4_dnl hm_rv_any any nonnegative return allowed, -1 means see errno 30m4_dnl hm_rv_fd file descriptor is returned, -1 means see errno 31m4_dnl hm_rv_succfail returns 0 (ok) or -1 (see errno) 32m4_dnl hm_rv_len(<max>) returns length read, must be <=max, -1 => errno 33m4_dnl hm_rv_wlen(<max>) returns length written, must be <=max, -1 => errno 34m4_dnl hm_rv_fcntl syscall is fcntl, do special processing 35m4_dnl hm_rv_select select, do special processing } default is _any 36m4_dnl hm_rv_poll poll, do special processing } after create_nothing 37m4_dnl <args> is list of macros for arguments, each followed by hm_na 38m4_dnl hm_arg_nullptr(<type>,<arg>) pointer of type type, must be null 39m4_dnl hm_arg_int(<arg>) signed integer 40m4_dnl hm_arg_fdset_io(<arg>,<max>) fd_set, max bit set is in max 41m4_dnl hm_arg_timeval_in_rel_null(<t>) struct timeval*, pass in, relative, may be null 42m4_dnl hm_arg_must(<type>,<arg>,<val>) must have correct value, or abort test 43m4_dnl hm_arg_socktype(<arg>) SOCK_STREAM or SOCK_DGRAM (an int) 44m4_dnl hm_arg_addrfam(<arg>) a supported address family 45m4_dnl hm_arg_ign(<type>,<arg>) input parameter ignored 46m4_dnl hm_arg_fd(<arg>) fd 47m4_dnl hm_arg_fcntl_cmd_arg(<ca>,<aa>) syscall is fcntl, do special processing 48m4_dnl hm_arg_addr_in(<arg>,<len>) struct sockaddr*, length given by <len> (an int) 49m4_dnl hm_arg_bytes_in(<objtype>,<objarg>,<lentype>,<lenarg>) 50m4_dnl some data from caller; <objarg> is of type pointer to const <objtype> 51m4_dnl and points to <lenarg> bytes (<lenarg> is of type <lentype>) 52m4_dnl hm_arg_bytes_out(<objtype>,<objarg>,<lentype>,<buflenarg>) 53m4_dnl buffer for data from syscall; <objarg> is of type pointer to const <objtype> 54m4_dnl and points to at least <lenarg> bytes (<lenarg> is of type <lentype>) 55m4_dnl return value from syscall is supposed to be returned length 56m4_dnl hm_arg_addr_out(<arg>,<lenptr>) struct sockaddr*, length io at <lenptr> (an int*) 57 58hm_syscall( 59 select, `hm_rv_select', ` 60 hm_arg_int(max) hm_na 61 hm_arg_fdset_io(rfds,max) hm_na 62 hm_arg_fdset_io(wfds,max) hm_na 63 hm_arg_fdset_io(efds,max) hm_na 64 hm_arg_timeval_in_rel_null(to) hm_na 65') 66 67#ifdef HAVE_POLL 68hm_syscall( 69 poll, `hm_rv_poll', ` 70 hm_arg_pollfds_io(fds,nfds) hm_na 71 hm_arg_int(timeout) hm_na 72') 73#endif 74 75hm_syscall( 76 socket, `hm_rv_fd', ` 77 hm_arg_addrfam(domain) hm_na 78 hm_arg_socktype(type) hm_na 79 hm_arg_ign(int,protocol) hm_na 80') 81 82hm_syscall( 83 fcntl, `hm_rv_fcntl', ` 84 hm_arg_fd(fd) hm_na 85 hm_arg_fcntl_cmd_arg(cmd,arg) hm_na 86') 87 88hm_syscall( 89 connect, `hm_rv_succfail', ` 90 hm_arg_fd(fd) hm_na 91 hm_arg_addr_in(addr,addrlen) hm_na 92') 93 94hm_syscall( 95 bind, `hm_rv_succfail', ` 96 hm_arg_fd(fd) hm_na 97 hm_arg_addr_in(addr,addrlen) hm_na 98') 99 100hm_syscall( 101 listen, `hm_rv_succfail', ` 102 hm_arg_fd(fd) hm_na 103 hm_arg_int(backlog) hm_na 104') 105 106hm_syscall( 107 sendto, `hm_rv_wlen(msglen)', ` 108 hm_arg_fd(fd) hm_na 109 hm_arg_bytes_in(void,msg,int,msglen) hm_na 110 hm_arg_must(unsigned int,flags,0) hm_na 111 hm_arg_addr_in(addr,addrlen) hm_na 112') 113 114hm_syscall( 115 recvfrom, `hm_rv_len(buflen)', ` 116 hm_arg_fd(fd) hm_na 117 hm_arg_bytes_out(void,buf,int,buflen) hm_na 118 hm_arg_must(unsigned int,flags,0) hm_na 119 hm_arg_addr_out(addr,addrlen) hm_na 120') 121 122hm_syscall( 123 read, `hm_rv_len(buflen)', ` 124 hm_arg_fd(fd) hm_na 125 hm_arg_bytes_out(void,buf,size_t,buflen) hm_na 126') 127 128hm_syscall( 129 write, `hm_rv_wlen(len)', ` 130 hm_arg_fd(fd) hm_na 131 hm_arg_bytes_in(void,buf,size_t,len) hm_na 132') 133 134hm_specsyscall(int, writev, `int fd, const struct iovec *vector, size_t count') 135hm_specsyscall(int, gettimeofday, `struct timeval *tv, struct timezone *tz') 136hm_specsyscall(int, clock_gettime, `clockid_t clk, struct timespec *ts') 137hm_specsyscall(pid_t, getpid, `void') 138hm_specsyscall(int, close, `int fd') 139 140m4_define(hm_stdsyscall_close,` 141hm_syscall( 142 close, `hm_rv_succfail', ` 143 hm_arg_fd(fd) hm_na 144') 145') 146 147hm_specsyscall(void*, malloc, `size_t sz') 148hm_specsyscall(void, free, `void *ptr') 149hm_specsyscall(void*, realloc, `void *op, size_t nsz') 150hm_specsyscall(void, exit, `int rv', NONRETURNING) 151 152hm_specsyscall(FILE*, fopen, `const char *path, const char *mode') 153