blob: 751d1f992630bcff0665526d4137de607628fcf7 [file] [log] [blame]
H. Peter Anvind1817642011-11-11 15:55:49 -08001#!/bin/sh
2
3in="$1"
4out="$2"
5
Andy Lutomirskicfcbadb2016-01-28 15:11:24 -08006syscall_macro() {
7 abi="$1"
8 nr="$2"
9 entry="$3"
10
11 # Entry can be either just a function name or "function/qualifier"
12 real_entry="${entry%%/*}"
sylvain.bertrand@gmail.com2df0e782016-09-29 16:22:34 +000013 if [ "$entry" = "$real_entry" ]; then
14 qualifier=
15 else
16 qualifier=${entry#*/}
17 fi
Andy Lutomirskicfcbadb2016-01-28 15:11:24 -080018
19 echo "__SYSCALL_${abi}($nr, $real_entry, $qualifier)"
20}
21
Andy Lutomirskifba32472016-01-28 15:11:21 -080022emit() {
23 abi="$1"
24 nr="$2"
25 entry="$3"
26 compat="$4"
Andy Lutomirski3e656542016-01-28 15:11:23 -080027
sylvain.bertrand@gmail.com2df0e782016-09-29 16:22:34 +000028 if [ "$abi" = "64" -a -n "$compat" ]; then
Andy Lutomirski3e656542016-01-28 15:11:23 -080029 echo "a compat entry for a 64-bit syscall makes no sense" >&2
30 exit 1
31 fi
32
33 if [ -z "$compat" ]; then
34 if [ -n "$entry" ]; then
Andy Lutomirskicfcbadb2016-01-28 15:11:24 -080035 syscall_macro "$abi" "$nr" "$entry"
Andy Lutomirski3e656542016-01-28 15:11:23 -080036 fi
37 else
38 echo "#ifdef CONFIG_X86_32"
39 if [ -n "$entry" ]; then
Andy Lutomirskicfcbadb2016-01-28 15:11:24 -080040 syscall_macro "$abi" "$nr" "$entry"
Andy Lutomirski3e656542016-01-28 15:11:23 -080041 fi
42 echo "#else"
Andy Lutomirskicfcbadb2016-01-28 15:11:24 -080043 syscall_macro "$abi" "$nr" "$compat"
Andy Lutomirski3e656542016-01-28 15:11:23 -080044 echo "#endif"
Andy Lutomirskifba32472016-01-28 15:11:21 -080045 fi
46}
47
H. Peter Anvind1817642011-11-11 15:55:49 -080048grep '^[0-9]' "$in" | sort -n | (
49 while read nr abi name entry compat; do
50 abi=`echo "$abi" | tr '[a-z]' '[A-Z]'`
sylvain.bertrand@gmail.com2df0e782016-09-29 16:22:34 +000051 if [ "$abi" = "COMMON" -o "$abi" = "64" ]; then
Andy Lutomirski32324ce2016-01-28 15:11:22 -080052 # COMMON is the same as 64, except that we don't expect X32
53 # programs to use it. Our expectation has nothing to do with
54 # any generated code, so treat them the same.
55 emit 64 "$nr" "$entry" "$compat"
sylvain.bertrand@gmail.com2df0e782016-09-29 16:22:34 +000056 elif [ "$abi" = "X32" ]; then
Andy Lutomirski32324ce2016-01-28 15:11:22 -080057 # X32 is equivalent to 64 on an X32-compatible kernel.
58 echo "#ifdef CONFIG_X86_X32_ABI"
59 emit 64 "$nr" "$entry" "$compat"
60 echo "#endif"
sylvain.bertrand@gmail.com2df0e782016-09-29 16:22:34 +000061 elif [ "$abi" = "I386" ]; then
Andy Lutomirski32324ce2016-01-28 15:11:22 -080062 emit "$abi" "$nr" "$entry" "$compat"
63 else
64 echo "Unknown abi $abi" >&2
65 exit 1
66 fi
H. Peter Anvind1817642011-11-11 15:55:49 -080067 done
68) > "$out"