Hi jan,

I was able to reproduce the issue with sample program.

Program was:
  1 #include <sys/vfs.h>
  2 #include <sys/types.h>
  3 #include <sys/statfs.h>
  4 #include <stdio.h>
  5
  6 int main()
  7 {
  8         int ret;
  9         ret = fstatfs(-1, NULL);
 10         printf("return fstatfs %d\n ",ret);
 11         return 0;
 12 }
 13

Compiled using the following command
gcc  fstatpgm1.c -D_FILE_OFFSET_BITS=64 -march=octeon2 -mabi=64 -msoft-float 
-Wall -Wextra -fno-strict-aliasing -O2 -o out1 -mabi=64 -msoft-float 
-L/usr/lib64
those extra flags and libraries are required for the test system. A warning was 
given
fstatpgm1.c: In function 'main':
fstatpgm1.c:9: warning: null argument where non-null required (argument 2)



2. file out1
out1: ELF 64-bit MSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), for 
GNU/Linux 2.6.9, statically linked, not stripped

output uname -a
SMP PREEMPT mips64 GNU/Linux

3. I ran the binary using strace. It is not showing fstafs

$ strace ./out1
execve("./out1", ["./out1"], [/* 15 vars */]) = 0
brk(0)                                  = 0x120011000
uname({sys="Linux", node="CPU1", ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x556219c000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = -1 ENOENT (No such file or directory)
open("/lib64/tls/octeon2/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or 
directory)
stat("/lib64/tls/octeon2", 0xffffc3e5e0) = -1 ENOENT (No such file or directory)
open("/lib64/tls/libc.so.6", O_RDONLY)  = -1 ENOENT (No such file or directory)
stat("/lib64/tls", 0xffffc3e5e0)        = -1 ENOENT (No such file or directory)
open("/lib64/octeon2/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or 
directory)
stat("/lib64/octeon2", 0xffffc3e5e0)    = -1 ENOENT (No such file or directory)
open("/lib64/libc.so.6", O_RDONLY)      = 3
read(3, "\177ELF\2\2\1\0\0\0\0\0\0\0\0\0\0\3\0\10\0\0\0\1\0\0\0\0\0\3b\250"..., 
832) = 832
lseek(3, 60728, SEEK_SET)               = 60728
read(3, "\0\0\0\4\0\0\0\20\0\0\0\1GNU\0\0\0\0\0\0\0\0\2\0\0\0\6\0\0\0\t", 32) = 
32
fstat(3, {st_mode=S_IFREG|0755, st_size=1693440, ...}) = 0
mmap(NULL, 1679632, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0x55621ae000
mprotect(0x5562323000, 61440, PROT_NONE) = 0
mmap(0x5562332000, 73728, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x174000) = 0x5562332000
mmap(0x5562344000, 16656, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x5562344000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x556219d000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x556219e000
set_thread_area(0x55621a4b90)           = 0
mprotect(0x5562332000, 57344, PROT_READ) = 0
mprotect(0x55621ab000, 4096, PROT_READ) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap(NULL, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x5562349000
write(1, "return fstatfs 1646910064\n", 26return fstatfs 1646910064
) = 26
write(1, " ", 1 )                        = 1
exit_group(0)                           = ?

4. The issue was reproducible. So I build it static
gcc -g fstatpgm1.c -D_FILE_OFFSET_BITS=64 -march=octeon2 -mabi=64 -msoft-float 
-Wall -Wextra -fno-strict-aliasing -O2 -o out1 -mabi=64 -msoft-float 
-L/usr/lib64 -static

objdump follows.

main():
/user/ajoy.joseph/LTP/sample_app/fstatpgm1.c:7
   120003b50:   67bdfff0        daddiu  sp,sp,-16
/user/ajoy.joseph/LTP/sample_app/fstatpgm1.c:9
   120003b54:   2404ffff        li      a0,-1
/user/ajoy.joseph/LTP/sample_app/fstatpgm1.c:7
   120003b58:   ffbc0000        sd      gp,0(sp)
   120003b5c:   3c1c000b        lui     gp,0xb
   120003b60:   0399e02d        daddu   gp,gp,t9
   120003b64:   ffbf0008        sd      ra,8(sp)
   120003b68:   679c0320        daddiu  gp,gp,800
/user/ajoy.joseph/LTP/sample_app/fstatpgm1.c:9
   120003b6c:   df998708        ld      t9,-30968(gp)
   120003b70:   0320f809        jalr    t9
   120003b74:   0000282d        move    a1,zero
/user/ajoy.joseph/LTP/sample_app/fstatpgm1.c:10
   120003b78:   df848048        ld      a0,-32696(gp)
   120003b7c:   df999530        ld      t9,-27344(gp)
   120003b80:   0040282d        move    a1,v0
   120003b84:   0320f809        jalr    t9
   120003b88:   6484ab78        daddiu  a0,a0,-21640
/user/ajoy.joseph/LTP/sample_app/fstatpgm1.c:12
   120003b8c:   dfbf0008        ld      ra,8(sp)
   120003b90:   dfbc0000        ld      gp,0(sp)
   120003b94:   0000102d        move    v0,zero
   120003b98:   03e00008        jr      ra
   120003b9c:   67bd0010        daddiu  sp,sp,16
__libc_start_main():
   120003ba0:   67bdfed0        daddiu  sp,sp,-304

5. I am using
        libc.so.6 => /lib64/libc.so.6
        /lib64/ld.so.1
        /lib64/libc.so.6 -> libc-2.11.1.so
        gcc version 4.4.1

I don’t understand objdump output much. Sorry to tell that. How to analyze it?

Regards
Ajoy

-----Original Message-----
From: Jan Stancek [mailto:jstan...@redhat.com]
Sent: Monday, June 23, 2014 8:18 PM
To: Ajoymon Joseph
Cc: ltp-list@lists.sourceforge.net
Subject: Re: [LTP] fstatfs02 issue on mips64




----- Original Message -----
> From: "Ajoymon Joseph" <ajoy.jos...@lnttechservices.com>
> To: "Jan Stancek" <jstan...@redhat.com>
> Cc: ltp-list@lists.sourceforge.net
> Sent: Monday, 23 June, 2014 3:26:55 PM
> Subject: RE: [LTP] fstatfs02 issue on mips64
>
> I am not seeing fstatfs call itself when comparing the system call. I hope
> this is the reason?
> Also fstatfs02 was working fine. Only fstatfs02_64 was having the issue.
> I saw in ../utils/newer_64.mk makefile. It will be good if you tell little
> more about the 64 here.

It compiles the testcase with -D_FILE_OFFSET_BITS=64, which should have effect
only on 32 bit systems. [1]

1. Can you verify, that you can reproduce this issue with following program,
if you add compiler flag "-D_FILE_OFFSET_BITS=64"?
For example: gcc fstatfs.c -D_FILE_OFFSET_BITS=64

$ cat fstatfs.c
#include <sys/vfs.h>
#include <sys/types.h>
#include <sys/statfs.h>
#include <stdio.h>

int main()
{
        fstatfs(-1, NULL);
        return 0;
}

2. You mentioned mips64, is both kernel and userspace 64bit?
   Once you compile for your test system, can you run "file" on the binary?
   $ file ./a.out

3. If you run the binary via strace on test system, does it show calls to 
fstatfs()?
4. If you can reproduce it with simple program above, can you compile it 
statically,
   for example: $ gcc fstatfs.c -D_FILE_OFFSET_BITS=64 -static
   and have a look at disassembly of statfs function?
   $ objdump -d ./a.out | less
   You will need to use objdump from your toolchain.

5. What libc/uclibc library are you using on test system?

Regards,
Jan

[1] 
http://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html#Feature-Test-Macros

>
> I am working on 2.6.32.46 kernel.
>
> Regards
> Ajoy
>
>
>
>
>
> -----Original Message-----
> From: Jan Stancek [mailto:jstan...@redhat.com]
> Sent: Monday, June 23, 2014 5:13 PM
> To: Ajoymon Joseph
> Cc: ltp-list@lists.sourceforge.net
> Subject: Re: [LTP] fstatfs02 issue on mips64
>
>
>
> ----- Original Message -----
> > From: "Ajoymon Joseph" <ajoy.jos...@lnttechservices.com>
> > To: ltp-list@lists.sourceforge.net
> > Sent: Friday, 20 June, 2014 3:41:06 PM
> > Subject: [LTP] fstatfs02 issue on mips64
> >
> >
> >
> > Hi,
> >
> > I am testing mips64 with LTP. The problem is with fstatfs02.c file. The
> > test
> > case was failing in my particular arch. For debugging purpose I write the
> > same code and executed.
> >
> > ret = fstatfs( -1,&buf );
> >
> > printf("Retrun value =%d, errornumber %d EBADF is %d %s FD %d pointer %p
> > \n",ret,errno, EBADF,strerror(errno),-1,&buf);
> >
> > it was giving a output like
> >
> > Retrun value =- 1 , errornumber 9 EBADF is 9 Bad file descriptor FD -1
> > pointer 0x120011130
> >
> > But when I executed LTP testcase with some debug print added
> >
> > TEST(fstatfs(TC[i].fd, (TC[i]).sbuf));
> >
> > if (TEST_RETURN != -1) {
> >
> > tst_resm(TFAIL, "call succeeded unexpectedly return %d %s FD %d, pointer
> > sbuf
> > %p ",TEST_RETURN,strerror(errno),TC[i].fd, TC[i].sbuf);
> >
> > I got a print like this
> >
> > fstatfs02 1 TFAIL : call succeeded unexpectedly return 1690729072 Success
> > FD
> > -1, pointer sbuf 0x12001ba30
> >
> > I feel like both are doing the same job… But when I am running it in LTP
> > environment I am getting a return as 1690729072. I was not able to find any
> > problem in TEST macro. Can anyone please help me out in debugging this.
>
> What kernel/LTP release are you using?
>
> You can try running good and bad case via strace. If parameters will be
> correct and you still get strange numbers in strace output, it's likely a
> kernel bug.
>
> Regards,
> Jan
> L&T Technology Services Ltd
>
> www.LntTechservices.com<http://www.lnttechservices.com/>
>
> This Email may contain confidential or privileged information for the
> intended recipient (s). If you are not the intended recipient, please do not
> use or disseminate the information, notify the sender and delete it from
> your system.
>
L&T Technology Services Ltd

www.LntTechservices.com<http://www.lnttechservices.com/>

This Email may contain confidential or privileged information for the intended 
recipient (s). If you are not the intended recipient, please do not use or 
disseminate the information, notify the sender and delete it from your system.
------------------------------------------------------------------------------
Open source business process management suite built on Java and Eclipse
Turn processes into business applications with Bonita BPM Community Edition
Quickly connect people, data, and systems into organized workflows
Winner of BOSSIE, CODIE, OW2 and Gartner awards
http://p.sf.net/sfu/Bonitasoft
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to