| Index: src/frames.cc
|
| diff --git a/src/frames.cc b/src/frames.cc
|
| index 6df5d3544601e3eb135ea9b3e17e791b421da742..ed897f129d1d5cd02287db72754fac8592cb78c5 100644
|
| --- a/src/frames.cc
|
| +++ b/src/frames.cc
|
| @@ -401,6 +401,17 @@ void StackFrame::SetReturnAddressLocationResolver(
|
| return_address_location_resolver_ = resolver;
|
| }
|
|
|
| +static bool IsInterpreterFramePc(Isolate* isolate, Address pc) {
|
| + Code* interpreter_entry_trampoline =
|
| + isolate->builtins()->builtin(Builtins::kInterpreterEntryTrampoline);
|
| + Code* interpreter_bytecode_dispatch =
|
| + isolate->builtins()->builtin(Builtins::kInterpreterEnterBytecodeDispatch);
|
| +
|
| + return (pc >= interpreter_entry_trampoline->instruction_start() &&
|
| + pc < interpreter_entry_trampoline->instruction_end()) ||
|
| + (pc >= interpreter_bytecode_dispatch->instruction_start() &&
|
| + pc < interpreter_bytecode_dispatch->instruction_end());
|
| +}
|
|
|
| StackFrame::Type StackFrame::ComputeType(const StackFrameIteratorBase* iterator,
|
| State* state) {
|
| @@ -427,6 +438,9 @@ StackFrame::Type StackFrame::ComputeType(const StackFrameIteratorBase* iterator,
|
| Memory::Object_at(state->fp + StandardFrameConstants::kMarkerOffset);
|
| if (marker->IsSmi()) {
|
| return static_cast<StackFrame::Type>(Smi::cast(marker)->value());
|
| + } else if (FLAG_ignition && IsInterpreterFramePc(iterator->isolate(),
|
| + *(state->pc_address))) {
|
| + return INTERPRETED;
|
| } else {
|
| return JAVA_SCRIPT;
|
| }
|
|
|