public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
* [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