Fix stat64 structure on 32-bit X86_SE
authorVince Weaver <vince@csl.cornell.edu>
Tue, 20 Oct 2009 19:15:37 +0000 (15:15 -0400)
committerVince Weaver <vince@csl.cornell.edu>
Tue, 20 Oct 2009 19:15:37 +0000 (15:15 -0400)
The st_size entry was in the wrong place
 (see linux-2.6.29/arch/x86/include/asm/stat.h )

Also, the packed attribute is needed when compiling on a
64-bit machine, otherwise gcc adds extra padding that
break the layout of the structure.

src/arch/x86/linux/linux.hh

index a810d4a79600b5ba71392ebb97e2573f1fbcb84b..238b5e683d7ab8aae9b70176951bbffc53bec7a6 100644 (file)
@@ -142,8 +142,8 @@ class X86Linux32 : public Linux
         uint32_t st_uid;
         uint32_t st_gid;
         uint64_t st_rdev;
-        int64_t st_size;
         uint8_t __pad3[4];
+        int64_t st_size;
         uint32_t st_blksize;
         uint64_t st_blocks;
         uint32_t st_atimeX;
@@ -153,7 +153,7 @@ class X86Linux32 : public Linux
         uint32_t st_ctimeX;
         uint32_t st_ctime_nsec;
         uint64_t st_ino;
-    } tgt_stat64;
+    } __attribute__((__packed__)) tgt_stat64;
 
     static OpenFlagTransTable openFlagTable[];