summaryrefslogtreecommitdiffstats
path: root/arch/x86/entry/syscalls/syscalltbl.sh
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/entry/syscalls/syscalltbl.sh')
-rw-r--r--arch/x86/entry/syscalls/syscalltbl.sh46
1 files changed, 46 insertions, 0 deletions
diff --git a/arch/x86/entry/syscalls/syscalltbl.sh b/arch/x86/entry/syscalls/syscalltbl.sh
new file mode 100644
index 000000000..929bde120
--- /dev/null
+++ b/arch/x86/entry/syscalls/syscalltbl.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+
+in="$1"
+out="$2"
+
+syscall_macro() {
+ local abi="$1"
+ local nr="$2"
+ local entry="$3"
+
+ echo "__SYSCALL_${abi}($nr, $entry)"
+}
+
+emit() {
+ local abi="$1"
+ local nr="$2"
+ local entry="$3"
+ local compat="$4"
+
+ if [ "$abi" != "I386" -a -n "$compat" ]; then
+ echo "a compat entry ($abi: $compat) for a 64-bit syscall makes no sense" >&2
+ exit 1
+ fi
+
+ if [ -z "$compat" ]; then
+ if [ -n "$entry" ]; then
+ syscall_macro "$abi" "$nr" "$entry"
+ fi
+ else
+ echo "#ifdef CONFIG_X86_32"
+ if [ -n "$entry" ]; then
+ syscall_macro "$abi" "$nr" "$entry"
+ fi
+ echo "#else"
+ syscall_macro "$abi" "$nr" "$compat"
+ echo "#endif"
+ fi
+}
+
+grep '^[0-9]' "$in" | sort -n | (
+ while read nr abi name entry compat; do
+ abi=`echo "$abi" | tr '[a-z]' '[A-Z]'`
+ emit "$abi" "$nr" "$entry" "$compat"
+ done
+) > "$out"