mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-01 23:03:54 -06:00
bsd-user: FreeBSD update
basic FreeBSD sysarch(2) handling fixed syscall errno return Signed-off-by: Juergen Lock <nox@jelal.kn-bremen.de> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
parent
976b2037e5
commit
78cfb07fe0
9 changed files with 462 additions and 31 deletions
27
cpu-exec.c
27
cpu-exec.c
|
@ -805,6 +805,20 @@ static inline int handle_cpu_signal(unsigned long pc, unsigned long address,
|
|||
# define TRAP_sig(context) ((context)->uc_mcontext->es.trapno)
|
||||
# define ERROR_sig(context) ((context)->uc_mcontext->es.err)
|
||||
# define MASK_sig(context) ((context)->uc_sigmask)
|
||||
#elif defined (__NetBSD__)
|
||||
# include <ucontext.h>
|
||||
|
||||
# define EIP_sig(context) ((context)->uc_mcontext.__gregs[_REG_EIP])
|
||||
# define TRAP_sig(context) ((context)->uc_mcontext.__gregs[_REG_TRAPNO])
|
||||
# define ERROR_sig(context) ((context)->uc_mcontext.__gregs[_REG_ERR])
|
||||
# define MASK_sig(context) ((context)->uc_sigmask)
|
||||
#elif defined (__FreeBSD__) || defined(__DragonFly__)
|
||||
# include <ucontext.h>
|
||||
|
||||
# define EIP_sig(context) (*((unsigned long*)&(context)->uc_mcontext.mc_eip))
|
||||
# define TRAP_sig(context) ((context)->uc_mcontext.mc_trapno)
|
||||
# define ERROR_sig(context) ((context)->uc_mcontext.mc_err)
|
||||
# define MASK_sig(context) ((context)->uc_sigmask)
|
||||
#elif defined(__OpenBSD__)
|
||||
# define EIP_sig(context) ((context)->sc_eip)
|
||||
# define TRAP_sig(context) ((context)->sc_trapno)
|
||||
|
@ -821,7 +835,9 @@ int cpu_signal_handler(int host_signum, void *pinfo,
|
|||
void *puc)
|
||||
{
|
||||
siginfo_t *info = pinfo;
|
||||
#if defined(__OpenBSD__)
|
||||
#if defined(__NetBSD__) || defined (__FreeBSD__) || defined(__DragonFly__)
|
||||
ucontext_t *uc = puc;
|
||||
#elif defined(__OpenBSD__)
|
||||
struct sigcontext *uc = puc;
|
||||
#else
|
||||
struct ucontext *uc = puc;
|
||||
|
@ -855,6 +871,13 @@ int cpu_signal_handler(int host_signum, void *pinfo,
|
|||
#define TRAP_sig(context) ((context)->sc_trapno)
|
||||
#define ERROR_sig(context) ((context)->sc_err)
|
||||
#define MASK_sig(context) ((context)->sc_mask)
|
||||
#elif defined (__FreeBSD__) || defined(__DragonFly__)
|
||||
#include <ucontext.h>
|
||||
|
||||
#define PC_sig(context) (*((unsigned long*)&(context)->uc_mcontext.mc_rip))
|
||||
#define TRAP_sig(context) ((context)->uc_mcontext.mc_trapno)
|
||||
#define ERROR_sig(context) ((context)->uc_mcontext.mc_err)
|
||||
#define MASK_sig(context) ((context)->uc_sigmask)
|
||||
#else
|
||||
#define PC_sig(context) ((context)->uc_mcontext.gregs[REG_RIP])
|
||||
#define TRAP_sig(context) ((context)->uc_mcontext.gregs[REG_TRAPNO])
|
||||
|
@ -867,7 +890,7 @@ int cpu_signal_handler(int host_signum, void *pinfo,
|
|||
{
|
||||
siginfo_t *info = pinfo;
|
||||
unsigned long pc;
|
||||
#ifdef __NetBSD__
|
||||
#if defined(__NetBSD__) || defined (__FreeBSD__) || defined(__DragonFly__)
|
||||
ucontext_t *uc = puc;
|
||||
#elif defined(__OpenBSD__)
|
||||
struct sigcontext *uc = puc;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue