convert mmap flags (alpha fix)

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@208 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
bellard 2003-06-05 00:57:30 +00:00
parent 917f95fd4d
commit 5286db75a8
2 changed files with 30 additions and 2 deletions

View File

@ -958,6 +958,18 @@ StructEntry struct_termios_def = {
.align = { __alignof__(struct target_termios), __alignof__(struct host_termios) }, .align = { __alignof__(struct target_termios), __alignof__(struct host_termios) },
}; };
static bitmask_transtbl mmap_flags_tbl[] = {
{ TARGET_MAP_SHARED, TARGET_MAP_SHARED, MAP_SHARED, MAP_SHARED },
{ TARGET_MAP_PRIVATE, TARGET_MAP_PRIVATE, MAP_PRIVATE, MAP_PRIVATE },
{ TARGET_MAP_FIXED, TARGET_MAP_FIXED, MAP_FIXED, MAP_FIXED },
{ TARGET_MAP_ANONYMOUS, TARGET_MAP_ANONYMOUS, MAP_ANONYMOUS, MAP_ANONYMOUS },
{ TARGET_MAP_GROWSDOWN, TARGET_MAP_GROWSDOWN, MAP_GROWSDOWN, MAP_GROWSDOWN },
{ TARGET_MAP_DENYWRITE, TARGET_MAP_DENYWRITE, MAP_DENYWRITE, MAP_DENYWRITE },
{ TARGET_MAP_EXECUTABLE, TARGET_MAP_EXECUTABLE, MAP_EXECUTABLE, MAP_EXECUTABLE },
{ TARGET_MAP_LOCKED, TARGET_MAP_LOCKED, MAP_LOCKED, MAP_LOCKED },
{ 0, 0, 0, 0 }
};
#ifdef TARGET_I386 #ifdef TARGET_I386
/* NOTE: there is really one LDT for all the threads */ /* NOTE: there is really one LDT for all the threads */
@ -1744,7 +1756,9 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
v4 = tswap32(vptr[3]); v4 = tswap32(vptr[3]);
v5 = tswap32(vptr[4]); v5 = tswap32(vptr[4]);
v6 = tswap32(vptr[5]); v6 = tswap32(vptr[5]);
ret = get_errno(target_mmap(v1, v2, v3, v4, v5, v6)); ret = get_errno(target_mmap(v1, v2, v3,
target_to_host_bitmask(v4, mmap_flags_tbl),
v5, v6));
} }
break; break;
#endif #endif
@ -1753,7 +1767,9 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
#else #else
case TARGET_NR_mmap: case TARGET_NR_mmap:
#endif #endif
ret = get_errno(target_mmap(arg1, arg2, arg3, arg4, arg5, ret = get_errno(target_mmap(arg1, arg2, arg3,
target_to_host_bitmask(arg4, mmap_flags_tbl),
arg5,
arg6 << TARGET_PAGE_BITS)); arg6 << TARGET_PAGE_BITS));
break; break;
case TARGET_NR_munmap: case TARGET_NR_munmap:

View File

@ -780,6 +780,18 @@ struct target_modify_ldt_ldt_s {
}; };
#define TARGET_MAP_SHARED 0x01 /* Share changes */
#define TARGET_MAP_PRIVATE 0x02 /* Changes are private */
#define TARGET_MAP_TYPE 0x0f /* Mask for type of mapping */
#define TARGET_MAP_FIXED 0x10 /* Interpret addr exactly */
#define TARGET_MAP_ANONYMOUS 0x20 /* don't use a file */
#define TARGET_MAP_GROWSDOWN 0x0100 /* stack-like segment */
#define TARGET_MAP_DENYWRITE 0x0800 /* ETXTBSY */
#define TARGET_MAP_EXECUTABLE 0x1000 /* mark it as an executable */
#define TARGET_MAP_LOCKED 0x2000 /* pages are locked */
#define TARGET_MAP_NORESERVE 0x4000 /* don't check for reservations */
/* vm86 defines */ /* vm86 defines */
#define TARGET_BIOSSEG 0x0f000 #define TARGET_BIOSSEG 0x0f000