svn commit: r328598 - head/sys/kern

Ed Maste emaste at FreeBSD.org
Tue Jan 30 18:29:38 UTC 2018


Author: emaste
Date: Tue Jan 30 18:29:38 2018
New Revision: 328598
URL: https://svnweb.freebsd.org/changeset/base/328598

Log:
  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

Modified:
  head/sys/kern/makesyscalls.sh

Modified: head/sys/kern/makesyscalls.sh
==============================================================================
--- head/sys/kern/makesyscalls.sh	Tue Jan 30 17:20:28 2018	(r328597)
+++ head/sys/kern/makesyscalls.sh	Tue Jan 30 18:29:38 2018	(r328598)
@@ -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
 	}
 	{


More information about the svn-src-head mailing list