diff options
author | Tobias Nygren <tnn@NetBSD.org> | 2015-03-05 22:37:41 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2015-03-13 15:57:00 +0000 |
commit | 7ccfb495c64e1eef5886dcc4d48523ed6d1d22a4 (patch) | |
tree | f2e8b373608268976ca9017811b9af69c48e90fc /user-exec.c | |
parent | dea46359989121b43924cd89acd03795383f54f6 (diff) |
user-exec.c: fix build on NetBSD/sparc64 and NetBSD/arm
A couple of #ifdef changes necessary to use NetBSD's ucontext
structs on sparc64 and arm.
Signed-off-by: Tobias Nygren <tnn@NetBSD.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 1425591461-17550-1-git-send-email-tnn@NetBSD.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'user-exec.c')
-rw-r--r-- | user-exec.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/user-exec.c b/user-exec.c index 1ff8673acb..8f57e8acb8 100644 --- a/user-exec.c +++ b/user-exec.c @@ -404,6 +404,10 @@ int cpu_signal_handler(int host_signum, void *pinfo, struct sigcontext *uc = puc; unsigned long pc = uc->sc_pc; void *sigmask = (void *)(long)uc->sc_mask; +#elif defined(__NetBSD__) + ucontext_t *uc = puc; + unsigned long pc = _UC_MACHINE_PC(uc); + void *sigmask = (void *)&uc->uc_sigmask; #endif #endif @@ -441,15 +445,25 @@ int cpu_signal_handler(int host_signum, void *pinfo, #elif defined(__arm__) +#if defined(__NetBSD__) +#include <ucontext.h> +#endif + int cpu_signal_handler(int host_signum, void *pinfo, void *puc) { siginfo_t *info = pinfo; +#if defined(__NetBSD__) + ucontext_t *uc = puc; +#else struct ucontext *uc = puc; +#endif unsigned long pc; int is_write; -#if defined(__GLIBC__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3)) +#if defined(__NetBSD__) + pc = uc->uc_mcontext.__gregs[_REG_R15]; +#elif defined(__GLIBC__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3)) pc = uc->uc_mcontext.gregs[R15]; #else pc = uc->uc_mcontext.arm_pc; |