[PATCH v8 09/12] syscalls: Add an option for offsetting the common table

From: André Almeida

Date: Fri Sep 18 2026 - 20:40:35 EST


To better support architectures that doesn't share the same syscall
numbers, but have them in the same sequence, add an new option to offset
the common syscall table numbers by a value. This make it possible to reuse
the common syscall table for alpha.

Signed-off-by: André Almeida <andrealmeid@xxxxxxxxxx>
---
Changes from v4:
- I was reusing the logic from --offset to apply the --common-offset, but
the logic is different: --offset does a string concat, and --common-offset
does a addition to the number
---
scripts/syscallhdr.sh | 26 ++++++++++++++++++--------
scripts/syscalltbl.sh | 20 +++++++++++++++-----
2 files changed, 33 insertions(+), 13 deletions(-)

diff --git a/scripts/syscallhdr.sh b/scripts/syscallhdr.sh
index 8f7dfcf19a4c..cf6bba3019b1 100755
--- a/scripts/syscallhdr.sh
+++ b/scripts/syscallhdr.sh
@@ -16,17 +16,18 @@
set -e

usage() {
- echo >&2 "usage: $0 [--abis ABIS] [--emit-nr] [--offset OFFSET] [--prefix PREFIX] [--common-tbl PATH] INFILE OUTFILE" >&2
+ echo >&2 "usage: $0 [--abis ABIS] [--emit-nr] [--offset OFFSET] [--prefix PREFIX] [--common-tbl PATH] [--common-offset NR] INFILE OUTFILE" >&2
echo >&2
echo >&2 " INFILE input syscall table"
echo >&2 " OUTFILE output header file"
echo >&2
echo >&2 "options:"
- echo >&2 " --abis ABIS ABI(s) to handle (By default, all lines are handled)"
- echo >&2 " --emit-nr Emit the macro of the number of syscalls (__NR_syscalls)"
- echo >&2 " --offset OFFSET The offset of syscall numbers"
- echo >&2 " --prefix PREFIX The prefix to the macro like __NR_<PREFIX><NAME>"
- echo >&2 " --common-tbl PATH Use the common number table"
+ echo >&2 " --abis ABIS ABI(s) to handle (By default, all lines are handled)"
+ echo >&2 " --emit-nr Emit the macro of the number of syscalls (__NR_syscalls)"
+ echo >&2 " --offset OFFSET The offset of syscall numbers"
+ echo >&2 " --prefix PREFIX The prefix to the macro like __NR_<PREFIX><NAME>"
+ echo >&2 " --common-tbl PATH Use the common number table"
+ echo >&2 " --common-offset NR Add an offset for the numbers of the common table"
exit 1
}

@@ -34,6 +35,7 @@ usage() {
abis=
emit_nr=
offset=
+common_offset=
prefix=
common_tbl=
common_tbl_path=
@@ -57,6 +59,9 @@ do
common_tbl=1
common_tbl_path=$2
shift 2;;
+ --common-offset)
+ common_offset=$2
+ shift 2;;
-*)
echo "$1: unknown option" >&2
usage;;
@@ -98,14 +103,19 @@ emit_end_guard() {
}

max=0
-# gen_hdr(infile)
+# gen_hdr(infile, offset_nr)
gen_hdr() {
input=$1
tmpfile=$(mktemp)
+ offset_nr=$2

grep -E "^[0-9A-Fa-fXx]+[[:space:]]+$abis" "$input" > $tmpfile
while read nr abi name native compat; do

+ if [ -n "$offset_nr" ]; then
+ nr=$((nr + offset_nr))
+ fi
+
max=$nr

if [ -n "$offset" ]; then
@@ -123,7 +133,7 @@ emit_start_guard > $outfile
gen_hdr $infile >> $outfile

if [ -n "$common_tbl" ]; then
- gen_hdr $common_tbl_path >> "$outfile"
+ gen_hdr $common_tbl_path $common_offset >> "$outfile"
fi

if [ -n "$emit_nr" ]; then
diff --git a/scripts/syscalltbl.sh b/scripts/syscalltbl.sh
index 70da0039ab22..1e9cac32c02d 100755
--- a/scripts/syscalltbl.sh
+++ b/scripts/syscalltbl.sh
@@ -16,14 +16,15 @@
set -e

usage() {
- echo >&2 "usage: $0 [--abis ABIS] [--common-tbl PATH] INFILE OUTFILE" >&2
+ echo >&2 "usage: $0 [--abis ABIS] [--common-tbl PATH] [--common-offset NR] INFILE OUTFILE" >&2
echo >&2
echo >&2 " INFILE input syscall table"
echo >&2 " OUTFILE output header file"
echo >&2
echo >&2 "options:"
- echo >&2 " --abis ABIS ABI(s) to handle (By default, all lines are handled)"
- echo >&2 " --common-tbl PATH Use the common syscall number table"
+ echo >&2 " --abis ABIS ABI(s) to handle (By default, all lines are handled)"
+ echo >&2 " --common-tbl PATH Use the common syscall number table"
+ echo >&2 " --common-offset OFFSET Add an offset for the numbers of the common table"
exit 1
}

@@ -31,6 +32,7 @@ usage() {
abis=
common_tbl=
common_tbl_path=
+common_offset=

while [ $# -gt 0 ]
do
@@ -42,6 +44,9 @@ do
common_tbl=1
common_tbl_path=$2
shift 2;;
+ --common-offset)
+ common_offset=$2
+ shift 2;;
-*)
echo "$1: unknown option" >&2
usage;;
@@ -59,14 +64,19 @@ outfile="$2"

nxt=0

-# gen_tbl(infile)
+# gen_tbl(infile, offset_nr)
gen_tbl() {
input=$1
tmpfile=$(mktemp)
+ offset_nr=$2

grep -E "^[0-9A-Fa-fXx]+[[:space:]]+$abis" "$input" > $tmpfile
while read nr abi name native compat noreturn; do

+ if [ -n "$offset_nr" ]; then
+ nr=$((nr + offset_nr))
+ fi
+
if [ $nxt -gt $nr ]; then
echo "error: $input: syscall table is not sorted or duplicates the same syscall number" >&2
exit 1
@@ -108,5 +118,5 @@ gen_tbl() {
gen_tbl $infile > "$outfile"

if [ -n "$common_tbl" ]; then
- gen_tbl $common_tbl_path >> "$outfile"
+ gen_tbl $common_tbl_path $common_offset >> "$outfile"
fi

--
2.55.0