Message ID | 20241031-generate_syscalls-v6-1-1ad86a33ce2d@suse.com |
---|---|
State | Superseded |
Headers | show |
Series | Automatically generate syscalls.h | expand |
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
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}
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
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>
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
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
> 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
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.
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.
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
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