mirror of https://github.com/nodejs/node.git
v8: fix openbsd build
This is [1] applied ahead of time. Summary: OpenBSD doesn't have <ucontext.h>. ucontext_t lives in <signal.h> and is a typedef for struct sigcontext. There is no uc_mcontext. [1] https://codereview.chromium.org/21705003/pull/5010/head
parent
ea7b817266
commit
222e5239fc
|
@ -38,7 +38,10 @@
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/syscall.h>
|
#include <sys/syscall.h>
|
||||||
#if !defined(__ANDROID__) || defined(__BIONIC_HAVE_UCONTEXT_T)
|
// OpenBSD doesn't have <ucontext.h>. ucontext_t lives in <signal.h>
|
||||||
|
// and is a typedef for struct sigcontext. There is no uc_mcontext.
|
||||||
|
#if (!defined(__ANDROID__) || defined(__BIONIC_HAVE_UCONTEXT_T)) \
|
||||||
|
&& !defined(__OpenBSD__)
|
||||||
#include <ucontext.h>
|
#include <ucontext.h>
|
||||||
#endif
|
#endif
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
@ -330,7 +333,9 @@ void SignalHandler::HandleProfilerSignal(int signal, siginfo_t* info,
|
||||||
#else
|
#else
|
||||||
// Extracting the sample from the context is extremely machine dependent.
|
// Extracting the sample from the context is extremely machine dependent.
|
||||||
ucontext_t* ucontext = reinterpret_cast<ucontext_t*>(context);
|
ucontext_t* ucontext = reinterpret_cast<ucontext_t*>(context);
|
||||||
|
#if !defined(__OpenBSD__)
|
||||||
mcontext_t& mcontext = ucontext->uc_mcontext;
|
mcontext_t& mcontext = ucontext->uc_mcontext;
|
||||||
|
#endif
|
||||||
#if defined(__linux__) || defined(__ANDROID__)
|
#if defined(__linux__) || defined(__ANDROID__)
|
||||||
#if V8_HOST_ARCH_IA32
|
#if V8_HOST_ARCH_IA32
|
||||||
state.pc = reinterpret_cast<Address>(mcontext.gregs[REG_EIP]);
|
state.pc = reinterpret_cast<Address>(mcontext.gregs[REG_EIP]);
|
||||||
|
@ -384,7 +389,6 @@ void SignalHandler::HandleProfilerSignal(int signal, siginfo_t* info,
|
||||||
state.fp = reinterpret_cast<Address>(mcontext.__gregs[_REG_RBP]);
|
state.fp = reinterpret_cast<Address>(mcontext.__gregs[_REG_RBP]);
|
||||||
#endif // V8_HOST_ARCH_*
|
#endif // V8_HOST_ARCH_*
|
||||||
#elif defined(__OpenBSD__)
|
#elif defined(__OpenBSD__)
|
||||||
USE(mcontext);
|
|
||||||
#if V8_HOST_ARCH_IA32
|
#if V8_HOST_ARCH_IA32
|
||||||
state.pc = reinterpret_cast<Address>(ucontext->sc_eip);
|
state.pc = reinterpret_cast<Address>(ucontext->sc_eip);
|
||||||
state.sp = reinterpret_cast<Address>(ucontext->sc_esp);
|
state.sp = reinterpret_cast<Address>(ucontext->sc_esp);
|
||||||
|
|
Loading…
Reference in New Issue