1 1.1 cgd #!/bin/sh - 2 1.28 christos # $NetBSD: makelintstub,v 1.28 2024/01/20 14:52:49 christos Exp $ 3 1.1 cgd # 4 1.7 cgd # Copyright (c) 1996, 1997 Christopher G. Demetriou 5 1.7 cgd # All rights reserved. 6 1.7 cgd # 7 1.1 cgd # Redistribution and use in source and binary forms, with or without 8 1.1 cgd # modification, are permitted provided that the following conditions 9 1.1 cgd # are met: 10 1.1 cgd # 1. Redistributions of source code must retain the above copyright 11 1.1 cgd # notice, this list of conditions and the following disclaimer. 12 1.1 cgd # 2. Redistributions in binary form must reproduce the above copyright 13 1.1 cgd # notice, this list of conditions and the following disclaimer in the 14 1.1 cgd # documentation and/or other materials provided with the distribution. 15 1.1 cgd # 3. All advertising materials mentioning features or use of this software 16 1.1 cgd # must display the following acknowledgement: 17 1.7 cgd # This product includes software developed for the 18 1.14 salo # NetBSD Project. See http://www.NetBSD.org/ for 19 1.7 cgd # information about NetBSD. 20 1.1 cgd # 4. The name of the author may not be used to endorse or promote products 21 1.7 cgd # derived from this software without specific prior written permission. 22 1.7 cgd # 23 1.1 cgd # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 24 1.1 cgd # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 25 1.1 cgd # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 26 1.1 cgd # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 27 1.1 cgd # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 28 1.1 cgd # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 29 1.1 cgd # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 30 1.1 cgd # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 31 1.1 cgd # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 32 1.1 cgd # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33 1.7 cgd # 34 1.7 cgd # <<Id: LICENSE,v 1.2 2000/06/14 15:57:33 cgd Exp>> 35 1.1 cgd 36 1.2 thorpej usage() 37 1.2 thorpej { 38 1.2 thorpej 39 1.17 christos cat << _EOF 1>&2 40 1.23 lukem Usage: $PROG [-n|-p] [-o filename] [-s syscall.h] object ... 41 1.22 lukem -n Create SYSCALL_NOERROR. 42 1.22 lukem -p Create PSEUDO_NOERROR. 43 1.22 lukem (also removes leading "_" on syscall name). 44 1.22 lukem -o filename Output to filename. 45 1.22 lukem -s syscall.h Header to #include instead of <sys/syscall.h>. 46 1.22 lukem 47 1.17 christos The CPP environment variable must be set 48 1.17 christos to the path to the C preprocessor. 49 1.17 christos _EOF 50 1.1 cgd exit 1 51 1.2 thorpej } 52 1.1 cgd 53 1.2 thorpej header() 54 1.2 thorpej { 55 1.1 cgd 56 1.2 thorpej cat <<- __EOF__ 57 1.2 thorpej /* 58 1.2 thorpej * THIS IS AN AUTOMATICALLY GENERATED FILE. DO NOT EDIT. 59 1.26 christos * It is generated by $PROG 60 1.2 thorpej */ 61 1.2 thorpej 62 1.2 thorpej #include <sys/param.h> 63 1.27 christos #include <sys/acl.h> 64 1.19 rmind #include <sys/aio.h> 65 1.2 thorpej #include <sys/time.h> 66 1.2 thorpej #include <sys/mount.h> 67 1.2 thorpej #include <sys/stat.h> 68 1.3 fvdl #include <ufs/ufs/dinode.h> 69 1.2 thorpej #include <ufs/lfs/lfs.h> 70 1.2 thorpej #include <sys/resource.h> 71 1.2 thorpej #include <sys/poll.h> 72 1.2 thorpej #include <sys/uio.h> 73 1.2 thorpej #include <sys/ipc.h> 74 1.26 christos #include <sys/idtype.h> 75 1.20 he #include <sys/lwpctl.h> 76 1.19 rmind #include <sys/mqueue.h> 77 1.2 thorpej #include <sys/msg.h> 78 1.2 thorpej #include <sys/sem.h> 79 1.2 thorpej #include <sys/shm.h> 80 1.25 martin #include <sys/spawn.h> 81 1.21 rmind #include <sys/sched.h> 82 1.2 thorpej #include <sys/timex.h> 83 1.2 thorpej #include <sys/socket.h> 84 1.10 jdolecek #include <sys/event.h> 85 1.16 tsarna #include <sys/uuid.h> 86 1.24 dholland #include <sys/quotactl.h> 87 1.2 thorpej #include <stdarg.h> 88 1.28 christos #include <unistd.h> 89 1.28 christos #include <stdlib.h> 90 1.28 christos #include <spawn.h> 91 1.28 christos #include <fcntl.h> 92 1.28 christos 93 1.28 christos #include "extern.h" 94 1.2 thorpej 95 1.2 thorpej __EOF__ 96 1.2 thorpej } 97 1.2 thorpej 98 1.2 thorpej syscall_stub() 99 1.2 thorpej { 100 1.2 thorpej 101 1.4 mycroft syscalldump="$1" 102 1.2 thorpej syscallname="$2" 103 1.2 thorpej funcname="$3" 104 1.2 thorpej 105 1.17 christos arglist="$( 106 1.4 mycroft sed -e 'ta 107 1.4 mycroft :a 108 1.9 thorpej s,^/\* syscall: \"'"$syscallname"'\" ,, 109 1.4 mycroft tb 110 1.4 mycroft d 111 1.4 mycroft :b 112 1.4 mycroft s, \*/$,,' $syscalldump 113 1.17 christos )" 114 1.2 thorpej 115 1.2 thorpej eval set -f -- "$arglist" 116 1.2 thorpej 117 1.4 mycroft if [ $# -lt 3 ]; then 118 1.2 thorpej echo syscall $syscallname not found! 1>&2 119 1.2 thorpej exit 1 120 1.2 thorpej fi 121 1.1 cgd 122 1.4 mycroft shift # kill "ret:" 123 1.4 mycroft returntype=$1; shift 124 1.4 mycroft shift # kill "args:" 125 1.2 thorpej 126 1.2 thorpej cat <<- __EOF__ 127 1.2 thorpej /*ARGSUSED*/ 128 1.2 thorpej $returntype 129 1.2 thorpej __EOF__ 130 1.2 thorpej 131 1.2 thorpej # do ANSI C function header 132 1.5 mycroft echo "#ifdef __STDC__" 133 1.2 thorpej 134 1.9 thorpej echo "$funcname(" 135 1.17 christos first=true; i=1 136 1.5 mycroft for arg; do 137 1.17 christos if $first; then 138 1.17 christos first=false 139 1.5 mycroft else 140 1.9 thorpej echo ", " 141 1.2 thorpej fi 142 1.5 mycroft case "$arg" in 143 1.9 thorpej "...") echo "...";; 144 1.9 thorpej *) echo "$arg arg$i"; i=$(($i + 1));; 145 1.5 mycroft esac 146 1.5 mycroft done 147 1.17 christos if $first; then 148 1.9 thorpej echo "void" 149 1.9 thorpej fi 150 1.5 mycroft echo ")" 151 1.1 cgd 152 1.5 mycroft # do K&R C function header 153 1.5 mycroft echo "#else" 154 1.1 cgd 155 1.9 thorpej echo "$funcname(" 156 1.17 christos first=true; i=1 157 1.5 mycroft for arg; do 158 1.17 christos if $first; then 159 1.17 christos first=false 160 1.5 mycroft else 161 1.9 thorpej echo ", " 162 1.2 thorpej fi 163 1.5 mycroft case "$arg" in 164 1.9 thorpej "...") echo "va_alist";; 165 1.9 thorpej *) echo "arg$i"; i=$(($i + 1));; 166 1.5 mycroft esac 167 1.2 thorpej done 168 1.2 thorpej echo ")" 169 1.2 thorpej i=1 170 1.5 mycroft for arg; do 171 1.5 mycroft case "$arg" in 172 1.5 mycroft "...") echo " va_dcl";; 173 1.5 mycroft *) echo " $arg arg$i;"; i=$(($i + 1));; 174 1.5 mycroft esac 175 1.2 thorpej done 176 1.1 cgd 177 1.2 thorpej # do function body 178 1.5 mycroft echo "#endif" 179 1.5 mycroft 180 1.2 thorpej echo "{" 181 1.2 thorpej if [ "$returntype" != "void" ]; then 182 1.2 thorpej echo " return (($returntype)0);" 183 1.2 thorpej fi 184 1.2 thorpej echo "}" 185 1.2 thorpej } 186 1.2 thorpej 187 1.2 thorpej trailer() 188 1.2 thorpej { 189 1.2 thorpej 190 1.2 thorpej cat <<- __EOF__ 191 1.2 thorpej /* END */ 192 1.2 thorpej __EOF__ 193 1.2 thorpej } 194 1.2 thorpej 195 1.2 thorpej 196 1.17 christos pflag=false 197 1.17 christos nflag=false 198 1.2 thorpej oarg="" 199 1.2 thorpej syscallhdr=/usr/include/sys/syscall.h 200 1.4 mycroft syscalldump=/tmp/makelintstub.$$ 201 1.17 christos PROG="$(basename "$0")" 202 1.2 thorpej 203 1.17 christos if [ -z "${CPP}" ]; then 204 1.9 thorpej usage 205 1.9 thorpej fi 206 1.9 thorpej 207 1.23 lukem while getopts no:ps: i 208 1.17 christos do 209 1.2 thorpej case "$i" in 210 1.17 christos n) nflag=true;; 211 1.17 christos o) oarg=$OPTARG;; 212 1.17 christos p) pflag=true;; 213 1.17 christos s) syscallhdr=$OPTARG;; 214 1.17 christos *) usage;; 215 1.2 thorpej esac 216 1.1 cgd done 217 1.1 cgd 218 1.17 christos shift $(expr $OPTIND - 1) 219 1.17 christos 220 1.17 christos if $pflag && $nflag 221 1.17 christos then 222 1.17 christos echo "$PROG: -n flag and -p flag may not be used together" 1>&2 223 1.2 thorpej usage 224 1.2 thorpej fi 225 1.2 thorpej 226 1.17 christos if [ -n "$oarg" ]; then 227 1.2 thorpej exec > $oarg 228 1.2 thorpej fi 229 1.2 thorpej 230 1.17 christos trap "rm -f $syscalldump" 0 1 2 3 15 231 1.4 mycroft 232 1.2 thorpej header 233 1.17 christos 234 1.17 christos echo "#include \"$syscallhdr\"" | ${CPP} -D_LIBC -C > $syscalldump 235 1.17 christos 236 1.2 thorpej for syscall; do 237 1.8 tv fnname=${syscall%.S} 238 1.17 christos if $pflag; then 239 1.4 mycroft scname=${fnname#_} 240 1.2 thorpej else 241 1.2 thorpej scname=$fnname 242 1.1 cgd fi 243 1.4 mycroft syscall_stub $syscalldump $scname $fnname 244 1.2 thorpej echo "" 245 1.1 cgd done 246 1.17 christos 247 1.2 thorpej trailer 248 1.1 cgd 249 1.1 cgd exit 0 250