Commit 1b8dd648bdccefa8ba1b05416e65e9b3a278b0e6

Authored by blueswir1
1 parent 17d996e1

Fix Sparc64 stat system call


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3053 c046a42c-6fe2-441c-8c8c-71466251a162
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 {
... ...