| #!/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 nios2 32 "$output/linux-user/nios2/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" |