| #!/bin/sh |
| # |
| # Update syscall_nr.h files from linux headers asm-generic/unistd.h |
| # |
| # This code is licensed under the GPL version 2 or later. See |
| # the COPYING file in the top-level directory. |
| # |
| |
| linux="$1" |
| output="$2" |
| |
| TMP=$(mktemp -d) |
| |
| if [ "$linux" = "" ] ; then |
| echo "Needs path to linux source tree" 1>&2 |
| exit 1 |
| fi |
| |
| if [ "$output" = "" ] ; then |
| output="$PWD" |
| fi |
| |
| upper() |
| { |
| echo "$1" | tr "[:lower:]" "[:upper:]" | tr "[:punct:]" "_" |
| } |
| |
| qemu_arch() |
| { |
| case "$1" in |
| arm64) |
| echo "aarch64" |
| ;; |
| *) |
| echo "$1" |
| ;; |
| esac |
| } |
| |
| read_includes() |
| { |
| arch=$1 |
| bits=$2 |
| |
| cpp -P -nostdinc -fdirectives-only \ |
| -D_UAPI_ASM_$(upper ${arch})_BITSPERLONG_H \ |
| -D__ASM_$(upper ${arch})_BITSPERLONG_H \ |
| -D__BITS_PER_LONG=${bits} \ |
| -I${linux}/arch/${arch}/include/uapi/ \ |
| -I${linux}/include/uapi \ |
| -I${TMP} \ |
| "${linux}/arch/${arch}/include/uapi/asm/unistd.h" |
| } |
| |
| filter_defines() |
| { |
| grep -e "#define __NR_" -e "#define __NR3264" |
| } |
| |
| rename_defines() |
| { |
| sed "s/ __NR_/ TARGET_NR_/g;s/(__NR_/(TARGET_NR_/g" |
| } |
| |
| evaluate_values() |
| { |
| sed "s/#define TARGET_NR_/QEMU TARGET_NR_/" | \ |
| cpp -P -nostdinc | \ |
| sed "s/^QEMU /#define /" |
| } |
| |
| generate_syscall_nr() |
| { |
| arch=$1 |
| bits=$2 |
| file="$3" |
| guard="$(upper LINUX_USER_$(qemu_arch $arch)_$(basename "$file"))" |
| |
| (echo "/*" |
| echo " * This file contains the system call numbers." |
| echo " * Do not modify." |
| echo " * This file is generated by scripts/gensyscalls.sh" |
| echo " */" |
| echo "#ifndef ${guard}" |
| echo "#define ${guard}" |
| echo |
| read_includes $arch $bits | filter_defines | rename_defines | \ |
| evaluate_values | sort -n -k 3 |
| echo |
| echo "#endif /* ${guard} */") > "$file" |
| } |
| |
| mkdir "$TMP/asm" |
| > "$TMP/asm/bitsperlong.h" |
| |
| generate_syscall_nr arm64 64 "$output/linux-user/aarch64/syscall_nr.h" |
| generate_syscall_nr openrisc 32 "$output/linux-user/openrisc/syscall_nr.h" |
| |
| generate_syscall_nr riscv 32 "$output/linux-user/riscv/syscall32_nr.h" |
| generate_syscall_nr riscv 64 "$output/linux-user/riscv/syscall64_nr.h" |
| generate_syscall_nr hexagon 32 "$output/linux-user/hexagon/syscall_nr.h" |
| generate_syscall_nr loongarch 64 "$output/linux-user/loongarch64/syscall_nr.h" |
| rm -fr "$TMP" |