Index: src/profiler/profile-generator.cc |
diff --git a/src/profiler/profile-generator.cc b/src/profiler/profile-generator.cc |
index d40cf2ad408524a1409cc5c2db701704503a2c4a..5252bd1675c56f502b6efd310bea4120fa084a77 100644 |
--- a/src/profiler/profile-generator.cc |
+++ b/src/profiler/profile-generator.cc |
@@ -11,7 +11,6 @@ |
#include "src/global-handles.h" |
#include "src/profiler/cpu-profiler.h" |
#include "src/profiler/profile-generator-inl.h" |
-#include "src/profiler/tick-sample.h" |
#include "src/unicode.h" |
namespace v8 { |
@@ -578,22 +577,24 @@ void ProfileGenerator::RecordTickSample(const TickSample& sample) { |
// Don't use PC when in external callback code, as it can point |
// inside callback's code, and we will erroneously report |
// that a callback calls itself. |
- entries.push_back(code_map_.FindEntry(sample.external_callback_entry)); |
+ entries.push_back(code_map_.FindEntry( |
+ reinterpret_cast<Address>(sample.external_callback_entry))); |
} else { |
- CodeEntry* pc_entry = code_map_.FindEntry(sample.pc); |
+ CodeEntry* pc_entry = |
+ code_map_.FindEntry(reinterpret_cast<Address>(sample.pc)); |
// If there is no pc_entry we're likely in native code. |
// Find out, if top of stack was pointing inside a JS function |
// meaning that we have encountered a frameless invocation. |
if (!pc_entry && !sample.has_external_callback) { |
- pc_entry = code_map_.FindEntry(sample.tos); |
+ pc_entry = code_map_.FindEntry(reinterpret_cast<Address>(sample.tos)); |
} |
// If pc is in the function code before it set up stack frame or after the |
// frame was destroyed SafeStackFrameIterator incorrectly thinks that |
// ebp contains return address of the current function and skips caller's |
// frame. Check for this case and just skip such samples. |
if (pc_entry) { |
- int pc_offset = |
- static_cast<int>(sample.pc - pc_entry->instruction_start()); |
+ int pc_offset = static_cast<int>(reinterpret_cast<Address>(sample.pc) - |
+ pc_entry->instruction_start()); |
src_line = pc_entry->GetSourceLine(pc_offset); |
if (src_line == v8::CpuProfileNode::kNoLineNumberInfo) { |
src_line = pc_entry->line_number(); |
@@ -616,15 +617,14 @@ void ProfileGenerator::RecordTickSample(const TickSample& sample) { |
} |
} |
- for (const Address *stack_pos = sample.stack, |
- *stack_end = stack_pos + sample.frames_count; |
- stack_pos != stack_end; ++stack_pos) { |
- CodeEntry* entry = code_map_.FindEntry(*stack_pos); |
+ for (unsigned i = 0; i < sample.frames_count; ++i) { |
+ Address stack_pos = reinterpret_cast<Address>(sample.stack[i]); |
+ CodeEntry* entry = code_map_.FindEntry(stack_pos); |
if (entry) { |
// Find out if the entry has an inlining stack associated. |
int pc_offset = |
- static_cast<int>(*stack_pos - entry->instruction_start()); |
+ static_cast<int>(stack_pos - entry->instruction_start()); |
const std::vector<CodeEntry*>* inline_stack = |
entry->GetInlineStack(pc_offset); |
if (inline_stack) { |