All of lore.kernel.org
 help / color / mirror / Atom feed
* fstat seems broken on sparc64
@ 2009-12-13 23:08 Jan Engelhardt
  2009-12-13 23:57 ` Jan Engelhardt
                   ` (9 more replies)
  0 siblings, 10 replies; 17+ messages in thread
From: Jan Engelhardt @ 2009-12-13 23:08 UTC (permalink / raw)
  To: sparclinux

Hi,


I noticed 64-bit tar incorrectly creating symlinks, and isolated this to 
this testcase:

---
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	struct stat sb;
	int fd = open("foo", O_RDWR | O_CREAT, 0666);

	if (fd < 0)
		abort();
	if (fstat(fd, &sb) < 0)
		abort();
	printf("%lu.%lu\n", sb.st_mtim.tv_sec, sb.st_mtim.tv_nsec);
	if (stat("foo", &sb) < 0)
		abort();
	printf("%lu.%lu\n", sb.st_mtim.tv_sec, sb.st_mtim.tv_nsec);
	if (fstatat(AT_FDCWD, "foo", &sb, 0) < 0)
		abort();
	printf("%lu.%lu\n", sb.st_mtim.tv_sec, sb.st_mtim.tv_nsec);
	return 0;
}
---

Compile with -m64. The problem does not show up with -m32.

Linux ares 2.6.32 #16 SMP Sat Dec 5 21:02:04 CET 2009 sparc64 sparc64 
sparc64 GNU/Linux [sun4v]

This testcase will print, for example:

1260745109.0
1260745109.876573675
1260745109.876573675

So on a quick glance, fstat64 looks broken.
I am trying to look at it further, but I hope you can beat me to it ;-)


Jan

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: fstat seems broken on sparc64
  2009-12-13 23:08 fstat seems broken on sparc64 Jan Engelhardt
@ 2009-12-13 23:57 ` Jan Engelhardt
  2009-12-14  3:25 ` David Miller
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Jan Engelhardt @ 2009-12-13 23:57 UTC (permalink / raw)
  To: sparclinux


On Monday 2009-12-14 00:08, Jan Engelhardt wrote:

>Hi,
>
>
>I noticed 64-bit tar incorrectly creating symlinks, and isolated this to 
>this testcase:[...]
>
>Linux ares 2.6.32 #16 SMP Sat Dec 5 21:02:04 CET 2009 sparc64 sparc64 
>sparc64 GNU/Linux [sun4v]
>
>This testcase will print, for example:
>
>1260745109.0
>1260745109.876573675
>1260745109.876573675
>
>So on a quick glance, fstat64 looks broken.
>I am trying to look at it further, but I hope you can beat me to it ;-)


It is because arch/sparc/include/stat.h does not define STAT_HAVE_NSEC 
for 64-bit sparc, even though there's nsec in struct stat64.
That leads to fs/stat.c not copying the subsecond parts to userspace (in 
function cp_new_stat).

I do not think I can just move STAT_HAVE_NSEC atop of stat.h, outside 
the #if64-32 block, since 'struct stat' does not have nsec on sparc64. 
Mind boggling!

What would be the best way to fix this?



thanks,
Jan

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: fstat seems broken on sparc64
  2009-12-13 23:08 fstat seems broken on sparc64 Jan Engelhardt
  2009-12-13 23:57 ` Jan Engelhardt
@ 2009-12-14  3:25 ` David Miller
  2009-12-14 14:22 ` Jan Engelhardt
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: David Miller @ 2009-12-14  3:25 UTC (permalink / raw)
  To: sparclinux

From: Jan Engelhardt <jengelh@medozas.de>
Date: Mon, 14 Dec 2009 00:57:08 +0100 (CET)

> It is because arch/sparc/include/stat.h does not define STAT_HAVE_NSEC 
> for 64-bit sparc, even though there's nsec in struct stat64.
> That leads to fs/stat.c not copying the subsecond parts to userspace (in 
> function cp_new_stat).

cp_new_stat() handles "struct stat", not "struct stat64"

cp_new_stat64() does that, and it unconditionally fills in
the nsec parts.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: fstat seems broken on sparc64
  2009-12-13 23:08 fstat seems broken on sparc64 Jan Engelhardt
  2009-12-13 23:57 ` Jan Engelhardt
  2009-12-14  3:25 ` David Miller
@ 2009-12-14 14:22 ` Jan Engelhardt
  2009-12-15  7:38 ` David Miller
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Jan Engelhardt @ 2009-12-14 14:22 UTC (permalink / raw)
  To: sparclinux


On Monday 2009-12-14 04:25, David Miller wrote:
>
>cp_new_stat() handles "struct stat", not "struct stat64"
>
>cp_new_stat64() does that, and it unconditionally fills in
>the nsec parts.


I added some dump_stack() to all the cp_* functions, leading
to this result:

Call Trace:
 [0000000000522990] cp_new_stat+0xdc/0x134
 [0000000000522d9c] SyS_newfstat+0x24/0x38
 [0000000000406294] linux_sparc_syscall+0x34/0x44

Is glibc doing the right thing here? Calling sys_newfstat (instead of 
sys_newfstat64) for fstat64()?


[gcc-bug: see http://marc.info/?l=linux-sparc&m\x126074570109411&w=2 ]

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: fstat seems broken on sparc64
  2009-12-13 23:08 fstat seems broken on sparc64 Jan Engelhardt
                   ` (2 preceding siblings ...)
  2009-12-14 14:22 ` Jan Engelhardt
@ 2009-12-15  7:38 ` David Miller
  2009-12-22 14:38 ` Jan Engelhardt
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: David Miller @ 2009-12-15  7:38 UTC (permalink / raw)
  To: sparclinux

From: Jan Engelhardt <jengelh@medozas.de>
Date: Mon, 14 Dec 2009 15:22:16 +0100 (CET)

> I added some dump_stack() to all the cp_* functions, leading
> to this result:
> 
> Call Trace:
>  [0000000000522990] cp_new_stat+0xdc/0x134
>  [0000000000522d9c] SyS_newfstat+0x24/0x38
>  [0000000000406294] linux_sparc_syscall+0x34/0x44
> 
> Is glibc doing the right thing here? Calling sys_newfstat (instead of 
> sys_newfstat64) for fstat64()?

That's completely bogus.

And I can't reproduce your problem on debian unstable.  What
are you using, Fedora?  Maybe something is fubared in their
glibc build or the checkout they are using.

davem@sunset:~/src/GIT/linux-2.6$ /lib/libc.so.6 --version
GNU C Library (EGLIBC) stable release version 2.10.2, by Roland McGrath et al.
 ...
davem@sunset:~/src/GIT/linux-2.6$ gcc -m64 -o x x.c
davem@sunset:~/src/GIT/linux-2.6$ ./x
1260862562.0
1260862562.0
1260862562.0
davem@sunset:~/src/GIT/linux-2.6$

I even checked current glibc GIT and everything looks kosher there
too.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: fstat seems broken on sparc64
  2009-12-13 23:08 fstat seems broken on sparc64 Jan Engelhardt
                   ` (3 preceding siblings ...)
  2009-12-15  7:38 ` David Miller
@ 2009-12-22 14:38 ` Jan Engelhardt
  2009-12-22 19:09 ` David Miller
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Jan Engelhardt @ 2009-12-22 14:38 UTC (permalink / raw)
  To: sparclinux


David Miller wrote:
>David Miller wrote:
>>Jan Engelhardt wrote:
>>
>>> It is because arch/sparc/include/stat.h does not define STAT_HAVE_NSEC 
>>> for 64-bit sparc, even though there's nsec in struct stat64.
>>> That leads to fs/stat.c not copying the subsecond parts to userspace (in 
>>> function cp_new_stat).
>>
>>cp_new_stat() handles "struct stat", not "struct stat64"
>>
>>cp_new_stat64() does that, and it unconditionally fills in
>>the nsec parts.
>
>BTW, did you ever resolve the 64-bit stat() issue?  Was it
>a bum build of Fedora's sparc64 glibc?

Seems Debian's glibc is also affected:

$ LD_LIBRARY_PATH=/dev/shm/d/lib64
  /dev/shm/d/lib64/ld-linux.so.2 ./stat64
1260745109.0

$ LD_LIBRARY_PATH=/dev/shm/d/lib64 /dev/shm/d/lib64/libc.so.6 

GNU C Library stable release version 2.7, by Roland McGrath et al.
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.3.2.
Compiled on a Linux >>2.6.28.10<< system on 2009-10-20.
Available extensions:
        crypt add-on version 2.1 by Michael Glad and others
        GNU Libidn by Simon Josefsson
        Native POSIX Threads Library by Ulrich Drepper et al
        BIND-8.2.3-T5B
        software FPU emulation by Richard Henderson, Jakub Jelinek and others
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.

Same for eglibc 2.10:

$ LD_LIBRARY_PATH=/dev/shm/d10/lib64 /dev/shm/d10/lib64/ld-linux.so.2 ./stat64
1260745109.0

$ LD_LIBRARY_PATH=/dev/shm/d10/lib64 /dev/shm/d10/lib64/libc.so.6

GNU C Library (EGLIBC) stable release version 2.10.2, by Roland McGrath et al.
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.4.2.
Compiled on a Linux >>2.6.26-2-sparc64-smp<< system on 2009-11-24.
Available extensions:
        crypt add-on version 2.1 by Michael Glad and others
        GNU Libidn by Simon Josefsson
        Native POSIX Threads Library by Ulrich Drepper et al
        BIND-8.2.3-T5B
        software FPU emulation by Richard Henderson, Jakub Jelinek and others
For bug reporting instructions, please see:
<http://www.eglibc.org/issues/>.


>   Also, why are you
>building 64-bit binaries?  Just for testing?

Same reason koji builds sparc64... or:

Assume there's a scientific program needing >4GB address space, so I
need at least _a little_ 64-bit. It just so happens that I defaulted
to populate the buildroot with a 64-bit base, as using a 32-bit base
would have meant ugly changes to the build script I am using --
coexistence of, say, libacl-64bit (dependency of sci prog) and
libacl-32bit (dependency of a 32-bit coreutils).

Well yes, call it testing. Apparently, I found a bug.
So mission accomplished :-)

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: fstat seems broken on sparc64
  2009-12-13 23:08 fstat seems broken on sparc64 Jan Engelhardt
                   ` (4 preceding siblings ...)
  2009-12-22 14:38 ` Jan Engelhardt
@ 2009-12-22 19:09 ` David Miller
  2009-12-22 19:21 ` Jan Engelhardt
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: David Miller @ 2009-12-22 19:09 UTC (permalink / raw)
  To: sparclinux

From: Jan Engelhardt <jengelh@medozas.de>
Date: Tue, 22 Dec 2009 15:38:44 +0100 (CET)

> Seems Debian's glibc is also affected:

Jan I showed you how I ran your test program on my Debian
system and it worked fine.

Show me the output from your program on the Debian systems
where you claim it is also broken.  That way we can compare
notes, just showing the glibc version output doesn't help
me.

> Assume there's a scientific program needing >4GB address space, so I
> need at least _a little_ 64-bit.

'tar' is a scientific program needing >4GB address space? :)

> Well yes, call it testing. Apparently, I found a bug.
> So mission accomplished :-)

That indeed does make sense and is good :-)

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: fstat seems broken on sparc64
  2009-12-13 23:08 fstat seems broken on sparc64 Jan Engelhardt
                   ` (5 preceding siblings ...)
  2009-12-22 19:09 ` David Miller
@ 2009-12-22 19:21 ` Jan Engelhardt
  2009-12-22 19:33 ` David Miller
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Jan Engelhardt @ 2009-12-22 19:21 UTC (permalink / raw)
  To: sparclinux


On Tuesday 2009-12-22 20:09, David Miller wrote:
>
>> Seems Debian's glibc is also affected:
>
>Jan I showed you how I ran your test program on my Debian
>system and it worked fine.
>Show me the output from your program on the Debian systems
>where you claim it is also broken.  That way we can compare
>notes, just showing the glibc version output doesn't help
>me.

Well just send me your compiled binary over and I'll figure
out the rest eventually. I am not running Debian at this time -
system is still stuck in F12. But if you know how to set up
LDOM, I could :)

>> Assume there's a scientific program needing >4GB address space, so I
>> need at least _a little_ 64-bit.
>
>'tar' is a scientific program needing >4GB address space? :)

No. tar belongs to the buildroot like gcc.



Jan

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: fstat seems broken on sparc64
  2009-12-13 23:08 fstat seems broken on sparc64 Jan Engelhardt
                   ` (6 preceding siblings ...)
  2009-12-22 19:21 ` Jan Engelhardt
@ 2009-12-22 19:33 ` David Miller
  2010-01-08 22:59 ` Jan Engelhardt
  2010-01-10 21:11 ` David Miller
  9 siblings, 0 replies; 17+ messages in thread
From: David Miller @ 2009-12-22 19:33 UTC (permalink / raw)
  To: sparclinux

[-- Attachment #1: Type: Text/Plain, Size: 509 bytes --]

From: Jan Engelhardt <jengelh@medozas.de>
Date: Tue, 22 Dec 2009 20:21:18 +0100 (CET)

> Well just send me your compiled binary over and I'll figure
> out the rest eventually. I am not running Debian at this time -

Attached.

> But if you know how to set up LDOM, I could :)

Install OpenSolaris on the machine, install the SUNWldom
package, and read one of the many helpful documents on
the web that show how to do this :-)

There is no control node support for LDOM under Linux
currently, only guest node.

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: fstat_test --]
[-- Type: Text/Plain; charset=utf-8, Size: 8806 bytes --]

\x7fELF\x02\x02\x01\0\0\0\0\0\0\0\0\0\0\x02\0+\0\0\0\x01\0\0\0\0\0\x10\x06@\0\0\0\0\0\0\0@\0\0\0\0\0\0\x10Ð\0\0\0\x02\0@\08\0\a\0@\0\x1d\0\x1a\0\0\0\x06\0\0\0\x05\0\0\0\0\0\0\0@\0\0\0\0\0\x10\0@\0\0\0\0\0\x10\0@\0\0\0\0\0\0\x01ˆ\0\0\0\0\0\0\x01ˆ\0\0\0\0\0\0\0\b\0\0\0\x03\0\0\0\x04\0\0\0\0\0\0\x01È\0\0\0\0\0\x10\x01È\0\0\0\0\0\x10\x01È\0\0\0\0\0\0\0\x15\0\0\0\0\0\0\0\x15\0\0\0\0\0\0\0\x01\0\0\0\x01\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\0\v<\0\0\0\0\0\0\v<\0\0\0\0\0\x10\0\0\0\0\0\x01\0\0\0\a\0\0\0\0\0\0\v@\0\0\0\0\0 \v@\0\0\0\0\0 \v@\0\0\0\0\0\0\x04p\0\0\0\0\0\0\x04€\0\0\0\0\0\x10\0\0\0\0\0\x02\0\0\0\x06\0\0\0\0\0\0\vh\0\0\0\0\0 \vh\0\0\0\0\0 \vh\0\0\0\0\0\0\x01À\0\0\0\0\0\0\x01À\0\0\0\0\0\0\0\b\0\0\0\x04\0\0\0\x04\0\0\0\0\0\0\x01à\0\0\0\0\0\x10\x01à\0\0\0\0\0\x10\x01à\0\0\0\0\0\0\0D\0\0\0\0\0\0\0D\0\0\0\0\0\0\0\x04dtåQ\0\0\0\x06\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b/lib64/ld-linux.so.2\0\0\0\0\0\0\0\x04\0\0\0\x10\0\0\0\x01GNU\0\0\0\0\0\0\0\0\x02\0\0\0\x06\0\0\0\x12\0\0\0\x04\0\0\0\x14\0\0\0\x03GNU\0\x1a1÷¨š„œRV&D\x15O-=ôé/\x18¸\0\0\0\0\0\0\0\x03\0\0\0\r\0\0\0	\0\0\0\v\0\0\0\f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\x06\0\0\0\0\0\0\0\x05\0\0\0\a\0\0\0\x04\0\0\0\0\0\0\0
\0\0\0\b\0\0\0\x03\0\0\0\x05\0\0\0\x01\0\0\0\x06!¤À\0 \x10\0\0\0\0\x05\0\0\0\x06\0\0\0	mÎeÑ\x15k+¸|›×v\x0f\x11í}¯¨‹¼zòÃ6ö=N.;ú{ó\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1d\0\0\0\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\x1d\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x01 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x10 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\04\x12\0\0\0\0\0\0\0\0 \x0e€\0\0\0\0\0\0\0\0\0\0\0;\x12\0\0\0\0\0\0\0\0 \x0f\0\0\0\0\0\0\0\0\0\0\0\0.\x12\0\0\0\0\0\0\0\0 \x0f \0\0\0\0\0\0\0\0\0\0\0i\x12\0\0\0\0\0\0\0\0 \x0eÀ\0\0\0\0\0\0\0\0\0\0\0a\x12\0\0\0\0\0\0\0\0 \x0f@\0\0\0\0\0\0\0\0\0\0\0O\x12\0\0\0\0\0\0\0\0 \x0f`\0\0\0\0\0\0\0\0\0\0\0r\x12\0\0\0\0\0\0\0\0 \x0f€\0\0\0\0\0\0\0\0\0__gmon_start__\0_Jv_RegisterClasses\0libc.so.6\0abort\0printf\0open\0__cxa_finalize\0__libc_start_main\0__xstat\0__fxstat\0__fxstatat\0GLIBC_2.4\0GLIBC_2.2\0\0\0\0\0\0\0\0\0\0\0\0\0\x02\0\x02\0\x02\0\x02\0\x02\0\x02\0\x02\0\x03\0\0\0\0\0\x01\0\x02\0\0\0$\0\0\0\x10\0\0\0\0\rii\x14\0\0\0\x03\0\0\0}\0\0\0\x10\rii\x12\0\0\0\x02\0\0\0‡\0\0\0\0\0\0\0\0\0 \rP\0\0\0\x03\0\0\0\x14\0\0\0\0\0\0\0\0\0\0\0\0\0 \rX\0\0\0\x04\0\0\0\x14\0\0\0\0\0\0\0\0\0\0\0\0\0 \r`\0\0\0\x05\0\0\0\x14\0\0\0\0\0\0\0\0\0\0\0\0\0 \x0e€\0\0\0\x06\0\0\0\x15\0\0\0\0\0\0\0\0\0\0\0\0\0 \x0e \0\0\0\x03\0\0\0\x15\0\0\0\0\0\0\0\0\0\0\0\0\0 \x0eÀ\0\0\0	\0\0\0\x15\0\0\0\0\0\0\0\0\0\0\0\0\0 \x0eà\0\0\0\x05\0\0\0\x15\0\0\0\0\0\0\0\0\0\0\0\0\0 \x0f\0\0\0\0\a\0\0\0\x15\0\0\0\0\0\0\0\0\0\0\0\0\0 \x0f \0\0\0\b\0\0\0\x15\0\0\0\0\0\0\0\0\0\0\0\0\0 \x0f@\0\0\0
\0\0\0\x15\0\0\0\0\0\0\0\0\0\0\0\0\0 \x0f`\0\0\0\v\0\0\0\x15\0\0\0\0\0\0\0\0\0\0\0\0\0 \x0f€\0\0\0\f\0\0\0\x15\0\0\0\0\0\0\0\0Ãà\b®\x03À\x17ã¿P/\0\x04\x01\x7fÿÿü®\x05ã(\x03\0\0\0‚\x10`(Â]À\x01\x02À@\x04\x01\0\0\0@\x04\x02!\x01\0\0\0@\0\0_\x01\0\0\0@\0\x01\x1d\x01\0\0\0Ïà\b\x01\0\0\0\0\0\0\0¼\x10\0\0œ# 0Ò[¨¯”\x03¨·\x11\0\x04\x02\x17\0\x04\x02\x19\0\x04\x02\x12  –\x12á ˜\x13!€š\x10\0\x01@\x04\x02=\x01\0\0\0\0\0\0\0\x01\0\0\0\x01\0\0\0Ãà\b®\x03À\x170h\0\x06\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0ã¿@\x03\0\0\0/\0\x04\x01\x7fÿÿõ®\x05â|‚\x10`\x18æ]À\x01Ä\fÀ\0€  \0\x12@\0&\x03\0\0\0‚\x10`8Ä]À\x01\x02À€\x06\x03\0\0\0‚\x10`@Ä]À\x01@\x04\x01ÿÐX€\0\x03\0\0\0\x05\0\0\0‚\x10`H„\x10 \bÆ]À\x01\x03\0\0\0‚\x10` ä]À\x02à]À\x01† À\x12‡8ð\x03Â\\0\0¢\0ÿÿ€ @\x11:`\0\r‚\x10 \x01‚\0`\x01Ât\0\0ƒ(p\x03Ä\€\x01ŸÀ€\0\x01\0\0\0Â\\0\0€ @\x11
oÿù‚\0`\x01‚\x10 \x01Â,À\0Ïà\b\x01\0\0\00h\0\a\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0ã¿@Ïà\b\x01\0\0\00h\0\x05\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0ã¿@\x03\0\0\0/\0\x04\x01\x7fÿÿµ®\x05á|‚\x10`\x10Ð]À\x01ÄZ\0\0\x02À€\b\x03\0\0\0‚\x10`0Â]À\x01\x02À@\x04\x01\0\0\0ŸÀ@\0\x01\0\0\0Ïà\b\x01\0\0\00h\0\x06\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0ã¿@Ïà\b\x01\0\0\00h\0\x05\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0ã¾ \x03\0\x04\x02\x10c ’\x10"\x02”\x10!¶@\x04\x01³\x01\0\0\0‚\x10\0\bÂ'§ëÂ\a§ë€ `\0\x16H\0\x04\x01\0\0\0@\x04\x01³\x01\0\0\0Â\a§ëƒ8`\0„\a§W\x10\0\x01’\x10\0\x02@\0\0t\x01\0\0\0‚\x10\0\b€ `\0\x16H\0\x04\x01\0\0\0@\x04\x01¦\x01\0\0\0Ä_§·Æ_§¿\x03\0\x04\x02\x10c(’\x10\0\x02”\x10\0\x03@\x04\x01v\x01\0\0\0„\a§W\x03\0\x04\x02\x10c ’\x10\0\x02@\0\0X\x01\0\0\0‚\x10\0\b€ `\0\x16H\0\x04\x01\0\0\0@\x04\x01’\x01\0\0\0Ä_§·Æ_§¿\x03\0\x04\x02\x10c(’\x10\0\x02”\x10\0\x03@\x04\x01b\x01\0\0\0„\a§W\x10?œ\x03\0\x04\x02’\x10c ”\x10\0\x02–\x10 \0@\0\0R\x01\0\0\0‚\x10\0\b€ `\0\x16H\0\x04\x01\0\0\0@\x04\x01|\x01\0\0\0Ä_§·Æ_§¿\x03\0\x04\x02\x10c(’\x10\0\x02”\x10\0\x03@\x04\x01L\x01\0\0\0‚\x10 \0ƒ8`\0°\x10\0\x01Ïà\b\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0Ãà\b\x01\0\0\0Ãà\b®\x03À\x170h\0\x04\x01\0\0\0\x01\0\0\0\x01\0\0\0ã¿P/\0\x04\0\x7fÿÿø®\x05ã€\x7fÿÿ\x12\x01\0\0\0\x05\0\0\0\x03\0\0\0„\x10 P‚\x10`Xä]À\x02â]À\x01¤$€\x11¥<°\x03\x02Ä€\v \x10 \0Â\@\0\x10\0\x18’\x10\0\x19”\x10\0\x1aŸÀ@\0 \x04 \x01€¤\0\x12
oÿù¢\x04`\bÏà\b\x01\0\0\00h\0\x05\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0”\x10\0	’\x10\0\b\x10 \x03‚\x13À\0\x10„\x01D\x01\0\0\0\x01\0\0\0\x01\0\0\0”\x10\0	’\x10\0\b\x10 \x03‚\x13À\0\x10„\x01\x1c\x01\0\0\0\x01\0\0\0\x01\0\0\0„\x10\0	‚\x10\0
˜\x10\0\v’\x10\0\b”\x10\0\x02–\x10\0\x01\x10 \x03‚\x13À\0\x10„\x01@\x01\0\0\0\x01\0\0\00h\0\x05\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0ã¿@\x03\0\b\x02ÄXc@€ ¿ÿ\x02`\0	‚\x10cH \0\x7føŸÀ€\0 \x04?øÄ\\0\0€ ¿ÿ\x12oÿü\x01\0\0\0Ïà\b\x01\0\0\0\x01\0\0\0ã¿@Ïà\b\x01\0\0\00h\0\x05\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0ã¿P\x7fÿþç\x01\0\0\0Ïà\b\x01\0\0\0\0\0\0\0\0\x02\0\x01\0\0\0\0foo\0\0\0\0\0%lu.%lu
\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ÿÿÿÿÿÿÿÿ\0\0\0\0\0\0\0\0ÿÿÿÿÿÿÿÿ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0$\0\0\0\0\0\0\0\f\0\0\0\0\0\x10\x05ø\0\0\0\0\0\0\0\r\0\0\0\0\0\x10\v\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\x10\x02(\0\0\0\0oÿþõ\0\0\0\0\0\x10\x02p\0\0\0\0\0\0\0\x05\0\0\0\0\0\x10\x03ð\0\0\0\0\0\0\0\x06\0\0\0\0\0\x10\x02¸\0\0\0\0\0\0\0
\0\0\0\0\0\0\0‘\0\0\0\0\0\0\0\v\0\0\0\0\0\0\0\x18\0\0\0\0\0\0\0\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\0 \x0e\0\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0Ø\0\0\0\0\0\0\0\x14\0\0\0\0\0\0\0\a\0\0\0\0\0\0\0\x17\0\0\0\0\0\x10\x05\x18\0\0\0\0\0\0\0\a\0\0\0\0\0\x10\x04Ð\0\0\0\0\0\0\0\b\0\0\0\0\0\0\x01 \0\0\0\0\0\0\0	\0\0\0\0\0\0\0\x18\0\0\0\0p\0\0\x01\0\0\0\0\0\0\0\x01\0\0\0\0p\0\0\x01\0\0\0\0\0\0\0\x02\0\0\0\0oÿÿþ\0\0\0\0\0\x10\x04 \0\0\0\0oÿÿÿ\0\0\0\0\0\0\0\x01\0\0\0\0oÿÿð\0\0\0\0\0\x10\x04‚\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \vh\0\0\0\0\0 \vP\0\0\0\0\0 \v`\0\0\0\0\0 \x0f°\0\0\0\0\0 \x0f¸\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \x0f¨\0\0\0\0\0 \vX\0\0\0\0\0 \v<\0\0\0\0\0 \v<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0€0oÿç\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x03\0\0 0oÿß\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x03\0\0À0oÿ×\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x03\0\0à0oÿÏ\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x03\0\x01\00oÿÇ\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x03\0\x01 0oÿ¿\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x03\0\x01@0oÿ·\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x03\0\x01`0oÿ¯\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x03\0\x01€0oÿ§\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \x0f¨GCC: (Debian 4.3.4-6) 4.3.4\0GCC: (Debian 4.4.2-3) 4.4.2\0\0.symtab\0.strtab\0.shstrtab\0.interp\0.note.ABI-tag\0.note.gnu.build-id\0.gnu.hash\0.dynsym\0.dynstr\0.gnu.version\0.gnu.version_r\0.rela.dyn\0.rela.plt\0.init\0.text\0.fini\0.rodata\0.eh_frame\0.ctors\0.dtors\0.jcr\0.dynamic\0.got\0.data\0.bss\0.comment\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0^[\0\0\0\x01\0\0\0\0\0\0\0\x02\0\0\0\0\0\x10\x01È\0\0\0\0\0\0\x01È\0\0\0\0\0\0\0\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0#\0\0\0\a\0\0\0\0\0\0\0\x02\0\0\0\0\0\x10\x01à\0\0\0\0\0\0\x01à\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\01\0\0\0\a\0\0\0\0\0\0\0\x02\0\0\0\0\0\x10\x02\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\0$\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0H\0\0\0\x05\0\0\0\0\0\0\0\x02\0\0\0\0\0\x10\x02(\0\0\0\0\0\0\x02(\0\0\0\0\0\0\0H\0\0\0\x06\0\0\0\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\x04\0\0\0Doÿÿö\0\0\0\0\0\0\0\x02\0\0\0\0\0\x10\x02p\0\0\0\0\0\0\x02p\0\0\0\0\0\0\0D\0\0\0\x06\0\0\0\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\0\0\0\0N\0\0\0\v\0\0\0\0\0\0\0\x02\0\0\0\0\0\x10\x02¸\0\0\0\0\0\0\x02¸\0\0\0\0\0\0\x018\0\0\0\a\0\0\0\x01\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\x18\0\0\0V\0\0\0\x03\0\0\0\0\0\0\0\x02\0\0\0\0\0\x10\x03ð\0\0\0\0\0\0\x03ð\0\0\0\0\0\0\0‘\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0^oÿÿÿ\0\0\0\0\0\0\0\x02\0\0\0\0\0\x10\x04‚\0\0\0\0\0\0\x04‚\0\0\0\0\0\0\0\x1a\0\0\0\x06\0\0\0\0\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x02\0\0\0koÿÿþ\0\0\0\0\0\0\0\x02\0\0\0\0\0\x10\x04 \0\0\0\0\0\0\x04 \0\0\0\0\0\0\00\0\0\0\a\0\0\0\x01\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\0\0\0\0z\0\0\0\x04\0\0\0\0\0\0\0\x02\0\0\0\0\0\x10\x04Ð\0\0\0\0\0\0\x04Ð\0\0\0\0\0\0\0H\0\0\0\x06\0\0\0\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\x18\0\0\0„\0\0\0\x04\0\0\0\0\0\0\0\x02\0\0\0\0\0\x10\x05\x18\0\0\0\0\0\0\x05\x18\0\0\0\0\0\0\0Ø\0\0\0\x06\0\0\0\x16\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\x18\0\0\0Ž\0\0\0\x01\0\0\0\0\0\0\0\x06\0\0\0\0\0\x10\x05ð\0\0\0\0\0\0\x05ð\0\0\0\0\0\0\0L\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0”\0\0\0\x01\0\0\0\0\0\0\0\x06\0\0\0\0\0\x10\x06@\0\0\0\0\0\0\x06@\0\0\0\0\0\0\x04À\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0š\0\0\0\x01\0\0\0\0\0\0\0\x06\0\0\0\0\0\x10\v\0\0\0\0\0\0\0\v\0\0\0\0\0\0\0\0\x14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0 \0\0\0\x01\0\0\0\0\0\0\0\x02\0\0\0\0\0\x10\v\x18\0\0\0\0\0\0\v\x18\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\0\0\0\0¨\0\0\0\x01\0\0\0\0\0\0\0\x02\0\0\0\0\0\x10\v8\0\0\0\0\0\0\v8\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0²\0\0\0\x01\0\0\0\0\0\0\0\x03\0\0\0\0\0 \v@\0\0\0\0\0\0\v@\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\0\0\0\0¹\0\0\0\x01\0\0\0\0\0\0\0\x03\0\0\0\0\0 \vP\0\0\0\0\0\0\vP\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\0\0\0\0À\0\0\0\x01\0\0\0\0\0\0\0\x03\0\0\0\0\0 \v`\0\0\0\0\0\0\v`\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\0\0\0\0Å\0\0\0\x06\0\0\0\0\0\0\0\x03\0\0\0\0\0 \vh\0\0\0\0\0\0\vh\0\0\0\0\0\0\x01À\0\0\0\a\0\0\0\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\x10\0\0\0Î\0\0\0\x01\0\0\0\0\0\0\0\x03\0\0\0\0\0 \r(\0\0\0\0\0\0\r(\0\0\0\0\0\0\0`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\b\0\0\0‰\0\0\0\x01\0\0\0\0\0\0\0\a\0\0\0\0\0 \x0e\0\0\0\0\0\0\0\x0e\0\0\0\0\0\0\0\x01 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0 \0\0\0Ó\0\0\0\x01\0\0\0\0\0\0\0\x03\0\0\0\0\0 \x0f \0\0\0\0\0\0\x0f \0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\0\0\0\0Ù\0\0\0\b\0\0\0\0\0\0\0\x03\0\0\0\0\0 \x0f°\0\0\0\0\0\0\x0f°\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\0\0\0\0Þ\0\0\0\x01\0\0\0\0\0\0\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x0f°\0\0\0\0\0\0\08\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x01\0\0\0\x11\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x0fè\0\0\0\0\0\0\0ç\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x18\x10\0\0\0\0\0\0\ah\0\0\0\x1c\0\0\02\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\x18\0\0\0	\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1fx\0\0\0\0\0\0\x02ß\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\x01\0\0\0\0\0\x10\x01È\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\x02\0\0\0\0\0\x10\x01à\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\x03\0\0\0\0\0\x10\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\x04\0\0\0\0\0\x10\x02(\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\x05\0\0\0\0\0\x10\x02p\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\x06\0\0\0\0\0\x10\x02¸\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\a\0\0\0\0\0\x10\x03ð\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\b\0\0\0\0\0\x10\x04‚\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0	\0\0\0\0\0\x10\x04 \0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0
\0\0\0\0\0\x10\x04Ð\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\v\0\0\0\0\0\x10\x05\x18\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\f\0\0\0\0\0\x10\x05ð\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\r\0\0\0\0\0\x10\x06@\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\x0e\0\0\0\0\0\x10\v\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\x0f\0\0\0\0\0\x10\v\x18\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\x10\0\0\0\0\0\x10\v8\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\x11\0\0\0\0\0 \v@\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\x12\0\0\0\0\0 \vP\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\x13\0\0\0\0\0 \v`\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\x14\0\0\0\0\0 \vh\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\x15\0\0\0\0\0 \r(\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\x16\0\0\0\0\0 \x0e\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\x17\0\0\0\0\0 \x0f \0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\x18\0\0\0\0\0 \x0f°\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\x19\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\x04\0ÿñ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\f\x01\0\0\x11\0\0\0\0\0 \v@\0\0\0\0\0\0\0\0\0\0\0\x1a\x01\0\0\x12\0\0\0\0\0 \vP\0\0\0\0\0\0\0\0\0\0\0(\x01\0\0\x13\0\0\0\0\0 \v`\0\0\0\0\0\0\0\0\0\0\05\x02\0\0\r\0\0\0\0\0\x10\x06 \0\0\0\0\0\0\0\0\0\0\0K\x01\0\0\x18\0\0\0\0\0 \x0f°\0\0\0\0\0\0\0\x01\0\0\0Z\x01\0\0\x18\0\0\0\0\0 \x0f¸\0\0\0\0\0\0\0\b\0\0\0h\x02\0\0\r\0\0\0\0\0\x10\a€\0\0\0\0\0\0\0\0\0\0\0ƒ\x02\0\0\r\0\0\0\0\0\x10\a \0\0\0\0\0\0\0\0\0\0\0\x02\0\0\r\0\0\0\0\0\x10\b\0\0\0\0\0\0\0\0\0\0\0\0\x01\x04\0ÿñ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \x01\0\0\x11\0\0\0\0\0 \vH\0\0\0\0\0\0\0\0\0\0\0­\x01\0\0\x10\0\0\0\0\0\x10\v8\0\0\0\0\0\0\0\0\0\0\0»\x01\0\0\x13\0\0\0\0\0 \v`\0\0\0\0\0\0\0\0\0\0\0Ç\x02\0\0\r\0\0\0\0\0\x10
 \0\0\0\0\0\0\0\0\0\0\0Ý\x02\0\0\r\0\0\0\0\0\x10
à\0\0\0\0\0\0\0\0\0\0\0ø\x04\0ÿñ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\x05\x01\x02\0\x15\0\0\0\0\0 \r(\0\0\0\0\0\0\0\0\0\0\x01^[\x01\x02\0\x17\0\0\0\0\0 \x0f¨\0\0\0\0\0\0\0\0\0\0\x01(\x01\x02\0\x12\0\0\0\0\0 \vX\0\0\0\0\0\0\0\0\0\0\x015\0\x02\0\x11\0\0\0\0\0 \v<\0\0\0\0\0\0\0\0\0\0\x01F\0\x02\0\x11\0\0\0\0\0 \v<\0\0\0\0\0\0\0\0\0\0\x01Y\x01\x02\0\x16\0\0\0\0\0 \x0e\0\0\0\0\0\0\0\0\0\0\0\x01s\x01\x02\0\x14\0\0\0\0\0 \vh\0\0\0\0\0\0\0\0\0\0\x01| \0\0\x17\0\0\0\0\0 \x0f \0\0\0\0\0\0\0\0\0\0\x01‡\x12\0\0\0\0\0\0\0\0 \x0e€\0\0\0\0\0\0\0\0\0\0\x01™\x12\x02\0\r\0\0\0\0\0\x10
`\0\0\0\0\0\0\0,\0\0\x01¡\x12\0\0\r\0\0\0\0\0\x10	€\0\0\0\0\0\0\0\b\0\0\x01±\x12\0\0\r\0\0\0\0\0\x10\x06@\0\0\0\0\0\0\08\0\0\x01¸ \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01Ç \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01Û\x12\0\0\x0e\0\0\0\0\0\x10\v\0\0\0\0\0\0\0\0\0\0\0\x01á\x12\x02\0\r\0\0\0\0\0\x10
@\0\0\0\0\0\0\0\x1c\0\0\x01é\x12\x02\0\r\0\0\0\0\0\x10
 \0\0\0\0\0\0\0\x1c\0\0\x01ð"\x02\0\r\0\0\0\0\0\x10
 \0\0\0\0\0\0\0\x1c\0\0\x01õ\x11\0\0\x0f\0\0\0\0\0\x10\v\x18\0\0\0\0\0\0\0\x04\0\0\x02\x04\x12\0\0\0\0\0\0\0\0 \x0eÀ\0\0\0\0\0\0\0\0\0\0\x02\x18\x10\0\0\x17\0\0\0\0\0 \x0f \0\0\0\0\0\0\0\0\0\0\x02%"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x02?\x12\0\0\0\0\0\0\0\0 \x0f\0\0\0\0\0\0\0\0\0\0\0\x02O\x12\0\0\0\0\0\0\0\0 \x0f \0\0\0\0\0\0\0\0\0\0\x02`\x12\0\0\r\0\0\0\0\0\x10	 \0\0\0\0\0\0\0l\0\0\x02p\x12\0\0\0\0\0\0\0\0 \x0f@\0\0\0\0\0\0\0\0\0\0\x02ƒ\x10\0ÿñ\0\0\0\0\0 \x0f°\0\0\0\0\0\0\0\0\0\0\x02\x12\0\0\0\0\0\0\0\0 \x0f`\0\0\0\0\0\0\0\0\0\0\x02¬\x12\0\0\0\0\0\0\0\0 \x0f€\0\0\0\0\0\0\0\0\0\0\x02Â\x10\0ÿñ\0\0\0\0\0 \x0fÀ\0\0\0\0\0\0\0\0\0\0\x02Ç"\x02\0\r\0\0\0\0\0\x10
@\0\0\0\0\0\0\0\x1c\0\0\x02Í\x10\0ÿñ\0\0\0\0\0 \x0f°\0\0\0\0\0\0\0\0\0\0\x02Ô\x12\0\0\r\0\0\0\0\0\x10\b \0\0\0\0\0\0\x01L\0\0\x02Ù\x12\0\0\f\0\0\0\0\0\x10\x05ø\0\0\0\0\0\0\0\0\0\0\0\0\x1d\0\0\0\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\x1d\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0crtstuff.c\0__CTOR_LIST__\0__DTOR_LIST__\0__JCR_LIST__\0__do_global_dtors_aux\0completed.5506\0dtor_idx.5508\0call___do_global_dtors_aux\0frame_dummy\0call_frame_dummy\0__CTOR_END__\0__FRAME_END__\0__JCR_END__\0__do_global_ctors_aux\0call___do_global_ctors_aux\0fstat_test.c\0_GLOBAL_OFFSET_TABLE_\0__dso_handle\0__DTOR_END__\0__init_array_end\0__init_array_start\0_PROCEDURE_LINKAGE_TABLE_\0_DYNAMIC\0data_start\0printf@@GLIBC_2.2\0fstatat\0__libc_csu_fini\0_start\0__gmon_start__\0_Jv_RegisterClasses\0_fini\0__fstat\0__stat\0stat\0_IO_stdin_used\0__fxstat@@GLIBC_2.2\0__data_start\0__cxa_finalize@@GLIBC_2.2\0open@@GLIBC_2.2\0abort@@GLIBC_2.2\0__libc_csu_init\0__xstat@@GLIBC_2.2\0__bss_start\0__libc_start_main@@GLIBC_2.2\0__fxstatat@@GLIBC_2.4\0_end\0fstat\0_edata\0main\0_init\0

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: fstat seems broken on sparc64
  2009-12-13 23:08 fstat seems broken on sparc64 Jan Engelhardt
                   ` (7 preceding siblings ...)
  2009-12-22 19:33 ` David Miller
@ 2010-01-08 22:59 ` Jan Engelhardt
  2010-01-10 21:11 ` David Miller
  9 siblings, 0 replies; 17+ messages in thread
From: Jan Engelhardt @ 2010-01-08 22:59 UTC (permalink / raw)
  To: sparclinux


On Tuesday 2009-12-15 08:38, David Miller wrote:
>> I added some dump_stack() to all the cp_* functions, leading
>> to this result:
>> 
>> Call Trace:
>>  [0000000000522990] cp_new_stat+0xdc/0x134
>>  [0000000000522d9c] SyS_newfstat+0x24/0x38
>>  [0000000000406294] linux_sparc_syscall+0x34/0x44
>> 
>> Is glibc doing the right thing here? Calling sys_newfstat (instead of 
>> sys_newfstat64) for fstat64()?
>
>That's completely bogus.
>
>And I can't reproduce your problem on debian unstable.  What
>are you using, Fedora?  Maybe something is fubared in their
>glibc build or the checkout they are using.

It seems like a glibc bug, but it is also happening on Debian now:

I have no name!@ares:/# gcc stat.c -o stat64 -m64 -Wall
I have no name!@ares:/# ./stat64
1262990222.527474569
1262990222.000000000
I have no name!@ares:/# dpkg-query -W | grep libc
libc-bin        2.10.2-4
libc-dev-bin    2.10.2-4
libc6   2.10.2-4
libc6-dev       2.10.2-4
libc6-dev-sparc64       2.10.2-4
libc6-sparc64   2.10.2-4

And I can see why that is:
$ ./strace/strace-4.5.19/strace ./stat64
execve("./stat64", ["./stat64"], [/* 67 vars */]) = 0
uname({sys="Linux", node="ares", ...})  = 0
brk(0)                                  = 0x28e000
brk(0x28ef50)                           = 0x28ef50
brk(0x2b0f50)                           = 0x2b0f50
brk(0x2b2000)                           = 0x2b2000
open("foo", O_RDWR|O_CREAT, 0666)       = 3
lstat64(0x16b288, 0x7feff880a78)        = 0
fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 12), ...}) = 0

Compare with:

$ ./strace/strace-4.5.19/strace ./stat32
execve("./stat32", ["./stat32"], [/* 67 vars */]) = 0
uname({sys="Linux", node="ares", ...})  = 0
brk(0)                                  = 0xb2000
brk(0xb2cd0)                            = 0xb2cd0
brk(0xd4cd0)                            = 0xd4cd0
brk(0xd6000)                            = 0xd6000
open("foo", O_RDWR|O_CREAT, 0666)       = 3
lstat64(0x806d8, 0xffdc1030)            = 0
fstat64(0x3, 0xffdc1030)                = 0
fstat64(0x1, 0xffdc08b8)                = 0

So glibc calls fstat instead of fstat64. That does not sound
right at all.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: fstat seems broken on sparc64
  2009-12-13 23:08 fstat seems broken on sparc64 Jan Engelhardt
                   ` (8 preceding siblings ...)
  2010-01-08 22:59 ` Jan Engelhardt
@ 2010-01-10 21:11 ` David Miller
  2010-01-10 23:15     ` Jan Engelhardt
  9 siblings, 1 reply; 17+ messages in thread
From: David Miller @ 2010-01-10 21:11 UTC (permalink / raw)
  To: sparclinux

From: Jan Engelhardt <jengelh@medozas.de>
Date: Fri, 8 Jan 2010 23:59:04 +0100 (CET)

> libc6   2.10.2-4

Perfect, now you just have to audit what changed between the -2 and
the -4 package to find the bug :-)

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: fstat seems broken on sparc64
  2010-01-10 21:11 ` David Miller
@ 2010-01-10 23:15     ` Jan Engelhardt
  0 siblings, 0 replies; 17+ messages in thread
From: Jan Engelhardt @ 2010-01-10 23:15 UTC (permalink / raw)
  To: David Miller; +Cc: sparclinux, Linux Kernel Mailing List

On Sunday 2010-01-10 22:11, David Miller wrote:
>
>> libc6   2.10.2-4
>
>Perfect, now you just have to audit what changed between the -2 and
>the -4 package to find the bug :-)

I really do not believe you when you say your glibc is not affected.
Maybe some things did not became clear as part of the discussion,
so let me quickly restate:

 - talking about -m64 / libc6-sparc64_2.10.2-*_sparc.deb only

 - syscall is screwed up. strace outputs:

C func  | i386      | x86_64     | sparc32   | sparc64
--------+-----------+------------+-----------+---------------
stat    | stat64    | stat       | stat64    | stat64
lstat   | lstat64   | lstat      | lstat64   | lstat64
fstatat | fstatat64 | newfstatat | fstatat64 | fstatat64
fstat   | fstat64   | fstat      | fstat64   | fstat (*)


 - I now found and fixed the problem, here is the patch for
   you to study (as code speaks louder)

Index: glibc-2.10.1/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
===================================================================
--- glibc-2.10.1.orig/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
+++ glibc-2.10.1/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
@@ -1 +1 @@
-#include "../../fxstat.c"
+#include "../../i386/fxstat.c"

(Hint: Compare with sparc64/lxstat.c)

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: fstat seems broken on sparc64
@ 2010-01-10 23:15     ` Jan Engelhardt
  0 siblings, 0 replies; 17+ messages in thread
From: Jan Engelhardt @ 2010-01-10 23:15 UTC (permalink / raw)
  To: David Miller; +Cc: sparclinux, Linux Kernel Mailing List

On Sunday 2010-01-10 22:11, David Miller wrote:
>
>> libc6   2.10.2-4
>
>Perfect, now you just have to audit what changed between the -2 and
>the -4 package to find the bug :-)

I really do not believe you when you say your glibc is not affected.
Maybe some things did not became clear as part of the discussion,
so let me quickly restate:

 - talking about -m64 / libc6-sparc64_2.10.2-*_sparc.deb only

 - syscall is screwed up. strace outputs:

C func  | i386      | x86_64     | sparc32   | sparc64
--------+-----------+------------+-----------+---------------
stat    | stat64    | stat       | stat64    | stat64
lstat   | lstat64   | lstat      | lstat64   | lstat64
fstatat | fstatat64 | newfstatat | fstatat64 | fstatat64
fstat   | fstat64   | fstat      | fstat64   | fstat (*)


 - I now found and fixed the problem, here is the patch for
   you to study (as code speaks louder)

Index: glibc-2.10.1/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
=================================--- glibc-2.10.1.orig/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
+++ glibc-2.10.1/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
@@ -1 +1 @@
-#include "../../fxstat.c"
+#include "../../i386/fxstat.c"

(Hint: Compare with sparc64/lxstat.c)

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: fstat seems broken on sparc64
  2010-01-10 23:15     ` Jan Engelhardt
@ 2010-01-11  6:42       ` David Miller
  -1 siblings, 0 replies; 17+ messages in thread
From: David Miller @ 2010-01-11  6:42 UTC (permalink / raw)
  To: jengelh; +Cc: sparclinux, linux-kernel

From: Jan Engelhardt <jengelh@medozas.de>
Date: Mon, 11 Jan 2010 00:15:17 +0100 (CET)

> On Sunday 2010-01-10 22:11, David Miller wrote:
>>
>>> libc6   2.10.2-4
>>
>>Perfect, now you just have to audit what changed between the -2 and
>>the -4 package to find the bug :-)
> 
> I really do not believe you when you say your glibc is not affected.

Why not :-)

davem@sunset:~$ dpkg-query -W | grep libc6-sparc64
libc6-sparc64	2.10.2-2
davem@sunset:~$ cat fstat_test.c
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	struct stat sb;
	int fd = open("foo", O_RDWR | O_CREAT, 0666);

	if (fd < 0)
		abort();
	if (fstat(fd, &sb) < 0)
		abort();
	printf("%lu.%lu\n", sb.st_mtim.tv_sec, sb.st_mtim.tv_nsec);
	if (stat("foo", &sb) < 0)
		abort();
	printf("%lu.%lu\n", sb.st_mtim.tv_sec, sb.st_mtim.tv_nsec);
	if (fstatat(AT_FDCWD, "foo", &sb, 0) < 0)
		abort();
	printf("%lu.%lu\n", sb.st_mtim.tv_sec, sb.st_mtim.tv_nsec);
	return 0;
}
davem@sunset:~$ gcc -m64 -o fstat_test fstat_test.c
davem@sunset:~$ ./fstat_test
1261510364.0
1261510364.0
1261510364.0
davem@sunset:~$ 

But, indeed when I run it under strace64 it goes:

open("foo", O_RDWR|O_CREAT, 0666)       = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0

I wonder why I get a sane output from the test program even though
it's not using fstat64.

>  - I now found and fixed the problem, here is the patch for
>    you to study (as code speaks louder)
> 
> Index: glibc-2.10.1/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
> ===================================================================
> --- glibc-2.10.1.orig/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
> +++ glibc-2.10.1/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
> @@ -1 +1 @@
> -#include "../../fxstat.c"
> +#include "../../i386/fxstat.c"
> 
> (Hint: Compare with sparc64/lxstat.c

Thanks a lot!

Please submit this to the glibc/eglibc folks for inclusion!

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: fstat seems broken on sparc64
@ 2010-01-11  6:42       ` David Miller
  0 siblings, 0 replies; 17+ messages in thread
From: David Miller @ 2010-01-11  6:42 UTC (permalink / raw)
  To: jengelh; +Cc: sparclinux, linux-kernel

From: Jan Engelhardt <jengelh@medozas.de>
Date: Mon, 11 Jan 2010 00:15:17 +0100 (CET)

> On Sunday 2010-01-10 22:11, David Miller wrote:
>>
>>> libc6   2.10.2-4
>>
>>Perfect, now you just have to audit what changed between the -2 and
>>the -4 package to find the bug :-)
> 
> I really do not believe you when you say your glibc is not affected.

Why not :-)

davem@sunset:~$ dpkg-query -W | grep libc6-sparc64
libc6-sparc64	2.10.2-2
davem@sunset:~$ cat fstat_test.c
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	struct stat sb;
	int fd = open("foo", O_RDWR | O_CREAT, 0666);

	if (fd < 0)
		abort();
	if (fstat(fd, &sb) < 0)
		abort();
	printf("%lu.%lu\n", sb.st_mtim.tv_sec, sb.st_mtim.tv_nsec);
	if (stat("foo", &sb) < 0)
		abort();
	printf("%lu.%lu\n", sb.st_mtim.tv_sec, sb.st_mtim.tv_nsec);
	if (fstatat(AT_FDCWD, "foo", &sb, 0) < 0)
		abort();
	printf("%lu.%lu\n", sb.st_mtim.tv_sec, sb.st_mtim.tv_nsec);
	return 0;
}
davem@sunset:~$ gcc -m64 -o fstat_test fstat_test.c
davem@sunset:~$ ./fstat_test
1261510364.0
1261510364.0
1261510364.0
davem@sunset:~$ 

But, indeed when I run it under strace64 it goes:

open("foo", O_RDWR|O_CREAT, 0666)       = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0

I wonder why I get a sane output from the test program even though
it's not using fstat64.

>  - I now found and fixed the problem, here is the patch for
>    you to study (as code speaks louder)
> 
> Index: glibc-2.10.1/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
> =================================> --- glibc-2.10.1.orig/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
> +++ glibc-2.10.1/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
> @@ -1 +1 @@
> -#include "../../fxstat.c"
> +#include "../../i386/fxstat.c"
> 
> (Hint: Compare with sparc64/lxstat.c

Thanks a lot!

Please submit this to the glibc/eglibc folks for inclusion!

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: fstat seems broken on sparc64
  2010-01-11  6:42       ` David Miller
@ 2010-01-11  9:06         ` Jan Engelhardt
  -1 siblings, 0 replies; 17+ messages in thread
From: Jan Engelhardt @ 2010-01-11  9:06 UTC (permalink / raw)
  To: David Miller; +Cc: sparclinux, linux-kernel


On Monday 2010-01-11 07:42, David Miller wrote:
>> On Sunday 2010-01-10 22:11, David Miller wrote:
>>>
>>>> libc6   2.10.2-4
>>>
>>>Perfect, now you just have to audit what changed between the -2 and
>>>the -4 package to find the bug :-)
>> 
>> I really do not believe you when you say your glibc is not affected.
>
>Why not :-)
>
>davem@sunset:~$ dpkg-query -W | grep libc6-sparc64
>libc6-sparc64	2.10.2-2
>davem@sunset:~$ cat fstat_test.c
>#include <sys/stat.h>
>#include <fcntl.h>
>#include <stdio.h>
>#include <stdlib.h>
>
>int main(void)
>{
>	struct stat sb;
>	int fd = open("foo", O_RDWR | O_CREAT, 0666);
>
>	if (fd < 0)
>		abort();
>	if (fstat(fd, &sb) < 0)
>		abort();
>	printf("%lu.%lu\n", sb.st_mtim.tv_sec, sb.st_mtim.tv_nsec);
>	if (stat("foo", &sb) < 0)
>		abort();
>	printf("%lu.%lu\n", sb.st_mtim.tv_sec, sb.st_mtim.tv_nsec);
>	if (fstatat(AT_FDCWD, "foo", &sb, 0) < 0)
>		abort();
>	printf("%lu.%lu\n", sb.st_mtim.tv_sec, sb.st_mtim.tv_nsec);
>	return 0;
>}
>davem@sunset:~$ gcc -m64 -o fstat_test fstat_test.c
>davem@sunset:~$ ./fstat_test
>1261510364.0
>1261510364.0
>1261510364.0
>davem@sunset:~$ 
>But, indeed when I run it under strace64 it goes:
>
>open("foo", O_RDWR|O_CREAT, 0666)       = 3
>fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
>fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
>
>I wonder why I get a sane output from the test program even though
>it's not using fstat64.

I would recommend that you run the testcase on a filesystem that
supports and records subsecond timestamps, and that the file is
created at a moment where the subsecond part is not 0. When in doubt,
use touch(1) to apply some subseconds, but usually, just running it
will create it at a non-zero subsecond with a high probability.

>> ===================================================================
>> --- glibc-2.10.1.orig/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
>> +++ glibc-2.10.1/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
>> @@ -1 +1 @@
>> -#include "../../fxstat.c"
>> +#include "../../i386/fxstat.c"
>> 
>> (Hint: Compare with sparc64/lxstat.c
>
>Thanks a lot!
>
>Please submit this to the glibc/eglibc folks for inclusion!
>
http://sources.redhat.com/bugzilla/show_bug.cgi?id=11155

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: fstat seems broken on sparc64
@ 2010-01-11  9:06         ` Jan Engelhardt
  0 siblings, 0 replies; 17+ messages in thread
From: Jan Engelhardt @ 2010-01-11  9:06 UTC (permalink / raw)
  To: David Miller; +Cc: sparclinux, linux-kernel


On Monday 2010-01-11 07:42, David Miller wrote:
>> On Sunday 2010-01-10 22:11, David Miller wrote:
>>>
>>>> libc6   2.10.2-4
>>>
>>>Perfect, now you just have to audit what changed between the -2 and
>>>the -4 package to find the bug :-)
>> 
>> I really do not believe you when you say your glibc is not affected.
>
>Why not :-)
>
>davem@sunset:~$ dpkg-query -W | grep libc6-sparc64
>libc6-sparc64	2.10.2-2
>davem@sunset:~$ cat fstat_test.c
>#include <sys/stat.h>
>#include <fcntl.h>
>#include <stdio.h>
>#include <stdlib.h>
>
>int main(void)
>{
>	struct stat sb;
>	int fd = open("foo", O_RDWR | O_CREAT, 0666);
>
>	if (fd < 0)
>		abort();
>	if (fstat(fd, &sb) < 0)
>		abort();
>	printf("%lu.%lu\n", sb.st_mtim.tv_sec, sb.st_mtim.tv_nsec);
>	if (stat("foo", &sb) < 0)
>		abort();
>	printf("%lu.%lu\n", sb.st_mtim.tv_sec, sb.st_mtim.tv_nsec);
>	if (fstatat(AT_FDCWD, "foo", &sb, 0) < 0)
>		abort();
>	printf("%lu.%lu\n", sb.st_mtim.tv_sec, sb.st_mtim.tv_nsec);
>	return 0;
>}
>davem@sunset:~$ gcc -m64 -o fstat_test fstat_test.c
>davem@sunset:~$ ./fstat_test
>1261510364.0
>1261510364.0
>1261510364.0
>davem@sunset:~$ 
>But, indeed when I run it under strace64 it goes:
>
>open("foo", O_RDWR|O_CREAT, 0666)       = 3
>fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
>fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
>
>I wonder why I get a sane output from the test program even though
>it's not using fstat64.

I would recommend that you run the testcase on a filesystem that
supports and records subsecond timestamps, and that the file is
created at a moment where the subsecond part is not 0. When in doubt,
use touch(1) to apply some subseconds, but usually, just running it
will create it at a non-zero subsecond with a high probability.

>> =================================>> --- glibc-2.10.1.orig/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
>> +++ glibc-2.10.1/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
>> @@ -1 +1 @@
>> -#include "../../fxstat.c"
>> +#include "../../i386/fxstat.c"
>> 
>> (Hint: Compare with sparc64/lxstat.c
>
>Thanks a lot!
>
>Please submit this to the glibc/eglibc folks for inclusion!
>
http://sources.redhat.com/bugzilla/show_bug.cgi?id\x11155

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2010-01-11  9:06 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-12-13 23:08 fstat seems broken on sparc64 Jan Engelhardt
2009-12-13 23:57 ` Jan Engelhardt
2009-12-14  3:25 ` David Miller
2009-12-14 14:22 ` Jan Engelhardt
2009-12-15  7:38 ` David Miller
2009-12-22 14:38 ` Jan Engelhardt
2009-12-22 19:09 ` David Miller
2009-12-22 19:21 ` Jan Engelhardt
2009-12-22 19:33 ` David Miller
2010-01-08 22:59 ` Jan Engelhardt
2010-01-10 21:11 ` David Miller
2010-01-10 23:15   ` Jan Engelhardt
2010-01-10 23:15     ` Jan Engelhardt
2010-01-11  6:42     ` David Miller
2010-01-11  6:42       ` David Miller
2010-01-11  9:06       ` Jan Engelhardt
2010-01-11  9:06         ` Jan Engelhardt

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.