From: Dmitry V. L. <ld...@al...> - 2013-04-30 22:22:33
|
Hi, There is quite enough good stuff accumulated in strace.git since v4.7 to release a new version. If you have pending patches to include before the release, please submit them now. Also, please test HEAD on supported architectures. -- ldv |
From: Mike F. <va...@ge...> - 2013-05-01 03:34:08
Attachments:
signature.asc
|
On Tuesday 30 April 2013 18:22:24 Dmitry V. Levin wrote: > There is quite enough good stuff accumulated in strace.git since v4.7 > to release a new version. If you have pending patches to include > before the release, please submit them now. Also, please test HEAD > on supported architectures. things build & pass make check with commit bb3a0f7 for: alpha (linux-3.8.0 glibc-2.15 gcc-4.5.4) armv7 EABI (linux-3.4.0 glibc-2.15 gcc-4.6.3) bfin (linux-3.5.0 uclibc-0.9.33 gcc-4.5.3) hppa (linux-3.8.0 glibc-2.14.1 gcc-4.7.2) ia64 (linux-3.3.8 glibc-2.15 gcc-4.6.3) ppc (linux-3.2.34 glibc-2.16 gcc-4.5.4) ppc64 (linux-3.2.34 glibc-2.15 gcc-4.5.4) s390 (linux-3.4.10 glibc-2.15 gcc-4.6.3) sparc32 (linux-2.6.39.4 glibc-2.15 gcc-4.5.4) x86 (32bit) (linux-3.8.3 glibc-2.16 gcc-4.7.2) x86_64 (64bit) (linux-3.8.3 glibc-2.17 gcc-4.8.0) no warnings worth noting (just the expected #warnings) sh4 (linux-2.6.30.9 glibc-2.11.3 gcc-4.5.3) waiting for this to finish building. this box is really slow :). s390x (linux-3.4.10 glibc-2.15 gcc-4.6.3) fails: util.c: In function ‘printllval’: util.c:216:4: error: #error BUG: must not combine two args for long long on this arch make[2]: *** [util.o] Error 1 x86_64 (x32) (linux-3.8.3 glibc-2.16 gcc-4.7.1) also fails: gcc -DHAVE_CONFIG_H -I. -I./linux/x32 -I./linux -I./linux -Wall -Wwrite- strings -g -O2 -MT file.o -MD -MP -MF .deps/file.Tpo -c -o file.o file.c file.c:1167:63: warning: ‘struct __old_kernel_stat’ declared inside parameter list [enabled by default] file.c:1167:63: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default] file.c: In function ‘convertoldstat’: file.c:1169:25: error: dereferencing pointer to incomplete type file.c:1170:25: error: dereferencing pointer to incomplete type file.c:1171:26: error: dereferencing pointer to incomplete type file.c:1172:27: error: dereferencing pointer to incomplete type file.c:1173:25: error: dereferencing pointer to incomplete type file.c:1174:25: error: dereferencing pointer to incomplete type file.c:1175:26: error: dereferencing pointer to incomplete type file.c:1176:26: error: dereferencing pointer to incomplete type file.c:1177:27: error: dereferencing pointer to incomplete type file.c:1178:27: error: dereferencing pointer to incomplete type file.c:1179:27: error: dereferencing pointer to incomplete type file.c: In function ‘printoldstat’: file.c:1187:27: error: storage size of ‘statbuf’ isn’t known file.c:1187:27: warning: unused variable ‘statbuf’ [-Wunused-variable] file.c: At top level: file.c:2815:1: error: redefinition of ‘sys_fstat64’ file.c:1320:1: note: previous definition of ‘sys_fstat64’ was here file.c:2827:1: error: redefinition of ‘sys_stat64’ file.c:1229:1: note: previous definition of ‘sys_stat64’ was here make[2]: *** [file.o] Error 1 -mike |
From: Chris M. <cme...@ti...> - 2013-05-01 15:28:56
|
On 4/30/2013 6:22 PM, Dmitry V. Levin wrote: > Hi, > > There is quite enough good stuff accumulated in strace.git since v4.7 > to release a new version. If you have pending patches to include > before the release, please submit them now. Also, please test HEAD > on supported architectures. > Tested for tilegx and works correctly. -- Chris Metcalf, Tilera Corp. http://www.tilera.com |
From: Mike F. <va...@ge...> - 2013-05-01 16:34:45
Attachments:
signature.asc
|
On Tuesday 30 April 2013 23:34:05 Mike Frysinger wrote: > On Tuesday 30 April 2013 18:22:24 Dmitry V. Levin wrote: > > There is quite enough good stuff accumulated in strace.git since v4.7 > > to release a new version. If you have pending patches to include > > before the release, please submit them now. Also, please test HEAD > > on supported architectures. > > things build & pass make check with commit bb3a0f7 for: also cross-compiled (but did not run) fine for: aarch64 armv4 > sh4 (linux-2.6.30.9 glibc-2.11.3 gcc-4.5.3) > waiting for this to finish building. this box is really slow :). it passed fine > s390x (linux-3.4.10 glibc-2.15 gcc-4.6.3) fails: > util.c: In function ‘printllval’: > util.c:216:4: error: #error BUG: must not combine two args for long long on > this arch > make[2]: *** [util.o] Error 1 after the fix i posted, this passes fine > x86_64 (x32) (linux-3.8.3 glibc-2.16 gcc-4.7.1) also fails: looks like you're already working on this. the latest git rev now looks like: file.c:2787:1: error: redefinition of ‘sys_fstat64’ file.c:1334:1: note: previous definition of ‘sys_fstat64’ was here file.c:2799:1: error: redefinition of ‘sys_stat64’ file.c:1243:1: note: previous definition of ‘sys_stat64’ was here make[2]: *** [file.o] Error 1 desc.c: In function ‘printflock’: desc.c:270:2: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘__off_t’ [-Wformat] desc.c:270:2: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 3 has type ‘__off_t’ [-Wformat] -mike |
From: James H. <jam...@im...> - 2013-05-01 16:38:02
Attachments:
signature.asc
|
On 30/04/13 23:22, Dmitry V. Levin wrote: > Hi, > > There is quite enough good stuff accumulated in strace.git since v4.7 > to release a new version. If you have pending patches to include > before the release, please submit them now. Also, please test HEAD > on supported architectures. I've tested bb3a0f7ad3353bd0e44ee004d44aeab6706705cc on metag. Cheers James |
From: Dmitry V. L. <ld...@al...> - 2013-05-01 17:01:49
|
On Wed, May 01, 2013 at 12:34:27PM -0400, Mike Frysinger wrote: > > x86_64 (x32) (linux-3.8.3 glibc-2.16 gcc-4.7.1) also fails: Looks like x32 was broken by commit v4.7-96-g8435d67. > looks like you're already working on this. the latest git rev now looks like: > file.c:2787:1: error: redefinition of ‘sys_fstat64’ > file.c:1334:1: note: previous definition of ‘sys_fstat64’ was here > file.c:2799:1: error: redefinition of ‘sys_stat64’ > file.c:1243:1: note: previous definition of ‘sys_stat64’ was here > make[2]: *** [file.o] Error 1 Please try this fix (I have no x32 nearby to check): * file.c [X32] (HAVE_STAT64, STAT64_SIZE): Define. [X32] (realprintstat64, sys_fstat64, sys_stat64): Remove. --- file.c | 87 ++---------------------------------------------------------------- 1 file changed, 2 insertions(+), 85 deletions(-) diff --git a/file.c b/file.c index 837bfed..b6133db 100644 --- a/file.c +++ b/file.c @@ -118,6 +118,8 @@ struct stat64 { unsigned long st_ctime_nsec; unsigned long long st_ino; }; +# define HAVE_STAT64 1 +# define STAT64_SIZE 96 struct __old_kernel_stat { unsigned short st_dev; @@ -2722,88 +2724,3 @@ sys_swapon(struct tcb *tcp) } return 0; } - -#ifdef X32 -# undef stat64 -# undef sys_fstat64 -# undef sys_stat64 - -static void -realprintstat64(struct tcb *tcp, long addr) -{ - struct stat64 statbuf; - - if (!addr) { - tprints("NULL"); - return; - } - if (syserror(tcp) || !verbose(tcp)) { - tprintf("%#lx", addr); - return; - } - - if (umove(tcp, addr, &statbuf) < 0) { - tprints("{...}"); - return; - } - - if (!abbrev(tcp)) { - tprintf("{st_dev=makedev(%lu, %lu), st_ino=%llu, st_mode=%s, ", - (unsigned long) major(statbuf.st_dev), - (unsigned long) minor(statbuf.st_dev), - (unsigned long long) statbuf.st_ino, - sprintmode(statbuf.st_mode)); - tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ", - (unsigned long) statbuf.st_nlink, - (unsigned long) statbuf.st_uid, - (unsigned long) statbuf.st_gid); - tprintf("st_blksize=%lu, ", - (unsigned long) statbuf.st_blksize); - tprintf("st_blocks=%lu, ", (unsigned long) statbuf.st_blocks); - } - else - tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode)); - switch (statbuf.st_mode & S_IFMT) { - case S_IFCHR: case S_IFBLK: - tprintf("st_rdev=makedev(%lu, %lu), ", - (unsigned long) major(statbuf.st_rdev), - (unsigned long) minor(statbuf.st_rdev)); - break; - default: - tprintf("st_size=%llu, ", (unsigned long long) statbuf.st_size); - break; - } - if (!abbrev(tcp)) { - tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime)); - tprintf("st_mtime=%s, ", sprinttime(statbuf.st_mtime)); - tprintf("st_ctime=%s", sprinttime(statbuf.st_ctime)); - tprints("}"); - } - else - tprints("...}"); -} - -int -sys_fstat64(struct tcb *tcp) -{ - if (entering(tcp)) { - printfd(tcp, tcp->u_arg[0]); - tprints(", "); - } else { - realprintstat64(tcp, tcp->u_arg[1]); - } - return 0; -} - -int -sys_stat64(struct tcb *tcp) -{ - if (entering(tcp)) { - printpath(tcp, tcp->u_arg[0]); - tprints(", "); - } else { - realprintstat64(tcp, tcp->u_arg[1]); - } - return 0; -} -#endif > desc.c: In function ‘printflock’: > desc.c:270:2: warning: format ‘%ld’ expects argument of type ‘long int’, but > argument 2 has type ‘__off_t’ [-Wformat] > desc.c:270:2: warning: format ‘%ld’ expects argument of type ‘long int’, but > argument 3 has type ‘__off_t’ [-Wformat] And it actually does incorrect decoding on x32. -- ldv |
From: Mike F. <va...@ge...> - 2013-05-01 17:32:13
Attachments:
signature.asc
|
On Wednesday 01 May 2013 13:01:41 Dmitry V. Levin wrote: > On Wed, May 01, 2013 at 12:34:27PM -0400, Mike Frysinger wrote: > > > x86_64 (x32) (linux-3.8.3 glibc-2.16 gcc-4.7.1) also fails: > Looks like x32 was broken by commit v4.7-96-g8435d67. > > > looks like you're already working on this. the latest git rev now looks > > like: file.c:2787:1: error: redefinition of ‘sys_fstat64’ > > file.c:1334:1: note: previous definition of ‘sys_fstat64’ was here > > file.c:2799:1: error: redefinition of ‘sys_stat64’ > > file.c:1243:1: note: previous definition of ‘sys_stat64’ was here > > make[2]: *** [file.o] Error 1 > > Please try this fix (I have no x32 nearby to check): that gets me: file.c: In function ‘printstat64’: file.c:1068:2: error: size of unnamed array is negative -mike |
From: Dmitry V. L. <ld...@al...> - 2013-05-01 17:39:18
|
On Wed, May 01, 2013 at 01:31:50PM -0400, Mike Frysinger wrote: > On Wednesday 01 May 2013 13:01:41 Dmitry V. Levin wrote: > > On Wed, May 01, 2013 at 12:34:27PM -0400, Mike Frysinger wrote: > > > > x86_64 (x32) (linux-3.8.3 glibc-2.16 gcc-4.7.1) also fails: > > Looks like x32 was broken by commit v4.7-96-g8435d67. > > > > > looks like you're already working on this. the latest git rev now looks > > > like: file.c:2787:1: error: redefinition of ‘sys_fstat64’ > > > file.c:1334:1: note: previous definition of ‘sys_fstat64’ was here > > > file.c:2799:1: error: redefinition of ‘sys_stat64’ > > > file.c:1243:1: note: previous definition of ‘sys_stat64’ was here > > > make[2]: *** [file.o] Error 1 > > > > Please try this fix (I have no x32 nearby to check): > > that gets me: > file.c: In function ‘printstat64’: > file.c:1068:2: error: size of unnamed array is negative Well, it probably also needs this: diff --git a/file.c b/file.c index b6133db..adf3356 100644 --- a/file.c +++ b/file.c @@ -117,7 +117,7 @@ struct stat64 { unsigned long st_ctime; unsigned long st_ctime_nsec; unsigned long long st_ino; -}; +} __attribute__((packed)); # define HAVE_STAT64 1 # define STAT64_SIZE 96 -- ldv |
From: Mike F. <va...@ge...> - 2013-05-01 17:55:41
Attachments:
signature.asc
|
On Wednesday 01 May 2013 13:39:10 Dmitry V. Levin wrote: > On Wed, May 01, 2013 at 01:31:50PM -0400, Mike Frysinger wrote: > > On Wednesday 01 May 2013 13:01:41 Dmitry V. Levin wrote: > > > On Wed, May 01, 2013 at 12:34:27PM -0400, Mike Frysinger wrote: > > > > > x86_64 (x32) (linux-3.8.3 glibc-2.16 gcc-4.7.1) also fails: > > > Looks like x32 was broken by commit v4.7-96-g8435d67. > > > > > > > looks like you're already working on this. the latest git rev now > > > > looks like: file.c:2787:1: error: redefinition of ‘sys_fstat64’ > > > > file.c:1334:1: note: previous definition of ‘sys_fstat64’ was here > > > > file.c:2799:1: error: redefinition of ‘sys_stat64’ > > > > file.c:1243:1: note: previous definition of ‘sys_stat64’ was here > > > > make[2]: *** [file.o] Error 1 > > > > > > Please try this fix (I have no x32 nearby to check): > > that gets me: > > file.c: In function ‘printstat64’: > > file.c:1068:2: error: size of unnamed array is negative > > Well, it probably also needs this: > > diff --git a/file.c b/file.c > index b6133db..adf3356 100644 > --- a/file.c > +++ b/file.c > @@ -117,7 +117,7 @@ struct stat64 { > unsigned long st_ctime; > unsigned long st_ctime_nsec; > unsigned long long st_ino; > -}; > +} __attribute__((packed)); > # define HAVE_STAT64 1 > # define STAT64_SIZE 96 that makes it build, but runtime is incorrect $ cat test.c #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int main(int argc, char *argv[]) { struct stat st; stat(argv[1], &st); printf("%llu\n", (unsigned long long)st.st_size); } $ gcc test.c $ truncate -s 10G f $ ls -lh f -rw-r--r-- 1 root root 10G May 1 13:48 f $ ./a.out f 10737418240 $ strace -V strace -- version 4.7 $ strace -v -estat ./a.out f stat("f", {st_dev=makedev(9, 0), st_ino=30545838, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=0, st_size=10737418240, st_atime=2013/05/01-13:48:52, st_mtime=2013/05/01-13:48:52, st_ctime=2013/05/01-13:48:52}) = 0 10737418240 $ ./strace -v -estat ./a.out f --- stopped by SIGSTOP --- --- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=32087, si_uid=0} --- stat("f", {st_dev=makedev(9, 0), st_ino=30545838, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=0, st_size=2147483648, st_atime=2013/05/01-13:48:52, st_mtime=2013/05/01-13:48:52, st_ctime=2013/05/01-13:48:52}) = 0 10737418240 notice how st_size is wrong in the second one -mike |
From: Dmitry V. L. <ld...@al...> - 2013-05-01 18:34:28
|
On Wed, May 01, 2013 at 01:55:18PM -0400, Mike Frysinger wrote: [...] > that makes it build, but runtime is incorrect Thanks, could you please test another fix instead of the first one: * file.c [X32] (struct stat64): Add __attribute__((packed)). [X32] (HAVE_STAT64, STAT64_SIZE): Define. (printstat) [X32]: Use printstat64 for current_personality == 0. [X32] (realprintstat64, sys_fstat64, sys_stat64): Remove. * linux/x32/syscallent.h: Fix handlers for truncate and ftruncate. --- file.c | 180 ++++++++++++++----------------------------------- linux/x32/syscallent.h | 4 +- 2 files changed, 54 insertions(+), 130 deletions(-) diff --git a/file.c b/file.c index 837bfed..36900b8 100644 --- a/file.c +++ b/file.c @@ -117,7 +117,9 @@ struct stat64 { unsigned long st_ctime; unsigned long st_ctime_nsec; unsigned long long st_ino; -}; +} __attribute__((packed)); +# define HAVE_STAT64 1 +# define STAT64_SIZE 96 struct __old_kernel_stat { unsigned short st_dev; @@ -982,48 +984,6 @@ realprintstat(struct tcb *tcp, struct stat *statbuf) tprints("...}"); } -static void -printstat(struct tcb *tcp, long addr) -{ - struct stat statbuf; - - if (!addr) { - tprints("NULL"); - return; - } - if (syserror(tcp) || !verbose(tcp)) { - tprintf("%#lx", addr); - return; - } - -#if defined(SPARC) || defined(SPARC64) - if (current_personality == 1) { - printstatsol(tcp, addr); - return; - } -#ifdef SPARC64 - else if (current_personality == 2) { - printstat_sparc64(tcp, addr); - return; - } -#endif -#endif /* SPARC[64] */ - -#if defined POWERPC64 - if (current_personality == 1) { - printstat_powerpc32(tcp, addr); - return; - } -#endif - - if (umove(tcp, addr, &statbuf) < 0) { - tprints("{...}"); - return; - } - - realprintstat(tcp, &statbuf); -} - #if !defined HAVE_STAT64 && defined X86_64 /* * Linux x86_64 has unified `struct stat' but its i386 biarch needs @@ -1176,6 +1136,55 @@ printstat64(struct tcb *tcp, long addr) } #endif /* HAVE_STAT64 */ +static void +printstat(struct tcb *tcp, long addr) +{ + struct stat statbuf; + + if (!addr) { + tprints("NULL"); + return; + } + if (syserror(tcp) || !verbose(tcp)) { + tprintf("%#lx", addr); + return; + } + +#if defined(SPARC) || defined(SPARC64) + if (current_personality == 1) { + printstatsol(tcp, addr); + return; + } +#ifdef SPARC64 + else if (current_personality == 2) { + printstat_sparc64(tcp, addr); + return; + } +#endif +#endif /* SPARC[64] */ + +#if defined POWERPC64 + if (current_personality == 1) { + printstat_powerpc32(tcp, addr); + return; + } +#endif + +#ifdef X32 + if (current_personality == 0) { + printstat64(tcp, addr); + return; + } +#endif + + if (umove(tcp, addr, &statbuf) < 0) { + tprints("{...}"); + return; + } + + realprintstat(tcp, &statbuf); +} + #if defined(HAVE_STRUCT___OLD_KERNEL_STAT) static void convertoldstat(const struct __old_kernel_stat *oldbuf, struct stat *newbuf) @@ -2722,88 +2731,3 @@ sys_swapon(struct tcb *tcp) } return 0; } - -#ifdef X32 -# undef stat64 -# undef sys_fstat64 -# undef sys_stat64 - -static void -realprintstat64(struct tcb *tcp, long addr) -{ - struct stat64 statbuf; - - if (!addr) { - tprints("NULL"); - return; - } - if (syserror(tcp) || !verbose(tcp)) { - tprintf("%#lx", addr); - return; - } - - if (umove(tcp, addr, &statbuf) < 0) { - tprints("{...}"); - return; - } - - if (!abbrev(tcp)) { - tprintf("{st_dev=makedev(%lu, %lu), st_ino=%llu, st_mode=%s, ", - (unsigned long) major(statbuf.st_dev), - (unsigned long) minor(statbuf.st_dev), - (unsigned long long) statbuf.st_ino, - sprintmode(statbuf.st_mode)); - tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ", - (unsigned long) statbuf.st_nlink, - (unsigned long) statbuf.st_uid, - (unsigned long) statbuf.st_gid); - tprintf("st_blksize=%lu, ", - (unsigned long) statbuf.st_blksize); - tprintf("st_blocks=%lu, ", (unsigned long) statbuf.st_blocks); - } - else - tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode)); - switch (statbuf.st_mode & S_IFMT) { - case S_IFCHR: case S_IFBLK: - tprintf("st_rdev=makedev(%lu, %lu), ", - (unsigned long) major(statbuf.st_rdev), - (unsigned long) minor(statbuf.st_rdev)); - break; - default: - tprintf("st_size=%llu, ", (unsigned long long) statbuf.st_size); - break; - } - if (!abbrev(tcp)) { - tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime)); - tprintf("st_mtime=%s, ", sprinttime(statbuf.st_mtime)); - tprintf("st_ctime=%s", sprinttime(statbuf.st_ctime)); - tprints("}"); - } - else - tprints("...}"); -} - -int -sys_fstat64(struct tcb *tcp) -{ - if (entering(tcp)) { - printfd(tcp, tcp->u_arg[0]); - tprints(", "); - } else { - realprintstat64(tcp, tcp->u_arg[1]); - } - return 0; -} - -int -sys_stat64(struct tcb *tcp) -{ - if (entering(tcp)) { - printpath(tcp, tcp->u_arg[0]); - tprints(", "); - } else { - realprintstat64(tcp, tcp->u_arg[1]); - } - return 0; -} -#endif diff --git a/linux/x32/syscallent.h b/linux/x32/syscallent.h index 4adf66b..0098e76 100644 --- a/linux/x32/syscallent.h +++ b/linux/x32/syscallent.h @@ -74,8 +74,8 @@ { 2, TD, sys_flock, "flock" }, /* 73 */ { 1, TD, sys_fsync, "fsync" }, /* 74 */ { 1, TD, sys_fdatasync, "fdatasync" }, /* 75 */ - { 2, TF, sys_truncate, "truncate" }, /* 76 */ - { 2, TD, sys_ftruncate, "ftruncate" }, /* 77 */ + { 2, TF, sys_truncate64, "truncate" }, /* 76 */ + { 2, TD, sys_ftruncate64, "ftruncate" }, /* 77 */ { 3, TD, sys_getdents, "getdents" }, /* 78 */ { 2, TF, sys_getcwd, "getcwd" }, /* 79 */ { 1, TF, sys_chdir, "chdir" }, /* 80 */ -- ldv |
From: Mike F. <va...@ge...> - 2013-05-01 18:47:05
Attachments:
signature.asc
|
On Wednesday 01 May 2013 14:34:13 Dmitry V. Levin wrote: > On Wed, May 01, 2013 at 01:55:18PM -0400, Mike Frysinger wrote: > [...] > > > that makes it build, but runtime is incorrect > > Thanks, could you please test another fix instead of the first one: still no dice :) stat("f", {st_dev=makedev(9, 0), st_ino=1367430532, st_mode=01, st_nlink=0, st_uid=33188, st_gid=0, st_blksize=2, st_blocks=4096, st_size=9223372036854775808, st_atime=0, st_mtime=2013/05/01-13:48:52, st_ctime=1970/03/05-02:42:08}) = 0 -mike |
From: Dmitry V. L. <ld...@al...> - 2013-05-01 21:55:16
|
On Wed, May 01, 2013 at 02:46:42PM -0400, Mike Frysinger wrote: > On Wednesday 01 May 2013 14:34:13 Dmitry V. Levin wrote: > > On Wed, May 01, 2013 at 01:55:18PM -0400, Mike Frysinger wrote: > > [...] > > > > > that makes it build, but runtime is incorrect > > > > Thanks, could you please test another fix instead of the first one: > > still no dice :) OK, attempt #4, with some changes from v4.7-96-g8435d67 reverted. * desc.c (printflock) [X32]: Add special handling required for this architecture with sizeof(long) < sizeof(off_t). * file.c [X32] (struct stat64): Add __attribute__((packed)). [X32] (HAVE_STAT64): Define. (realprintstat, printstat) [X32]: Do not define these functions, redirect printstat to printstat64 instead. (printstat64) [X32]: Use "struct stat" instead of "struct stat64". [X32] (realprintstat64): Rename to printstat64_x32. (sys_stat64, sys_fstat64) [X32]: Remove second definitions of these functions. Call printstat64_x32 instead of printstat64 * linux/x32/syscallent.h: Fix handlers for truncate and ftruncate. --- desc.c | 10 +++ file.c | 161 +++++++++++++++++++++++-------------------------- linux/x32/syscallent.h | 4 +- 3 files changed, 87 insertions(+), 88 deletions(-) diff --git a/desc.c b/desc.c index cd2c857..4ee6ee4 100644 --- a/desc.c +++ b/desc.c @@ -230,6 +230,12 @@ printflock(struct tcb *tcp, long addr, int getlk) struct flock fl; #if SUPPORTED_PERSONALITIES > 1 +# ifdef X32 + if (current_personality == 0) { + printflock64(tcp, addr, getlk); + return; + } +# endif if (current_wordsize != sizeof(fl.l_start)) { if (current_wordsize == 4) { /* 32-bit x86 app on x86_64 and similar cases */ @@ -267,7 +273,11 @@ printflock(struct tcb *tcp, long addr, int getlk) printxval(lockfcmds, fl.l_type, "F_???"); tprints(", whence="); printxval(whence_codes, fl.l_whence, "SEEK_???"); +#ifdef X32 + tprintf(", start=%lld, len=%lld", fl.l_start, fl.l_len); +#else tprintf(", start=%ld, len=%ld", fl.l_start, fl.l_len); +#endif if (getlk) tprintf(", pid=%lu}", (unsigned long) fl.l_pid); else diff --git a/file.c b/file.c index 837bfed..80a70a7 100644 --- a/file.c +++ b/file.c @@ -117,7 +117,8 @@ struct stat64 { unsigned long st_ctime; unsigned long st_ctime_nsec; unsigned long long st_ino; -}; +} __attribute__((packed)); +# define HAVE_STAT64 1 struct __old_kernel_stat { unsigned short st_dev; @@ -917,6 +918,7 @@ static const struct xlat fileflags[] = { { 0, NULL }, }; +#ifndef X32 static void realprintstat(struct tcb *tcp, struct stat *statbuf) { @@ -1023,6 +1025,9 @@ printstat(struct tcb *tcp, long addr) realprintstat(tcp, &statbuf); } +#else /* X32 */ +# define printstat printstat64 +#endif #if !defined HAVE_STAT64 && defined X86_64 /* @@ -1060,7 +1065,11 @@ struct stat64 { static void printstat64(struct tcb *tcp, long addr) { +#ifdef X32 + struct stat statbuf; +#else struct stat64 statbuf; +#endif #ifdef STAT64_SIZE (void) sizeof(char[sizeof statbuf == STAT64_SIZE ? 1 : -1]); @@ -1239,6 +1248,63 @@ sys_stat(struct tcb *tcp) return 0; } +#ifdef X32 +static void +printstat64_x32(struct tcb *tcp, long addr) +{ + struct stat64 statbuf; + + if (!addr) { + tprints("NULL"); + return; + } + if (syserror(tcp) || !verbose(tcp)) { + tprintf("%#lx", addr); + return; + } + + if (umove(tcp, addr, &statbuf) < 0) { + tprints("{...}"); + return; + } + + if (!abbrev(tcp)) { + tprintf("{st_dev=makedev(%lu, %lu), st_ino=%llu, st_mode=%s, ", + (unsigned long) major(statbuf.st_dev), + (unsigned long) minor(statbuf.st_dev), + (unsigned long long) statbuf.st_ino, + sprintmode(statbuf.st_mode)); + tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ", + (unsigned long) statbuf.st_nlink, + (unsigned long) statbuf.st_uid, + (unsigned long) statbuf.st_gid); + tprintf("st_blksize=%lu, ", + (unsigned long) statbuf.st_blksize); + tprintf("st_blocks=%lu, ", (unsigned long) statbuf.st_blocks); + } + else + tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode)); + switch (statbuf.st_mode & S_IFMT) { + case S_IFCHR: case S_IFBLK: + tprintf("st_rdev=makedev(%lu, %lu), ", + (unsigned long) major(statbuf.st_rdev), + (unsigned long) minor(statbuf.st_rdev)); + break; + default: + tprintf("st_size=%llu, ", (unsigned long long) statbuf.st_size); + break; + } + if (!abbrev(tcp)) { + tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime)); + tprintf("st_mtime=%s, ", sprinttime(statbuf.st_mtime)); + tprintf("st_ctime=%s", sprinttime(statbuf.st_ctime)); + tprints("}"); + } + else + tprints("...}"); +} +#endif /* X32 */ + int sys_stat64(struct tcb *tcp) { @@ -1247,7 +1313,11 @@ sys_stat64(struct tcb *tcp) printpath(tcp, tcp->u_arg[0]); tprints(", "); } else { +# ifdef X32 + printstat64_x32(tcp, tcp->u_arg[1]); +# else printstat64(tcp, tcp->u_arg[1]); +# endif } return 0; #else @@ -1338,7 +1408,11 @@ sys_fstat64(struct tcb *tcp) printfd(tcp, tcp->u_arg[0]); tprints(", "); } else { +# ifdef X32 + printstat64_x32(tcp, tcp->u_arg[1]); +# else printstat64(tcp, tcp->u_arg[1]); +# endif } return 0; #else @@ -2722,88 +2796,3 @@ sys_swapon(struct tcb *tcp) } return 0; } - -#ifdef X32 -# undef stat64 -# undef sys_fstat64 -# undef sys_stat64 - -static void -realprintstat64(struct tcb *tcp, long addr) -{ - struct stat64 statbuf; - - if (!addr) { - tprints("NULL"); - return; - } - if (syserror(tcp) || !verbose(tcp)) { - tprintf("%#lx", addr); - return; - } - - if (umove(tcp, addr, &statbuf) < 0) { - tprints("{...}"); - return; - } - - if (!abbrev(tcp)) { - tprintf("{st_dev=makedev(%lu, %lu), st_ino=%llu, st_mode=%s, ", - (unsigned long) major(statbuf.st_dev), - (unsigned long) minor(statbuf.st_dev), - (unsigned long long) statbuf.st_ino, - sprintmode(statbuf.st_mode)); - tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ", - (unsigned long) statbuf.st_nlink, - (unsigned long) statbuf.st_uid, - (unsigned long) statbuf.st_gid); - tprintf("st_blksize=%lu, ", - (unsigned long) statbuf.st_blksize); - tprintf("st_blocks=%lu, ", (unsigned long) statbuf.st_blocks); - } - else - tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode)); - switch (statbuf.st_mode & S_IFMT) { - case S_IFCHR: case S_IFBLK: - tprintf("st_rdev=makedev(%lu, %lu), ", - (unsigned long) major(statbuf.st_rdev), - (unsigned long) minor(statbuf.st_rdev)); - break; - default: - tprintf("st_size=%llu, ", (unsigned long long) statbuf.st_size); - break; - } - if (!abbrev(tcp)) { - tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime)); - tprintf("st_mtime=%s, ", sprinttime(statbuf.st_mtime)); - tprintf("st_ctime=%s", sprinttime(statbuf.st_ctime)); - tprints("}"); - } - else - tprints("...}"); -} - -int -sys_fstat64(struct tcb *tcp) -{ - if (entering(tcp)) { - printfd(tcp, tcp->u_arg[0]); - tprints(", "); - } else { - realprintstat64(tcp, tcp->u_arg[1]); - } - return 0; -} - -int -sys_stat64(struct tcb *tcp) -{ - if (entering(tcp)) { - printpath(tcp, tcp->u_arg[0]); - tprints(", "); - } else { - realprintstat64(tcp, tcp->u_arg[1]); - } - return 0; -} -#endif diff --git a/linux/x32/syscallent.h b/linux/x32/syscallent.h index 4adf66b..0098e76 100644 --- a/linux/x32/syscallent.h +++ b/linux/x32/syscallent.h @@ -74,8 +74,8 @@ { 2, TD, sys_flock, "flock" }, /* 73 */ { 1, TD, sys_fsync, "fsync" }, /* 74 */ { 1, TD, sys_fdatasync, "fdatasync" }, /* 75 */ - { 2, TF, sys_truncate, "truncate" }, /* 76 */ - { 2, TD, sys_ftruncate, "ftruncate" }, /* 77 */ + { 2, TF, sys_truncate64, "truncate" }, /* 76 */ + { 2, TD, sys_ftruncate64, "ftruncate" }, /* 77 */ { 3, TD, sys_getdents, "getdents" }, /* 78 */ { 2, TF, sys_getcwd, "getcwd" }, /* 79 */ { 1, TF, sys_chdir, "chdir" }, /* 80 */ -- ldv |
From: Mike F. <va...@ge...> - 2013-05-01 22:27:42
Attachments:
signature.asc
|
On Wednesday 01 May 2013 17:55:07 Dmitry V. Levin wrote: > OK, attempt #4, with some changes from v4.7-96-g8435d67 reverted. initial build fails: desc.c: In function ‘printflock’: desc.c:235:3: warning: implicit declaration of function ‘printflock64’ [- Wimplicit-function-declaration] desc.c: At top level: desc.c:290:1: warning: conflicting types for ‘printflock64’ [enabled by default] desc.c:290:1: error: static declaration of ‘printflock64’ follows non-static declaration desc.c:235:3: note: previous implicit declaration of ‘printflock64’ was here i fix that locally by just moving the definition of printflock64. then an earlier warning turns into a link failure: file.c: In function ‘printoldstat’: file.c:1235:2: warning: implicit declaration of function ‘realprintstat’ [- Wimplicit-function-declaration] ... file.o: In function `printoldstat': /root/strace/file.c:1235: undefined reference to `realprintstat' collect2: error: ld returned 1 exit status make[2]: *** [strace] Error 1 x32 builds define HAVE_STRUCT___OLD_KERNEL_STAT for the i386 32bit ABI. i hacked out that call just to get it to link and it looks like stat() gets decoded properly: stat("f", {st_dev=makedev(9, 0), st_ino=30545838, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=0, st_size=10737418240, st_atime=2013/05/01-13:48:52, st_mtime=2013/05/01-13:48:52, st_ctime=2013/05/01-13:48:52}) = 0 10737418240 -mike |
From: Dmitry V. L. <ld...@al...> - 2013-05-01 22:49:11
|
On Wed, May 01, 2013 at 06:27:32PM -0400, Mike Frysinger wrote: > On Wednesday 01 May 2013 17:55:07 Dmitry V. Levin wrote: > > OK, attempt #4, with some changes from v4.7-96-g8435d67 reverted. > > initial build fails: [...] > i fix that locally by just moving the definition of printflock64. [...] > then an earlier warning turns into a link failure: [...] > file.o: In function `printoldstat': > /root/strace/file.c:1235: undefined reference to `realprintstat' [...] > x32 builds define HAVE_STRUCT___OLD_KERNEL_STAT for the i386 32bit ABI. i > hacked out that call just to get it to link and it looks like stat() gets > decoded properly: Thanks. I hope this would be the final attempt: * desc.c (printflock) [X32]: Add special handling required for this architecture with sizeof(long) < sizeof(off_t). * file.c [X32] (struct stat64): Add __attribute__((packed)). [X32] (HAVE_STAT64): Define. (printstat) [X32]: Redirect to printstat64. (printstat64) [X32]: Use "struct stat" instead of "struct stat64". [X32] (realprintstat64): Rename to printstat64_x32. (sys_stat64, sys_fstat64) [X32]: Remove second definitions of these functions. Call printstat64_x32 instead of printstat64 * linux/x32/syscallent.h: Fix handlers for truncate and ftruncate. --- desc.c | 56 ++++++++++------- file.c | 161 +++++++++++++++++++++++-------------------------- linux/x32/syscallent.h | 4 +- 3 files changed, 110 insertions(+), 111 deletions(-) diff --git a/desc.c b/desc.c index cd2c857..a420feb 100644 --- a/desc.c +++ b/desc.c @@ -223,6 +223,29 @@ static const struct xlat perf_event_open_flags[] = { { 0, NULL }, }; +#if _LFS64_LARGEFILE +/* fcntl/lockf */ +static void +printflock64(struct tcb *tcp, long addr, int getlk) +{ + struct flock64 fl; + + if (umove(tcp, addr, &fl) < 0) { + tprints("{...}"); + return; + } + tprints("{type="); + printxval(lockfcmds, fl.l_type, "F_???"); + tprints(", whence="); + printxval(whence_codes, fl.l_whence, "SEEK_???"); + tprintf(", start=%lld, len=%lld", (long long) fl.l_start, (long long) fl.l_len); + if (getlk) + tprintf(", pid=%lu}", (unsigned long) fl.l_pid); + else + tprints("}"); +} +#endif + /* fcntl/lockf */ static void printflock(struct tcb *tcp, long addr, int getlk) @@ -230,6 +253,12 @@ printflock(struct tcb *tcp, long addr, int getlk) struct flock fl; #if SUPPORTED_PERSONALITIES > 1 +# ifdef X32 + if (current_personality == 0) { + printflock64(tcp, addr, getlk); + return; + } +# endif if (current_wordsize != sizeof(fl.l_start)) { if (current_wordsize == 4) { /* 32-bit x86 app on x86_64 and similar cases */ @@ -267,36 +296,17 @@ printflock(struct tcb *tcp, long addr, int getlk) printxval(lockfcmds, fl.l_type, "F_???"); tprints(", whence="); printxval(whence_codes, fl.l_whence, "SEEK_???"); +#ifdef X32 + tprintf(", start=%lld, len=%lld", fl.l_start, fl.l_len); +#else tprintf(", start=%ld, len=%ld", fl.l_start, fl.l_len); +#endif if (getlk) tprintf(", pid=%lu}", (unsigned long) fl.l_pid); else tprints("}"); } -#if _LFS64_LARGEFILE -/* fcntl/lockf */ -static void -printflock64(struct tcb *tcp, long addr, int getlk) -{ - struct flock64 fl; - - if (umove(tcp, addr, &fl) < 0) { - tprints("{...}"); - return; - } - tprints("{type="); - printxval(lockfcmds, fl.l_type, "F_???"); - tprints(", whence="); - printxval(whence_codes, fl.l_whence, "SEEK_???"); - tprintf(", start=%lld, len=%lld", (long long) fl.l_start, (long long) fl.l_len); - if (getlk) - tprintf(", pid=%lu}", (unsigned long) fl.l_pid); - else - tprints("}"); -} -#endif - int sys_fcntl(struct tcb *tcp) { diff --git a/file.c b/file.c index 837bfed..35f2b71 100644 --- a/file.c +++ b/file.c @@ -117,7 +117,8 @@ struct stat64 { unsigned long st_ctime; unsigned long st_ctime_nsec; unsigned long long st_ino; -}; +} __attribute__((packed)); +# define HAVE_STAT64 1 struct __old_kernel_stat { unsigned short st_dev; @@ -982,6 +983,7 @@ realprintstat(struct tcb *tcp, struct stat *statbuf) tprints("...}"); } +#ifndef X32 static void printstat(struct tcb *tcp, long addr) { @@ -1023,6 +1025,9 @@ printstat(struct tcb *tcp, long addr) realprintstat(tcp, &statbuf); } +#else /* X32 */ +# define printstat printstat64 +#endif #if !defined HAVE_STAT64 && defined X86_64 /* @@ -1060,7 +1065,11 @@ struct stat64 { static void printstat64(struct tcb *tcp, long addr) { +#ifdef X32 + struct stat statbuf; +#else struct stat64 statbuf; +#endif #ifdef STAT64_SIZE (void) sizeof(char[sizeof statbuf == STAT64_SIZE ? 1 : -1]); @@ -1239,6 +1248,63 @@ sys_stat(struct tcb *tcp) return 0; } +#ifdef X32 +static void +printstat64_x32(struct tcb *tcp, long addr) +{ + struct stat64 statbuf; + + if (!addr) { + tprints("NULL"); + return; + } + if (syserror(tcp) || !verbose(tcp)) { + tprintf("%#lx", addr); + return; + } + + if (umove(tcp, addr, &statbuf) < 0) { + tprints("{...}"); + return; + } + + if (!abbrev(tcp)) { + tprintf("{st_dev=makedev(%lu, %lu), st_ino=%llu, st_mode=%s, ", + (unsigned long) major(statbuf.st_dev), + (unsigned long) minor(statbuf.st_dev), + (unsigned long long) statbuf.st_ino, + sprintmode(statbuf.st_mode)); + tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ", + (unsigned long) statbuf.st_nlink, + (unsigned long) statbuf.st_uid, + (unsigned long) statbuf.st_gid); + tprintf("st_blksize=%lu, ", + (unsigned long) statbuf.st_blksize); + tprintf("st_blocks=%lu, ", (unsigned long) statbuf.st_blocks); + } + else + tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode)); + switch (statbuf.st_mode & S_IFMT) { + case S_IFCHR: case S_IFBLK: + tprintf("st_rdev=makedev(%lu, %lu), ", + (unsigned long) major(statbuf.st_rdev), + (unsigned long) minor(statbuf.st_rdev)); + break; + default: + tprintf("st_size=%llu, ", (unsigned long long) statbuf.st_size); + break; + } + if (!abbrev(tcp)) { + tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime)); + tprintf("st_mtime=%s, ", sprinttime(statbuf.st_mtime)); + tprintf("st_ctime=%s", sprinttime(statbuf.st_ctime)); + tprints("}"); + } + else + tprints("...}"); +} +#endif /* X32 */ + int sys_stat64(struct tcb *tcp) { @@ -1247,7 +1313,11 @@ sys_stat64(struct tcb *tcp) printpath(tcp, tcp->u_arg[0]); tprints(", "); } else { +# ifdef X32 + printstat64_x32(tcp, tcp->u_arg[1]); +# else printstat64(tcp, tcp->u_arg[1]); +# endif } return 0; #else @@ -1338,7 +1408,11 @@ sys_fstat64(struct tcb *tcp) printfd(tcp, tcp->u_arg[0]); tprints(", "); } else { +# ifdef X32 + printstat64_x32(tcp, tcp->u_arg[1]); +# else printstat64(tcp, tcp->u_arg[1]); +# endif } return 0; #else @@ -2722,88 +2796,3 @@ sys_swapon(struct tcb *tcp) } return 0; } - -#ifdef X32 -# undef stat64 -# undef sys_fstat64 -# undef sys_stat64 - -static void -realprintstat64(struct tcb *tcp, long addr) -{ - struct stat64 statbuf; - - if (!addr) { - tprints("NULL"); - return; - } - if (syserror(tcp) || !verbose(tcp)) { - tprintf("%#lx", addr); - return; - } - - if (umove(tcp, addr, &statbuf) < 0) { - tprints("{...}"); - return; - } - - if (!abbrev(tcp)) { - tprintf("{st_dev=makedev(%lu, %lu), st_ino=%llu, st_mode=%s, ", - (unsigned long) major(statbuf.st_dev), - (unsigned long) minor(statbuf.st_dev), - (unsigned long long) statbuf.st_ino, - sprintmode(statbuf.st_mode)); - tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ", - (unsigned long) statbuf.st_nlink, - (unsigned long) statbuf.st_uid, - (unsigned long) statbuf.st_gid); - tprintf("st_blksize=%lu, ", - (unsigned long) statbuf.st_blksize); - tprintf("st_blocks=%lu, ", (unsigned long) statbuf.st_blocks); - } - else - tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode)); - switch (statbuf.st_mode & S_IFMT) { - case S_IFCHR: case S_IFBLK: - tprintf("st_rdev=makedev(%lu, %lu), ", - (unsigned long) major(statbuf.st_rdev), - (unsigned long) minor(statbuf.st_rdev)); - break; - default: - tprintf("st_size=%llu, ", (unsigned long long) statbuf.st_size); - break; - } - if (!abbrev(tcp)) { - tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime)); - tprintf("st_mtime=%s, ", sprinttime(statbuf.st_mtime)); - tprintf("st_ctime=%s", sprinttime(statbuf.st_ctime)); - tprints("}"); - } - else - tprints("...}"); -} - -int -sys_fstat64(struct tcb *tcp) -{ - if (entering(tcp)) { - printfd(tcp, tcp->u_arg[0]); - tprints(", "); - } else { - realprintstat64(tcp, tcp->u_arg[1]); - } - return 0; -} - -int -sys_stat64(struct tcb *tcp) -{ - if (entering(tcp)) { - printpath(tcp, tcp->u_arg[0]); - tprints(", "); - } else { - realprintstat64(tcp, tcp->u_arg[1]); - } - return 0; -} -#endif diff --git a/linux/x32/syscallent.h b/linux/x32/syscallent.h index 4adf66b..0098e76 100644 --- a/linux/x32/syscallent.h +++ b/linux/x32/syscallent.h @@ -74,8 +74,8 @@ { 2, TD, sys_flock, "flock" }, /* 73 */ { 1, TD, sys_fsync, "fsync" }, /* 74 */ { 1, TD, sys_fdatasync, "fdatasync" }, /* 75 */ - { 2, TF, sys_truncate, "truncate" }, /* 76 */ - { 2, TD, sys_ftruncate, "ftruncate" }, /* 77 */ + { 2, TF, sys_truncate64, "truncate" }, /* 76 */ + { 2, TD, sys_ftruncate64, "ftruncate" }, /* 77 */ { 3, TD, sys_getdents, "getdents" }, /* 78 */ { 2, TF, sys_getcwd, "getcwd" }, /* 79 */ { 1, TF, sys_chdir, "chdir" }, /* 80 */ -- ldv |
From: Mike F. <va...@ge...> - 2013-05-02 00:29:47
Attachments:
signature.asc
|
On Wednesday 01 May 2013 18:49:02 Dmitry V. Levin wrote: > Thanks. I hope this would be the final attempt: this one builds cleanly, and seems to run ok. bonus points because it seems to also fix stat64() decoding in the i386 32bit ABI. $ ./strace -v -estat64,stat ./a.out f stat("f", {st_dev=makedev(9, 0), st_ino=30545838, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=0, st_size=10737418240, st_atime=2013/05/01-13:48:52, st_mtime=2013/05/01-13:48:52, st_ctime=2013/05/01-13:48:52}) = 0 10737418240 $ ./strace -v -estat64,stat ./a.out32 f [ Process PID=2661 runs in 32 bit mode. ] stat64("f", {st_dev=makedev(9, 0), st_ino=30545838, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=0, st_size=10737418240, st_atime=2013/05/01-13:48:52, st_mtime=2013/05/01-13:48:52, st_ctime=2013/05/01-13:48:52}) = 0 as compared to the 4.7 release where it gets it wrong: $ strace -v -estat64,stat ./a.out32 f [ Process PID=2668 runs in 32 bit mode. ] stat64("f", {st_dev=makedev(9, 0), st_ino=134513920, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=0, st_blocks=1367430532, st_size=17592186044418, st_atime=2013/05/01-13:48:52, st_mtime=2013/05/01-13:48:52, st_ctime=1970/12/20-07:57:18}) = 0 -mike |
From: Dmitry V. L. <ld...@al...> - 2013-05-02 01:03:22
|
On Wed, May 01, 2013 at 08:29:26PM -0400, Mike Frysinger wrote: > On Wednesday 01 May 2013 18:49:02 Dmitry V. Levin wrote: > > Thanks. I hope this would be the final attempt: > > this one builds cleanly, and seems to run ok. bonus points because it seems > to also fix stat64() decoding in the i386 32bit ABI. Thanks a lot. I've pushed the fix and added a test for it. -- ldv |
From: Mike F. <va...@ge...> - 2013-05-02 00:40:30
Attachments:
signature.asc
|
On Wednesday 01 May 2013 18:49:02 Dmitry V. Levin wrote: > @@ -230,6 +253,12 @@ printflock(struct tcb *tcp, long addr, int getlk) > struct flock fl; > > #if SUPPORTED_PERSONALITIES > 1 > +# ifdef X32 > + if (current_personality == 0) { > + printflock64(tcp, addr, getlk); > + return; > + } > +# endif hmm, to review the actual patch now, shouldn't we start a new symbol rather than using X32 ? i'm pretty sure all these issues X32 is running into also affects MIPS's n32 ABI as they're largely the same concept -- native 64bit CPU where the ABI uses 32bit longs/pointers but the syscall API is 64bit. granted, it's not a regression, but maybe now would be a good time to start thinking about this ? -mike |
From: Dmitry V. L. <ld...@al...> - 2013-05-02 01:07:25
|
On Wed, May 01, 2013 at 08:40:19PM -0400, Mike Frysinger wrote: > On Wednesday 01 May 2013 18:49:02 Dmitry V. Levin wrote: > > @@ -230,6 +253,12 @@ printflock(struct tcb *tcp, long addr, int getlk) > > struct flock fl; > > > > #if SUPPORTED_PERSONALITIES > 1 > > +# ifdef X32 > > + if (current_personality == 0) { > > + printflock64(tcp, addr, getlk); > > + return; > > + } > > +# endif > > hmm, to review the actual patch now, shouldn't we start a new symbol rather > than using X32 ? i'm pretty sure all these issues X32 is running into also > affects MIPS's n32 ABI as they're largely the same concept -- native 64bit CPU > where the ABI uses 32bit longs/pointers but the syscall API is 64bit. Any ideas about the name for this new symbol? -- ldv |
From: Mike F. <va...@ge...> - 2013-05-02 01:27:42
Attachments:
signature.asc
|
On Wednesday 01 May 2013 21:07:18 Dmitry V. Levin wrote: > On Wed, May 01, 2013 at 08:40:19PM -0400, Mike Frysinger wrote: > > On Wednesday 01 May 2013 18:49:02 Dmitry V. Levin wrote: > > > @@ -230,6 +253,12 @@ printflock(struct tcb *tcp, long addr, int getlk) > > > struct flock fl; > > > > > > #if SUPPORTED_PERSONALITIES > 1 > > > +# ifdef X32 > > > + if (current_personality == 0) { > > > + printflock64(tcp, addr, getlk); > > > + return; > > > + } > > > +# endif > > > > hmm, to review the actual patch now, shouldn't we start a new symbol > > rather than using X32 ? i'm pretty sure all these issues X32 is running > > into also affects MIPS's n32 ABI as they're largely the same concept -- > > native 64bit CPU where the ABI uses 32bit longs/pointers but the syscall > > API is 64bit. > > Any ideas about the name for this new symbol? many standards use "ILP32" as the name for this mode: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/unistd.h.html http://publib.boulder.ibm.com/infocenter/zos/v1r12/index.jsp?topic=%2Fcom.ibm.zos.r12.cbcpx01%2Fdatatypesize64.htm gcc/x32 defines __ILP32__, so using "ILP32" for strace (to avoid collisions) seems reasonable. it might be a little confusing since gcc provides similar prefixed defines, but i think that ship sailed long ago with I386 and ALPHA and friends. -mike |
From: Mike F. <va...@ge...> - 2013-05-02 18:51:33
|
On Tuesday 30 April 2013 18:22:24 Dmitry V. Levin wrote: > There is quite enough good stuff accumulated in strace.git since v4.7 > to release a new version. If you have pending patches to include > before the release, please submit them now. Also, please test HEAD > on supported architectures. re-testing current master branch (318b0dde768e0b2360082c50b286e003f914a49f), some targets are failing the new stat test vFAIL: test; armv7l EABI linux-3.4.0-vapier glibc-2.15 gcc-4.6.3 vFAIL: test; s390 linux-3.4.10 glibc-2.15 gcc-4.6.3 vFAIL: test; parisc linux-3.8.0 glibc-2.14.1 gcc-4.7.2 ia64 is also spitting out this warning: In file included from syscall.c:120:0: ./linux/ia64/syscallent.h:73:0: warning: "sys_oldlstat" redefined [enabled by default] ./linux/dummy.h:80:0: note: this is the location of the previous definition ./linux/ia64/syscallent.h:82:0: warning: "sys_lstat" redefined [enabled by default] ./linux/dummy.h:75:0: note: this is the location of the previous definition ./linux/ia64/syscallent.h:125:0: warning: "sys_lstat64" redefined [enabled by default] ./linux/dummy.h:76:0: note: this is the location of the previous definition -mike |
From: Dmitry V. L. <ld...@al...> - 2013-05-02 22:40:36
|
On Thu, May 02, 2013 at 02:51:26PM -0400, Mike Frysinger wrote: > On Tuesday 30 April 2013 18:22:24 Dmitry V. Levin wrote: > > There is quite enough good stuff accumulated in strace.git since v4.7 > > to release a new version. If you have pending patches to include > > before the release, please submit them now. Also, please test HEAD > > on supported architectures. > > re-testing current master branch (318b0dde768e0b2360082c50b286e003f914a49f), > some targets are failing the new stat test > > vFAIL: test; armv7l EABI linux-3.4.0-vapier glibc-2.15 gcc-4.6.3 > vFAIL: test; s390 linux-3.4.10 glibc-2.15 gcc-4.6.3 > vFAIL: test; parisc linux-3.8.0 glibc-2.14.1 gcc-4.7.2 > vFAIL: test; ppc linux-3.2.34udev glibc-2.16 gcc-4.5.4 According to logs, the test is correct, and these are genuine decode errors that need to be fixed. > ia64 is also spitting out this warning: > In file included from syscall.c:120:0: > ./linux/ia64/syscallent.h:73:0: warning: "sys_oldlstat" redefined [enabled by default] > ./linux/dummy.h:80:0: note: this is the location of the previous definition > ./linux/ia64/syscallent.h:82:0: warning: "sys_lstat" redefined [enabled by default] > ./linux/dummy.h:75:0: note: this is the location of the previous definition > ./linux/ia64/syscallent.h:125:0: warning: "sys_lstat64" redefined [enabled by default] > ./linux/dummy.h:76:0: note: this is the location of the previous definition Thanks, fixed. -- ldv |
From: Mike F. <va...@ge...> - 2013-05-02 19:14:17
Attachments:
signature.asc
ppc-test-suite.log
|
On Thursday 02 May 2013 14:51:26 Mike Frysinger wrote: > On Tuesday 30 April 2013 18:22:24 Dmitry V. Levin wrote: > > There is quite enough good stuff accumulated in strace.git since v4.7 > > to release a new version. If you have pending patches to include > > before the release, please submit them now. Also, please test HEAD > > on supported architectures. > > re-testing current master branch > (318b0dde768e0b2360082c50b286e003f914a49f), some targets are failing the > new stat test ah and ppc fails too vFAIL: test; ppc linux-3.2.34udev glibc-2.16 gcc-4.5.4 -mike |
From: Dmitry V. L. <ld...@al...> - 2013-05-03 22:48:52
|
On Thu, May 02, 2013 at 03:14:08PM -0400, Mike Frysinger wrote: > On Thursday 02 May 2013 14:51:26 Mike Frysinger wrote: > > On Tuesday 30 April 2013 18:22:24 Dmitry V. Levin wrote: > > > There is quite enough good stuff accumulated in strace.git since v4.7 > > > to release a new version. If you have pending patches to include > > > before the release, please submit them now. Also, please test HEAD > > > on supported architectures. > > > > re-testing current master branch > > (318b0dde768e0b2360082c50b286e003f914a49f), some targets are failing the > > new stat test > > ah and ppc fails too > vFAIL: test; ppc linux-3.2.34udev glibc-2.16 gcc-4.5.4 I'm going to push this fix (I have no ppc to test it but I'm quite sure it's correct): * util.c (printllval) [POWERPC]: Align argument number. --- util.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/util.c b/util.c index eda6669..178b4a8 100644 --- a/util.c +++ b/util.c @@ -215,6 +215,10 @@ printllval(struct tcb *tcp, const char *format, int arg_no) # if SIZEOF_LONG > 4 # error BUG: must not combine two args for long long on this arch # endif +#if defined POWERPC + /* Align arg_no to the next even number. */ + arg_no = (arg_no + 1) & 0xe; +#endif tprintf(format, LONG_LONG(tcp->u_arg[arg_no], tcp->u_arg[arg_no + 1])); arg_no += 2; #endif -- ldv |
From: Mike F. <va...@ge...> - 2013-05-04 01:35:29
Attachments:
signature.asc
|
On Friday 03 May 2013 18:48:44 Dmitry V. Levin wrote: > On Thu, May 02, 2013 at 03:14:08PM -0400, Mike Frysinger wrote: > > On Thursday 02 May 2013 14:51:26 Mike Frysinger wrote: > > > On Tuesday 30 April 2013 18:22:24 Dmitry V. Levin wrote: > > > > There is quite enough good stuff accumulated in strace.git since v4.7 > > > > to release a new version. If you have pending patches to include > > > > before the release, please submit them now. Also, please test HEAD > > > > on supported architectures. > > > > > > re-testing current master branch > > > (318b0dde768e0b2360082c50b286e003f914a49f), some targets are failing > > > the new stat test > > > > ah and ppc fails too > > vFAIL: test; ppc linux-3.2.34udev glibc-2.16 gcc-4.5.4 > > I'm going to push this fix (I have no ppc to test it but I'm quite sure > it's correct): yep, `make check` passes on ppc now -mike |
From: Dmitry V. L. <ld...@al...> - 2013-05-03 22:51:26
|
On Thu, May 02, 2013 at 02:51:26PM -0400, Mike Frysinger wrote: > On Tuesday 30 April 2013 18:22:24 Dmitry V. Levin wrote: > > There is quite enough good stuff accumulated in strace.git since v4.7 > > to release a new version. If you have pending patches to include > > before the release, please submit them now. Also, please test HEAD > > on supported architectures. > > re-testing current master branch (318b0dde768e0b2360082c50b286e003f914a49f), > some targets are failing the new stat test > > vFAIL: test; armv7l EABI linux-3.4.0-vapier glibc-2.15 gcc-4.6.3 > vFAIL: test; s390 linux-3.4.10 glibc-2.15 gcc-4.6.3 > vFAIL: test; parisc linux-3.8.0 glibc-2.14.1 gcc-4.7.2 This might fix hppa, please give it a try: * file.c [HPPA]: Do not redefine stat64 to hpux_stat64. --- file.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/file.c b/file.c index 35f2b71..4e11092 100644 --- a/file.c +++ b/file.c @@ -171,9 +171,6 @@ struct __old_kernel_stat { # define loff_t loff_t #endif -#ifdef HPPA /* asm-parisc/stat.h defines stat64 */ -# undef stat64 -#endif #define stat libc_stat #define stat64 libc_stat64 #include <sys/stat.h> @@ -183,9 +180,6 @@ struct __old_kernel_stat { #undef st_atime #undef st_mtime #undef st_ctime -#ifdef HPPA -# define stat64 hpux_stat64 -#endif #include <fcntl.h> #ifdef HAVE_SYS_VFS_H -- ldv |