######################################################################## # # # This software is part of the ast package # # Copyright (c) 1989-2011 AT&T Intellectual Property # # and is licensed under the # # Eclipse Public License, Version 1.0 # # by AT&T Intellectual Property # # # # A copy of the License is available at # # http://www.eclipse.org/org/documents/epl-v10.html # # (with md5 checksum b35adb5213ca9657e911e9befb180842) # # # # Information and Software Systems Research # # AT&T Research # # Florham Park NJ # # # # Glenn Fowler # # David Korn # # Eduardo Krell # # # ######################################################################## : generate the 3d syscall features : include sys.tab # # this is the worst iffe script, we promise # # @(#)syscall.sh (AT&T Research) 2011-12-06 # eval $1 shell= ( typeset -u u=a && test "A" = "$u" ) >/dev/null 2>&1 && shell=u$shell ( integer n=1+1 && test "2" = "$n" ) >/dev/null 2>&1 && shell=n$shell ( x=a.b.c && test "a" = "${x%%.*}" ) >/dev/null 2>&1 && shell=e$shell shift case $1 in "") set /dev/null ;; esac input=$1 comma="," nl=" " tmpsuf="i z m d r f u s n b g t e" tmpall= for i in $tmpsuf do tmpall=$tmpall$i done tmpall="$tmp.[$tmpall]" rm -f $tmpall sys= fun= stdc= sym= vers= weak= case $shell in *n*) integer inx ;; esac inx=0 A_OUTPUT=1 A_INPUT=2 A_ACCESS=3 A_MODE=4 A_NUMBER=5 A_OPEN=6 A_POINTER=7 A_SIZE=8 A_STRING=9 A_VECTOR=A echo " #pragma prototyped" echo " #if defined(header) #include \"${tmp}s.h\" #endif extern #if defined(__cplusplus) \"C\" #endif int syscall(); static int ((*i)())=syscall; main() { return(i==0); }" > $tmp.c SYS_PREFIX= SYS_HEADER= SYS_CALL= for f in syscall.h sys/syscall.h do echo " #include <$f> int x;" > ${tmp}s.c if $cc -c ${tmp}s.c /dev/null then SYS_HEADER=$f echo " #include <$f> " >> $tmp.f echo "#include #ifdef SYS_exit int i; #else ( #endif" > ${tmp}s.c if $cc -c ${tmp}s.c then l=fun echo "int ${l}() { return 0; }" > ${tmp}s.c if $cc -c ${tmp}s.c /dev/null then SYS_CALL=syscall s=`nm ${tmp}s.o | sed -e /${l}/!d -e 's/.*[^_]\(_*'$l'[0-9]*\).*/\1/'` case $s in _*) SYS_PREFIX=_ ;; esac fi fi break fi done while : do echo '#include #include #ifdef RTLD_LAZY main() { dlsym(dlopen("/lib/libc.so", RTLD_LAZY), "open"); return(0); } #else ( #endif' > ${tmp}h.c if rm -f $tmp.x && { $cc -o $tmp.x ${tmp}h.c -ldl /dev/null || $cc -o $tmp.x ${tmp}h.c /dev/null } && $executable $tmp.x then sys=dynamic echo "#define _dynamic_syscall 1" >> $tmp.m lib= for d in /lib /usr/lib /shlib /usr/shlib do for s in "*.*" "*.[!a]*" do for b in libc do for i in $d/$b.$s do if test -f $i then lib=$i fi done case $lib in ?*) break 3 ;; esac done done done case $lib in *.[0-9]*.[0-9]*) i=`echo $lib | sed 's,\([^0-9]*[0-9]*\).*,\1,` if test -f $i then lib=$i fi ;; esac # some run time linkers barf with /lib/xxx if # /usr/lib/xxx is there case $lib in /usr*) ;; *) if test -f /usr$lib then lib=/usr$lib fi ;; esac case $lib in "") lib=/lib/libc.so.1 ;; esac echo '#include #include #ifdef RTLD_NEXT main() { return 0; } #else ( #endif' > ${tmp}h.c if rm -f $tmp.x && { $cc -o $tmp.x ${tmp}h.c -ldl /dev/null || $cc -o $tmp.x ${tmp}h.c /dev/null } && $executable $tmp.x then weak=1 fi break fi if rm -f $tmp.x && $cc $static -o $tmp.x $tmp.c /dev/null && $executable $tmp.x then case $SYS_HEADER in ?*) echo " #include <$f> SYS" > ${tmp}s.c ;; esac inc="#if defined(__STDPP__directive) && defined(__STDPP__hide) __STDPP__directive pragma pp:hide syscall #else #define syscall ______syscall #endif #include <$SYS_HEADER> #if defined(__STDPP__directive) && defined(__STDPP__hide) __STDPP__directive pragma pp:nohide syscall #else #undef syscall #endif" { case $SYS_HEADER in ?*) echo "$inc" ;; *) echo "#define SYS_exit 1" ;; esac echo "main() { syscall(SYS_exit, 0); exit(1); }" } > ${tmp}m.c if rm -f ${tmp}m.x && $cc $static -o ${tmp}m.x ${tmp}m.c /dev/null && ./${tmp}m.x then case $SYS_HEADER in ?*) echo "$inc" ;; esac rm -f $tmp.x if rm -f $tmp.x && $cc -Dsyscall=swapon $static -o $tmp.x $tmp.c /dev/null && $executable $tmp.x then sys=bsd else sys=att fi echo "#define _static_syscall 1" >> $tmp.m break fi fi sys=mangle echo "#define _mangle_syscall 1" >> $tmp.m if LD_PRELOAD=/dev/null ${_ld_preload_test-cat} /dev/null then echo " static int _lib_mangle_lib_;" >> $tmp.m fi break done echo iffe: test: type=$sys header=$SYS_HEADER ${SYS_CALL:+call=$SYS_CALL} ${SYS_PREFIX:+prefix=$SYS_PREFIX} >&$stderr echo "#if SYSTRACE3D /* output */ #define A_OUTPUT 0x$A_OUTPUT /* input only */ #define A_INPUT 0x$A_INPUT #define A_ACCESS 0x$A_ACCESS #define A_MODE 0x$A_MODE #define A_NUMBER 0x$A_NUMBER #define A_OPEN 0x$A_OPEN #define A_POINTER 0x$A_POINTER #define A_SIZE 0x$A_SIZE #define A_STRING 0x$A_STRING #define A_VECTOR 0x$A_VECTOR typedef struct { Sysfunc_t func; short index; short nov; unsigned short call; unsigned short args; const char* name; unsigned char type[8]; unsigned long count; unsigned long megs; unsigned long units; Sysfunc_t last; unsigned short active; } Systrace_t; " > $tmp.b echo "static Systrace_t sys_trace[] = { " > $tmp.t case $sys in *) SYSCALL3D=1 ;; esac for i in $cc do case $i in -D*) case $shell in *e*) v=${i#-D} v=${v%%=*} ;; *) v=`echo '' $i | sed -e 's/^ -D//' -e 's/=.*//'` ;; esac eval $v=1 ;; esac done exec <$input ifi=0 ifs=${IFS-' '} while : do IFS=" " read line || break set $line IFS=$ifs case $1 in \#*) continue ;; "") break ;; "if") shift eval $* case $? in 0) ifi="0 $ifi" ;; *) ifi="1 $ifi" ;; esac continue ;; "elif") case $ifi in 0) echo "$0: no if for elif" >&$stderr break ;; esac case $ifi in 1*) shift eval $* case $? in 0) ;; *) continue ;; esac i=0 ;; *) i=2 ;; esac set $ifi shift ifi="$i $ifi" ;; "else") case $ifi in 0) echo "$0: no if for else" >&$stderr break ;; esac case $ifi in 1*) i=0 ;; *) i=2 ;; esac set $ifi shift ifi="$i $ifi" ;; "fi") case $ifi in 0) echo "$0: no if for fi" >&$stderr break ;; esac set $ifi shift ifi=$* continue ;; esac case $ifi in 0*) ;; *) continue ;; esac l=$1 q=$2 r=$3 p=$4 shift 4 echo iffe: test: system call $l >&$stderr case $r in "bool") cast="(" tsac="<0?-1:0)" r=int ;; "int") cast= tsac= ;; "DIR*") cast="(DIR$r)" tsac= ;; *) cast="($r)" tsac= ;; esac case $shell in *u*) typeset -u u=$l ;; *) u=`echo $l | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` ;; esac w=$l case $l in _*) case $shell in *e*) v=${u#?} ;; *) v=`echo $u | sed 's/.//'` ;; esac echo "#define $v $u" >> $tmp.r m=$l echo "#undef $l /*MANGLENAME*/" >> $tmp.z ;; *) U=$u m=_$l for i in __libc_ _ __ do if rm -f $tmp.x && $cc -Dsyscall=${i}$l $static -o $tmp.x $tmp.c /dev/null && $executable $tmp.x then case $sys:$l in *:creat|*:creat[0-9]*) # sol6.sun4 ;; *:open|*:open[0-9]*) # sol6.sun4 ;; dynamic:*) # test if the _ version is a weak ref echo "#include #include main() { void* p; void* u; void* r; p = dlopen(\"$lib\", 1); u = dlsym(p, \"${i}$l\"); r = dlsym(p, \"$l\"); return(u == r); }" > ${tmp}h.c if rm -f $tmp.x && { $cc -o $tmp.x ${tmp}h.c -ldl /dev/null || $cc -o $tmp.x ${tmp}h.c /dev/null } && ./$tmp.x then break fi ;; esac w=${i}$l case $shell in *u*) typeset -u I=$i ;; *) I=`echo $i | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` ;; esac { echo "#undef $u" echo "#define $u ${I}$u" } >> $tmp.r u=${I}$u break fi done { echo "#undef $l /*MANGLENAME*/" case $w in $l) ;; *) echo "#undef $w" ;; esac } >> $tmp.z ;; esac case $p in void) b=0 a= ;; *,*,*,*,*,*) b=6 a=a,b,c,d,e,f ;; *,*,*,*,*) b=5 a=a,b,c,d,e ;; *,*,*,*) b=4 a=a,b,c,d ;; *,*,*) b=3 a=a,b,c ;; *,*) b=2 a=a,b ;; *) b=1 a=a ;; esac org=$p A=$a B=$b alt= def= inc= ind= map= num= opt= ref= ver= VER= while : do case $1 in alt*) alt=$2 shift 2 ;; num*) shift ;; var*) var=$2 shift 2 set sys/types.h $1 { for i do echo "#include <$i>" done echo "#ifdef __STDC__ extern $r $l($var); #endif" } > ${tmp}h.c if $cc -c ${tmp}h.c /dev/null then inc="$inc $*" p=$var case $p in void) b=0 a= ;; *,*,*,*,*,*) b=6 a=a,b,c,d,e,f ;; *,*,*,*,*) b=5 a=a,b,c,d,e ;; *,*,*,*) b=4 a=a,b,c,d ;; *,*,*) b=3 a=a,b,c ;; *,*) b=2 a=a,b ;; *) b=1 a=a ;; esac org=$p A=$a B=$b fi echo "#define ARG3D$m $B" >> $tmp.f break ;; ver*) VER=1 case $2 in -) ref= ;; *) ref=$2 ;; esac shift 2 case $l in [fl]*) case $shell in *u*) j=${l#?} i=${l%$j} xxx=_${i}x${j} ;; *) xxx=`echo $l | sed -e 's/\(.\)\(.*\)/_\1x\2/'` ;; esac ;; *) xxx=_x${l} ;; esac for i in sys/types.h $ref do echo "#include <$i>" done > ${tmp}h.c i= for j in `$cc -E ${tmp}h.c | sed -e '/^#[line ]*1[ ]/!d' -e 's/.*"\(.*\)".*/\1/'` do test -f "$j" && i="$i $j" done ver=`sed -e "/define[ ]*[A-Z_0-9]*64_VER/!d" -e 's/.*define[ ]*\([A-Z_0-9][A-Z_0-9]*\).*/\1/' $i /dev/null then ver=$j; break fi done ;; esac if grep "[^a-zA-Z_0-9]_$xxx" $i >/dev/null then xxx=_$xxx fi ;; *.h) inc="$inc $1" shift ;; [0-9]*) case $sys in bsd) case $2 in [0-9]*) num=$2 ;; *) num=$1 ;; esac ;; *) num=$1 ;; esac case $2 in [0-9]*) shift 2 ;; *) shift ;; esac ;; "") break ;; *) case $# in [012]) break ;; *) shift 2 ;; esac ;; esac done case $num:$sys in :dynamic) num=1 ;; esac call= case $inc in ?*) for i in sys/types.h $inc do echo "#include <$i>" done > ${tmp}s.h opt="$opt -Dheader" ;; esac case $VER:$ver in *:?*) if rm -f $tmp.x && $cc -Dsyscall=$xxx $static -o $tmp.x $tmp.c /dev/null && $executable $tmp.x then # hack test for last arg indirect in xxx version case $stdc in "") { echo "extern int foo(const char*);" echo "extern int foo(const char**);" } > ${tmp}h.c if $cc -c ${tmp}h.c /dev/null then stdc=0 else stdc=1 fi ;; esac ra=$a va=$a case $stdc in 1) { for i in sys/types.h $ref do echo "#include <$i>" done echo "#ifdef INDIRECT" echo "#define REFERENCE *" echo "#else" echo "#define REFERENCE" echo "#endif" echo "extern $r $xxx(const int, $p REFERENCE);" } > ${tmp}h.c if $cc -c ${tmp}h.c /dev/null then : ok elif $cc -c -DINDIRECT ${tmp}h.c /dev/null then ind="*" case $shell in *e*) i=${a%?} ra="${i}&${a#$i}" va="${i}*${a#$i}" ;; *) ra=`echo $a | sed -e 's/\(.\)$/\&\1'` va=`echo $a | sed -e 's/\(.\)$/\*\1'` ;; esac fi ;; esac case $shell in *u*) typeset -u y=$xxx ;; *) y=`echo $xxx | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` ;; esac case $sys in dynamic|mangle) echo "extern $r $y(const int, $p$ind);" >> $tmp.e ;; esac { echo "#define SYS3D$m $inx" echo "#ifndef SYS$m" echo "#define SYS$m (-1)" echo "#endif" echo "#ifndef SYS$xxx" echo "#define SYS$xxx (-1)" echo "#endif" echo "#define SYSNOV$xxx SYS$m" } >> $tmp.f case $shell in *n*) ((inx=inx+1)) ;; *) inx=`expr $inx + 1` ;; esac case $ver in *[mM][kK][nN][oO][dD]*) verid=_MKNOD_VER ;; *[sS][tT][aA][tT]*) verid=_STAT_VER ;; *) verid=$ver ;; esac { case $y in __*) case $shell in *e*) Y=${y#__} ;; *) Y=`echo $y | sed -e 's/__//'` ;; esac echo "#undef $Y" echo "#define $Y $y" ;; _*) case $shell in *e*) Y=${y#_} ;; *) Y=`echo $y | sed -e 's/_//'` ;; esac echo "#undef $Y" echo "#define $Y $y" ;; esac echo "#undef $u" echo "#define $u($a) $y(_3D${verid}${ra:+,}$ra)" echo "#undef $y" echo "#define $y(v${a:+,}$a) ${cast}SYSCALL(SYS3D$m,v${a:+,}$a)${tsac}" } >> $tmp.u case $p in void) c=1 set $r int ;; *) IFS=$comma set int${comma}$p c=$# set $r${comma}int${comma}$p$ind IFS=$ifs ;; esac d= s= for i in 0 1 2 3 4 5 do case $# in 0) break ;; esac case $1 in *"mode_t") d=${d}${s}A_MODE ;; *"size_t") d=${d}${s}A_SIZE ;; *"char* const*"|*"char**") d=${d}${s}A_VECTOR ;; *"char*") case $r:$2 in *"ssize_t":*"size_t") d=${d}${s}A_OUTPUT,A_SIZE shift ;; *) d=${d}${s}A_STRING ;; esac ;; *"const void*") d=${d}${s}A_INPUT ;; *"void*") d=${d}${s}A_OUTPUT ;; *"struct stat*"|*"int*") d=${d}${s}A_OUTPUT ;; *"...") case $l in *open|*open64) d=${d}${s}A_MODE ;; *) d=${d}${s}A_POINTER ;; esac ;; *"[]"|*"*") d=${d}${s}A_POINTER ;; *) d=${d}${s}A_NUMBER ;; esac s=, shift done case $sys in dynamic)x="0, " ;; mangle) x="$u, " echo "#undef $u extern long $u();" >> $tmp.g ;; *) x= ;; esac echo iffe: test: $l "=>" $xxx >&$stderr echo "{ ${x}SYS$xxx, SYSNOV$xxx, MSG_CALL(MSG_$q), $c, \"$xxx\", { $d } }," >> $tmp.t # NOTE: no varargs here IFS=$comma set $p IFS=$ifs d= f= o= for i in a b c d e f do case $# in 0) break ;; 1) e=$ind ;; *) e= ;; esac case $1 in *\[\]) case $shell in *e*) k=${1%\[\]} ;; *) k=`echo $1 | sed 's/\[\]\$//'` ;; esac i="$i"'[]' ;; *) k=$1 ;; esac case $k in *char*) n=path ;; *dev_t) n=dev ;; *int*) n=fd ;; *mode_t*)n=mode ;; *stat*) n=st ;; *) n="<$k>${i}" ;; esac case $f in '') f=$n ;; *) f=$f,$n ;; esac case $d in "") d="$k$e $n" o="$k$e $n;" ;; *) d="$d, $k$e $n" o="$o $k$e $n;" ;; esac shift done echo "#define ${U}3D _3d_$m" >> $tmp.d echo "#define ${l}3d($a) $xxx __PARAM__((const int _3d_ver, $d),(_3d_ver${f:+,} $f)) __OTORP__(int _3d_ver; $o)" >> $tmp.d eval v='$'_INIT$ver case $v in "") eval _INIT$ver=1 vers="$vers $ver" ;; esac case $sym in "") sym="$xxx" fun="$xxx()" ;; *) sym="$sym,$nl $xxx" fun="$fun,$nl $xxx()" ;; esac eval _SYS_${l}_VER=_3D$verid continue fi ;; 1:*) case $SYS_CALL in ?*) echo "#include <${SYS_HEADER}> #ifdef SYS_${l} ( #endif #include #include extern int ${l}(); int fun() { struct stat st; return ${l}(0,&st); }" > ${tmp}s.c if $cc -c ${tmp}s.c >/dev/null 2>&1 then s=`nm ${tmp}s.o | sed -e /$l/!d -e 's/.*[^_]\('${SYS_PREFIX}'_*'${l}'[0-9]*\).*/\1/'` case $s in $l) ;; *) echo "#include #ifndef SYS_${s} ( #else int i; #endif" > ${tmp}s.c if $cc -c ${tmp}s.c >/dev/null 2>&1 then def=1 map=$s echo "#define SYS_${l} SYS_${s}" >> $tmp.f echo iffe: test: $l "=>" $s >&$stderr fi ;; esac else def=1 fi ;; esac ;; esac if rm -f $tmp.x && $cc -Dsyscall=$l $opt $static -o $tmp.x $tmp.c /dev/null && $executable $tmp.x then case $sys in att|bsd|dynamic|mangle) case $SYS_HEADER in "") case $num in "") ;; 0) echo "#define $u $l" >> $tmp.r ;; *) case $sys in att|bsd) echo "#define SYS$m $num" >> $tmp.s ;; esac call=sys ;; esac ;; *) case `$cc -E -DSYS=SYS$m ${tmp}s.c > $tmp.m ;; esac else case $num in [0-9]*) call=nosys ;; *) call=nolib ;; esac fi case $call in nolib|nosys) { echo "#ifndef SYS$m" echo "#define SYS$m (-1)" echo "#endif" } >> $tmp.f ;; *) case $def:$SYS_HEADER in :?*) echo "#include <${SYS_HEADER}> #ifdef SYS${m} ( #else int i; #endif" > ${tmp}s.c if $cc -c ${tmp}s.c >/dev/null 2>&1 then echo "#define SYS$m (-1)" >> $tmp.f fi ;; esac ;; esac case $call in nolib|nosys) echo "#define _nosys$m 1" >> $tmp.u ;; esac case $call in nolib) ;; nosys) case $alt in "") echo "#define $u($a) NOSYS()" >> $tmp.u echo "#define _stub_$w 1" >> $tmp.n w=_no_$w ;; *) case $shell in *u*) typeset -u y=$alt ;; *) y=`echo $alt | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` ;; esac echo "#define $u $y" >> $tmp.r ;; esac ;; sys) { echo "#define SYS3D$m $inx" case $sys in dynamic|mangle) echo "#ifndef SYS$m" echo "#define SYS$m (-1)" echo "#endif" ;; esac } >> $tmp.f case $shell in *n*) ((inx=inx+1)) ;; *) inx=`expr $inx + 1` ;; esac { echo "#undef $u" echo "#define $u($a) ${cast}SYSCALL(SYS3D$m${A:+,}$A)${tsac}" } >> $tmp.u case $p in void) set $r c=0 ;; *) IFS=$comma set $p c=$# set $r${comma}$p IFS=$ifs ;; esac d= s= for i in 0 1 2 3 4 5 do case $# in 0) break ;; esac case $1 in *"mode_t") d=${d}${s}A_MODE ;; *"size_t") d=${d}${s}A_SIZE ;; *"char* const*"|*"char**") d=${d}${s}A_VECTOR ;; *"char*") case $r:$2 in *"ssize_t":*"size_t") d=${d}${s}A_OUTPUT,A_SIZE shift ;; *) d=${d}${s}A_STRING ;; esac ;; *"const void*") d=${d}${s}A_INPUT ;; *"void*") d=${d}${s}A_OUTPUT ;; *"struct stat*"|*"int*") d=${d}${s}A_OUTPUT ;; *"...") case $l in *open) d=${d}${s}A_MODE ;; *) d=${d}${s}A_POINTER ;; esac ;; *"[]"|*"*") d=${d}${s}A_POINTER ;; *) d=${d}${s}A_NUMBER ;; esac s=, shift done case $sys in mangle) x="$u, " echo "#undef $u extern long $u();" >> $tmp.g ;; *) x="0, " ;; esac i=$l case $i in _exit) { echo "static int hit;" echo "void _exit(code) int code; { if (hit++) abort(); __exit(code); }" echo "main() { return 0; }" } > ${tmp}h.c $cc -o ${tmp}h.x ${tmp}h.c && ./${tmp}h.x && i=_$i ;; *) case $map:$weak in ?*:*) i=$map ;; :?*) i=$w ;; esac ;; esac echo "{ ${x}SYS$m, (-1), MSG_CALL(MSG_$q), $c, \"$i\", { $d } }," >> $tmp.t ;; *) case $num in ?*) echo "extern $r $u($p);" >> $tmp.e ;; esac ;; esac i= case $call in nolib) ;; nosys) ;; *) case $l:$w in _*) ;; *:_*) i=1 ;; esac ;; esac case $i in "") echo "#define ${l}3d $w" >> $tmp.d ;; *) case $p in void) d=void o= va= vo= ;; *) IFS=$comma set $p IFS=$ifs d= o= va=$a vo= vx= for i in a b c d e f do case $# in 0) break ;; esac case $1 in *...) d="$d, ..." va=va_alist case $l in fcntl) t='void*' ;; *) t=int ;; esac vo="__OTORP__($o) $t $i; va_list ap; __VA_START__(ap,$vx); __OTORP__(" o=va_dcl IFS=$comma set $p IFS=$ifs for i in a b c d e f do case $1 in *...) break ;; esac vo="$vo$i = va_arg(ap, $1);" shift done case $l in fcntl) vo="$vo) $i = va_arg(ap, void*); va_end(ap);" ;; *) vo="$vo) $i = va_arg(ap, int); va_end(ap);" ;; esac break ;; *\[\]) case $shell in *e*) k=${1%\[\]} ;; *) k=`echo $1 | sed 's/\[\]\$//'` ;; esac i="$i"'[]' ;; *) k=$1 ;; esac vx=$i case $d in "") d="$k $i" o="$k $i;" ;; *) d="$d, $k $i" o="$o $k $i;" ;; esac shift done ;; esac case $o in ?*) o="__OTORP__($o) " ;; esac case $r in void) ft='*' fr= ;; *) ft= fr='return ' ;; esac z="$r $w" echo "#define ${U}3D ${z}" >> $tmp.d W= case $w in __libc_*) W=" $r __$l __PARAM__(($d),($va)) $o{$vo $fr$w($a); }" ;; __*) W=" $r _$l __PARAM__(($d),($va)) $o{$vo $fr$w($a); }" ;; esac echo "#define ${l}3d ${ft}_3d_stub${m} = 0; extern __MANGLE__ $r $w __PROTO__(($p)); $r $l __PARAM__(($d),($va)) $o{$vo $fr$w($a); }$W $z" >> $tmp.d ;; esac case $call:$sym in nolib:*);; nosys:*);; *:) sym="$w" fun="$w()" ;; *) sym="$sym,$nl $w" fun="$fun,$nl $w()" ;; esac done IFS=$ifs if test -f $tmp.t then { echo "}; " case $sys in dynamic|mangle) echo "#define SYSCALL3D(z,a,b,c,d,e,f) (*sys_trace[z].func)(a,b,c,d,e,f)" case $sys in dynamic|mangle) echo "#undef fstat" case $_SYS_fstat_VER in "") echo "#define fstat(a,b) SYSCALL3D(SYS3D_fstat,a,b,0,0,0,0)" ;; *) echo "#define fstat(a,b) SYSCALL3D(SYS3D_fstat,$_SYS_fstat_VER,a,b,0,0,0)" ;; esac echo "#undef write" echo "#define write(a,b,c) SYSCALL3D(SYS3D_write,a,b,c,0,0,0)" ;; esac ;; esac echo " #else " echo " #define SYSCALL syscall3d extern long syscall3d(int, ...); #endif" } >> $tmp.t else echo "#undef SYSTRACE3D" > $tmp.t fi echo " #endif" >> $tmp.e echo " #ifdef SYSENT3D extern int $fun; int (*_3d_sysent[])() = { $sym }; #else extern int (*_3d_sysent[])(); #define PULL_IN_3D int (*pull_in_3d)() = _3d_sysent[0]; " >> $tmp.m for ver in $vers do vercall= case $ver in *[mM][kK][nN][oO][dD]*) vercall=MKNOD ;; *[sS][tT][aA][tT]*) vercall=STAT ;; esac case $vercall in ?*) echo "#define _3D_${vercall}_VER ${ver}" for alt in $ver64 do case $alt in *${vercall}64*) echo "#define _3D_${vercall}64_VER ${alt}" ;; esac done ;; esac done >> $tmp.f for i in $tmpsuf do if test -f $tmp.$i then echo cat $tmp.$i fi done echo