xref: /qemu/scripts/gensyscalls.sh (revision 6c301485)
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