Commit 1b8dd648bdccefa8ba1b05416e65e9b3a278b0e6
1 parent
17d996e1
Fix Sparc64 stat system call
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3053 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
59 additions
and
1 deletions
linux-user/syscall.c
... | ... | @@ -3535,7 +3535,7 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, |
3535 | 3535 | struct target_stat *target_st; |
3536 | 3536 | |
3537 | 3537 | lock_user_struct(target_st, arg2, 0); |
3538 | -#if defined(TARGET_MIPS) | |
3538 | +#if defined(TARGET_MIPS) || defined(TARGET_SPARC64) | |
3539 | 3539 | target_st->st_dev = tswap32(st.st_dev); |
3540 | 3540 | #else |
3541 | 3541 | target_st->st_dev = tswap16(st.st_dev); |
... | ... | @@ -3545,6 +3545,10 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, |
3545 | 3545 | target_st->st_mode = tswapl(st.st_mode); /* XXX: check this */ |
3546 | 3546 | target_st->st_uid = tswap32(st.st_uid); |
3547 | 3547 | target_st->st_gid = tswap32(st.st_gid); |
3548 | +#elif defined(TARGET_SPARC64) | |
3549 | + target_st->st_mode = tswap32(st.st_mode); | |
3550 | + target_st->st_uid = tswap32(st.st_uid); | |
3551 | + target_st->st_gid = tswap32(st.st_gid); | |
3548 | 3552 | #else |
3549 | 3553 | target_st->st_mode = tswap16(st.st_mode); |
3550 | 3554 | target_st->st_uid = tswap16(st.st_uid); |
... | ... | @@ -3554,6 +3558,9 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, |
3554 | 3558 | /* If this is the same on PPC, then just merge w/ the above ifdef */ |
3555 | 3559 | target_st->st_nlink = tswapl(st.st_nlink); |
3556 | 3560 | target_st->st_rdev = tswapl(st.st_rdev); |
3561 | +#elif defined(TARGET_SPARC64) | |
3562 | + target_st->st_nlink = tswap32(st.st_nlink); | |
3563 | + target_st->st_rdev = tswap32(st.st_rdev); | |
3557 | 3564 | #else |
3558 | 3565 | target_st->st_nlink = tswap16(st.st_nlink); |
3559 | 3566 | target_st->st_rdev = tswap16(st.st_rdev); | ... | ... |
linux-user/syscall_defs.h
... | ... | @@ -962,6 +962,57 @@ struct target_eabi_stat64 { |
962 | 962 | } __attribute__ ((packed)); |
963 | 963 | #endif |
964 | 964 | |
965 | +#elif defined(TARGET_SPARC64) | |
966 | +struct target_stat { | |
967 | + unsigned int st_dev; | |
968 | + target_ulong st_ino; | |
969 | + unsigned int st_mode; | |
970 | + unsigned int st_nlink; | |
971 | + unsigned int st_uid; | |
972 | + unsigned int st_gid; | |
973 | + unsigned int st_rdev; | |
974 | + target_long st_size; | |
975 | + target_long target_st_atime; | |
976 | + target_long target_st_mtime; | |
977 | + target_long target_st_ctime; | |
978 | + target_long st_blksize; | |
979 | + target_long st_blocks; | |
980 | + target_ulong __unused4[2]; | |
981 | +}; | |
982 | + | |
983 | +struct target_stat64 { | |
984 | + unsigned char __pad0[6]; | |
985 | + unsigned short st_dev; | |
986 | + | |
987 | + uint64_t st_ino; | |
988 | + uint64_t st_nlink; | |
989 | + | |
990 | + unsigned int st_mode; | |
991 | + | |
992 | + unsigned int st_uid; | |
993 | + unsigned int st_gid; | |
994 | + | |
995 | + unsigned char __pad2[6]; | |
996 | + unsigned short st_rdev; | |
997 | + | |
998 | + int64_t st_size; | |
999 | + int64_t st_blksize; | |
1000 | + | |
1001 | + unsigned char __pad4[4]; | |
1002 | + unsigned int st_blocks; | |
1003 | + | |
1004 | + target_ulong target_st_atime; | |
1005 | + target_ulong __unused1; | |
1006 | + | |
1007 | + target_ulong target_st_mtime; | |
1008 | + target_ulong __unused2; | |
1009 | + | |
1010 | + target_ulong target_st_ctime; | |
1011 | + target_ulong __unused3; | |
1012 | + | |
1013 | + target_ulong __unused4[3]; | |
1014 | +}; | |
1015 | + | |
965 | 1016 | #elif defined(TARGET_SPARC) |
966 | 1017 | |
967 | 1018 | struct target_stat { | ... | ... |