From 60e99246d6b4d1de32aec3281483cdd85b415570 Mon Sep 17 00:00:00 2001 From: Aurelien Jarno Date: Mon, 29 Mar 2010 02:12:51 +0200 Subject: linux-user/ia64: workaround ia64 strangenesses ia64 has some strangenesses that need to be workaround: - it has a __clone2() syscall instead of the using clone() one, with different arguments, and which is not declared in the usual headers. - ucontext.uc_sigmask is declared with type long int, while it is actually of type sigset_t. - uc_mcontext, uc_sigmask, uc_stack, uc_link are declared using #define, which clashes with the target_ucontext fields. Change their names to tuc_*, as already done for some target architectures. --- linux-user/syscall.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'linux-user/syscall.c') diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 80acf70ce8..5640ba696b 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -41,6 +41,10 @@ #include #include #include +#ifdef __ia64__ +int __clone2(int (*fn)(void *), void *child_stack_base, + size_t stack_size, int flags, void *arg, ...); +#endif #include #include #include @@ -3628,7 +3632,7 @@ static int do_fork(CPUState *env, unsigned int flags, abi_ulong newsp, return -EINVAL; /* This is probably going to die very quickly, but do it anyway. */ #ifdef __ia64__ - ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); + ret = __clone2(clone_func, new_stack, NEW_STACK_SIZE, flags, new_env); #else ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); #endif -- cgit 1.4.1