Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clean up context definition errors. #4023

Merged
merged 3 commits into from
Jul 18, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
36 changes: 31 additions & 5 deletions Source/Core/Core/MachineContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ typedef CONTEXT SContext;
#define CTX_R15 R15
#define CTX_RIP Rip
#else
#error No context definition for OS
#error No context definition for architecture
#endif
#elif defined(__APPLE__) && !defined(USE_SIGACTION_ON_APPLE)
// for modules:
Expand Down Expand Up @@ -63,7 +63,7 @@ typedef x86_thread_state64_t SContext;
#define CTX_R15 __r15
#define CTX_RIP __rip
#else
#error No context definition for OS
#error No context definition for architecture
#endif
#elif defined(__APPLE__)
#include <signal.h>
Expand Down Expand Up @@ -114,7 +114,31 @@ typedef mcontext_t SContext;
#define CTX_SP sp
#define CTX_PC pc
#else
#warning No context definition for OS
#error No context definition for architecture
#endif
#elif defined(__OpenBSD__)
#include <signal.h>
typedef ucontext_t SContext;
#if _M_X86_64
#define CTX_RAX sc_rax
#define CTX_RBX sc_rbx
#define CTX_RCX sc_rcx
#define CTX_RDX sc_rdx
#define CTX_RDI sc_rdi
#define CTX_RSI sc_rsi
#define CTX_RBP sc_rbp
#define CTX_RSP sc_rsp
#define CTX_R8 sc_r8
#define CTX_R9 sc_r9
#define CTX_R10 sc_r10
#define CTX_R11 sc_r11
#define CTX_R12 sc_r12
#define CTX_R13 sc_r13
#define CTX_R14 sc_r14
#define CTX_R15 sc_r15
#define CTX_RIP sc_rip
#else
#error No context definition for architecture
#endif
#elif defined(__NetBSD__)
#include <ucontext.h>
Expand All @@ -138,7 +162,7 @@ typedef mcontext_t SContext;
#define CTX_R15 __gregs[_REG_R15]
#define CTX_RIP __gregs[_REG_RIP]
#else
#error No context definition for OS
#error No context definition for architecture
#endif
#elif defined(__FreeBSD__)
#include <ucontext.h>
Expand All @@ -162,8 +186,10 @@ typedef mcontext_t SContext;
#define CTX_R15 mc_r15
#define CTX_RIP mc_rip
#else
#error No context definition for OS
#error No context definition for architecture
#endif
#else
#error No context definition for OS
#endif

#if _M_X86_64
Expand Down
6 changes: 5 additions & 1 deletion Source/Core/Core/MemTools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -248,8 +248,12 @@ static void sigsegv_handler(int sig, siginfo_t* info, void* raw_context)
}
uintptr_t bad_address = (uintptr_t)info->si_addr;

// Get all the information we can out of the context.
// Get all the information we can out of the context.
#ifdef __OpenBSD__
ucontext_t* ctx = context;
#else
mcontext_t* ctx = &context->uc_mcontext;
#endif
// assume it's not a write
if (!JitInterface::HandleFault(bad_address,
#ifdef __APPLE__
Expand Down