Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
linux-user: Move sparc/host-signal.h to sparc64/host-signal.h
We do not support sparc32 as a host, so there's no point in sparc64 redirecting to sparc. Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
- Loading branch information
Showing
2 changed files
with
63 additions
and
72 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,63 @@ | ||
#include "../sparc/host-signal.h" | ||
/* | ||
* host-signal.h: signal info dependent on the host architecture | ||
* | ||
* Copyright (c) 2003-2005 Fabrice Bellard | ||
* Copyright (c) 2021 Linaro Limited | ||
* | ||
* This work is licensed under the terms of the GNU LGPL, version 2.1 or later. | ||
* See the COPYING file in the top-level directory. | ||
*/ | ||
|
||
#ifndef SPARC64_HOST_SIGNAL_H | ||
#define SPARC64_HOST_SIGNAL_H | ||
|
||
/* FIXME: the third argument to a SA_SIGINFO handler is *not* ucontext_t. */ | ||
typedef ucontext_t host_sigcontext; | ||
|
||
static inline uintptr_t host_signal_pc(host_sigcontext *uc) | ||
{ | ||
return uc->uc_mcontext.mc_gregs[MC_PC]; | ||
} | ||
|
||
static inline void host_signal_set_pc(host_sigcontext *uc, uintptr_t pc) | ||
{ | ||
uc->uc_mcontext.mc_gregs[MC_PC] = pc; | ||
} | ||
|
||
static inline void *host_signal_mask(host_sigcontext *uc) | ||
{ | ||
return &uc->uc_sigmask; | ||
} | ||
|
||
static inline bool host_signal_write(siginfo_t *info, host_sigcontext *uc) | ||
{ | ||
uint32_t insn = *(uint32_t *)host_signal_pc(uc); | ||
|
||
if ((insn >> 30) == 3) { | ||
switch ((insn >> 19) & 0x3f) { | ||
case 0x05: /* stb */ | ||
case 0x15: /* stba */ | ||
case 0x06: /* sth */ | ||
case 0x16: /* stha */ | ||
case 0x04: /* st */ | ||
case 0x14: /* sta */ | ||
case 0x07: /* std */ | ||
case 0x17: /* stda */ | ||
case 0x0e: /* stx */ | ||
case 0x1e: /* stxa */ | ||
case 0x24: /* stf */ | ||
case 0x34: /* stfa */ | ||
case 0x27: /* stdf */ | ||
case 0x37: /* stdfa */ | ||
case 0x26: /* stqf */ | ||
case 0x36: /* stqfa */ | ||
case 0x25: /* stfsr */ | ||
case 0x3c: /* casa */ | ||
case 0x3e: /* casxa */ | ||
return true; | ||
} | ||
} | ||
return false; | ||
} | ||
|
||
#endif |