summaryrefslogtreecommitdiff
path: root/patches/strace/4.10/004_stat64-v.test.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/strace/4.10/004_stat64-v.test.patch')
-rw-r--r--patches/strace/4.10/004_stat64-v.test.patch87
1 files changed, 87 insertions, 0 deletions
diff --git a/patches/strace/4.10/004_stat64-v.test.patch b/patches/strace/4.10/004_stat64-v.test.patch
new file mode 100644
index 0000000..53383e3
--- /dev/null
+++ b/patches/strace/4.10/004_stat64-v.test.patch
@@ -0,0 +1,87 @@
+commit f79252f072a193bdff435afeaa6b6cd6d5c79947
+Author: Dmitry V. Levin <ldv@altlinux.org>
+Date: Mon Mar 16 17:18:40 2015 +0000
+
+ stat64-v.test: add newfstatat syscall support
+
+ Newer architectures have no stat syscall, so stat() is implemented there
+ using newfstatat syscall.
+
+ * tests/stat.c (STAT_FNAME): Rename to STAT_PREFIX. Update callers.
+ [_FILE_OFFSET_BITS == 64] (STAT_PREFIX): Add newfstatat support.
+ (main) [!NR_stat]: Add newfstatat support.
+
+ Reported-by: Andreas Schwab <schwab@suse.de>
+
+diff --git a/tests/stat.c b/tests/stat.c
+index 21e37fb..2b04010 100644
+--- a/tests/stat.c
++++ b/tests/stat.c
+@@ -14,22 +14,22 @@
+ # include <sys/types.h>
+ #endif
+
+-#undef STAT_FNAME
++#undef STAT_PREFIX
+ #undef NR_stat
+
+ #if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
+ # include <sys/stat.h>
+-# define STAT_FNAME "stat(64)?"
++# define STAT_PREFIX "(stat(64)?\\(|newfstatat\\(AT_FDCWD, )"
+ #else
+ # include <sys/syscall.h>
+ # if defined __NR_stat
+ # define NR_stat __NR_stat
+-# define STAT_FNAME "stat"
++# define STAT_PREFIX "stat\\("
+ # elif defined __NR_newstat
+ # define NR_stat __NR_newstat
+-# define STAT_FNAME "newstat"
++# define STAT_PREFIX "newstat\\("
+ # endif
+-# ifdef STAT_FNAME
++# ifdef STAT_PREFIX
+ /* for S_IFMT */
+ # define stat libc_stat
+ # define stat64 libc_stat64
+@@ -57,10 +57,10 @@
+ # define off_t __kernel_off_t
+ # define loff_t __kernel_loff_t
+ # include <asm/stat.h>
+-# endif /* STAT_FNAME */
++# endif /* STAT_PREFIX */
+ #endif /* _FILE_OFFSET_BITS */
+
+-#ifdef STAT_FNAME
++#ifdef STAT_PREFIX
+
+ static void
+ print_ftype(unsigned int mode)
+@@ -115,7 +115,7 @@ main(int ac, const char **av)
+ assert(stat(av[1], &stb) == 0);
+ #endif
+
+- printf(STAT_FNAME "\\(\"%s\", \\{", av[1]);
++ printf(STAT_PREFIX "\"%s\", \\{", av[1]);
+ printf("st_dev=makedev\\(%u, %u\\)",
+ (unsigned int) major(stb.st_dev),
+ (unsigned int) minor(stb.st_dev));
+@@ -159,11 +159,15 @@ main(int ac, const char **av)
+ printf("(, st_flags=[0-9]+)?");
+ printf("(, st_fstype=[^,]*)?");
+ printf("(, st_gen=[0-9]+)?");
+- printf("\\}\\) += 0\n");
++ printf("\\}");
++#ifndef NR_stat
++ printf("(, 0)?");
++#endif
++ printf("\\) += 0\n");
+ return 0;
+ }
+
+-#else /* !STAT_FNAME */
++#else /* !STAT_PREFIX */
+ int main(void)
+ {
+ return 77;