qemu with hax to log dma reads & writes jcs.org/2018/11/12/vfio

scripts: add a script to generate syscall_nr.h

This script is needed for targets based on asm-generic syscall numbers generation

Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20200316085620.309769-2-laurent@vivier.eu>
[lv: added file in MAINTAINERS]

+103
+1
MAINTAINERS
··· 2450 2450 F: scripts/qemu-binfmt-conf.sh 2451 2451 F: scripts/update-syscalltbl.sh 2452 2452 F: scripts/update-mips-syscall-args.sh 2453 + F: scripts/gensyscalls.sh 2453 2454 2454 2455 Tiny Code Generator (TCG) 2455 2456 -------------------------
+102
scripts/gensyscalls.sh
··· 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 + 9 + linux="$1" 10 + output="$2" 11 + 12 + TMP=$(mktemp -d) 13 + 14 + if [ "$linux" = "" ] ; then 15 + echo "Needs path to linux source tree" 1>&2 16 + exit 1 17 + fi 18 + 19 + if [ "$output" = "" ] ; then 20 + output="$PWD" 21 + fi 22 + 23 + upper() 24 + { 25 + echo "$1" | tr "[:lower:]" "[:upper:]" | tr "[:punct:]" "_" 26 + } 27 + 28 + qemu_arch() 29 + { 30 + case "$1" in 31 + arm64) 32 + echo "aarch64" 33 + ;; 34 + *) 35 + echo "$1" 36 + ;; 37 + esac 38 + } 39 + 40 + read_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__BITS_PER_LONG=${bits} \ 48 + -I${linux}/arch/${arch}/include/uapi/ \ 49 + -I${linux}/include/uapi \ 50 + -I${TMP} \ 51 + "${linux}/arch/${arch}/include/uapi/asm/unistd.h" 52 + } 53 + 54 + filter_defines() 55 + { 56 + grep -e "#define __NR_" -e "#define __NR3264" 57 + } 58 + 59 + rename_defines() 60 + { 61 + sed "s/ __NR_/ TARGET_NR_/g;s/(__NR_/(TARGET_NR_/g" 62 + } 63 + 64 + evaluate_values() 65 + { 66 + sed "s/#define TARGET_NR_/QEMU TARGET_NR_/" | \ 67 + cpp -P -nostdinc | \ 68 + sed "s/^QEMU /#define /" 69 + } 70 + 71 + generate_syscall_nr() 72 + { 73 + arch=$1 74 + bits=$2 75 + file="$3" 76 + guard="$(upper LINUX_USER_$(qemu_arch $arch)_$(basename "$file"))" 77 + 78 + (echo "/*" 79 + echo " * This file contains the system call numbers." 80 + echo " * Do not modify." 81 + echo " * This file is generated by scripts/gensyscalls.sh" 82 + echo " */" 83 + echo "#ifndef ${guard}" 84 + echo "#define ${guard}" 85 + echo 86 + read_includes $arch $bits | filter_defines | rename_defines | \ 87 + evaluate_values | sort -n -k 3 88 + echo 89 + echo "#endif /* ${guard} */" 90 + echo) > "$file" 91 + } 92 + 93 + mkdir "$TMP/asm" 94 + > "$TMP/asm/bitsperlong.h" 95 + 96 + generate_syscall_nr arm64 64 "$output/linux-user/aarch64/syscall_nr.h" 97 + generate_syscall_nr nios2 32 "$output/linux-user/nios2/syscall_nr.h" 98 + generate_syscall_nr openrisc 32 "$output/linux-user/openrisc/syscall_nr.h" 99 + 100 + generate_syscall_nr riscv 32 "$output/linux-user/riscv/syscall32_nr.h" 101 + generate_syscall_nr riscv 64 "$output/linux-user/riscv/syscall64_nr.h" 102 + rm -fr "$TMP"