[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [qemu-upstream-unstable] linux-user: Fix stat64 syscall for SPARC64
commit 3bd74d1712c33a746b1aee45b809647f9353238c Author: Stefan Weil <sw@xxxxxxxxxxx> AuthorDate: Wed Oct 30 22:52:24 2013 +0100 Commit: Michael Roth <mdroth@xxxxxxxxxxxxxxxxxx> CommitDate: Tue Dec 3 19:53:12 2013 -0600 linux-user: Fix stat64 syscall for SPARC64 Some targets use a stat64 structure for the stat64 syscall while others use a stat structure. SPARC64 used the wrong kind. Instead of extending the conditional compilation in syscall.c, now a macro TARGET_HAS_STRUCT_STAT64 is defined whenever a target has a target_stat64. Signed-off-by: Stefan Weil <sw@xxxxxxxxxxx> Reviewed-by: Erik de Castro Lopo <erikd@xxxxxxxxxxxxx> (cherry picked from commit 20d155bc902f41c5b354937e730ad85b43614ae9) Signed-off-by: Michael Roth <mdroth@xxxxxxxxxxxxxxxxxx> --- linux-user/syscall.c | 6 +++--- linux-user/syscall_defs.h | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index f986548..c510975 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -4764,10 +4764,10 @@ static inline abi_long host_to_target_stat64(void *cpu_env, } else #endif { -#if TARGET_ABI_BITS == 64 && !defined(TARGET_ALPHA) - struct target_stat *target_st; -#else +#if defined(TARGET_HAS_STRUCT_STAT64) struct target_stat64 *target_st; +#else + struct target_stat *target_st; #endif if (!lock_user_struct(VERIFY_WRITE, target_st, target_addr, 0)) diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h index 086fbff..dd0d5a9 100644 --- a/linux-user/syscall_defs.h +++ b/linux-user/syscall_defs.h @@ -1165,6 +1165,7 @@ struct target_stat { /* This matches struct stat64 in glibc2.1, hence the absolutely * insane amounts of padding around dev_t's. */ +#define TARGET_HAS_STRUCT_STAT64 struct target_stat64 { unsigned short st_dev; unsigned char __pad0[10]; @@ -1200,6 +1201,7 @@ struct target_stat64 { } QEMU_PACKED; #ifdef TARGET_ARM +#define TARGET_HAS_STRUCT_STAT64 struct target_eabi_stat64 { unsigned long long st_dev; unsigned int __pad1; @@ -1249,6 +1251,7 @@ struct target_stat { abi_ulong __unused4[2]; }; +#define TARGET_HAS_STRUCT_STAT64 struct target_stat64 { unsigned char __pad0[6]; unsigned short st_dev; @@ -1304,6 +1307,7 @@ struct target_stat { abi_ulong __unused4[2]; }; +#define TARGET_HAS_STRUCT_STAT64 struct target_stat64 { unsigned char __pad0[6]; unsigned short st_dev; @@ -1371,6 +1375,8 @@ struct target_stat { #endif }; +#if !defined(TARGET_PPC64) || defined(TARGET_ABI32) +#define TARGET_HAS_STRUCT_STAT64 struct QEMU_PACKED target_stat64 { unsigned long long st_dev; unsigned long long st_ino; @@ -1393,6 +1399,7 @@ struct QEMU_PACKED target_stat64 { unsigned int __unused4; unsigned int __unused5; }; +#endif #elif defined(TARGET_MICROBLAZE) @@ -1418,6 +1425,7 @@ struct target_stat { }; /* FIXME: Microblaze no-mmu user-space has a difference stat64 layout... */ +#define TARGET_HAS_STRUCT_STAT64 struct QEMU_PACKED target_stat64 { uint64_t st_dev; #define TARGET_STAT64_HAS_BROKEN_ST_INO 1 @@ -1473,6 +1481,7 @@ struct target_stat { /* This matches struct stat64 in glibc2.1, hence the absolutely * insane amounts of padding around dev_t's. */ +#define TARGET_HAS_STRUCT_STAT64 struct target_stat64 { unsigned long long st_dev; unsigned char __pad1[2]; @@ -1581,6 +1590,7 @@ struct target_stat { * struct stat of the 64-bit kernel. */ +#define TARGET_HAS_STRUCT_STAT64 struct target_stat64 { unsigned int st_dev; unsigned int st_pad0[3]; /* Reserved for st_dev expansion */ @@ -1652,6 +1662,7 @@ struct target_stat { * struct stat of the 64-bit kernel. */ +#define TARGET_HAS_STRUCT_STAT64 struct target_stat64 { abi_ulong st_dev; abi_ulong st_pad0[3]; /* Reserved for st_dev expansion */ @@ -1708,6 +1719,7 @@ struct target_stat { unsigned int st_gen; }; +#define TARGET_HAS_STRUCT_STAT64 struct target_stat64 { abi_ulong st_dev; abi_ulong st_ino; @@ -1757,6 +1769,7 @@ struct target_stat { /* This matches struct stat64 in glibc2.1, hence the absolutely * insane amounts of padding around dev_t's. */ +#define TARGET_HAS_STRUCT_STAT64 struct QEMU_PACKED target_stat64 { unsigned long long st_dev; unsigned char __pad0[4]; @@ -1862,6 +1875,7 @@ struct target_stat { unsigned int __unused5; }; +#define TARGET_HAS_STRUCT_STAT64 struct target_stat64 { uint64_t st_dev; uint64_t st_ino; -- generated by git-patchbot for /home/xen/git/qemu-upstream-unstable.git _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |