6#if defined(DART_HOST_OS_LINUX)
22class ThreadInterrupterLinux :
public AllStatic {
24 static void ThreadInterruptSignalHandler(
int signal,
27 if (signal != SIGPROF) {
30 Thread* thread = Thread::Current();
31 if (thread ==
nullptr) {
34 ThreadInterruptScope signal_handler_scope;
36 ucontext_t* context =
reinterpret_cast<ucontext_t*
>(context_);
37 mcontext_t mcontext = context->uc_mcontext;
38 InterruptedThreadState its;
39 its.pc = SignalHandler::GetProgramCounter(mcontext);
40 its.fp = SignalHandler::GetFramePointer(mcontext);
41 its.csp = SignalHandler::GetCStackPointer(mcontext);
42 its.dsp = SignalHandler::GetDartStackPointer(mcontext);
43 its.lr = SignalHandler::GetLinkRegister(mcontext);
44 Profiler::SampleThread(thread, its);
49 if (FLAG_trace_thread_interrupter) {
51 reinterpret_cast<void*
>(thread->id()));
53 int result = pthread_kill(thread->id(), SIGPROF);
57void ThreadInterrupter::InstallSignalHandler() {
61void ThreadInterrupter::RemoveSignalHandler() {
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
static void static void PrintErr(const char *format,...) PRINTF_ATTRIBUTE(1
static void Install(SignalAction action)
static void InterruptThread(OSThread *thread)
#define DECLARE_FLAG(type, name)