53 stack_trace.reserve(sample.frames_count + 3);
61 int src_line = no_line_info;
62 bool src_line_not_found =
true;
64 if (sample.pc !=
nullptr) {
65 if (sample.has_external_callback && sample.state ==
EXTERNAL) {
69 stack_trace.push_back(
76 FindEntry(attributed_pc, &pc_entry_instruction_start);
80 if (!pc_entry && !sample.has_external_callback) {
81 attributed_pc =
reinterpret_cast<Address>(sample.tos);
82 pc_entry =
FindEntry(attributed_pc, &pc_entry_instruction_start);
90 static_cast<int>(attributed_pc - pc_entry_instruction_start);
96 src_line_not_found =
false;
97 stack_trace.push_back({pc_entry, src_line});
99 if (pc_entry->
builtin() == Builtin::kFunctionPrototypeApply ||
100 pc_entry->
builtin() == Builtin::kFunctionPrototypeCall) {
107 if (!sample.has_external_callback) {
110 stack_trace.push_back(
117 for (
unsigned i = 0;
i < sample.frames_count; ++
i) {
121 int line_number = no_line_info;
124 int pc_offset =
static_cast<int>(stack_pos - instruction_start);
126 const std::vector<CodeEntryAndLineNumber>* inline_stack =
130 for (
auto inline_stack_entry : *inline_stack) {
131 stack_trace.push_back(inline_stack_entry);
141 DCHECK(!inline_stack->empty());
142 size_t index = stack_trace.size() - inline_stack->size();
143 stack_trace[
index].line_number = most_inlined_frame_line_number;
147 if (src_line_not_found) {
152 src_line_not_found =
false;
160 if (inline_stack)
continue;
162 stack_trace.push_back({entry, line_number});
167 bool no_symbolized_entries =
true;
168 for (
auto e : stack_trace) {
169 if (e.code_entry !=
nullptr) {
170 no_symbolized_entries =
false;
175 if (no_symbolized_entries) {
176 if (sample.pc ==
nullptr) {
182 stack_trace.push_back({EntryForVMState(sample.state), no_line_info});
static V8_EXPORT_PRIVATE CodeEntry * gc_entry()
const std::vector< CodeEntryAndLineNumber > * GetInlineStack(int pc_offset) const
static V8_EXPORT_PRIVATE CodeEntry * program_entry()
static V8_EXPORT_PRIVATE CodeEntry * idle_entry()
int GetSourceLine(int pc_offset) const
static V8_EXPORT_PRIVATE CodeEntry * unresolved_entry()