| Index: src/sampler.cc
|
| diff --git a/src/sampler.cc b/src/sampler.cc
|
| index a3d017e4ae91e66ba2e4ea1191a94d07c38ccc27..46c5154d98ae0101afb3229bb8366092c67ac3b8 100644
|
| --- a/src/sampler.cc
|
| +++ b/src/sampler.cc
|
| @@ -38,7 +38,10 @@
|
| #include <signal.h>
|
| #include <sys/time.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>
|
| #endif
|
| #include <unistd.h>
|
| @@ -362,7 +365,9 @@ void SignalHandler::HandleProfilerSignal(int signal, siginfo_t* info,
|
| #else
|
| // Extracting the sample from the context is extremely machine dependent.
|
| ucontext_t* ucontext = reinterpret_cast<ucontext_t*>(context);
|
| +#if !defined(__OpenBSD__)
|
| mcontext_t& mcontext = ucontext->uc_mcontext;
|
| +#endif
|
| #if defined(__linux__) || defined(__ANDROID__)
|
| #if V8_HOST_ARCH_IA32
|
| state.pc = reinterpret_cast<Address>(mcontext.gregs[REG_EIP]);
|
| @@ -421,7 +426,6 @@ void SignalHandler::HandleProfilerSignal(int signal, siginfo_t* info,
|
| state.fp = reinterpret_cast<Address>(mcontext.__gregs[_REG_RBP]);
|
| #endif // V8_HOST_ARCH_*
|
| #elif defined(__OpenBSD__)
|
| - USE(mcontext);
|
| #if V8_HOST_ARCH_IA32
|
| state.pc = reinterpret_cast<Address>(ucontext->sc_eip);
|
| state.sp = reinterpret_cast<Address>(ucontext->sc_esp);
|
|
|