1382ae67aSLaurent Vivier#!/bin/sh 2382ae67aSLaurent Vivier# 3382ae67aSLaurent Vivier# Update syscall_nr.h files from linux headers asm-generic/unistd.h 4382ae67aSLaurent Vivier# 5382ae67aSLaurent Vivier# This code is licensed under the GPL version 2 or later. See 6382ae67aSLaurent Vivier# the COPYING file in the top-level directory. 7382ae67aSLaurent Vivier# 8382ae67aSLaurent Vivier 9382ae67aSLaurent Vivierlinux="$1" 10382ae67aSLaurent Vivieroutput="$2" 11382ae67aSLaurent Vivier 12382ae67aSLaurent VivierTMP=$(mktemp -d) 13382ae67aSLaurent Vivier 14382ae67aSLaurent Vivierif [ "$linux" = "" ] ; then 15382ae67aSLaurent Vivier echo "Needs path to linux source tree" 1>&2 16382ae67aSLaurent Vivier exit 1 17382ae67aSLaurent Vivierfi 18382ae67aSLaurent Vivier 19382ae67aSLaurent Vivierif [ "$output" = "" ] ; then 20382ae67aSLaurent Vivier output="$PWD" 21382ae67aSLaurent Vivierfi 22382ae67aSLaurent Vivier 23382ae67aSLaurent Vivierupper() 24382ae67aSLaurent Vivier{ 25382ae67aSLaurent Vivier echo "$1" | tr "[:lower:]" "[:upper:]" | tr "[:punct:]" "_" 26382ae67aSLaurent Vivier} 27382ae67aSLaurent Vivier 28382ae67aSLaurent Vivierqemu_arch() 29382ae67aSLaurent Vivier{ 30382ae67aSLaurent Vivier case "$1" in 31382ae67aSLaurent Vivier arm64) 32382ae67aSLaurent Vivier echo "aarch64" 33382ae67aSLaurent Vivier ;; 34382ae67aSLaurent Vivier *) 35382ae67aSLaurent Vivier echo "$1" 36382ae67aSLaurent Vivier ;; 37382ae67aSLaurent Vivier esac 38382ae67aSLaurent Vivier} 39382ae67aSLaurent Vivier 40382ae67aSLaurent Vivierread_includes() 41382ae67aSLaurent Vivier{ 42382ae67aSLaurent Vivier arch=$1 43382ae67aSLaurent Vivier bits=$2 44382ae67aSLaurent Vivier 45382ae67aSLaurent Vivier cpp -P -nostdinc -fdirectives-only \ 46382ae67aSLaurent Vivier -D_UAPI_ASM_$(upper ${arch})_BITSPERLONG_H \ 47*1f630196SSong Gao -D__ASM_$(upper ${arch})_BITSPERLONG_H \ 48382ae67aSLaurent Vivier -D__BITS_PER_LONG=${bits} \ 49382ae67aSLaurent Vivier -I${linux}/arch/${arch}/include/uapi/ \ 50382ae67aSLaurent Vivier -I${linux}/include/uapi \ 51382ae67aSLaurent Vivier -I${TMP} \ 52382ae67aSLaurent Vivier "${linux}/arch/${arch}/include/uapi/asm/unistd.h" 53382ae67aSLaurent Vivier} 54382ae67aSLaurent Vivier 55382ae67aSLaurent Vivierfilter_defines() 56382ae67aSLaurent Vivier{ 57382ae67aSLaurent Vivier grep -e "#define __NR_" -e "#define __NR3264" 58382ae67aSLaurent Vivier} 59382ae67aSLaurent Vivier 60382ae67aSLaurent Vivierrename_defines() 61382ae67aSLaurent Vivier{ 62382ae67aSLaurent Vivier sed "s/ __NR_/ TARGET_NR_/g;s/(__NR_/(TARGET_NR_/g" 63382ae67aSLaurent Vivier} 64382ae67aSLaurent Vivier 65382ae67aSLaurent Vivierevaluate_values() 66382ae67aSLaurent Vivier{ 67382ae67aSLaurent Vivier sed "s/#define TARGET_NR_/QEMU TARGET_NR_/" | \ 68382ae67aSLaurent Vivier cpp -P -nostdinc | \ 69382ae67aSLaurent Vivier sed "s/^QEMU /#define /" 70382ae67aSLaurent Vivier} 71382ae67aSLaurent Vivier 72382ae67aSLaurent Viviergenerate_syscall_nr() 73382ae67aSLaurent Vivier{ 74382ae67aSLaurent Vivier arch=$1 75382ae67aSLaurent Vivier bits=$2 76382ae67aSLaurent Vivier file="$3" 77382ae67aSLaurent Vivier guard="$(upper LINUX_USER_$(qemu_arch $arch)_$(basename "$file"))" 78382ae67aSLaurent Vivier 79382ae67aSLaurent Vivier (echo "/*" 80382ae67aSLaurent Vivier echo " * This file contains the system call numbers." 81382ae67aSLaurent Vivier echo " * Do not modify." 82382ae67aSLaurent Vivier echo " * This file is generated by scripts/gensyscalls.sh" 83382ae67aSLaurent Vivier echo " */" 84382ae67aSLaurent Vivier echo "#ifndef ${guard}" 85382ae67aSLaurent Vivier echo "#define ${guard}" 86382ae67aSLaurent Vivier echo 87382ae67aSLaurent Vivier read_includes $arch $bits | filter_defines | rename_defines | \ 88382ae67aSLaurent Vivier evaluate_values | sort -n -k 3 89382ae67aSLaurent Vivier echo 9029fe5029SLaurent Vivier echo "#endif /* ${guard} */") > "$file" 91382ae67aSLaurent Vivier} 92382ae67aSLaurent Vivier 93382ae67aSLaurent Viviermkdir "$TMP/asm" 94382ae67aSLaurent Vivier> "$TMP/asm/bitsperlong.h" 95382ae67aSLaurent Vivier 96382ae67aSLaurent Viviergenerate_syscall_nr arm64 64 "$output/linux-user/aarch64/syscall_nr.h" 97382ae67aSLaurent Viviergenerate_syscall_nr openrisc 32 "$output/linux-user/openrisc/syscall_nr.h" 98382ae67aSLaurent Vivier 99382ae67aSLaurent Viviergenerate_syscall_nr riscv 32 "$output/linux-user/riscv/syscall32_nr.h" 100382ae67aSLaurent Viviergenerate_syscall_nr riscv 64 "$output/linux-user/riscv/syscall64_nr.h" 101d2a56bd2STaylor Simpsongenerate_syscall_nr hexagon 32 "$output/linux-user/hexagon/syscall_nr.h" 102*1f630196SSong Gaogenerate_syscall_nr loongarch 64 "$output/linux-user/loongarch64/syscall_nr.h" 103382ae67aSLaurent Vivierrm -fr "$TMP" 104