1#!/bin/sh 2# 3# Update syscall_nr.h files from linux headers asm-generic/unistd.h 4# 5# This code is licensed under the GPL version 2 or later. See 6# the COPYING file in the top-level directory. 7# 8 9linux="$1" 10output="$2" 11 12TMP=$(mktemp -d) 13 14if [ "$linux" = "" ] ; then 15 echo "Needs path to linux source tree" 1>&2 16 exit 1 17fi 18 19if [ "$output" = "" ] ; then 20 output="$PWD" 21fi 22 23upper() 24{ 25 echo "$1" | tr "[:lower:]" "[:upper:]" | tr "[:punct:]" "_" 26} 27 28qemu_arch() 29{ 30 case "$1" in 31 arm64) 32 echo "aarch64" 33 ;; 34 *) 35 echo "$1" 36 ;; 37 esac 38} 39 40read_includes() 41{ 42 arch=$1 43 bits=$2 44 45 cpp -P -nostdinc -fdirectives-only \ 46 -D_UAPI_ASM_$(upper ${arch})_BITSPERLONG_H \ 47 -D__ASM_$(upper ${arch})_BITSPERLONG_H \ 48 -D__BITS_PER_LONG=${bits} \ 49 -I${linux}/arch/${arch}/include/uapi/ \ 50 -I${linux}/include/uapi \ 51 -I${TMP} \ 52 "${linux}/arch/${arch}/include/uapi/asm/unistd.h" 53} 54 55filter_defines() 56{ 57 grep -e "#define __NR_" -e "#define __NR3264" 58} 59 60rename_defines() 61{ 62 sed "s/ __NR_/ TARGET_NR_/g;s/(__NR_/(TARGET_NR_/g" 63} 64 65evaluate_values() 66{ 67 sed "s/#define TARGET_NR_/QEMU TARGET_NR_/" | \ 68 cpp -P -nostdinc | \ 69 sed "s/^QEMU /#define /" 70} 71 72generate_syscall_nr() 73{ 74 arch=$1 75 bits=$2 76 file="$3" 77 guard="$(upper LINUX_USER_$(qemu_arch $arch)_$(basename "$file"))" 78 79 (echo "/*" 80 echo " * This file contains the system call numbers." 81 echo " * Do not modify." 82 echo " * This file is generated by scripts/gensyscalls.sh" 83 echo " */" 84 echo "#ifndef ${guard}" 85 echo "#define ${guard}" 86 echo 87 read_includes $arch $bits | filter_defines | rename_defines | \ 88 evaluate_values | sort -n -k 3 89 echo 90 echo "#endif /* ${guard} */") > "$file" 91} 92 93mkdir "$TMP/asm" 94> "$TMP/asm/bitsperlong.h" 95 96generate_syscall_nr arm64 64 "$output/linux-user/aarch64/syscall_nr.h" 97generate_syscall_nr nios2 32 "$output/linux-user/nios2/syscall_nr.h" 98generate_syscall_nr openrisc 32 "$output/linux-user/openrisc/syscall_nr.h" 99 100generate_syscall_nr riscv 32 "$output/linux-user/riscv/syscall32_nr.h" 101generate_syscall_nr riscv 64 "$output/linux-user/riscv/syscall64_nr.h" 102generate_syscall_nr hexagon 32 "$output/linux-user/hexagon/syscall_nr.h" 103generate_syscall_nr loongarch 64 "$output/linux-user/loongarch64/syscall_nr.h" 104rm -fr "$TMP" 105