#!/bin/sh - # $NetBSD: makelintstub,v 1.5 1998/07/03 18:09:25 mycroft Exp $ # # Copyright (c) 1996, 1997 Christopher G. Demetriou. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All advertising materials mentioning features or use of this software # must display the following acknowledgement: # This product includes software developed for the NetBSD Project # by Christopher G. Demetriou. # 4. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. usage() { echo "usage: $0 [-n|-p] [-o filename] object ..." exit 1 } header() { cat <<- __EOF__ /* * THIS IS AN AUTOMATICALLY GENERATED FILE. DO NOT EDIT. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef __STDC__ #include #else #include #endif __EOF__ } syscall_stub() { syscalldump="$1" syscallname="$2" funcname="$3" arglist="` sed -e 'ta :a s,^/\* syscall: "'"$syscallname"'" ,, tb d :b s, \*/$,,' $syscalldump `" eval set -f -- "$arglist" if [ $# -lt 3 ]; then echo syscall $syscallname not found! 1>&2 exit 1 fi shift # kill "ret:" returntype=$1; shift shift # kill "args:" cat <<- __EOF__ /*ARGSUSED*/ $returntype __EOF__ # do ANSI C function header echo "#ifdef __STDC__" echo -n "$funcname(" first=yes; i=1 for arg; do if [ $first = yes ]; then first=no else echo -n ", " fi case "$arg" in "...") echo -n "...";; *) echo -n "$arg arg$i"; i=$(($i + 1));; esac done echo ")" # do K&R C function header echo "#else" echo -n "$funcname(" first=yes; i=1 for arg; do if [ $first = yes ]; then first=no else echo -n ", " fi case "$arg" in "...") echo -n "va_alist";; *) echo -n "arg$i"; i=$(($i + 1));; esac done echo ")" i=1 for arg; do case "$arg" in "...") echo " va_dcl";; *) echo " $arg arg$i;"; i=$(($i + 1));; esac done # do function body echo "#endif" echo "{" if [ "$returntype" != "void" ]; then echo " return (($returntype)0);" fi echo "}" } trailer() { cat <<- __EOF__ /* END */ __EOF__ } set -- `getopt no:ps: $*` pflag=NO nflag=NO oarg="" syscallhdr=/usr/include/sys/syscall.h syscalldump=/tmp/makelintstub.$$ if test $? -ne 0; then usage fi for i; do case "$i" in -n) nflag=YES; shift;; -o) oarg=$2; shift; shift;; -p) pflag=YES; shift;; -s) syscallhdr=$2; shift; shift;; --) shift; break;; esac done if [ $pflag = YES ] && [ $nflag = YES ]; then echo "$0: -n flag and -p flag may not be used together" echo "" usage fi if [ "X$oarg" != "X" ]; then exec > $oarg fi trap "rm -f $syscalldump" 0 1 2 15 header printf '#include "'"$syscallhdr"'"' | cpp -C >$syscalldump for syscall; do fnname=${syscall%.o} if [ $pflag = YES ]; then scname=${fnname#_} else scname=$fnname fi syscall_stub $syscalldump $scname $fnname echo "" done trailer exit 0