linux-user: enable getdents for > 32-bit systems

works perfectly fine with the example from getdents(2) and passes the LTP
tests (tested with s390x on x86_64 emulation)

Signed-off-by: Ulrich Hecht <uli@suse.de>
Signed-off-by: Riku Voipio <riku.voipio@iki.fi>
This commit is contained in:
Ulrich Hecht 2009-07-24 19:10:28 +02:00 committed by Riku Voipio
parent 7e22e54602
commit d83c8733b7
1 changed files with 1 additions and 5 deletions

View File

@ -196,9 +196,7 @@ static int gettid(void) {
return -ENOSYS; return -ENOSYS;
} }
#endif #endif
#if TARGET_ABI_BITS == 32
_syscall3(int, sys_getdents, uint, fd, struct linux_dirent *, dirp, uint, count); _syscall3(int, sys_getdents, uint, fd, struct linux_dirent *, dirp, uint, count);
#endif
#if defined(TARGET_NR_getdents64) && defined(__NR_getdents64) #if defined(TARGET_NR_getdents64) && defined(__NR_getdents64)
_syscall3(int, sys_getdents64, uint, fd, struct linux_dirent64 *, dirp, uint, count); _syscall3(int, sys_getdents64, uint, fd, struct linux_dirent64 *, dirp, uint, count);
#endif #endif
@ -5795,9 +5793,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
break; break;
#endif #endif
case TARGET_NR_getdents: case TARGET_NR_getdents:
#if TARGET_ABI_BITS != 32 #if TARGET_ABI_BITS == 32 && HOST_LONG_BITS == 64
goto unimplemented;
#elif TARGET_ABI_BITS == 32 && HOST_LONG_BITS == 64
{ {
struct target_dirent *target_dirp; struct target_dirent *target_dirp;
struct linux_dirent *dirp; struct linux_dirent *dirp;