103 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			103 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
|   | #!/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__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} */" | ||
|  |     echo) > "$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" | ||
|  | rm -fr "$TMP" |