Use correct data structures for stat syscalls, by Magnus Damm.
authorths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>
Fri, 22 Jun 2007 10:15:10 +0000 (10:15 +0000)
committerths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>
Fri, 22 Jun 2007 10:15:10 +0000 (10:15 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3001 c046a42c-6fe2-441c-8c8c-71466251a162

linux-user/syscall_defs.h

index 5ae95b2..0e39a2e 100644 (file)
@@ -869,7 +869,7 @@ struct target_winsize {
 #define TARGET_MAP_NORESERVE   0x4000          /* don't check for reservations */
 #endif
 
-#if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SH4)
+#if defined(TARGET_I386) || defined(TARGET_ARM)
 struct target_stat {
        unsigned short st_dev;
        unsigned short __pad1;
@@ -1242,6 +1242,65 @@ struct target_stat64 {
        target_long     __unused[3];
 };
 
+#elif defined(TARGET_SH4)
+
+struct target_stat {
+       target_ulong  st_dev;
+       target_ulong  st_ino;
+       unsigned short st_mode;
+       unsigned short st_nlink;
+       unsigned short st_uid;
+       unsigned short st_gid;
+       target_ulong  st_rdev;
+       target_ulong  st_size;
+       target_ulong  st_blksize;
+       target_ulong  st_blocks;
+       target_ulong  target_st_atime;
+       target_ulong  target_st_atime_nsec;
+       target_ulong  target_st_mtime;
+       target_ulong  target_st_mtime_nsec;
+       target_ulong  target_st_ctime;
+       target_ulong  target_st_ctime_nsec;
+       target_ulong  __unused4;
+       target_ulong  __unused5;
+};
+
+/* This matches struct stat64 in glibc2.1, hence the absolutely
+ * insane amounts of padding around dev_t's.
+ */
+struct target_stat64 {
+       unsigned long long      st_dev;
+       unsigned char   __pad0[4];
+
+#define TARGET_STAT64_HAS_BROKEN_ST_INO        1
+       target_ulong    __st_ino;
+
+       unsigned int    st_mode;
+       unsigned int    st_nlink;
+
+       target_ulong    st_uid;
+       target_ulong    st_gid;
+
+       unsigned long long      st_rdev;
+       unsigned char   __pad3[4];
+
+       long long       st_size;
+       target_ulong    st_blksize;
+
+       unsigned long long      st_blocks;      /* Number 512-byte blocks allocated. */
+
+       target_ulong    target_st_atime;
+       target_ulong    target_st_atime_nsec;
+
+       target_ulong    target_st_mtime;
+       target_ulong    target_st_mtime_nsec;
+
+       target_ulong    target_st_ctime;
+       target_ulong    target_st_ctime_nsec; 
+
+       unsigned long long      st_ino;
+};
+
 #else
 #error unsupported CPU
 #endif