[PATCH] Use syscall instead of the glibc wrapper to call fstatat

James Cowgill james410 at cowgill.org.uk
Wed Jan 11 14:25:56 UTC 2017


The newfstatat testcase on mips64 currently fails because:
- The BOGUS_STRUCT_STAT test segfaults inside glibc.
- The result of the fstatat call gives incorrect dates because the
  kernel struct stat uses unsigned int timestamps.

Fix by using avoiding the glibc wrapper and using the relevant syscall
directly. This obviously avoids the first problem, and avoids the second
problem because print_stat always sign extends dates (unlike glibc which
will zero extend them).
---
 tests/fstatat.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/tests/fstatat.c b/tests/fstatat.c
index ec55ca04..3981b4ec 100644
--- a/tests/fstatat.c
+++ b/tests/fstatat.c
@@ -28,7 +28,7 @@
 #ifdef HAVE_FSTATAT
 
 # define TEST_SYSCALL_INVOKE(sample, pst) \
-	fstatat(AT_FDCWD, sample, pst, AT_SYMLINK_NOFOLLOW)
+	syscall(TEST_SYSCALL_NR, AT_FDCWD, sample, pst, AT_SYMLINK_NOFOLLOW)
 # define PRINT_SYSCALL_HEADER(sample) \
 	do { \
 		int saved_errno = errno; \
@@ -38,6 +38,8 @@
 		printf(", AT_SYMLINK_NOFOLLOW) = %s\n", sprintrc(rc)); \
 	} while (0)
 
+# define USE_ASM_STAT
+
 # include "xstatx.c"
 
 #else
-- 
2.11.0





More information about the Strace-devel mailing list