22struct StackCrawlState {
23 StackCrawlState(uintptr_t* frames,
size_t max_depth)
27 have_skipped_self(false) {}
32 bool have_skipped_self;
35_Unwind_Reason_Code TraceStackFrame(_Unwind_Context* context,
void* arg) {
36 StackCrawlState* state =
static_cast<StackCrawlState*
>(arg);
37 uintptr_t ip = _Unwind_GetIP(context);
40 if (ip != 0 && !state->have_skipped_self) {
41 state->have_skipped_self =
true;
42 return _URC_NO_REASON;
45 state->frames[state->frame_count++] = ip;
46 if (state->frame_count >= state->max_depth)
47 return _URC_END_OF_STACK;
48 return _URC_NO_REASON;
62 struct sigaction action;
63 memset(&action, 0,
sizeof(action));
64 action.sa_handler = SIG_IGN;
65 sigemptyset(&action.sa_mask);
66 return (sigaction(SIGPIPE, &action,
nullptr) == 0);
74 _Unwind_Backtrace(&TraceStackFrame, &state);
75 count_ = state.frame_count;
80 OS::Print(
"%s\n", backtrace.c_str());
85 *os <<
"#" << std::setw(2) <<
i <<
trace_[
i] <<
"\n";
void OutputToStream(std::ostream *os) const
std::string ToString() const
void * trace_[kMaxTraces]
static const int kMaxTraces
LiftoffAssembler::CacheState state
V8_BASE_EXPORT bool EnableInProcessStackDumping()
V8_BASE_EXPORT void DisableSignalStackDump()