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:
		
							parent
							
								
									7e22e54602
								
							
						
					
					
						commit
						d83c8733b7
					
				@ -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;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user