| OLD | NEW | 
|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "src/frames.h" | 5 #include "src/frames.h" | 
| 6 | 6 | 
| 7 #include <memory> | 7 #include <memory> | 
| 8 #include <sstream> | 8 #include <sstream> | 
| 9 | 9 | 
| 10 #include "src/base/bits.h" | 10 #include "src/base/bits.h" | 
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 397 | 397 | 
| 398 void StackFrame::SetReturnAddressLocationResolver( | 398 void StackFrame::SetReturnAddressLocationResolver( | 
| 399     ReturnAddressLocationResolver resolver) { | 399     ReturnAddressLocationResolver resolver) { | 
| 400   DCHECK(return_address_location_resolver_ == NULL); | 400   DCHECK(return_address_location_resolver_ == NULL); | 
| 401   return_address_location_resolver_ = resolver; | 401   return_address_location_resolver_ = resolver; | 
| 402 } | 402 } | 
| 403 | 403 | 
| 404 static bool IsInterpreterFramePc(Isolate* isolate, Address pc) { | 404 static bool IsInterpreterFramePc(Isolate* isolate, Address pc) { | 
| 405   Code* interpreter_entry_trampoline = | 405   Code* interpreter_entry_trampoline = | 
| 406       isolate->builtins()->builtin(Builtins::kInterpreterEntryTrampoline); | 406       isolate->builtins()->builtin(Builtins::kInterpreterEntryTrampoline); | 
|  | 407   Code* interpreter_bytecode_advance = | 
|  | 408       isolate->builtins()->builtin(Builtins::kInterpreterEnterBytecodeAdvance); | 
| 407   Code* interpreter_bytecode_dispatch = | 409   Code* interpreter_bytecode_dispatch = | 
| 408       isolate->builtins()->builtin(Builtins::kInterpreterEnterBytecodeDispatch); | 410       isolate->builtins()->builtin(Builtins::kInterpreterEnterBytecodeDispatch); | 
| 409 | 411 | 
| 410   return (pc >= interpreter_entry_trampoline->instruction_start() && | 412   return (pc >= interpreter_entry_trampoline->instruction_start() && | 
| 411           pc < interpreter_entry_trampoline->instruction_end()) || | 413           pc < interpreter_entry_trampoline->instruction_end()) || | 
|  | 414          (pc >= interpreter_bytecode_advance->instruction_start() && | 
|  | 415           pc < interpreter_bytecode_advance->instruction_end()) || | 
| 412          (pc >= interpreter_bytecode_dispatch->instruction_start() && | 416          (pc >= interpreter_bytecode_dispatch->instruction_start() && | 
| 413           pc < interpreter_bytecode_dispatch->instruction_end()); | 417           pc < interpreter_bytecode_dispatch->instruction_end()); | 
| 414 } | 418 } | 
| 415 | 419 | 
| 416 StackFrame::Type StackFrame::ComputeType(const StackFrameIteratorBase* iterator, | 420 StackFrame::Type StackFrame::ComputeType(const StackFrameIteratorBase* iterator, | 
| 417                                          State* state) { | 421                                          State* state) { | 
| 418   DCHECK(state->fp != NULL); | 422   DCHECK(state->fp != NULL); | 
| 419 | 423 | 
| 420   MSAN_MEMORY_IS_INITIALIZED( | 424   MSAN_MEMORY_IS_INITIALIZED( | 
| 421       state->fp + CommonFrameConstants::kContextOrFrameTypeOffset, | 425       state->fp + CommonFrameConstants::kContextOrFrameTypeOffset, | 
| (...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1212       if (frame_opcode == Translation::JS_FRAME) { | 1216       if (frame_opcode == Translation::JS_FRAME) { | 
| 1213         Code* code = shared_info->code(); | 1217         Code* code = shared_info->code(); | 
| 1214         DeoptimizationOutputData* const output_data = | 1218         DeoptimizationOutputData* const output_data = | 
| 1215             DeoptimizationOutputData::cast(code->deoptimization_data()); | 1219             DeoptimizationOutputData::cast(code->deoptimization_data()); | 
| 1216         unsigned const entry = | 1220         unsigned const entry = | 
| 1217             Deoptimizer::GetOutputInfo(output_data, bailout_id, shared_info); | 1221             Deoptimizer::GetOutputInfo(output_data, bailout_id, shared_info); | 
| 1218         code_offset = FullCodeGenerator::PcField::decode(entry); | 1222         code_offset = FullCodeGenerator::PcField::decode(entry); | 
| 1219         abstract_code = AbstractCode::cast(code); | 1223         abstract_code = AbstractCode::cast(code); | 
| 1220       } else { | 1224       } else { | 
| 1221         DCHECK_EQ(frame_opcode, Translation::INTERPRETED_FRAME); | 1225         DCHECK_EQ(frame_opcode, Translation::INTERPRETED_FRAME); | 
| 1222         // BailoutId points to the next bytecode in the bytecode aray. Subtract | 1226         code_offset = bailout_id.ToInt();  // Points to current bytecode. | 
| 1223         // 1 to get the end of current bytecode. |  | 
| 1224         code_offset = bailout_id.ToInt() - 1; |  | 
| 1225         abstract_code = AbstractCode::cast(shared_info->bytecode_array()); | 1227         abstract_code = AbstractCode::cast(shared_info->bytecode_array()); | 
| 1226       } | 1228       } | 
| 1227       FrameSummary summary(receiver, function, abstract_code, code_offset, | 1229       FrameSummary summary(receiver, function, abstract_code, code_offset, | 
| 1228                            is_constructor); | 1230                            is_constructor); | 
| 1229       frames->Add(summary); | 1231       frames->Add(summary); | 
| 1230       is_constructor = false; | 1232       is_constructor = false; | 
| 1231     } else if (frame_opcode == Translation::CONSTRUCT_STUB_FRAME) { | 1233     } else if (frame_opcode == Translation::CONSTRUCT_STUB_FRAME) { | 
| 1232       // The next encountered JS_FRAME will be marked as a constructor call. | 1234       // The next encountered JS_FRAME will be marked as a constructor call. | 
| 1233       it.Skip(Translation::NumberOfOperandsFor(frame_opcode)); | 1235       it.Skip(Translation::NumberOfOperandsFor(frame_opcode)); | 
| 1234       DCHECK(!is_constructor); | 1236       DCHECK(!is_constructor); | 
| (...skipping 737 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1972   for (StackFrameIterator it(isolate); !it.done(); it.Advance()) { | 1974   for (StackFrameIterator it(isolate); !it.done(); it.Advance()) { | 
| 1973     StackFrame* frame = AllocateFrameCopy(it.frame(), zone); | 1975     StackFrame* frame = AllocateFrameCopy(it.frame(), zone); | 
| 1974     list.Add(frame, zone); | 1976     list.Add(frame, zone); | 
| 1975   } | 1977   } | 
| 1976   return list.ToVector(); | 1978   return list.ToVector(); | 
| 1977 } | 1979 } | 
| 1978 | 1980 | 
| 1979 | 1981 | 
| 1980 }  // namespace internal | 1982 }  // namespace internal | 
| 1981 }  // namespace v8 | 1983 }  // namespace v8 | 
| OLD | NEW | 
|---|