makesyscalls: permit a range of syscall numbers for UNIMPL
Some ABIs have large gaps in syscall numbers. Allow gaps to be filled as ranges of UNIMPL, with an entry like: 248-1023 AUE_NULL UNIMPL unimplemented Reviewed by: jhb, gnn Sponsored by: Turing Robotic Industries Inc. Differential Revision: https://reviews.freebsd.org/D14122
This commit is contained in:
parent
da20a161b2
commit
187eb493d5
@ -254,13 +254,6 @@ sed -e '
|
||||
print > systraceret
|
||||
next
|
||||
}
|
||||
syscall != $1 {
|
||||
printf "%s: line %d: syscall number out of sync at %d\n",
|
||||
infile, NR, syscall
|
||||
printf "line is:\n"
|
||||
print
|
||||
exit 1
|
||||
}
|
||||
# Returns true if the type "name" is the first flag in the type field
|
||||
function type(name, flags, n) {
|
||||
n = split($3, flags, /\|/)
|
||||
@ -274,6 +267,29 @@ sed -e '
|
||||
return 1
|
||||
return 0
|
||||
}
|
||||
{
|
||||
n = split($1, syscall_range, /-/)
|
||||
if (n == 1) {
|
||||
syscall_range[2] = syscall_range[1]
|
||||
} else if (n == 2) {
|
||||
if (!type("UNIMPL")) {
|
||||
printf "%s: line %d: range permitted only with UNIMPL\n",
|
||||
infile, NR
|
||||
exit 1
|
||||
}
|
||||
} else {
|
||||
printf "%s: line %d: invalid syscall number or range %s\n",
|
||||
infile, NR, $1
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
syscall != syscall_range[1] {
|
||||
printf "%s: line %d: syscall number out of sync at %d\n",
|
||||
infile, NR, syscall
|
||||
printf "line is:\n"
|
||||
print
|
||||
exit 1
|
||||
}
|
||||
function align_sysent_comment(column) {
|
||||
printf("\t") > sysent
|
||||
column = column + 8 - column % 8
|
||||
@ -614,11 +630,13 @@ sed -e '
|
||||
next
|
||||
}
|
||||
type("UNIMPL") {
|
||||
printf("\t{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT },\t\t\t/* %d = %s */\n",
|
||||
syscall, comment) > sysent
|
||||
printf("\t\"#%d\",\t\t\t/* %d = %s */\n",
|
||||
syscall, syscall, comment) > sysnames
|
||||
syscall++
|
||||
while (syscall <= syscall_range[2]) {
|
||||
printf("\t{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT },\t\t\t/* %d = %s */\n",
|
||||
syscall, comment) > sysent
|
||||
printf("\t\"#%d\",\t\t\t/* %d = %s */\n",
|
||||
syscall, syscall, comment) > sysnames
|
||||
syscall++
|
||||
}
|
||||
next
|
||||
}
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user