Skip to content

Commit

Permalink
Refactor regen.sh script to generate syscalls
Browse files Browse the repository at this point in the history
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
acerv committed Nov 5, 2024
1 parent b8531de commit cbd5358
Show file tree
Hide file tree
Showing 10 changed files with 116 additions and 136 deletions.
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ else
AC_SUBST([WITH_REALTIME_TESTSUITE],["no"])
fi

AC_CONFIG_COMMANDS([syscalls.h], [cd ${ac_top_srcdir}/include/lapi/syscalls; ./regen.sh; cd - >/dev/null])
AC_CONFIG_COMMANDS([syscalls.h], [cd ${ac_top_srcdir}/include/lapi/syscalls; ./generate_syscalls.sh ../syscalls.h; cd - >/dev/null])

# custom functions
# NOTE: don't create custom functions for simple checks, put them into this file
Expand Down
File renamed without changes.
109 changes: 109 additions & 0 deletions include/lapi/syscalls/generate_syscalls.sh
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.
129 changes: 0 additions & 129 deletions include/lapi/syscalls/regen.sh

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
aarch64
arc
arm64
arm
hppa
i386
ia64
loongarch
mips_n32
mips_n64
mips_o32
loongarch64
mips64n32
mips64
mipso32
parisc
powerpc64
powerpc
s390x
Expand Down

0 comments on commit cbd5358

Please sign in to comment.