Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: src/runtime/runtime-interpreter.cc

Issue 1844023003: [interpreter] Fix stale DCHECK in tracing. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix a memory leak and add test. Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | test/mjsunit/ignition/tracing.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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/runtime/runtime-utils.h" 5 #include "src/runtime/runtime-utils.h"
6 6
7 #include <iomanip> 7 #include <iomanip>
8 8
9 #include "src/arguments.h" 9 #include "src/arguments.h"
10 #include "src/frames-inl.h" 10 #include "src/frames-inl.h"
(...skipping 17 matching lines...) Expand all
28 28
29 namespace { 29 namespace {
30 30
31 void AdvanceToOffsetForTracing( 31 void AdvanceToOffsetForTracing(
32 interpreter::BytecodeArrayIterator& bytecode_iterator, int offset) { 32 interpreter::BytecodeArrayIterator& bytecode_iterator, int offset) {
33 while (bytecode_iterator.current_offset() + 33 while (bytecode_iterator.current_offset() +
34 bytecode_iterator.current_bytecode_size() <= 34 bytecode_iterator.current_bytecode_size() <=
35 offset) { 35 offset) {
36 bytecode_iterator.Advance(); 36 bytecode_iterator.Advance();
37 } 37 }
38 DCHECK_EQ(offset, bytecode_iterator.current_offset()); 38 DCHECK(bytecode_iterator.current_offset() == offset ||
39 ((bytecode_iterator.current_offset() + 1) == offset &&
40 bytecode_iterator.current_operand_scale() >
41 interpreter::OperandScale::kSingle));
39 } 42 }
40 43
41 void PrintRegisters(std::ostream& os, bool is_input, 44 void PrintRegisters(std::ostream& os, bool is_input,
42 interpreter::BytecodeArrayIterator& bytecode_iterator, 45 interpreter::BytecodeArrayIterator& bytecode_iterator,
43 Handle<Object> accumulator) { 46 Handle<Object> accumulator) {
44 static const int kRegFieldWidth = static_cast<int>(strlen("accumulator")); 47 static const int kRegFieldWidth = static_cast<int>(strlen("accumulator"));
45 static const char* kInputColourCode = "\033[0;36m"; 48 static const char* kInputColourCode = "\033[0;36m";
46 static const char* kOutputColourCode = "\033[0;35m"; 49 static const char* kOutputColourCode = "\033[0;35m";
47 static const char* kNormalColourCode = "\033[0;m"; 50 static const char* kNormalColourCode = "\033[0;m";
48 const char* kArrowDirection = is_input ? " -> " : " <- "; 51 const char* kArrowDirection = is_input ? " -> " : " <- ";
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 CONVERT_ARG_HANDLE_CHECKED(Object, accumulator, 2); 107 CONVERT_ARG_HANDLE_CHECKED(Object, accumulator, 2);
105 OFStream os(stdout); 108 OFStream os(stdout);
106 109
107 int offset = bytecode_offset - BytecodeArray::kHeaderSize + kHeapObjectTag; 110 int offset = bytecode_offset - BytecodeArray::kHeaderSize + kHeapObjectTag;
108 interpreter::BytecodeArrayIterator bytecode_iterator(bytecode_array); 111 interpreter::BytecodeArrayIterator bytecode_iterator(bytecode_array);
109 AdvanceToOffsetForTracing(bytecode_iterator, offset); 112 AdvanceToOffsetForTracing(bytecode_iterator, offset);
110 if (offset == bytecode_iterator.current_offset()) { 113 if (offset == bytecode_iterator.current_offset()) {
111 // Print bytecode. 114 // Print bytecode.
112 const uint8_t* bytecode_address = 115 const uint8_t* bytecode_address =
113 reinterpret_cast<const uint8_t*>(*bytecode_array) + bytecode_offset; 116 reinterpret_cast<const uint8_t*>(*bytecode_array) + bytecode_offset;
114 Vector<char> buf = Vector<char>::New(50); 117 os << " -> " << static_cast<const void*>(bytecode_address)
115 SNPrintF(buf, "%p", bytecode_address); 118 << " (" << bytecode_offset << ") : ";
116 os << " -> " << buf.start() << " (" << bytecode_offset << ") : ";
117 interpreter::Bytecodes::Decode(os, bytecode_address, 119 interpreter::Bytecodes::Decode(os, bytecode_address,
118 bytecode_array->parameter_count()); 120 bytecode_array->parameter_count());
119 os << std::endl; 121 os << std::endl;
120 // Print all input registers and accumulator. 122 // Print all input registers and accumulator.
121 PrintRegisters(os, true, bytecode_iterator, accumulator); 123 PrintRegisters(os, true, bytecode_iterator, accumulator);
122 124
123 os << std::flush; 125 os << std::flush;
124 } 126 }
125 return isolate->heap()->undefined_value(); 127 return isolate->heap()->undefined_value();
126 } 128 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 RUNTIME_FUNCTION(Runtime_InterpreterSetPendingMessage) { 162 RUNTIME_FUNCTION(Runtime_InterpreterSetPendingMessage) {
161 SealHandleScope shs(isolate); 163 SealHandleScope shs(isolate);
162 DCHECK_EQ(1, args.length()); 164 DCHECK_EQ(1, args.length());
163 CONVERT_ARG_HANDLE_CHECKED(Object, message, 0); 165 CONVERT_ARG_HANDLE_CHECKED(Object, message, 0);
164 isolate->thread_local_top()->pending_message_obj_ = *message; 166 isolate->thread_local_top()->pending_message_obj_ = *message;
165 return isolate->heap()->undefined_value(); 167 return isolate->heap()->undefined_value();
166 } 168 }
167 169
168 } // namespace internal 170 } // namespace internal
169 } // namespace v8 171 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/ignition/tracing.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698