@ -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 ) ;