linux-user: Add translation for argument of msync()
msync() uses the flags MS_ASYNC, MS_INVALIDATE and MS_SYNC, which differ between platforms, specifcally on alpha and hppa. Add a target to host translation for those and wire up a nicer strace output. This fixes the testsuite of the macaulay2 debian package with a hppa-linux guest on a x86-64 host. Signed-off-by: Helge Deller <deller@gmx.de> Reviewed-by: Laurent Vivier <laurent@vivier.eu> Message-Id: <Y5rMcts4qe15RaVN@p100> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
		
							parent
							
								
									2fe8ed6fe9
								
							
						
					
					
						commit
						fe080593dd
					
				| @ -3,6 +3,10 @@ | ||||
| 
 | ||||
| #define TARGET_MADV_DONTNEED 6 | ||||
| 
 | ||||
| #define TARGET_MS_ASYNC 1 | ||||
| #define TARGET_MS_SYNC 2 | ||||
| #define TARGET_MS_INVALIDATE 4 | ||||
| 
 | ||||
| #include "../generic/target_mman.h" | ||||
| 
 | ||||
| #endif | ||||
|  | ||||
| @ -89,4 +89,17 @@ | ||||
| #define TARGET_MADV_DONTNEED_LOCKED 24 | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| #ifndef TARGET_MS_ASYNC | ||||
| #define TARGET_MS_ASYNC 1 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef TARGET_MS_INVALIDATE | ||||
| #define TARGET_MS_INVALIDATE 2 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef TARGET_MS_SYNC | ||||
| #define TARGET_MS_SYNC 4 | ||||
| #endif | ||||
| 
 | ||||
| #endif | ||||
|  | ||||
| @ -10,6 +10,10 @@ | ||||
| #define TARGET_MADV_WIPEONFORK 71 | ||||
| #define TARGET_MADV_KEEPONFORK 72 | ||||
| 
 | ||||
| #define TARGET_MS_SYNC 1 | ||||
| #define TARGET_MS_ASYNC 2 | ||||
| #define TARGET_MS_INVALIDATE 4 | ||||
| 
 | ||||
| #include "../generic/target_mman.h" | ||||
| 
 | ||||
| #endif | ||||
|  | ||||
| @ -656,7 +656,7 @@ | ||||
| { TARGET_NR_msgsnd, "msgsnd" , NULL, NULL, NULL }, | ||||
| #endif | ||||
| #ifdef TARGET_NR_msync | ||||
| { TARGET_NR_msync, "msync" , NULL, NULL, NULL }, | ||||
| { TARGET_NR_msync, "msync" , "%s(%p,%u,%d)", NULL, NULL }, | ||||
| #endif | ||||
| #ifdef TARGET_NR_multiplexer | ||||
| { TARGET_NR_multiplexer, "multiplexer" , NULL, NULL, NULL }, | ||||
|  | ||||
| @ -22,6 +22,7 @@ | ||||
| #include "qemu/path.h" | ||||
| #include "qemu/memfd.h" | ||||
| #include "qemu/queue.h" | ||||
| #include "target_mman.h" | ||||
| #include <elf.h> | ||||
| #include <endian.h> | ||||
| #include <grp.h> | ||||
| @ -7612,6 +7613,14 @@ static inline int target_to_host_mlockall_arg(int arg) | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| static inline int target_to_host_msync_arg(abi_long arg) | ||||
| { | ||||
|     return ((arg & TARGET_MS_ASYNC) ? MS_ASYNC : 0) | | ||||
|            ((arg & TARGET_MS_INVALIDATE) ? MS_INVALIDATE : 0) | | ||||
|            ((arg & TARGET_MS_SYNC) ? MS_SYNC : 0) | | ||||
|            (arg & ~(TARGET_MS_ASYNC | TARGET_MS_INVALIDATE | TARGET_MS_SYNC)); | ||||
| } | ||||
| 
 | ||||
| #if (defined(TARGET_NR_stat64) || defined(TARGET_NR_lstat64) ||     \ | ||||
|      defined(TARGET_NR_fstat64) || defined(TARGET_NR_fstatat64) ||  \ | ||||
|      defined(TARGET_NR_newfstatat)) | ||||
| @ -10128,7 +10137,8 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1, | ||||
|         /* ??? msync/mlock/munlock are broken for softmmu.  */ | ||||
| #ifdef TARGET_NR_msync | ||||
|     case TARGET_NR_msync: | ||||
|         return get_errno(msync(g2h(cpu, arg1), arg2, arg3)); | ||||
|         return get_errno(msync(g2h(cpu, arg1), arg2, | ||||
|                                target_to_host_msync_arg(arg3))); | ||||
| #endif | ||||
| #ifdef TARGET_NR_mlock | ||||
|     case TARGET_NR_mlock: | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Helge Deller
						Helge Deller