diff options
author | Alexander Graf <agraf@suse.de> | 2012-10-09 09:06:49 +0200 |
---|---|---|
committer | Yury Usishchev <y.usishchev@samsung.com> | 2014-12-10 13:48:36 +0300 |
commit | 94907b1ca030a998f1bfb6bad966b35626e734d1 (patch) | |
tree | 552fdf6914ff5eddf7f329435c4a82fde0774250 | |
parent | 4eeab74059059165874cab32e005fbf1aa1071e4 (diff) | |
download | qemu-94907b1ca030a998f1bfb6bad966b35626e734d1.tar.gz qemu-94907b1ca030a998f1bfb6bad966b35626e734d1.tar.bz2 qemu-94907b1ca030a998f1bfb6bad966b35626e734d1.zip |
linux-user: use target_ulong
Linux syscalls pass pointers or data length or other information of that sort
to the kernel. This is all stuff you don't want to have sign extended.
Otherwise a host 64bit variable parameter with a size parameter will extend
it to a negative number, breaking lseek for example.
Pass syscall arguments as ulong always.
Signed-off-by: Alexander Graf <agraf@suse.de>
-rw-r--r-- | linux-user/qemu.h | 8 | ||||
-rw-r--r-- | linux-user/syscall.c | 8 |
2 files changed, 8 insertions, 8 deletions
diff --git a/linux-user/qemu.h b/linux-user/qemu.h index e29c7f37f..75b65582e 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -190,10 +190,10 @@ abi_long memcpy_to_target(abi_ulong dest, const void *src, void target_set_brk(abi_ulong new_brk); abi_long do_brk(abi_ulong new_brk); void syscall_init(void); -abi_long do_syscall(void *cpu_env, int num, abi_long arg1, - abi_long arg2, abi_long arg3, abi_long arg4, - abi_long arg5, abi_long arg6, abi_long arg7, - abi_long arg8); +abi_long do_syscall(void *cpu_env, int num, abi_ulong arg1, + abi_ulong arg2, abi_ulong arg3, abi_ulong arg4, + abi_ulong arg5, abi_ulong arg6, abi_ulong arg7, + abi_ulong arg8); void gemu_log(const char *fmt, ...) GCC_FMT_ATTR(1, 2); extern THREAD CPUState *thread_cpu; void cpu_loop(CPUArchState *env); diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 199084ff0..02599cecb 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -5630,10 +5630,10 @@ int syscall_restartable(int syscall_nr) /* do_syscall() should always have a single exit point at the end so that actions, such as logging of syscall results, can be performed. All errnos that do_syscall() returns must be -TARGET_<errcode>. */ -abi_long do_syscall(void *cpu_env, int num, abi_long arg1, - abi_long arg2, abi_long arg3, abi_long arg4, - abi_long arg5, abi_long arg6, abi_long arg7, - abi_long arg8) +abi_long do_syscall(void *cpu_env, int num, abi_ulong arg1, + abi_ulong arg2, abi_ulong arg3, abi_ulong arg4, + abi_ulong arg5, abi_ulong arg6, abi_ulong arg7, + abi_ulong arg8) { CPUState *cpu = ENV_GET_CPU(cpu_env); abi_long ret; |