#!/bin/sh - # $NetBSD: makelintstub,v 1.13 2003/01/18 11:33:07 thorpej 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. See http://www.netbsd.org/ for # information about NetBSD. # 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 ..." echo " The CPP environment variable must be set" echo " to the path to the C preprocessor." 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 #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 "$funcname(" first=yes; i=1 for arg; do if [ $first = yes ]; then first=no else echo ", " fi case "$arg" in "...") echo "...";; *) echo "$arg arg$i"; i=$(($i + 1));; esac done if [ $first = yes ]; then echo "void" fi echo ")" # do K&R C function header echo "#else" echo "$funcname(" first=yes; i=1 for arg; do if [ $first = yes ]; then first=no else echo ", " fi case "$arg" in "...") echo "va_alist";; *) echo "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 "x${CPP}" = "x"; then usage fi 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 echo "#include \"$syscallhdr\"" | ${CPP} -C >$syscalldump for syscall; do fnname=${syscall%.S} if [ $pflag = YES ]; then scname=${fnname#_} else scname=$fnname fi syscall_stub $syscalldump $scname $fnname echo "" done trailer exit 0