forked from linux-test-project/ltp
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactor regen.sh script to generate syscalls
Rename regen.sh into a more meaningful generate_syscalls.sh name, rename order into a more meaningful supported-syscalls.txt name and rewrite part of the regen.sh script code in order to execute it from anywhere in the filesystem, without need to be in its own folder. The new code is also more clear and concise, using native sh features which are simplifying the code. Architecture *.in files have been renamed to follow the new supported-syscalls.txt naming convention. Reviewed-by: Li Wang <[email protected]> Reviewed-by: Petr Vorel <[email protected]> Reviewed-by: Cyril Hrubis <[email protected]> Signed-off-by: Andrea Cervesato <[email protected]>
- Loading branch information
Showing
10 changed files
with
116 additions
and
136 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
#!/bin/sh -eu | ||
# SPDX-License-Identifier: GPL-2.0-or-later | ||
# | ||
# Generate the syscalls.h file, merging all architectures syscalls input file | ||
# which are in the current folder and defined inside supported-arch.txt file. | ||
|
||
SYSCALLS_FILE="$1" | ||
|
||
if [ -z "${SYSCALLS_FILE}" ]; then | ||
echo "Please provide the syscalls.h directory:" | ||
echo "" | ||
echo "$0 path/of/syscalls.h" | ||
echo "" | ||
exit 1 | ||
fi | ||
|
||
SCRIPT_DIR="$(realpath $(dirname "$0"))" | ||
SUPPORTED_ARCH="${SCRIPT_DIR}/supported-arch.txt" | ||
|
||
echo '// SPDX-License-Identifier: GPL-2.0-or-later | ||
/************************************************ | ||
* GENERATED FILE: DO NOT EDIT/PATCH THIS FILE * | ||
* change your arch specific .in file instead * | ||
************************************************/ | ||
/* | ||
* Here we stick all the ugly *fallback* logic for linux | ||
* system call numbers (those __NR_ thingies). | ||
*/ | ||
#ifndef LAPI_SYSCALLS_H__ | ||
#define LAPI_SYSCALLS_H__ | ||
#include <errno.h> | ||
#include <sys/syscall.h> | ||
#include <asm/unistd.h> | ||
#ifdef TST_TEST_H__ | ||
#define TST_SYSCALL_BRK__(NR, SNR) ({ \ | ||
tst_brk(TCONF, \ | ||
"syscall(%d) " SNR " not supported on your arch", NR); \ | ||
}) | ||
#else | ||
inline static void dummy_cleanup(void) {} | ||
#define TST_SYSCALL_BRK__(NR, SNR) ({ \ | ||
tst_brkm(TCONF, dummy_cleanup, \ | ||
"syscall(%d) " SNR " not supported on your arch", NR); \ | ||
}) | ||
#endif | ||
#define tst_syscall(NR, ...) ({ \ | ||
intptr_t tst_ret; \ | ||
if (NR == __LTP__NR_INVALID_SYSCALL) { \ | ||
errno = ENOSYS; \ | ||
tst_ret = -1; \ | ||
} else { \ | ||
tst_ret = syscall(NR, ##__VA_ARGS__); \ | ||
} \ | ||
if (tst_ret == -1 && errno == ENOSYS) { \ | ||
TST_SYSCALL_BRK__(NR, #NR); \ | ||
} \ | ||
tst_ret; \ | ||
}) | ||
#define __LTP__NR_INVALID_SYSCALL -1' >${SYSCALLS_FILE} | ||
|
||
while IFS= read -r arch; do | ||
( | ||
echo | ||
case ${arch} in | ||
sparc64) echo "#if defined(__sparc__) && defined(__arch64__)" ;; | ||
sparc) echo "#if defined(__sparc__) && !defined(__arch64__)" ;; | ||
s390) echo "#if defined(__s390__) && !defined(__s390x__)" ;; | ||
mips64n32) echo "#if defined(__mips__) && defined(_ABIN32)" ;; | ||
mips64) echo "#if defined(__mips__) && defined(_ABI64)" ;; | ||
mipso32) echo "#if defined(__mips__) && defined(_ABIO32) && _MIPS_SZLONG == 32" ;; | ||
parisc) echo "#ifdef __hppa__" ;; | ||
loongarch64) echo "#ifdef __loongarch__" ;; | ||
arm64) echo "#ifdef __aarch64__" ;; | ||
*) echo "#ifdef __${arch}__" ;; | ||
esac | ||
|
||
while read -r line; do | ||
set -- ${line} | ||
syscall_nr="__NR_$1" | ||
shift | ||
|
||
echo "# ifndef ${syscall_nr}" | ||
echo "# define ${syscall_nr} $*" | ||
echo "# endif" | ||
done <"${SCRIPT_DIR}/${arch}.in" | ||
echo "#endif" | ||
echo | ||
) >>${SYSCALLS_FILE} | ||
done <${SUPPORTED_ARCH} | ||
|
||
( | ||
echo | ||
echo "/* Common stubs */" | ||
for num in $(awk '{print $1}' "${SCRIPT_DIR}/"*.in | sort -u); do | ||
syscall_nr="__NR_${num}" | ||
|
||
echo "# ifndef ${syscall_nr}" | ||
echo "# define ${syscall_nr} __LTP__NR_INVALID_SYSCALL" | ||
echo "# endif" | ||
done | ||
echo "#endif" | ||
) >>${SYSCALLS_FILE} |
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file was deleted.
Oops, something went wrong.
12 changes: 6 additions & 6 deletions
12
include/lapi/syscalls/order → include/lapi/syscalls/supported-arch.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters