mirror of
https://github.com/opnsense/src.git
synced 2026-06-09 08:43:19 -04:00
Generate another function for the DTrace syscall provider to specify
the syscall argument types. This code is only compiled into the systrace kernel modul and has no effect otherwise.
This commit is contained in:
parent
d97cdd3349
commit
e994ea8e55
1 changed files with 14 additions and 2 deletions
|
|
@ -34,10 +34,11 @@ sysent="sysent.switch.$$"
|
|||
sysinc="sysinc.switch.$$"
|
||||
sysarg="sysarg.switch.$$"
|
||||
sysprotoend="sysprotoend.$$"
|
||||
systracetmp="systrace.$$"
|
||||
|
||||
trap "rm $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $sysent $sysinc $sysarg $sysprotoend" 0
|
||||
trap "rm $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $sysent $sysinc $sysarg $sysprotoend $systracetmp" 0
|
||||
|
||||
touch $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $sysent $sysinc $sysarg $sysprotoend
|
||||
touch $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $sysent $sysinc $sysarg $sysprotoend $systracetmp
|
||||
|
||||
case $# in
|
||||
0) echo "usage: $0 input-file <config-file>" 1>&2
|
||||
|
|
@ -82,6 +83,7 @@ s/\$//g
|
|||
syshdr = \"$syshdr\"
|
||||
sysmk = \"$sysmk\"
|
||||
systrace = \"$systrace\"
|
||||
systracetmp = \"$systracetmp\"
|
||||
compat = \"$compat\"
|
||||
compat4 = \"$compat4\"
|
||||
compat6 = \"$compat6\"
|
||||
|
|
@ -160,6 +162,9 @@ s/\$//g
|
|||
printf "\tint64_t *iarg = (int64_t *) uarg;\n" > systrace
|
||||
printf "\tswitch (sysnum) {\n" > systrace
|
||||
|
||||
printf "static void\nsystrace_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)\n{\n\tconst char *p = NULL;\n" > systracetmp
|
||||
printf "\tswitch (sysnum) {\n" > systracetmp
|
||||
|
||||
next
|
||||
}
|
||||
NF == 0 || $1 ~ /^;/ {
|
||||
|
|
@ -317,9 +322,12 @@ s/\$//g
|
|||
|| $3 == "NOIMPL" || $3 == "NOSTD" {
|
||||
parseline()
|
||||
printf("\t/* %s */\n\tcase %d: {\n", funcname, syscall) > systrace
|
||||
printf("\t/* %s */\n\tcase %d:\n", funcname, syscall) > systracetmp
|
||||
if (argc > 0) {
|
||||
printf("\t\tswitch(ndx) {\n") > systracetmp
|
||||
printf("\t\tstruct %s *p = params;\n", argalias) > systrace
|
||||
for (i = 1; i <= argc; i++) {
|
||||
printf("\t\tcase %d:\n\t\t\tp = \"%s\";\n\t\t\tbreak;\n", i - 1, argtype[i]) > systracetmp
|
||||
if (index(argtype[i], "*") > 0 || argtype[i] == "caddr_t")
|
||||
printf("\t\tuarg[%d] = (intptr_t) p->%s; /* %s */\n", \
|
||||
i - 1, \
|
||||
|
|
@ -333,8 +341,10 @@ s/\$//g
|
|||
i - 1, \
|
||||
argname[i], argtype[i]) > systrace
|
||||
}
|
||||
printf("\t\tdefault:\n\t\t\tbreak;\n\t\t};\n") > systracetmp
|
||||
}
|
||||
printf("\t\t*n_args = %d;\n\t\tbreak;\n\t}\n", argc) > systrace
|
||||
printf("\t\tbreak;\n") > systracetmp
|
||||
if ((!nosys || funcname != "nosys") && \
|
||||
(funcname != "lkmnosys") && (funcname != "lkmressys")) {
|
||||
if (argc != 0 && $3 != "NOARGS" && $3 != "NOPROTO") {
|
||||
|
|
@ -529,6 +539,7 @@ s/\$//g
|
|||
printf("#define\t%sMAXSYSCALL\t%d\n", syscallprefix, syscall) \
|
||||
> syshdr
|
||||
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
|
||||
} '
|
||||
|
||||
cat $sysinc $sysent >> $syssw
|
||||
|
|
@ -537,4 +548,5 @@ cat $sysarg $sysdcl \
|
|||
$syscompat4 $syscompat4dcl \
|
||||
$syscompat6 $syscompat6dcl \
|
||||
$sysaue $sysprotoend > $sysproto
|
||||
cat $systracetmp >> $systrace
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue