linux-user/include/host/sparc64: Fix host_sigcontext
Sparc64 is unique on linux in *not* passing ucontext_t as the third argument to a SA_SIGINFO handler. It passes the old struct sigcontext instead. Set both pc and npc in host_signal_set_pc. Fixes: 8b5bd461935b ("linux-user/host/sparc: Populate host_signal.h") Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
238b32de39
commit
4f152ef27e
@ -11,22 +11,23 @@
|
|||||||
#ifndef SPARC64_HOST_SIGNAL_H
|
#ifndef SPARC64_HOST_SIGNAL_H
|
||||||
#define SPARC64_HOST_SIGNAL_H
|
#define SPARC64_HOST_SIGNAL_H
|
||||||
|
|
||||||
/* FIXME: the third argument to a SA_SIGINFO handler is *not* ucontext_t. */
|
/* The third argument to a SA_SIGINFO handler is struct sigcontext. */
|
||||||
typedef ucontext_t host_sigcontext;
|
typedef struct sigcontext host_sigcontext;
|
||||||
|
|
||||||
static inline uintptr_t host_signal_pc(host_sigcontext *uc)
|
static inline uintptr_t host_signal_pc(host_sigcontext *sc)
|
||||||
{
|
{
|
||||||
return uc->uc_mcontext.mc_gregs[MC_PC];
|
return sc->sigc_regs.tpc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void host_signal_set_pc(host_sigcontext *uc, uintptr_t pc)
|
static inline void host_signal_set_pc(host_sigcontext *sc, uintptr_t pc)
|
||||||
{
|
{
|
||||||
uc->uc_mcontext.mc_gregs[MC_PC] = pc;
|
sc->sigc_regs.tpc = pc;
|
||||||
|
sc->sigc_regs.tnpc = pc + 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void *host_signal_mask(host_sigcontext *uc)
|
static inline void *host_signal_mask(host_sigcontext *sc)
|
||||||
{
|
{
|
||||||
return &uc->uc_sigmask;
|
return &sc->sigc_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool host_signal_write(siginfo_t *info, host_sigcontext *uc)
|
static inline bool host_signal_write(siginfo_t *info, host_sigcontext *uc)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user