* [LTP] [PATCH] syscalls/fstatat01: fix test on x86_64 arch
@ 2016-03-09 8:23 Alexey Kodanev
2016-03-09 9:18 ` Jan Stancek
0 siblings, 1 reply; 5+ messages in thread
From: Alexey Kodanev @ 2016-03-09 8:23 UTC (permalink / raw)
To: ltp
Test returns TCONF for x86_64 arch as it tries to invoke a syscall
with __NR_fstatat64 which the arch doesn't have. Test macro checks
that it != 0, then proceed inside the if block. But it skips the
case when it's defined as a stub (-1) for x86_64.
So here are fixes:
* checking that __NR_fstatat64 > 0;
* use glibc wrapper only if it's supported (add 'configure' check);
* remove building *_64 test ('utils/newer_64.mk' include);
TST_USE_NEWER64_SYSCALL seems redundant and build process makes
the same binary in the end;
* Remove test 'fstatat01_64' from .gitignore and runtest/syscalls.
Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
---
configure.ac | 1 +
m4/ltp-fstatat.m4 | 26 ++++++++++++++++++
runtest/syscalls | 1 -
testcases/kernel/syscalls/.gitignore | 1 -
testcases/kernel/syscalls/fstatat/Makefile | 1 -
testcases/kernel/syscalls/fstatat/fstatat01.c | 35 ++++++++-----------------
6 files changed, 38 insertions(+), 27 deletions(-)
create mode 100644 m4/ltp-fstatat.m4
diff --git a/configure.ac b/configure.ac
index b065fe6..2fb1ebc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -161,6 +161,7 @@ LTP_CHECK_XFS_QUOTACTL
LTP_CHECK_CLONE_SUPPORTS_7_ARGS
LTP_CHECK_MKDIRAT
LTP_CHECK_FCHOWNAT
+LTP_CHECK_FSTATAT
LTP_CHECK_MKNODAT
LTP_CHECK_READLINKAT
LTP_CHECK_OPENAT
diff --git a/m4/ltp-fstatat.m4 b/m4/ltp-fstatat.m4
new file mode 100644
index 0000000..8814ade
--- /dev/null
+++ b/m4/ltp-fstatat.m4
@@ -0,0 +1,26 @@
+dnl
+dnl Copyright (c) 2016 Oracle and/or its affiliates. All Rights Reserved.
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+dnl the GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
+dnl
+dnl Author: Alexey Kodanev <alexey.kodanev@oracle.com>
+dnl
+
+dnl
+dnl LTP_CHECK_FSTATAT
+dnl -----------------
+dnl
+AC_DEFUN([LTP_CHECK_FSTATAT],[
+AC_CHECK_FUNCS(fstatat,,)
+])
diff --git a/runtest/syscalls b/runtest/syscalls
index b41c927..51334d7 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -305,7 +305,6 @@ fstat05_64 fstat05_64
#fstatat64/newfstatat test cases
fstatat01 fstatat01
-fstatat01_64 fstatat01_64
fstatfs01 fstatfs01
fstatfs01_64 fstatfs01_64
diff --git a/testcases/kernel/syscalls/.gitignore b/testcases/kernel/syscalls/.gitignore
index 0540928..8538057 100644
--- a/testcases/kernel/syscalls/.gitignore
+++ b/testcases/kernel/syscalls/.gitignore
@@ -261,7 +261,6 @@
/fstat/fstat05
/fstat/fstat05_64
/fstatat/fstatat01
-/fstatat/fstatat01_64
/fstatfs/fstatfs01
/fstatfs/fstatfs01_64
/fstatfs/fstatfs02
diff --git a/testcases/kernel/syscalls/fstatat/Makefile b/testcases/kernel/syscalls/fstatat/Makefile
index 048f8ce..7a1a87a 100644
--- a/testcases/kernel/syscalls/fstatat/Makefile
+++ b/testcases/kernel/syscalls/fstatat/Makefile
@@ -19,5 +19,4 @@
top_srcdir ?= ../../../..
include $(top_srcdir)/include/mk/testcases.mk
-include $(abs_srcdir)/../utils/newer_64.mk
include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/kernel/syscalls/fstatat/fstatat01.c b/testcases/kernel/syscalls/fstatat/fstatat01.c
index c92a714..b07891f 100644
--- a/testcases/kernel/syscalls/fstatat/fstatat01.c
+++ b/testcases/kernel/syscalls/fstatat/fstatat01.c
@@ -33,6 +33,7 @@
#include <errno.h>
#include <string.h>
#include <signal.h>
+#include "config.h"
#include "test.h"
#include "safe_macros.h"
#include "linux_syscall_numbers.h"
@@ -58,35 +59,22 @@ static const char *filenames[TEST_CASES];
static const int expected_errno[] = { 0, 0, ENOTDIR, EBADF, EINVAL, 0 };
static const int flags[] = { 0, 0, 0, 0, 9999, 0 };
-/* TODO (garrcoop): properly port to fstatat64. */
-#if (defined __NR_fstatat64) && (__NR_fstatat64 != 0)
-struct stat64 statbuf;
-#else
-struct stat statbuf;
-#endif
-
-/*
- * XXX (garrcoop): NO NO NO NO NO NO NO NO NO ... use linux_syscall_numbers.h!
- */
-/* __NR_fstatat64 and __NR_fstatat64 if not defined are ALWAYS stubbed by
- * linux_syscall_numbers.h Need to check for 0 to avoid testing with stubs */
-#if (defined __NR_fstatat64) && (__NR_fstatat64 != 0)
-int myfstatat(int dirfd, const char *filename, struct stat64 *statbuf,
- int flags)
+#if !defined(HAVE_FSTATAT)
+#if (defined __NR_fstatat64) && (__NR_fstatat64 > 0)
+static struct stat64 statbuf;
+int fstatat(int dirfd, const char *filename, struct stat64 *statbuf, int flags)
{
return ltp_syscall(__NR_fstatat64, dirfd, filename, statbuf, flags);
}
-#elif (defined __NR_newfstatat) && (__NR_newfstatat != 0)
-int myfstatat(int dirfd, const char *filename, struct stat *statbuf, int flags)
+#else
+static struct stat statbuf;
+int fstatat(int dirfd, const char *filename, struct stat *statbuf, int flags)
{
return ltp_syscall(__NR_newfstatat, dirfd, filename, statbuf, flags);
}
+#endif
#else
-/* stub - will never run */
-int myfstatat(int dirfd, const char *filename, struct stat *statbuf, int flags)
-{
- return ltp_syscall(0, dirfd, filename, statbuf, flags);
-}
+static struct stat statbuf;
#endif
int main(int ac, char **av)
@@ -104,8 +92,7 @@ int main(int ac, char **av)
tst_count = 0;
for (i = 0; i < TST_TOTAL; i++) {
- TEST(myfstatat
- (fds[i], filenames[i], &statbuf, flags[i]));
+ TEST(fstatat(fds[i], filenames[i], &statbuf, flags[i]));
if (TEST_ERRNO == expected_errno[i]) {
tst_resm(TPASS | TTERRNO,
--
1.7.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [LTP] [PATCH] syscalls/fstatat01: fix test on x86_64 arch
2016-03-09 8:23 [LTP] [PATCH] syscalls/fstatat01: fix test on x86_64 arch Alexey Kodanev
@ 2016-03-09 9:18 ` Jan Stancek
2016-03-09 9:47 ` Alexey Kodanev
0 siblings, 1 reply; 5+ messages in thread
From: Jan Stancek @ 2016-03-09 9:18 UTC (permalink / raw)
To: ltp
----- Original Message -----
> From: "Alexey Kodanev" <alexey.kodanev@oracle.com>
> To: ltp@lists.linux.it
> Cc: "vasily isaenko" <vasily.isaenko@oracle.com>
> Sent: Wednesday, 9 March, 2016 9:23:45 AM
> Subject: [LTP] [PATCH] syscalls/fstatat01: fix test on x86_64 arch
Hi,
>
> Test returns TCONF for x86_64 arch as it tries to invoke a syscall
> with __NR_fstatat64 which the arch doesn't have. Test macro checks
> that it != 0, then proceed inside the if block. But it skips the
> case when it's defined as a stub (-1) for x86_64.
>
> So here are fixes:
>
> * checking that __NR_fstatat64 > 0;
>
> * use glibc wrapper only if it's supported (add 'configure' check);
>
> * remove building *_64 test ('utils/newer_64.mk' include);
> TST_USE_NEWER64_SYSCALL seems redundant and build process makes
> the same binary in the end;
>
> * Remove test 'fstatat01_64' from .gitignore and runtest/syscalls.
>
> Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
> ---
> configure.ac | 1 +
> m4/ltp-fstatat.m4 | 26 ++++++++++++++++++
> runtest/syscalls | 1 -
> testcases/kernel/syscalls/.gitignore | 1 -
> testcases/kernel/syscalls/fstatat/Makefile | 1 -
> testcases/kernel/syscalls/fstatat/fstatat01.c | 35
> ++++++++-----------------
> 6 files changed, 38 insertions(+), 27 deletions(-)
> create mode 100644 m4/ltp-fstatat.m4
>
> diff --git a/configure.ac b/configure.ac
> index b065fe6..2fb1ebc 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -161,6 +161,7 @@ LTP_CHECK_XFS_QUOTACTL
> LTP_CHECK_CLONE_SUPPORTS_7_ARGS
> LTP_CHECK_MKDIRAT
> LTP_CHECK_FCHOWNAT
> +LTP_CHECK_FSTATAT
> LTP_CHECK_MKNODAT
> LTP_CHECK_READLINKAT
> LTP_CHECK_OPENAT
> diff --git a/m4/ltp-fstatat.m4 b/m4/ltp-fstatat.m4
> new file mode 100644
> index 0000000..8814ade
> --- /dev/null
> +++ b/m4/ltp-fstatat.m4
> @@ -0,0 +1,26 @@
> +dnl
> +dnl Copyright (c) 2016 Oracle and/or its affiliates. All Rights Reserved.
> +dnl
> +dnl This program is free software; you can redistribute it and/or modify
> +dnl it under the terms of the GNU General Public License as published by
> +dnl the Free Software Foundation; either version 2 of the License, or
> +dnl (at your option) any later version.
> +dnl
> +dnl This program is distributed in the hope that it will be useful,
> +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
> +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
> +dnl the GNU General Public License for more details.
> +dnl
> +dnl You should have received a copy of the GNU General Public License
> +dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
> +dnl
> +dnl Author: Alexey Kodanev <alexey.kodanev@oracle.com>
> +dnl
> +
> +dnl
> +dnl LTP_CHECK_FSTATAT
> +dnl -----------------
> +dnl
> +AC_DEFUN([LTP_CHECK_FSTATAT],[
> +AC_CHECK_FUNCS(fstatat,,)
> +])
> diff --git a/runtest/syscalls b/runtest/syscalls
> index b41c927..51334d7 100644
> --- a/runtest/syscalls
> +++ b/runtest/syscalls
> @@ -305,7 +305,6 @@ fstat05_64 fstat05_64
>
> #fstatat64/newfstatat test cases
> fstatat01 fstatat01
> -fstatat01_64 fstatat01_64
>
> fstatfs01 fstatfs01
> fstatfs01_64 fstatfs01_64
> diff --git a/testcases/kernel/syscalls/.gitignore
> b/testcases/kernel/syscalls/.gitignore
> index 0540928..8538057 100644
> --- a/testcases/kernel/syscalls/.gitignore
> +++ b/testcases/kernel/syscalls/.gitignore
> @@ -261,7 +261,6 @@
> /fstat/fstat05
> /fstat/fstat05_64
> /fstatat/fstatat01
> -/fstatat/fstatat01_64
> /fstatfs/fstatfs01
> /fstatfs/fstatfs01_64
> /fstatfs/fstatfs02
> diff --git a/testcases/kernel/syscalls/fstatat/Makefile
> b/testcases/kernel/syscalls/fstatat/Makefile
> index 048f8ce..7a1a87a 100644
> --- a/testcases/kernel/syscalls/fstatat/Makefile
> +++ b/testcases/kernel/syscalls/fstatat/Makefile
> @@ -19,5 +19,4 @@
> top_srcdir ?= ../../../..
>
> include $(top_srcdir)/include/mk/testcases.mk
> -include $(abs_srcdir)/../utils/newer_64.mk
> include $(top_srcdir)/include/mk/generic_leaf_target.mk
> diff --git a/testcases/kernel/syscalls/fstatat/fstatat01.c
> b/testcases/kernel/syscalls/fstatat/fstatat01.c
> index c92a714..b07891f 100644
> --- a/testcases/kernel/syscalls/fstatat/fstatat01.c
> +++ b/testcases/kernel/syscalls/fstatat/fstatat01.c
> @@ -33,6 +33,7 @@
> #include <errno.h>
> #include <string.h>
> #include <signal.h>
> +#include "config.h"
> #include "test.h"
> #include "safe_macros.h"
> #include "linux_syscall_numbers.h"
> @@ -58,35 +59,22 @@ static const char *filenames[TEST_CASES];
> static const int expected_errno[] = { 0, 0, ENOTDIR, EBADF, EINVAL, 0 };
> static const int flags[] = { 0, 0, 0, 0, 9999, 0 };
>
> -/* TODO (garrcoop): properly port to fstatat64. */
> -#if (defined __NR_fstatat64) && (__NR_fstatat64 != 0)
> -struct stat64 statbuf;
> -#else
> -struct stat statbuf;
> -#endif
> -
> -/*
> - * XXX (garrcoop): NO NO NO NO NO NO NO NO NO ... use
> linux_syscall_numbers.h!
> - */
> -/* __NR_fstatat64 and __NR_fstatat64 if not defined are ALWAYS stubbed by
> - * linux_syscall_numbers.h Need to check for 0 to avoid testing with stubs
> */
> -#if (defined __NR_fstatat64) && (__NR_fstatat64 != 0)
> -int myfstatat(int dirfd, const char *filename, struct stat64 *statbuf,
> - int flags)
> +#if !defined(HAVE_FSTATAT)
> +#if (defined __NR_fstatat64) && (__NR_fstatat64 > 0)
> +static struct stat64 statbuf;
> +int fstatat(int dirfd, const char *filename, struct stat64 *statbuf, int
> flags)
> {
> return ltp_syscall(__NR_fstatat64, dirfd, filename, statbuf, flags);
> }
> -#elif (defined __NR_newfstatat) && (__NR_newfstatat != 0)
> -int myfstatat(int dirfd, const char *filename, struct stat *statbuf, int
> flags)
> +#else
Shouldn't we check that __NR_newfstatat is defined? There seem to be architectures,
that don't define both fstatat64 and newfstatat.
Regards,
Jan
> +static struct stat statbuf;
> +int fstatat(int dirfd, const char *filename, struct stat *statbuf, int
> flags)
> {
> return ltp_syscall(__NR_newfstatat, dirfd, filename, statbuf, flags);
> }
> +#endif
> #else
> -/* stub - will never run */
> -int myfstatat(int dirfd, const char *filename, struct stat *statbuf, int
> flags)
> -{
> - return ltp_syscall(0, dirfd, filename, statbuf, flags);
> -}
> +static struct stat statbuf;
> #endif
>
> int main(int ac, char **av)
> @@ -104,8 +92,7 @@ int main(int ac, char **av)
> tst_count = 0;
>
> for (i = 0; i < TST_TOTAL; i++) {
> - TEST(myfstatat
> - (fds[i], filenames[i], &statbuf, flags[i]));
> + TEST(fstatat(fds[i], filenames[i], &statbuf, flags[i]));
>
> if (TEST_ERRNO == expected_errno[i]) {
> tst_resm(TPASS | TTERRNO,
> --
> 1.7.1
>
>
> --
> Mailing list info: http://lists.linux.it/listinfo/ltp
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [LTP] [PATCH] syscalls/fstatat01: fix test on x86_64 arch
2016-03-09 9:18 ` Jan Stancek
@ 2016-03-09 9:47 ` Alexey Kodanev
2016-03-09 9:49 ` Jan Stancek
0 siblings, 1 reply; 5+ messages in thread
From: Alexey Kodanev @ 2016-03-09 9:47 UTC (permalink / raw)
To: ltp
Hi,
On 03/09/2016 12:18 PM, Jan Stancek wrote:
> ...
> -/* TODO (garrcoop): properly port to fstatat64. */
> -#if (defined __NR_fstatat64) && (__NR_fstatat64 != 0)
> -struct stat64 statbuf;
> -#else
> -struct stat statbuf;
> -#endif
> -
> -/*
> - * XXX (garrcoop): NO NO NO NO NO NO NO NO NO ... use
> linux_syscall_numbers.h!
> - */
> -/* __NR_fstatat64 and __NR_fstatat64 if not defined are ALWAYS stubbed by
> - * linux_syscall_numbers.h Need to check for 0 to avoid testing with stubs
> */
> -#if (defined __NR_fstatat64) && (__NR_fstatat64 != 0)
> -int myfstatat(int dirfd, const char *filename, struct stat64 *statbuf,
> - int flags)
> +#if !defined(HAVE_FSTATAT)
> +#if (defined __NR_fstatat64) && (__NR_fstatat64 > 0)
> +static struct stat64 statbuf;
> +int fstatat(int dirfd, const char *filename, struct stat64 *statbuf, int
> flags)
> {
> return ltp_syscall(__NR_fstatat64, dirfd, filename, statbuf, flags);
> }
> -#elif (defined __NR_newfstatat) && (__NR_newfstatat != 0)
> -int myfstatat(int dirfd, const char *filename, struct stat *statbuf, int
> flags)
> +#else
> Shouldn't we check that __NR_newfstatat is defined? There seem to be architectures,
> that don't define both fstatat64 and newfstatat.
It seems unnecessary... it should be defined in linux_syscall_numbers.h
whether
it is supported or not. In the last case __NR_newfstatat is defined as
__LTP_NR_INVALID_SYSCALL,eventually we'll get TCONF for ltp_syscall(-1,
...).
Thanks,
Alexey
>
> Regards,
> Jan
>
>> +static struct stat statbuf;
>> +int fstatat(int dirfd, const char *filename, struct stat *statbuf, int
>> flags)
>> {
>> return ltp_syscall(__NR_newfstatat, dirfd, filename, statbuf, flags);
>> }
>> +#endif
>> #else
>> -/* stub - will never run */
>> -int myfstatat(int dirfd, const char *filename, struct stat *statbuf, int
>> flags)
>> -{
>> - return ltp_syscall(0, dirfd, filename, statbuf, flags);
>> -}
>> +static struct stat statbuf;
>> #endif
>>
>> int main(int ac, char **av)
>> @@ -104,8 +92,7 @@ int main(int ac, char **av)
>> tst_count = 0;
>>
>> for (i = 0; i < TST_TOTAL; i++) {
>> - TEST(myfstatat
>> - (fds[i], filenames[i], &statbuf, flags[i]));
>> + TEST(fstatat(fds[i], filenames[i], &statbuf, flags[i]));
>>
>> if (TEST_ERRNO == expected_errno[i]) {
>> tst_resm(TPASS | TTERRNO,
>> --
>> 1.7.1
>>
>>
>> --
>> Mailing list info: http://lists.linux.it/listinfo/ltp
>>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [LTP] [PATCH] syscalls/fstatat01: fix test on x86_64 arch
2016-03-09 9:47 ` Alexey Kodanev
@ 2016-03-09 9:49 ` Jan Stancek
2016-03-09 10:14 ` Alexey Kodanev
0 siblings, 1 reply; 5+ messages in thread
From: Jan Stancek @ 2016-03-09 9:49 UTC (permalink / raw)
To: ltp
----- Original Message -----
> From: "Alexey Kodanev" <alexey.kodanev@oracle.com>
> To: "Jan Stancek" <jstancek@redhat.com>
> Cc: ltp@lists.linux.it, "vasily isaenko" <vasily.isaenko@oracle.com>
> Sent: Wednesday, 9 March, 2016 10:47:11 AM
> Subject: Re: [LTP] [PATCH] syscalls/fstatat01: fix test on x86_64 arch
>
> Hi,
> On 03/09/2016 12:18 PM, Jan Stancek wrote:
> > ...
> > -/* TODO (garrcoop): properly port to fstatat64. */
> > -#if (defined __NR_fstatat64) && (__NR_fstatat64 != 0)
> > -struct stat64 statbuf;
> > -#else
> > -struct stat statbuf;
> > -#endif
> > -
> > -/*
> > - * XXX (garrcoop): NO NO NO NO NO NO NO NO NO ... use
> > linux_syscall_numbers.h!
> > - */
> > -/* __NR_fstatat64 and __NR_fstatat64 if not defined are ALWAYS stubbed by
> > - * linux_syscall_numbers.h Need to check for 0 to avoid testing with
> > stubs
> > */
> > -#if (defined __NR_fstatat64) && (__NR_fstatat64 != 0)
> > -int myfstatat(int dirfd, const char *filename, struct stat64 *statbuf,
> > - int flags)
> > +#if !defined(HAVE_FSTATAT)
> > +#if (defined __NR_fstatat64) && (__NR_fstatat64 > 0)
> > +static struct stat64 statbuf;
> > +int fstatat(int dirfd, const char *filename, struct stat64 *statbuf, int
> > flags)
> > {
> > return ltp_syscall(__NR_fstatat64, dirfd, filename, statbuf, flags);
> > }
> > -#elif (defined __NR_newfstatat) && (__NR_newfstatat != 0)
> > -int myfstatat(int dirfd, const char *filename, struct stat *statbuf, int
> > flags)
> > +#else
> > Shouldn't we check that __NR_newfstatat is defined? There seem to be
> > architectures,
> > that don't define both fstatat64 and newfstatat.
>
> It seems unnecessary... it should be defined in linux_syscall_numbers.h
> whether
> it is supported or not. In the last case __NR_newfstatat is defined as
> __LTP_NR_INVALID_SYSCALL,eventually we'll get TCONF for ltp_syscall(-1,
> ...).
You're right, regen.sh will add common stub as long as at least one arch
defines it (which we do).
Regards,
Jan
>
> Thanks,
> Alexey
>
> >
> > Regards,
> > Jan
> >
> >> +static struct stat statbuf;
> >> +int fstatat(int dirfd, const char *filename, struct stat *statbuf, int
> >> flags)
> >> {
> >> return ltp_syscall(__NR_newfstatat, dirfd, filename, statbuf, flags);
> >> }
> >> +#endif
> >> #else
> >> -/* stub - will never run */
> >> -int myfstatat(int dirfd, const char *filename, struct stat *statbuf, int
> >> flags)
> >> -{
> >> - return ltp_syscall(0, dirfd, filename, statbuf, flags);
> >> -}
> >> +static struct stat statbuf;
> >> #endif
> >>
> >> int main(int ac, char **av)
> >> @@ -104,8 +92,7 @@ int main(int ac, char **av)
> >> tst_count = 0;
> >>
> >> for (i = 0; i < TST_TOTAL; i++) {
> >> - TEST(myfstatat
> >> - (fds[i], filenames[i], &statbuf, flags[i]));
> >> + TEST(fstatat(fds[i], filenames[i], &statbuf, flags[i]));
> >>
> >> if (TEST_ERRNO == expected_errno[i]) {
> >> tst_resm(TPASS | TTERRNO,
> >> --
> >> 1.7.1
> >>
> >>
> >> --
> >> Mailing list info: http://lists.linux.it/listinfo/ltp
> >>
>
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [LTP] [PATCH] syscalls/fstatat01: fix test on x86_64 arch
2016-03-09 9:49 ` Jan Stancek
@ 2016-03-09 10:14 ` Alexey Kodanev
0 siblings, 0 replies; 5+ messages in thread
From: Alexey Kodanev @ 2016-03-09 10:14 UTC (permalink / raw)
To: ltp
On 03/09/2016 12:49 PM, Jan Stancek wrote:
>
> ----- Original Message -----
>> From: "Alexey Kodanev" <alexey.kodanev@oracle.com>
>> To: "Jan Stancek" <jstancek@redhat.com>
>> Cc: ltp@lists.linux.it, "vasily isaenko" <vasily.isaenko@oracle.com>
>> Sent: Wednesday, 9 March, 2016 10:47:11 AM
>> Subject: Re: [LTP] [PATCH] syscalls/fstatat01: fix test on x86_64 arch
>>
>> Hi,
>> On 03/09/2016 12:18 PM, Jan Stancek wrote:
>>> ...
>>> -/* TODO (garrcoop): properly port to fstatat64. */
>>> -#if (defined __NR_fstatat64) && (__NR_fstatat64 != 0)
>>> -struct stat64 statbuf;
>>> -#else
>>> -struct stat statbuf;
>>> -#endif
>>> -
>>> -/*
>>> - * XXX (garrcoop): NO NO NO NO NO NO NO NO NO ... use
>>> linux_syscall_numbers.h!
>>> - */
>>> -/* __NR_fstatat64 and __NR_fstatat64 if not defined are ALWAYS stubbed by
>>> - * linux_syscall_numbers.h Need to check for 0 to avoid testing with
>>> stubs
>>> */
>>> -#if (defined __NR_fstatat64) && (__NR_fstatat64 != 0)
>>> -int myfstatat(int dirfd, const char *filename, struct stat64 *statbuf,
>>> - int flags)
>>> +#if !defined(HAVE_FSTATAT)
>>> +#if (defined __NR_fstatat64) && (__NR_fstatat64 > 0)
>>> +static struct stat64 statbuf;
>>> +int fstatat(int dirfd, const char *filename, struct stat64 *statbuf, int
>>> flags)
>>> {
>>> return ltp_syscall(__NR_fstatat64, dirfd, filename, statbuf, flags);
>>> }
>>> -#elif (defined __NR_newfstatat) && (__NR_newfstatat != 0)
>>> -int myfstatat(int dirfd, const char *filename, struct stat *statbuf, int
>>> flags)
>>> +#else
>>> Shouldn't we check that __NR_newfstatat is defined? There seem to be
>>> architectures,
>>> that don't define both fstatat64 and newfstatat.
>> It seems unnecessary... it should be defined in linux_syscall_numbers.h
>> whether
>> it is supported or not. In the last case __NR_newfstatat is defined as
>> __LTP_NR_INVALID_SYSCALL,eventually we'll get TCONF for ltp_syscall(-1,
>> ...).
> You're right, regen.sh will add common stub as long as at least one arch
> defines it (which we do).
Looking at aarch64, it only defines "fstatat 79" and it neither has
fstatat64
nor newfstatat, so may be we should additionally check _NR_newfstatat in
the same
way we do for fstatat64. And if both < 0 invoke ltp_syscall with
__NR_fstatat.
Thanks,
Alexey
> Regards,
> Jan
>
>> Thanks,
>> Alexey
>>
>>> Regards,
>>> Jan
>>>
>>>> +static struct stat statbuf;
>>>> +int fstatat(int dirfd, const char *filename, struct stat *statbuf, int
>>>> flags)
>>>> {
>>>> return ltp_syscall(__NR_newfstatat, dirfd, filename, statbuf, flags);
>>>> }
>>>> +#endif
>>>> #else
>>>> -/* stub - will never run */
>>>> -int myfstatat(int dirfd, const char *filename, struct stat *statbuf, int
>>>> flags)
>>>> -{
>>>> - return ltp_syscall(0, dirfd, filename, statbuf, flags);
>>>> -}
>>>> +static struct stat statbuf;
>>>> #endif
>>>>
>>>> int main(int ac, char **av)
>>>> @@ -104,8 +92,7 @@ int main(int ac, char **av)
>>>> tst_count = 0;
>>>>
>>>> for (i = 0; i < TST_TOTAL; i++) {
>>>> - TEST(myfstatat
>>>> - (fds[i], filenames[i], &statbuf, flags[i]));
>>>> + TEST(fstatat(fds[i], filenames[i], &statbuf, flags[i]));
>>>>
>>>> if (TEST_ERRNO == expected_errno[i]) {
>>>> tst_resm(TPASS | TTERRNO,
>>>> --
>>>> 1.7.1
>>>>
>>>>
>>>> --
>>>> Mailing list info: http://lists.linux.it/listinfo/ltp
>>>>
>>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-03-09 10:14 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-09 8:23 [LTP] [PATCH] syscalls/fstatat01: fix test on x86_64 arch Alexey Kodanev
2016-03-09 9:18 ` Jan Stancek
2016-03-09 9:47 ` Alexey Kodanev
2016-03-09 9:49 ` Jan Stancek
2016-03-09 10:14 ` Alexey Kodanev
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox