* [LTP] [PATCH v6 0/3] Automatically generate syscalls.h
@ 2024-10-31 7:27 Andrea Cervesato
2024-10-31 7:27 ` [LTP] [PATCH v6 1/3] Refactor regen.sh script to generate syscalls Andrea Cervesato
` (3 more replies)
0 siblings, 4 replies; 16+ messages in thread
From: Andrea Cervesato @ 2024-10-31 7:27 UTC (permalink / raw)
To: ltp
The problem we have at the moment is that all syscalls input files must
be changed by hand each time we need to test a new syscall. The idea is
to simplify this process, providing a script that is able to read from
kernel sources and to generate all syscalls files we need.
This patch set adds a new command inside the syscalls folder and
it refactors the previous regen.sh code.
The new way we have to generate the syscalls.h file is the following:
include/lapi/syscalls/generate_arch.sh path/to/kernel/source
include/lapi/syscalls/generate_syscalls.sh path/to/syscalls.h
Scripts are independent and they can be run separately.
generate_syscalls.sh is the equivalent of regen.sh, but its code has
been cleaned up.
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
Changes in v6:
- aesthetic changes in the syscall generator
- fix fallback definitions in the syscalls.h file generator
- Link to v5: https://lore.kernel.org/r/20241030-generate_syscalls-v5-0-eed6a87dc787@suse.com
Changes in v5:
- license SPDX inside scripts files
- quote shell variables inside scripts
- some generic code cleanup
- Link to v4: https://lore.kernel.org/r/20241009-generate_syscalls-v4-0-5328a785bbad@suse.com
Changes in v4:
- remove blacklist file
- update syscalls files
- Link to v3: https://lore.kernel.org/r/20240930-generate_syscalls-v3-0-e56ede4bc7f5@suse.com
Changes in v3:
- fix generate_arch.sh to work properly for all architectures
- rename some arch .in files and handle renaming inside
generate_syscalls.sh using the right gcc directives
- Link to v2: https://lore.kernel.org/r/20240927-generate_syscalls-v2-0-108f5f2ad318@suse.com
Changes in v2:
- refactor regen.sh
- split syscalls.h and syscalls .in files creation
- updated syscalls .in files
- Link to v1: https://lore.kernel.org/r/20240924-generate_syscalls-v1-0-941507a9cdac@suse.com
---
Andrea Cervesato (3):
Refactor regen.sh script to generate syscalls
Add script to generate arch(s) dependant syscalls
Delete obsolete strip_syscall.awk file
configure.ac | 2 +-
include/lapi/syscalls/{aarch64.in => arm64.in} | 0
include/lapi/syscalls/generate_arch.sh | 211 +++++++++++++++++++++
include/lapi/syscalls/generate_syscalls.sh | 111 +++++++++++
.../lapi/syscalls/{loongarch.in => loongarch64.in} | 0
include/lapi/syscalls/{mips_n64.in => mips64.in} | 0
.../lapi/syscalls/{mips_n32.in => mips64n32.in} | 0
include/lapi/syscalls/{mips_o32.in => mipso32.in} | 0
include/lapi/syscalls/{hppa.in => parisc.in} | 0
include/lapi/syscalls/regen.sh | 129 -------------
include/lapi/syscalls/strip_syscall.awk | 19 --
.../lapi/syscalls/{order => supported-arch.txt} | 12 +-
12 files changed, 329 insertions(+), 155 deletions(-)
---
base-commit: 34e6dd2d233abcebae435d34d793b6a49d08c190
change-id: 20240923-generate_syscalls-780dc2227bdb
Best regards,
--
Andrea Cervesato <andrea.cervesato@suse.com>
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 16+ messages in thread
* [LTP] [PATCH v6 1/3] Refactor regen.sh script to generate syscalls
2024-10-31 7:27 [LTP] [PATCH v6 0/3] Automatically generate syscalls.h Andrea Cervesato
@ 2024-10-31 7:27 ` Andrea Cervesato
2024-10-31 9:49 ` Petr Vorel
2024-10-31 10:25 ` Cyril Hrubis
2024-10-31 7:27 ` [LTP] [PATCH v6 2/3] Add script to generate arch(s) dependant syscalls Andrea Cervesato
` (2 subsequent siblings)
3 siblings, 2 replies; 16+ messages in thread
From: Andrea Cervesato @ 2024-10-31 7:27 UTC (permalink / raw)
To: ltp
From: Andrea Cervesato <andrea.cervesato@suse.com>
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.
Reviewed-by: Li Wang <liwang@redhat.com>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
configure.ac | 2 +-
include/lapi/syscalls/generate_syscalls.sh | 111 ++++++++++++++++++
include/lapi/syscalls/regen.sh | 129 ---------------------
.../lapi/syscalls/{order => supported-arch.txt} | 0
4 files changed, 112 insertions(+), 130 deletions(-)
diff --git a/configure.ac b/configure.ac
index d327974efa71f263d7f7f5aec9d2c5831d53dd0e..cd1233d19fad376973fc880d6689859845613fb0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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
diff --git a/include/lapi/syscalls/generate_syscalls.sh b/include/lapi/syscalls/generate_syscalls.sh
new file mode 100755
index 0000000000000000000000000000000000000000..8fcc0f80654011e8d0811b9ca64157c778bb12ce
--- /dev/null
+++ b/include/lapi/syscalls/generate_syscalls.sh
@@ -0,0 +1,111 @@
+#!/bin/sh
+# 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}"
+ shift
+
+ echo "# ifndef ${syscall_nr}"
+ echo "# define ${syscall_nr} __LTP__NR_INVALID_SYSCALL"
+ echo "# endif"
+ done
+ echo "#endif"
+) >>${SYSCALLS_FILE}
diff --git a/include/lapi/syscalls/regen.sh b/include/lapi/syscalls/regen.sh
deleted file mode 100755
index 663ce4458bbc67c3a9e8073dfe8359164a9da0ee..0000000000000000000000000000000000000000
--- a/include/lapi/syscalls/regen.sh
+++ /dev/null
@@ -1,129 +0,0 @@
-#!/bin/sh
-
-output="syscalls.h"
-rm -f "${output}".[1-9]*
-output_pid="${output}.$$"
-
-max_jobs=$(getconf _NPROCESSORS_ONLN 2>/dev/null)
-: ${max_jobs:=1}
-
-srcdir=${0%/*}
-
-err() {
- echo "$*" 1>&2
- exit 1
-}
-
-cat << EOF > "${output_pid}"
-/************************************************
- * 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).
- *
- * Licensed under the GPLv2 or later, see the COPYING file.
- */
-
-#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; \\
-})
-
-EOF
-
-jobs=0
-for arch in $(cat "${srcdir}/order") ; do
- (
- echo "Generating data for arch $arch ... "
-
- (
- 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__)" ;;
- mips_n32) echo "#if defined(__mips__) && defined(_ABIN32)" ;;
- mips_n64) echo "#if defined(__mips__) && defined(_ABI64)" ;;
- mips_o32) echo "#if defined(__mips__) && defined(_ABIO32) && _MIPS_SZLONG == 32" ;;
- *) echo "#ifdef __${arch}__" ;;
- esac
- while read line ; do
- set -- ${line}
- nr="__NR_$1"
- shift
- if [ $# -eq 0 ] ; then
- err "invalid line found: $line"
- fi
- echo "# ifndef ${nr}"
- echo "# define ${nr} $*"
- echo "# endif"
- done < "${srcdir}/${arch}.in"
- echo "#endif"
- echo
- ) >> "${output_pid}.${arch}"
-
- ) &
-
- jobs=$(( jobs + 1 ))
- if [ ${jobs} -ge ${max_jobs} ] ; then
- wait || exit 1
- jobs=0
- fi
-done
-
-echo "Generating stub list ... "
-(
-echo
-echo "/* Common stubs */"
-echo "#define __LTP__NR_INVALID_SYSCALL -1" >> "${output_pid}"
-for nr in $(awk '{print $1}' "${srcdir}/"*.in | sort -u) ; do
- nr="__NR_${nr}"
- echo "# ifndef ${nr}"
- echo "# define ${nr} __LTP__NR_INVALID_SYSCALL"
- echo "# endif"
-done
-echo "#endif"
-) >> "${output_pid}._footer"
-
-wait || exit 1
-
-printf "Combining them all ... "
-for arch in $(cat "${srcdir}/order") _footer ; do
- cat "${output_pid}.${arch}"
-done >> "${output_pid}"
-mv "${output_pid}" "../${output}"
-rm -f "${output_pid}"*
-echo "OK!"
diff --git a/include/lapi/syscalls/order b/include/lapi/syscalls/supported-arch.txt
similarity index 100%
rename from include/lapi/syscalls/order
rename to include/lapi/syscalls/supported-arch.txt
--
2.43.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [LTP] [PATCH v6 2/3] Add script to generate arch(s) dependant syscalls
2024-10-31 7:27 [LTP] [PATCH v6 0/3] Automatically generate syscalls.h Andrea Cervesato
2024-10-31 7:27 ` [LTP] [PATCH v6 1/3] Refactor regen.sh script to generate syscalls Andrea Cervesato
@ 2024-10-31 7:27 ` Andrea Cervesato
2024-10-31 7:27 ` [LTP] [PATCH v6 3/3] Delete obsolete strip_syscall.awk file Andrea Cervesato
2024-10-31 9:56 ` [LTP] [PATCH v6 0/3] Automatically generate syscalls.h Petr Vorel
3 siblings, 0 replies; 16+ messages in thread
From: Andrea Cervesato @ 2024-10-31 7:27 UTC (permalink / raw)
To: ltp
From: Andrea Cervesato <andrea.cervesato@suse.com>
Add generate_arch.sh script which can be used to generate arch(s)
dependant syscalls file. The way it works is pretty simple: for each
architecture defined into supported-arch.txt, compile kernel headers,
extract the list of syscalls and generate a .in file containing all of
them, associated with their own syscall's number.
The way syscalls files are generated, passes through a C application
which is automatically checking the availability of the syscalls in
the user space environment.
Reviewed-by: Li Wang <liwang@redhat.com>
Reviewed-by: Cyril Hrubis <chrubis@suse.cz>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
include/lapi/syscalls/{aarch64.in => arm64.in} | 0
include/lapi/syscalls/generate_arch.sh | 211 +++++++++++++++++++++
.../lapi/syscalls/{loongarch.in => loongarch64.in} | 0
include/lapi/syscalls/{mips_n64.in => mips64.in} | 0
.../lapi/syscalls/{mips_n32.in => mips64n32.in} | 0
include/lapi/syscalls/{mips_o32.in => mipso32.in} | 0
include/lapi/syscalls/{hppa.in => parisc.in} | 0
include/lapi/syscalls/supported-arch.txt | 12 +-
8 files changed, 217 insertions(+), 6 deletions(-)
diff --git a/include/lapi/syscalls/aarch64.in b/include/lapi/syscalls/arm64.in
similarity index 100%
rename from include/lapi/syscalls/aarch64.in
rename to include/lapi/syscalls/arm64.in
diff --git a/include/lapi/syscalls/generate_arch.sh b/include/lapi/syscalls/generate_arch.sh
new file mode 100755
index 0000000000000000000000000000000000000000..c88ca945127c3c26162a48babcd6b0f8ca552311
--- /dev/null
+++ b/include/lapi/syscalls/generate_arch.sh
@@ -0,0 +1,211 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# This is an adaptation of the update-tables.sh script, included in the
+# syscalls-table project (https://github.com/hrw/syscalls-table) and released
+# under the MIT license.
+#
+# Author: Andrea Cervesato <andrea.cervesato@suse.com>
+
+KERNELSRC="$1"
+
+# to keep sorting in order
+export LC_ALL=C
+
+if [ -z "$KERNELSRC" ]; then
+ echo "Please provide kernel sources:"
+ echo ""
+ echo "$0 path/to/Linux/kernel/sources"
+ echo ""
+ exit 1
+fi
+
+if [ ! -d "$KERNELSRC" ]; then
+ echo "$KERNELSRC is not a directory"
+ exit 1
+fi
+
+if [ ! -e "${KERNELSRC}/Makefile" ]; then
+ echo "No Makefile in $KERNELSRC directory"
+ exit 1
+fi
+
+TEMP="$(mktemp -d)"
+KVER="$(make -C ${KERNELSRC} kernelversion -s)"
+
+SCRIPT_DIR="$(realpath $(dirname "$0"))"
+SUPPORTED_ARCH="${SCRIPT_DIR}/supported-arch.txt"
+LINUX_HEADERS="${TEMP}/headers"
+
+grab_syscall_names_from_tables()
+{
+ for tbl_file in $(find ${KERNELSRC}/arch -name syscall*.tbl); do
+ grep -E -v "(^#|^$|sys_ni_syscall)" $tbl_file |
+ awk '{ print $3 }' >> ${TEMP}/syscall-names.tosort
+ done
+
+ drop_bad_entries
+}
+
+grab_syscall_names_from_unistd_h()
+{
+ grep -E -h "^#define __NR_" \
+ ${LINUX_HEADERS}/usr/include/asm/unistd*.h \
+ ${LINUX_HEADERS}/usr/include/asm-generic/unistd.h \
+ >${TEMP}/syscall-names.tosort
+
+ drop_bad_entries
+}
+
+drop_bad_entries()
+{
+ grep -E -v "(unistd.h|NR3264|__NR_syscall|__SC_COMP|__NR_.*Linux|__NR_FAST)" \
+ ${TEMP}/syscall-names.tosort |
+ grep -E -v "(__SYSCALL|SYSCALL_BASE|SYSCALL_MASK)" |
+ sed -e "s/#define\s*__NR_//g" -e "s/\s.*//g" |
+ sort -u >${TEMP}/syscall-names.txt
+}
+
+generate_table()
+{
+ echo "- $arch"
+
+ if [ $bits == 32 ]; then
+ extraflags="${extraflags} -D__BITS_PER_LONG=32"
+ fi
+
+ local uppercase_arch=$(echo "$arch" | tr '[:lower:]' '[:upper:]')
+
+ gcc ${TEMP}/list-syscalls.c -U__LP64__ -U__ILP32__ -U__i386__ \
+ -D${uppercase_arch} \
+ -D__${arch}__ ${extraflags} \
+ -I ${LINUX_HEADERS}/usr/include/ \
+ -o ${TEMP}/list-syscalls &>/dev/null
+
+ ${TEMP}/list-syscalls > "${TEMP}/${arch}.in.tosort"
+
+ sort -k2,2n "${TEMP}/${arch}.in.tosort" > "${TEMP}/${arch}.in"
+}
+
+generate_list_syscalls_c()
+{
+ (
+ echo
+ echo "
+ #include <stdio.h>
+ #include <asm/unistd.h>
+
+ int main(void)
+ {
+ "
+ for syscall in $(cat ${TEMP}/syscall-names.txt); do
+ echo "
+ #ifdef __NR_$syscall
+ printf(\"$syscall %d\\n\", __NR_$syscall);
+ #endif
+ "
+ done
+ echo " return 0;
+ }"
+ ) > ${TEMP}/list-syscalls.c
+}
+
+export_headers()
+{
+ make -s -C ${KERNELSRC} ARCH=${arch} O=${LINUX_HEADERS} \
+ headers_install &>/dev/null
+}
+
+do_all_tables()
+{
+ for archdir in ${KERNELSRC}/arch/*; do
+ arch=$(basename $archdir)
+
+ bits=64
+ extraflags=
+
+ case ${arch} in
+ Kconfig)
+ continue
+ ;;
+ um)
+ continue
+ ;;
+ esac
+
+ export_headers
+ grab_syscall_names_from_unistd_h
+
+ case ${arch} in
+ arm)
+ bits=32
+ arch=armoabi extraflags= generate_table
+ arch=arm extraflags=-D__ARM_EABI__ generate_table
+ ;;
+ loongarch)
+ # 32-bit variant of loongarch may appear
+ arch=loongarch64 extraflags=-D_LOONGARCH_SZLONG=64 generate_table
+ ;;
+ mips)
+ arch=mips64 extraflags=-D_MIPS_SIM=_MIPS_SIM_ABI64 generate_table
+ bits=32
+ arch=mipso32 extraflags=-D_MIPS_SIM=_MIPS_SIM_ABI32 generate_table
+ arch=mips64n32 extraflags=-D_MIPS_SIM=_MIPS_SIM_NABI32 generate_table
+ ;;
+ powerpc)
+ generate_table
+ arch=powerpc64 generate_table
+ ;;
+ riscv)
+ arch=riscv64 extraflags=-D__LP64__ generate_table
+ bits=32
+ arch=riscv32 extraflags=-D__SIZEOF_POINTER__=4 generate_table
+ ;;
+ s390)
+ bits=32
+ generate_table
+ bits=64
+ arch=s390x generate_table
+ ;;
+ sparc)
+ bits=32
+ extraflags=-D__32bit_syscall_numbers__ generate_table
+ bits=64
+ arch=sparc64 extraflags=-D__arch64__ generate_table
+ ;;
+ x86)
+ arch=x86_64 extraflags=-D__LP64__ generate_table
+ bits=32
+ arch=i386 generate_table
+ arch=x32 extraflags=-D__ILP32__ generate_table
+ ;;
+ arc | csky | hexagon | m68k | microblaze | nios2 | openrisc | sh | xtensa)
+ bits=32 generate_table
+ ;;
+ *)
+ generate_table
+ ;;
+ esac
+ done
+}
+
+copy_supported_arch()
+{
+ while IFS= read -r arch; do
+ if [ -f "${TEMP}/${arch}.in" ]; then
+ echo "- ${arch}"
+ cp "${TEMP}/${arch}.in" "${SCRIPT_DIR}/${arch}.in"
+ fi
+ done < ${SUPPORTED_ARCH}
+}
+
+echo "Temporary directory ${TEMP}"
+echo "Extracting syscalls"
+
+grab_syscall_names_from_tables
+generate_list_syscalls_c
+
+do_all_tables
+
+echo "Copying supported syscalls"
+copy_supported_arch
diff --git a/include/lapi/syscalls/loongarch.in b/include/lapi/syscalls/loongarch64.in
similarity index 100%
rename from include/lapi/syscalls/loongarch.in
rename to include/lapi/syscalls/loongarch64.in
diff --git a/include/lapi/syscalls/mips_n64.in b/include/lapi/syscalls/mips64.in
similarity index 100%
rename from include/lapi/syscalls/mips_n64.in
rename to include/lapi/syscalls/mips64.in
diff --git a/include/lapi/syscalls/mips_n32.in b/include/lapi/syscalls/mips64n32.in
similarity index 100%
rename from include/lapi/syscalls/mips_n32.in
rename to include/lapi/syscalls/mips64n32.in
diff --git a/include/lapi/syscalls/mips_o32.in b/include/lapi/syscalls/mipso32.in
similarity index 100%
rename from include/lapi/syscalls/mips_o32.in
rename to include/lapi/syscalls/mipso32.in
diff --git a/include/lapi/syscalls/hppa.in b/include/lapi/syscalls/parisc.in
similarity index 100%
rename from include/lapi/syscalls/hppa.in
rename to include/lapi/syscalls/parisc.in
diff --git a/include/lapi/syscalls/supported-arch.txt b/include/lapi/syscalls/supported-arch.txt
index c18aa38cf4546cdf3ac8c89a45bd1b202ffa7711..c5c5191ac08482d89f0a8c39dfae936538f58f7f 100644
--- a/include/lapi/syscalls/supported-arch.txt
+++ b/include/lapi/syscalls/supported-arch.txt
@@ -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
--
2.43.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [LTP] [PATCH v6 3/3] Delete obsolete strip_syscall.awk file
2024-10-31 7:27 [LTP] [PATCH v6 0/3] Automatically generate syscalls.h Andrea Cervesato
2024-10-31 7:27 ` [LTP] [PATCH v6 1/3] Refactor regen.sh script to generate syscalls Andrea Cervesato
2024-10-31 7:27 ` [LTP] [PATCH v6 2/3] Add script to generate arch(s) dependant syscalls Andrea Cervesato
@ 2024-10-31 7:27 ` Andrea Cervesato
2024-10-31 9:56 ` [LTP] [PATCH v6 0/3] Automatically generate syscalls.h Petr Vorel
3 siblings, 0 replies; 16+ messages in thread
From: Andrea Cervesato @ 2024-10-31 7:27 UTC (permalink / raw)
To: ltp
From: Andrea Cervesato <andrea.cervesato@suse.com>
Reviewed-by: Li Wang <liwang@redhat.com>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Reviewed-by: Cyril Hrubis <chrubis@suse.cz>
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
include/lapi/syscalls/strip_syscall.awk | 19 -------------------
1 file changed, 19 deletions(-)
diff --git a/include/lapi/syscalls/strip_syscall.awk b/include/lapi/syscalls/strip_syscall.awk
deleted file mode 100755
index e8dff422e2667745c144ed984a4d66461fcce0c6..0000000000000000000000000000000000000000
--- a/include/lapi/syscalls/strip_syscall.awk
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/awk -f
-#
-# Dumb script that can be used to strip all of the syscall information from
-# the arch-respective unistd*.h.
-#
-# Examples:
-#
-# 1. Grab the i386 32-bit syscalls from unistd_32.h and put them in i386.in
-# strip_syscall.awk arch/x86/include/asm/unistd_32.h > i386.in
-#
-
-/^#define[[:space:]]+__NR_[0-9a-z]+/ {
-
- sub (/#define[[:space:]]+__NR_/, "", $0);
- sub (/[[:space:]]*(\/\*.*)/, "", $0);
- sub (/[[:space:]]+/, " ", $0);
-
- print
-}
--
2.43.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [LTP] [PATCH v6 1/3] Refactor regen.sh script to generate syscalls
2024-10-31 7:27 ` [LTP] [PATCH v6 1/3] Refactor regen.sh script to generate syscalls Andrea Cervesato
@ 2024-10-31 9:49 ` Petr Vorel
2024-10-31 10:28 ` Cyril Hrubis
2024-10-31 10:25 ` Cyril Hrubis
1 sibling, 1 reply; 16+ messages in thread
From: Petr Vorel @ 2024-10-31 9:49 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
Hi Andrea,
whole patchset LGTM, thank you!
I was comparing the old include/lapi/syscalls.h (21579 lines) and the new one
(20054). Having new file shorter is a bit surprising to me. I haven't found what
is missing, probably I'm missing something myself :).
> 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.
Purely out of curiosity (nothing to block this), which "native sh features"?
> +++ b/include/lapi/syscalls/generate_syscalls.sh
...
> +SCRIPT_DIR="$(realpath $(dirname "$0"))"
> +SUPPORTED_ARCH="${SCRIPT_DIR}/supported-arch.txt"
> +
> +echo '
> +// SPDX-License-Identifier: GPL-2.0-or-later
very nit stylish: This produce new line. Why not just:
echo '// SPDX-License-Identifier: GPL-2.0-or-later
/************************************************
Feel free to ignore or amend before push.
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [LTP] [PATCH v6 0/3] Automatically generate syscalls.h
2024-10-31 7:27 [LTP] [PATCH v6 0/3] Automatically generate syscalls.h Andrea Cervesato
` (2 preceding siblings ...)
2024-10-31 7:27 ` [LTP] [PATCH v6 3/3] Delete obsolete strip_syscall.awk file Andrea Cervesato
@ 2024-10-31 9:56 ` Petr Vorel
2024-10-31 10:02 ` Cyril Hrubis
3 siblings, 1 reply; 16+ messages in thread
From: Petr Vorel @ 2024-10-31 9:56 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
Hi Andrea,
> The problem we have at the moment is that all syscalls input files must
> be changed by hand each time we need to test a new syscall. The idea is
> to simplify this process, providing a script that is able to read from
> kernel sources and to generate all syscalls files we need.
> This patch set adds a new command inside the syscalls folder and
> it refactors the previous regen.sh code.
> The new way we have to generate the syscalls.h file is the following:
> include/lapi/syscalls/generate_arch.sh path/to/kernel/source
> include/lapi/syscalls/generate_syscalls.sh path/to/syscalls.h
> Scripts are independent and they can be run separately.
> generate_syscalls.sh is the equivalent of regen.sh, but its code has
> been cleaned up.
it would be nice to have this documented (as a separate effort, not blocking
to merge this). Specially the new generate_arch.sh, which is not part of
./configure run.
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [LTP] [PATCH v6 0/3] Automatically generate syscalls.h
2024-10-31 9:56 ` [LTP] [PATCH v6 0/3] Automatically generate syscalls.h Petr Vorel
@ 2024-10-31 10:02 ` Cyril Hrubis
0 siblings, 0 replies; 16+ messages in thread
From: Cyril Hrubis @ 2024-10-31 10:02 UTC (permalink / raw)
To: Petr Vorel; +Cc: ltp
Hi!
> > The problem we have at the moment is that all syscalls input files must
> > be changed by hand each time we need to test a new syscall. The idea is
> > to simplify this process, providing a script that is able to read from
> > kernel sources and to generate all syscalls files we need.
>
> > This patch set adds a new command inside the syscalls folder and
> > it refactors the previous regen.sh code.
> > The new way we have to generate the syscalls.h file is the following:
>
> > include/lapi/syscalls/generate_arch.sh path/to/kernel/source
> > include/lapi/syscalls/generate_syscalls.sh path/to/syscalls.h
>
> > Scripts are independent and they can be run separately.
> > generate_syscalls.sh is the equivalent of regen.sh, but its code has
> > been cleaned up.
>
> it would be nice to have this documented (as a separate effort, not blocking
> to merge this). Specially the new generate_arch.sh, which is not part of
> ./configure run.
We need something as:
The generate_arch.sh is supposed to be run when you start writing new
test and find out that the syscall number definitions you need are not
available in the LTP fallback header include/syscalls.h. You need to
point the script to a recent Linux kernel sources and it will pull an
update for the LTP syscall number tables. The tables then needs to be
updated in a separate git commit. You also need to re-run configure to
get the header updated from the tables.
To be put into the "how to write a test" documentation.
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [LTP] [PATCH v6 1/3] Refactor regen.sh script to generate syscalls
2024-10-31 7:27 ` [LTP] [PATCH v6 1/3] Refactor regen.sh script to generate syscalls Andrea Cervesato
2024-10-31 9:49 ` Petr Vorel
@ 2024-10-31 10:25 ` Cyril Hrubis
2024-10-31 10:31 ` Cyril Hrubis
1 sibling, 1 reply; 16+ messages in thread
From: Cyril Hrubis @ 2024-10-31 10:25 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
Hi!
> +echo '
^
This adds an empty line to the start of the file.
> +// 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}"
> + shift
This shift is not needed here anymore and generates a lot of warnings.
> + echo "# ifndef ${syscall_nr}"
> + echo "# define ${syscall_nr} __LTP__NR_INVALID_SYSCALL"
> + echo "# endif"
> + done
> + echo "#endif"
> +) >>${SYSCALLS_FILE}
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [LTP] [PATCH v6 1/3] Refactor regen.sh script to generate syscalls
2024-10-31 9:49 ` Petr Vorel
@ 2024-10-31 10:28 ` Cyril Hrubis
2024-10-31 10:37 ` Andrea Cervesato via ltp
` (2 more replies)
0 siblings, 3 replies; 16+ messages in thread
From: Cyril Hrubis @ 2024-10-31 10:28 UTC (permalink / raw)
To: Petr Vorel; +Cc: ltp
Hi!
> I was comparing the old include/lapi/syscalls.h (21579 lines) and the new one
> (20054). Having new file shorter is a bit surprising to me. I haven't found what
> is missing, probably I'm missing something myself :).
That is strange, I got exactly same content minus some whitespaces and
slightly different macros that check for arch support:
--- syscalls.h.old 2024-10-31 11:17:04.840217056 +0100
+++ syscalls.h 2024-10-31 11:23:38.326891830 +0100
@@ -1,3 +1,5 @@
+
+// SPDX-License-Identifier: GPL-2.0-or-later
/************************************************
* GENERATED FILE: DO NOT EDIT/PATCH THIS FILE *
* change your arch specific .in file instead *
@@ -6,8 +8,6 @@
/*
* Here we stick all the ugly *fallback* logic for linux
* system call numbers (those __NR_ thingies).
- *
- * Licensed under the GPLv2 or later, see the COPYING file.
*/
#ifndef LAPI_SYSCALLS_H__
@@ -19,30 +19,30 @@
#ifdef TST_TEST_H__
#define TST_SYSCALL_BRK__(NR, SNR) ({ \
- tst_brk(TCONF, \
- "syscall(%d) " SNR " not supported on your arch", NR); \
+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); \
+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; \
+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
@@ -6681,7 +6681,7 @@
#endif
-#if defined(__mips__) && defined(_ABIN32)
+#ifdef __mips_n32__
# ifndef __NR_read
# define __NR_read 6000
# endif
@@ -7828,7 +7828,7 @@
#endif
-#if defined(__mips__) && defined(_ABI64)
+#ifdef __mips_n64__
# ifndef __NR_read
# define __NR_read 5000
# endif
@@ -8903,7 +8903,7 @@
#endif
-#if defined(__mips__) && defined(_ABIO32) && _MIPS_SZLONG == 32
+#ifdef __mips_o32__
# ifndef __NR_syscall
# define __NR_syscall 4000
# endif
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [LTP] [PATCH v6 1/3] Refactor regen.sh script to generate syscalls
2024-10-31 10:25 ` Cyril Hrubis
@ 2024-10-31 10:31 ` Cyril Hrubis
0 siblings, 0 replies; 16+ messages in thread
From: Cyril Hrubis @ 2024-10-31 10:31 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
Hi!
And besides these two issues I pointed out it seems to work fine and the
code looks fine, so with these two fixed:
Reviewed-by: Cyril Hrubis <chrubis@suse.cz>
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [LTP] [PATCH v6 1/3] Refactor regen.sh script to generate syscalls
2024-10-31 10:28 ` Cyril Hrubis
@ 2024-10-31 10:37 ` Andrea Cervesato via ltp
2024-10-31 11:35 ` Cyril Hrubis
2024-10-31 11:02 ` Andrea Cervesato via ltp
2024-10-31 11:17 ` Petr Vorel
2 siblings, 1 reply; 16+ messages in thread
From: Andrea Cervesato via ltp @ 2024-10-31 10:37 UTC (permalink / raw)
To: Cyril Hrubis, Petr Vorel; +Cc: ltp
Hi,
On 10/31/24 11:28, Cyril Hrubis wrote:
> Hi!
>> I was comparing the old include/lapi/syscalls.h (21579 lines) and the new one
>> (20054). Having new file shorter is a bit surprising to me. I haven't found what
>> is missing, probably I'm missing something myself :).
> That is strange, I got exactly same content minus some whitespaces and
> slightly different macros that check for arch support:
>
> --- syscalls.h.old 2024-10-31 11:17:04.840217056 +0100
> +++ syscalls.h 2024-10-31 11:23:38.326891830 +0100
> @@ -1,3 +1,5 @@
> +
> +// SPDX-License-Identifier: GPL-2.0-or-later
> /************************************************
> * GENERATED FILE: DO NOT EDIT/PATCH THIS FILE *
> * change your arch specific .in file instead *
> @@ -6,8 +8,6 @@
> /*
> * Here we stick all the ugly *fallback* logic for linux
> * system call numbers (those __NR_ thingies).
> - *
> - * Licensed under the GPLv2 or later, see the COPYING file.
> */
>
> #ifndef LAPI_SYSCALLS_H__
> @@ -19,30 +19,30 @@
>
> #ifdef TST_TEST_H__
> #define TST_SYSCALL_BRK__(NR, SNR) ({ \
> - tst_brk(TCONF, \
> - "syscall(%d) " SNR " not supported on your arch", NR); \
> +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); \
> +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; \
> +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
> @@ -6681,7 +6681,7 @@
> #endif
>
>
> -#if defined(__mips__) && defined(_ABIN32)
> +#ifdef __mips_n32__
Do you believe these lines are an error? I'm checking the code and it
seems fine.
> # ifndef __NR_read
> # define __NR_read 6000
> # endif
> @@ -7828,7 +7828,7 @@
> #endif
>
>
> -#if defined(__mips__) && defined(_ABI64)
> +#ifdef __mips_n64__
> # ifndef __NR_read
> # define __NR_read 5000
> # endif
> @@ -8903,7 +8903,7 @@
> #endif
>
>
> -#if defined(__mips__) && defined(_ABIO32) && _MIPS_SZLONG == 32
> +#ifdef __mips_o32__
> # ifndef __NR_syscall
> # define __NR_syscall 4000
> # endif
>
Andrea
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [LTP] [PATCH v6 1/3] Refactor regen.sh script to generate syscalls
2024-10-31 10:28 ` Cyril Hrubis
2024-10-31 10:37 ` Andrea Cervesato via ltp
@ 2024-10-31 11:02 ` Andrea Cervesato via ltp
2024-10-31 11:17 ` Petr Vorel
2 siblings, 0 replies; 16+ messages in thread
From: Andrea Cervesato via ltp @ 2024-10-31 11:02 UTC (permalink / raw)
To: Cyril Hrubis, Petr Vorel; +Cc: ltp
On 10/31/24 11:28, Cyril Hrubis wrote:
> Hi!
>> I was comparing the old include/lapi/syscalls.h (21579 lines) and the new one
>> (20054). Having new file shorter is a bit surprising to me. I haven't found what
>> is missing, probably I'm missing something myself :).
> That is strange, I got exactly same content minus some whitespaces and
> slightly different macros that check for arch support:
>
> --- syscalls.h.old 2024-10-31 11:17:04.840217056 +0100
> +++ syscalls.h 2024-10-31 11:23:38.326891830 +0100
> @@ -1,3 +1,5 @@
> +
> +// SPDX-License-Identifier: GPL-2.0-or-later
> /************************************************
> * GENERATED FILE: DO NOT EDIT/PATCH THIS FILE *
> * change your arch specific .in file instead *
> @@ -6,8 +8,6 @@
> /*
> * Here we stick all the ugly *fallback* logic for linux
> * system call numbers (those __NR_ thingies).
> - *
> - * Licensed under the GPLv2 or later, see the COPYING file.
> */
>
> #ifndef LAPI_SYSCALLS_H__
> @@ -19,30 +19,30 @@
>
> #ifdef TST_TEST_H__
> #define TST_SYSCALL_BRK__(NR, SNR) ({ \
> - tst_brk(TCONF, \
> - "syscall(%d) " SNR " not supported on your arch", NR); \
> +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); \
> +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; \
> +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
> @@ -6681,7 +6681,7 @@
> #endif
>
>
> -#if defined(__mips__) && defined(_ABIN32)
> +#ifdef __mips_n32__
> # ifndef __NR_read
> # define __NR_read 6000
> # endif
> @@ -7828,7 +7828,7 @@
> #endif
>
>
> -#if defined(__mips__) && defined(_ABI64)
> +#ifdef __mips_n64__
> # ifndef __NR_read
> # define __NR_read 5000
> # endif
> @@ -8903,7 +8903,7 @@
> #endif
>
>
> -#if defined(__mips__) && defined(_ABIO32) && _MIPS_SZLONG == 32
> +#ifdef __mips_o32__
> # ifndef __NR_syscall
> # define __NR_syscall 4000
> # endif
>
I just realized that these are errors. The reason is that files are
changed now, so I need to change the way architecture is seen at compile
time. For example, mips64n32 is now mips_n32 and that has to be handled
in the syscalls file generator.
Andrea
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [LTP] [PATCH v6 1/3] Refactor regen.sh script to generate syscalls
2024-10-31 10:28 ` Cyril Hrubis
2024-10-31 10:37 ` Andrea Cervesato via ltp
2024-10-31 11:02 ` Andrea Cervesato via ltp
@ 2024-10-31 11:17 ` Petr Vorel
2024-10-31 12:19 ` Cyril Hrubis
2 siblings, 1 reply; 16+ messages in thread
From: Petr Vorel @ 2024-10-31 11:17 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp
> Hi!
> > I was comparing the old include/lapi/syscalls.h (21579 lines) and the new one
> > (20054). Having new file shorter is a bit surprising to me. I haven't found what
> > is missing, probably I'm missing something myself :).
> That is strange, I got exactly same content minus some whitespaces and
> slightly different macros that check for arch support:
Hm, that must be on my side than. I was doing that on old version,
but even with update to the current master and deleting all:
rm -rf *; git reset --hard; make autotools && ./configure
I still get:
21579 for master (84e77afb3a)
20054 for v6.
Because diff is big, I posted: diff [1], old master [2], new v6 [3]
Now I see the reason - what I pushed as Anrea's v6 [4] is broken for many
distros [5].
Reason for the failure itself is quite obvious [6]:
414 ../include/lapi/syscalls.h:13:2: error: unterminated conditional directive
415 #ifndef LAPI_SYSCALLS_H__
416 ^
417 1 error generated.
Looking it's broken on Debian any version I suspect
include/lapi/syscalls/generate_syscalls.sh works differently on dash.
But it works on ash. Maybe it's not a shell syntax but some dependency.
I suppose include/lapi/syscalls/generate_syscalls.sh should use:
#!/bin/sh -eux
instead of plain #!/bin/sh, that will show the error immediately.
(set -eu is useful for shell scripts which should not fail).
Kind regards,
Petr
[1] https://github.com/pevik/ltp/wiki/diff-master-and-v6
[2] https://github.com/pevik/ltp/wiki/syscalls.h-old-master-(84e77afb3a)
[3] https://github.com/pevik/ltp/wiki/syscalls.h-v6-(new)
[4] https://github.com/pevik/ltp/tree/refs/heads/andrea/automatically-generate-syscalls.h.v6
[5] https://github.com/pevik/ltp/actions/runs/11609439723
[6] https://github.com/pevik/ltp/actions/runs/11609439723/job/32326686364
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [LTP] [PATCH v6 1/3] Refactor regen.sh script to generate syscalls
2024-10-31 10:37 ` Andrea Cervesato via ltp
@ 2024-10-31 11:35 ` Cyril Hrubis
0 siblings, 0 replies; 16+ messages in thread
From: Cyril Hrubis @ 2024-10-31 11:35 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
Hi!
> > -#if defined(__mips__) && defined(_ABIN32)
> > +#ifdef __mips_n32__
> Do you believe these lines are an error? I'm checking the code and it
> seems fine.
I guess that these are mostly equivalent, there may be a special cases
where the are not though. I guess that Peter can check with the
buildroot folks, they probably know which one is more correct.
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [LTP] [PATCH v6 1/3] Refactor regen.sh script to generate syscalls
2024-10-31 11:17 ` Petr Vorel
@ 2024-10-31 12:19 ` Cyril Hrubis
2024-10-31 12:25 ` Andrea Cervesato via ltp
0 siblings, 1 reply; 16+ messages in thread
From: Cyril Hrubis @ 2024-10-31 12:19 UTC (permalink / raw)
To: Petr Vorel; +Cc: ltp
Hi!
> Looking it's broken on Debian any version I suspect
> include/lapi/syscalls/generate_syscalls.sh works differently on dash.
> But it works on ash. Maybe it's not a shell syntax but some dependency.
That is strange, I checked with dash here as well, no differencies. But
I did so only for the generate_syscalls.sh script. If you tested the
whole patchset together it's the code that generates the *.in files that
differs.
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [LTP] [PATCH v6 1/3] Refactor regen.sh script to generate syscalls
2024-10-31 12:19 ` Cyril Hrubis
@ 2024-10-31 12:25 ` Andrea Cervesato via ltp
0 siblings, 0 replies; 16+ messages in thread
From: Andrea Cervesato via ltp @ 2024-10-31 12:25 UTC (permalink / raw)
To: Cyril Hrubis, Petr Vorel; +Cc: ltp
On 10/31/24 13:19, Cyril Hrubis wrote:
> Hi!
>> Looking it's broken on Debian any version I suspect
>> include/lapi/syscalls/generate_syscalls.sh works differently on dash.
>> But it works on ash. Maybe it's not a shell syntax but some dependency.
> That is strange, I checked with dash here as well, no differencies. But
> I did so only for the generate_syscalls.sh script. If you tested the
> whole patchset together it's the code that generates the *.in files that
> differs.
>
Yes it's strange. Check v7 which introduces `/bin/sh -eux`. The CI
passes without issues: https://github.com/acerv/ltp/actions/runs/11611080151
Andrea
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2024-10-31 12:26 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-31 7:27 [LTP] [PATCH v6 0/3] Automatically generate syscalls.h Andrea Cervesato
2024-10-31 7:27 ` [LTP] [PATCH v6 1/3] Refactor regen.sh script to generate syscalls Andrea Cervesato
2024-10-31 9:49 ` Petr Vorel
2024-10-31 10:28 ` Cyril Hrubis
2024-10-31 10:37 ` Andrea Cervesato via ltp
2024-10-31 11:35 ` Cyril Hrubis
2024-10-31 11:02 ` Andrea Cervesato via ltp
2024-10-31 11:17 ` Petr Vorel
2024-10-31 12:19 ` Cyril Hrubis
2024-10-31 12:25 ` Andrea Cervesato via ltp
2024-10-31 10:25 ` Cyril Hrubis
2024-10-31 10:31 ` Cyril Hrubis
2024-10-31 7:27 ` [LTP] [PATCH v6 2/3] Add script to generate arch(s) dependant syscalls Andrea Cervesato
2024-10-31 7:27 ` [LTP] [PATCH v6 3/3] Delete obsolete strip_syscall.awk file Andrea Cervesato
2024-10-31 9:56 ` [LTP] [PATCH v6 0/3] Automatically generate syscalls.h Petr Vorel
2024-10-31 10:02 ` Cyril Hrubis
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.