Changeset View
Changeset View
Standalone View
Standalone View
head/sys/kern/makesyscalls.sh
#! /bin/sh - | #! /bin/sh - | ||||
# @(#)makesyscalls.sh 8.1 (Berkeley) 6/10/93 | # @(#)makesyscalls.sh 8.1 (Berkeley) 6/10/93 | ||||
# $FreeBSD$ | # $FreeBSD$ | ||||
set -e | set -e | ||||
# name of compat options: | # name of compat options: | ||||
compat=COMPAT_43 | compat=COMPAT_43 | ||||
compat4=COMPAT_FREEBSD4 | compat4=COMPAT_FREEBSD4 | ||||
compat6=COMPAT_FREEBSD6 | compat6=COMPAT_FREEBSD6 | ||||
compat7=COMPAT_FREEBSD7 | compat7=COMPAT_FREEBSD7 | ||||
compat10=COMPAT_FREEBSD10 | compat10=COMPAT_FREEBSD10 | ||||
compat11=COMPAT_FREEBSD11 | |||||
# output files: | # output files: | ||||
sysnames="syscalls.c" | sysnames="syscalls.c" | ||||
sysproto="../sys/sysproto.h" | sysproto="../sys/sysproto.h" | ||||
sysproto_h=_SYS_SYSPROTO_H_ | sysproto_h=_SYS_SYSPROTO_H_ | ||||
syshdr="../sys/syscall.h" | syshdr="../sys/syscall.h" | ||||
sysmk="../sys/syscall.mk" | sysmk="../sys/syscall.mk" | ||||
syssw="init_sysent.c" | syssw="init_sysent.c" | ||||
Show All 10 Lines | |||||
syscompat4="sysent.compat4.$$" | syscompat4="sysent.compat4.$$" | ||||
syscompat4dcl="sysent.compat4dcl.$$" | syscompat4dcl="sysent.compat4dcl.$$" | ||||
syscompat6="sysent.compat6.$$" | syscompat6="sysent.compat6.$$" | ||||
syscompat6dcl="sysent.compat6dcl.$$" | syscompat6dcl="sysent.compat6dcl.$$" | ||||
syscompat7="sysent.compat7.$$" | syscompat7="sysent.compat7.$$" | ||||
syscompat7dcl="sysent.compat7dcl.$$" | syscompat7dcl="sysent.compat7dcl.$$" | ||||
syscompat10="sysent.compat10.$$" | syscompat10="sysent.compat10.$$" | ||||
syscompat10dcl="sysent.compat10dcl.$$" | syscompat10dcl="sysent.compat10dcl.$$" | ||||
syscompat11="sysent.compat11.$$" | |||||
syscompat11dcl="sysent.compat11dcl.$$" | |||||
sysent="sysent.switch.$$" | sysent="sysent.switch.$$" | ||||
sysinc="sysinc.switch.$$" | sysinc="sysinc.switch.$$" | ||||
sysarg="sysarg.switch.$$" | sysarg="sysarg.switch.$$" | ||||
sysprotoend="sysprotoend.$$" | sysprotoend="sysprotoend.$$" | ||||
systracetmp="systrace.$$" | systracetmp="systrace.$$" | ||||
systraceret="systraceret.$$" | systraceret="systraceret.$$" | ||||
if [ -r capabilities.conf ]; then | if [ -r capabilities.conf ]; then | ||||
capenabled=`cat capabilities.conf | grep -v "^#" | grep -v "^$"` | capenabled=`cat capabilities.conf | grep -v "^#" | grep -v "^$"` | ||||
capenabled=`echo $capenabled | sed 's/ /,/g'` | capenabled=`echo $capenabled | sed 's/ /,/g'` | ||||
else | else | ||||
capenabled="" | capenabled="" | ||||
fi | fi | ||||
trap "rm $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $syscompat7 $syscompat7dcl $syscompat10 $syscompat10dcl $sysent $sysinc $sysarg $sysprotoend $systracetmp $systraceret" 0 | trap "rm $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $syscompat7 $syscompat7dcl $syscompat10 $syscompat10dcl $syscompat11 $syscompat11dcl $sysent $sysinc $sysarg $sysprotoend $systracetmp $systraceret" 0 | ||||
touch $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $syscompat7 $syscompat7dcl $syscompat10 $syscompat10dcl $sysent $sysinc $sysarg $sysprotoend $systracetmp $systraceret | touch $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $syscompat7 $syscompat7dcl $syscompat10 $syscompat10dcl $syscompat11 $syscompat11dcl $sysent $sysinc $sysarg $sysprotoend $systracetmp $systraceret | ||||
case $# in | case $# in | ||||
0) echo "usage: $0 input-file <config-file>" 1>&2 | 0) echo "usage: $0 input-file <config-file>" 1>&2 | ||||
exit 1 | exit 1 | ||||
;; | ;; | ||||
esac | esac | ||||
if [ -n "$2" ]; then | if [ -n "$2" ]; then | ||||
Show All 23 Lines | BEGIN { | ||||
syscompat4 = \"$syscompat4\" | syscompat4 = \"$syscompat4\" | ||||
syscompat4dcl = \"$syscompat4dcl\" | syscompat4dcl = \"$syscompat4dcl\" | ||||
syscompat6 = \"$syscompat6\" | syscompat6 = \"$syscompat6\" | ||||
syscompat6dcl = \"$syscompat6dcl\" | syscompat6dcl = \"$syscompat6dcl\" | ||||
syscompat7 = \"$syscompat7\" | syscompat7 = \"$syscompat7\" | ||||
syscompat7dcl = \"$syscompat7dcl\" | syscompat7dcl = \"$syscompat7dcl\" | ||||
syscompat10 = \"$syscompat10\" | syscompat10 = \"$syscompat10\" | ||||
syscompat10dcl = \"$syscompat10dcl\" | syscompat10dcl = \"$syscompat10dcl\" | ||||
syscompat11 = \"$syscompat11\" | |||||
syscompat11dcl = \"$syscompat11dcl\" | |||||
sysent = \"$sysent\" | sysent = \"$sysent\" | ||||
syssw = \"$syssw\" | syssw = \"$syssw\" | ||||
sysinc = \"$sysinc\" | sysinc = \"$sysinc\" | ||||
sysarg = \"$sysarg\" | sysarg = \"$sysarg\" | ||||
sysnames = \"$sysnames\" | sysnames = \"$sysnames\" | ||||
syshdr = \"$syshdr\" | syshdr = \"$syshdr\" | ||||
sysmk = \"$sysmk\" | sysmk = \"$sysmk\" | ||||
systrace = \"$systrace\" | systrace = \"$systrace\" | ||||
systracetmp = \"$systracetmp\" | systracetmp = \"$systracetmp\" | ||||
systraceret = \"$systraceret\" | systraceret = \"$systraceret\" | ||||
compat = \"$compat\" | compat = \"$compat\" | ||||
compat4 = \"$compat4\" | compat4 = \"$compat4\" | ||||
compat6 = \"$compat6\" | compat6 = \"$compat6\" | ||||
compat7 = \"$compat7\" | compat7 = \"$compat7\" | ||||
compat10 = \"$compat10\" | compat10 = \"$compat10\" | ||||
compat11 = \"$compat11\" | |||||
syscallprefix = \"$syscallprefix\" | syscallprefix = \"$syscallprefix\" | ||||
switchname = \"$switchname\" | switchname = \"$switchname\" | ||||
namesname = \"$namesname\" | namesname = \"$namesname\" | ||||
infile = \"$1\" | infile = \"$1\" | ||||
capenabled_string = \"$capenabled\" | capenabled_string = \"$capenabled\" | ||||
"' | "' | ||||
split(capenabled_string, capenabled, ","); | split(capenabled_string, capenabled, ","); | ||||
Show All 32 Lines | BEGIN { | ||||
printf "#define\tPADR_(t)\t0\n" > sysarg | printf "#define\tPADR_(t)\t0\n" > sysarg | ||||
printf "#endif\n\n" > sysarg | printf "#endif\n\n" > sysarg | ||||
printf "\n#ifdef %s\n\n", compat > syscompat | printf "\n#ifdef %s\n\n", compat > syscompat | ||||
printf "\n#ifdef %s\n\n", compat4 > syscompat4 | printf "\n#ifdef %s\n\n", compat4 > syscompat4 | ||||
printf "\n#ifdef %s\n\n", compat6 > syscompat6 | printf "\n#ifdef %s\n\n", compat6 > syscompat6 | ||||
printf "\n#ifdef %s\n\n", compat7 > syscompat7 | printf "\n#ifdef %s\n\n", compat7 > syscompat7 | ||||
printf "\n#ifdef %s\n\n", compat10 > syscompat10 | printf "\n#ifdef %s\n\n", compat10 > syscompat10 | ||||
printf "\n#ifdef %s\n\n", compat11 > syscompat11 | |||||
printf "/*\n * System call names.\n *\n" > sysnames | printf "/*\n * System call names.\n *\n" > sysnames | ||||
printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames | printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames | ||||
printf " * $%s$\n", "FreeBSD" > sysnames | printf " * $%s$\n", "FreeBSD" > sysnames | ||||
printf " */\n\n" > sysnames | printf " */\n\n" > sysnames | ||||
printf "const char *%s[] = {\n", namesname > sysnames | printf "const char *%s[] = {\n", namesname > sysnames | ||||
printf "/*\n * System call numbers.\n *\n" > syshdr | printf "/*\n * System call numbers.\n *\n" > syshdr | ||||
Show All 34 Lines | $1 ~ /^#[ ]*if/ { | ||||
print > sysent | print > sysent | ||||
print > sysdcl | print > sysdcl | ||||
print > sysarg | print > sysarg | ||||
print > syscompat | print > syscompat | ||||
print > syscompat4 | print > syscompat4 | ||||
print > syscompat6 | print > syscompat6 | ||||
print > syscompat7 | print > syscompat7 | ||||
print > syscompat10 | print > syscompat10 | ||||
print > syscompat11 | |||||
print > sysnames | print > sysnames | ||||
print > systrace | print > systrace | ||||
print > systracetmp | print > systracetmp | ||||
print > systraceret | print > systraceret | ||||
savesyscall = syscall | savesyscall = syscall | ||||
next | next | ||||
} | } | ||||
$1 ~ /^#[ ]*else/ { | $1 ~ /^#[ ]*else/ { | ||||
print > sysent | print > sysent | ||||
print > sysdcl | print > sysdcl | ||||
print > sysarg | print > sysarg | ||||
print > syscompat | print > syscompat | ||||
print > syscompat4 | print > syscompat4 | ||||
print > syscompat6 | print > syscompat6 | ||||
print > syscompat7 | print > syscompat7 | ||||
print > syscompat10 | print > syscompat10 | ||||
print > syscompat11 | |||||
print > sysnames | print > sysnames | ||||
print > systrace | print > systrace | ||||
print > systracetmp | print > systracetmp | ||||
print > systraceret | print > systraceret | ||||
syscall = savesyscall | syscall = savesyscall | ||||
next | next | ||||
} | } | ||||
$1 ~ /^#/ { | $1 ~ /^#/ { | ||||
print > sysent | print > sysent | ||||
print > sysdcl | print > sysdcl | ||||
print > sysarg | print > sysarg | ||||
print > syscompat | print > syscompat | ||||
print > syscompat4 | print > syscompat4 | ||||
print > syscompat6 | print > syscompat6 | ||||
print > syscompat7 | print > syscompat7 | ||||
print > syscompat10 | print > syscompat10 | ||||
print > syscompat11 | |||||
print > sysnames | print > sysnames | ||||
print > systrace | print > systrace | ||||
print > systracetmp | print > systracetmp | ||||
print > systraceret | print > systraceret | ||||
next | next | ||||
} | } | ||||
syscall != $1 { | syscall != $1 { | ||||
printf "%s: line %d: syscall number out of sync at %d\n", | printf "%s: line %d: syscall number out of sync at %d\n", | ||||
▲ Show 20 Lines • Show All 92 Lines • ▼ Show 20 Lines | if (argalias == "") { | ||||
if (flag("COMPAT4")) | if (flag("COMPAT4")) | ||||
argalias = "freebsd4_" argalias | argalias = "freebsd4_" argalias | ||||
if (flag("COMPAT6")) | if (flag("COMPAT6")) | ||||
argalias = "freebsd6_" argalias | argalias = "freebsd6_" argalias | ||||
if (flag("COMPAT7")) | if (flag("COMPAT7")) | ||||
argalias = "freebsd7_" argalias | argalias = "freebsd7_" argalias | ||||
if (flag("COMPAT10")) | if (flag("COMPAT10")) | ||||
argalias = "freebsd10_" argalias | argalias = "freebsd10_" argalias | ||||
if (flag("COMPAT11")) | |||||
argalias = "freebsd11_" argalias | |||||
} | } | ||||
f++ | f++ | ||||
if ($f != "(") | if ($f != "(") | ||||
parserr($f, ")") | parserr($f, ")") | ||||
f++ | f++ | ||||
if (f == end) { | if (f == end) { | ||||
▲ Show 20 Lines • Show All 136 Lines • ▼ Show 20 Lines | if (!flag("NODEF")) { | ||||
printf("#define\t%s%s\t%d\n", syscallprefix, | printf("#define\t%s%s\t%d\n", syscallprefix, | ||||
funcalias, syscall) > syshdr | funcalias, syscall) > syshdr | ||||
printf(" \\\n\t%s.o", funcalias) > sysmk | printf(" \\\n\t%s.o", funcalias) > sysmk | ||||
} | } | ||||
syscall++ | syscall++ | ||||
next | next | ||||
} | } | ||||
type("COMPAT") || type("COMPAT4") || type("COMPAT6") || \ | type("COMPAT") || type("COMPAT4") || type("COMPAT6") || \ | ||||
type("COMPAT7") || type("COMPAT10") { | type("COMPAT7") || type("COMPAT10") || type("COMPAT11") { | ||||
if (flag("COMPAT")) { | if (flag("COMPAT")) { | ||||
ncompat++ | ncompat++ | ||||
out = syscompat | out = syscompat | ||||
outdcl = syscompatdcl | outdcl = syscompatdcl | ||||
wrap = "compat" | wrap = "compat" | ||||
prefix = "o" | prefix = "o" | ||||
descr = "old" | descr = "old" | ||||
} else if (flag("COMPAT4")) { | } else if (flag("COMPAT4")) { | ||||
Show All 19 Lines | if (flag("COMPAT")) { | ||||
descr = "freebsd7" | descr = "freebsd7" | ||||
} else if (flag("COMPAT10")) { | } else if (flag("COMPAT10")) { | ||||
ncompat10++ | ncompat10++ | ||||
out = syscompat10 | out = syscompat10 | ||||
outdcl = syscompat10dcl | outdcl = syscompat10dcl | ||||
wrap = "compat10" | wrap = "compat10" | ||||
prefix = "freebsd10_" | prefix = "freebsd10_" | ||||
descr = "freebsd10" | descr = "freebsd10" | ||||
} else if (flag("COMPAT11")) { | |||||
ncompat11++ | |||||
out = syscompat11 | |||||
outdcl = syscompat11dcl | |||||
wrap = "compat11" | |||||
prefix = "freebsd11_" | |||||
descr = "freebsd11" | |||||
} | } | ||||
parseline() | parseline() | ||||
if (argc != 0 && !flag("NOARGS") && !flag("NOPROTO") && \ | if (argc != 0 && !flag("NOARGS") && !flag("NOPROTO") && \ | ||||
!flag("NODEF")) { | !flag("NODEF")) { | ||||
printf("struct %s {\n", argalias) > out | printf("struct %s {\n", argalias) > out | ||||
for (i = 1; i <= argc; i++) | for (i = 1; i <= argc; i++) | ||||
printf("\tchar %s_l_[PADL_(%s)]; %s %s; " \ | printf("\tchar %s_l_[PADL_(%s)]; %s %s; " \ | ||||
"char %s_r_[PADR_(%s)];\n", | "char %s_r_[PADR_(%s)];\n", | ||||
▲ Show 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | ' < $1 | awk " | ||||
} | } | ||||
{ | { | ||||
printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $3 | printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $3 | ||||
exit 1 | exit 1 | ||||
} | } | ||||
END { | END { | ||||
printf "\n#define AS(name) (sizeof(struct name) / sizeof(register_t))\n" > sysinc | printf "\n#define AS(name) (sizeof(struct name) / sizeof(register_t))\n" > sysinc | ||||
if (ncompat != 0 || ncompat4 != 0 || ncompat6 != 0 || ncompat7 != 0 || ncompat10 != 0) | if (ncompat != 0 || ncompat4 != 0 || ncompat6 != 0 || ncompat7 != 0 || ncompat10 != 0 || ncompat11 != 0) | ||||
printf "#include \"opt_compat.h\"\n\n" > syssw | printf "#include \"opt_compat.h\"\n\n" > syssw | ||||
if (ncompat != 0) { | if (ncompat != 0) { | ||||
printf "\n#ifdef %s\n", compat > sysinc | printf "\n#ifdef %s\n", compat > sysinc | ||||
printf "#define compat(n, name) n, (sy_call_t *)__CONCAT(o,name)\n" > sysinc | printf "#define compat(n, name) n, (sy_call_t *)__CONCAT(o,name)\n" > sysinc | ||||
printf "#else\n" > sysinc | printf "#else\n" > sysinc | ||||
printf "#define compat(n, name) 0, (sy_call_t *)nosys\n" > sysinc | printf "#define compat(n, name) 0, (sy_call_t *)nosys\n" > sysinc | ||||
printf "#endif\n" > sysinc | printf "#endif\n" > sysinc | ||||
Show All 24 Lines | END { | ||||
} | } | ||||
if (ncompat10 != 0) { | if (ncompat10 != 0) { | ||||
printf "\n#ifdef %s\n", compat10 > sysinc | printf "\n#ifdef %s\n", compat10 > sysinc | ||||
printf "#define compat10(n, name) n, (sy_call_t *)__CONCAT(freebsd10_,name)\n" > sysinc | printf "#define compat10(n, name) n, (sy_call_t *)__CONCAT(freebsd10_,name)\n" > sysinc | ||||
printf "#else\n" > sysinc | printf "#else\n" > sysinc | ||||
printf "#define compat10(n, name) 0, (sy_call_t *)nosys\n" > sysinc | printf "#define compat10(n, name) 0, (sy_call_t *)nosys\n" > sysinc | ||||
printf "#endif\n" > sysinc | printf "#endif\n" > sysinc | ||||
} | } | ||||
if (ncompat11 != 0) { | |||||
printf "\n#ifdef %s\n", compat11 > sysinc | |||||
printf "#define compat11(n, name) n, (sy_call_t *)__CONCAT(freebsd11_,name)\n" > sysinc | |||||
printf "#else\n" > sysinc | |||||
printf "#define compat11(n, name) 0, (sy_call_t *)nosys\n" > sysinc | |||||
printf "#endif\n" > sysinc | |||||
} | |||||
printf("\n#endif /* %s */\n\n", compat) > syscompatdcl | printf("\n#endif /* %s */\n\n", compat) > syscompatdcl | ||||
printf("\n#endif /* %s */\n\n", compat4) > syscompat4dcl | printf("\n#endif /* %s */\n\n", compat4) > syscompat4dcl | ||||
printf("\n#endif /* %s */\n\n", compat6) > syscompat6dcl | printf("\n#endif /* %s */\n\n", compat6) > syscompat6dcl | ||||
printf("\n#endif /* %s */\n\n", compat7) > syscompat7dcl | printf("\n#endif /* %s */\n\n", compat7) > syscompat7dcl | ||||
printf("\n#endif /* %s */\n\n", compat10) > syscompat10dcl | printf("\n#endif /* %s */\n\n", compat10) > syscompat10dcl | ||||
printf("\n#endif /* %s */\n\n", compat11) > syscompat11dcl | |||||
printf("\n#undef PAD_\n") > sysprotoend | printf("\n#undef PAD_\n") > sysprotoend | ||||
printf("#undef PADL_\n") > sysprotoend | printf("#undef PADL_\n") > sysprotoend | ||||
printf("#undef PADR_\n") > sysprotoend | printf("#undef PADR_\n") > sysprotoend | ||||
printf("\n#endif /* !%s */\n", sysproto_h) > sysprotoend | printf("\n#endif /* !%s */\n", sysproto_h) > sysprotoend | ||||
printf("\n") > sysmk | printf("\n") > sysmk | ||||
printf("};\n") > sysent | printf("};\n") > sysent | ||||
printf("};\n") > sysnames | printf("};\n") > sysnames | ||||
printf("#define\t%sMAXSYSCALL\t%d\n", syscallprefix, syscall) \ | printf("#define\t%sMAXSYSCALL\t%d\n", syscallprefix, syscall) \ | ||||
> syshdr | > syshdr | ||||
printf "\tdefault:\n\t\t*n_args = 0;\n\t\tbreak;\n\t};\n}\n" > systrace | printf "\tdefault:\n\t\t*n_args = 0;\n\t\tbreak;\n\t};\n}\n" > systrace | ||||
printf "\tdefault:\n\t\tbreak;\n\t};\n\tif (p != NULL)\n\t\tstrlcpy(desc, p, descsz);\n}\n" > systracetmp | printf "\tdefault:\n\t\tbreak;\n\t};\n\tif (p != NULL)\n\t\tstrlcpy(desc, p, descsz);\n}\n" > systracetmp | ||||
printf "\tdefault:\n\t\tbreak;\n\t};\n\tif (p != NULL)\n\t\tstrlcpy(desc, p, descsz);\n}\n" > systraceret | printf "\tdefault:\n\t\tbreak;\n\t};\n\tif (p != NULL)\n\t\tstrlcpy(desc, p, descsz);\n}\n" > systraceret | ||||
} ' | } ' | ||||
cat $sysinc $sysent >> $syssw | cat $sysinc $sysent >> $syssw | ||||
cat $sysarg $sysdcl \ | cat $sysarg $sysdcl \ | ||||
$syscompat $syscompatdcl \ | $syscompat $syscompatdcl \ | ||||
$syscompat4 $syscompat4dcl \ | $syscompat4 $syscompat4dcl \ | ||||
$syscompat6 $syscompat6dcl \ | $syscompat6 $syscompat6dcl \ | ||||
$syscompat7 $syscompat7dcl \ | $syscompat7 $syscompat7dcl \ | ||||
$syscompat10 $syscompat10dcl \ | $syscompat10 $syscompat10dcl \ | ||||
$syscompat11 $syscompat11dcl \ | |||||
$sysaue $sysprotoend > $sysproto | $sysaue $sysprotoend > $sysproto | ||||
cat $systracetmp >> $systrace | cat $systracetmp >> $systrace | ||||
cat $systraceret >> $systrace | cat $systraceret >> $systrace | ||||