mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-12-17 21:26:13 -07:00
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.
This commit is contained in:
parent
9bc6304c15
commit
60e99246d6
3 changed files with 114 additions and 106 deletions
|
|
@ -41,6 +41,10 @@
|
|||
#include <sys/swap.h>
|
||||
#include <signal.h>
|
||||
#include <sched.h>
|
||||
#ifdef __ia64__
|
||||
int __clone2(int (*fn)(void *), void *child_stack_base,
|
||||
size_t stack_size, int flags, void *arg, ...);
|
||||
#endif
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
#include <sys/uio.h>
|
||||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue