Reviewers: William Hesse, Søren Gjesse, Message: QUick review of TickSample fix.
Description: X64: Changed TickSample to hold pointer-sized values for registers. Please review this at http://codereview.chromium.org/113094 Affected files: M src/log.cc M src/platform-linux.cc M src/platform-win32.cc M src/platform.h Index: src/log.cc diff --git a/src/log.cc b/src/log.cc index 8a2fbb7dcbd05cf4cc6519735b15717e6ba7e5c1..36488515a055d71964da5f3dcc31af707fc623da 100644 --- a/src/log.cc +++ b/src/log.cc @@ -1082,13 +1082,13 @@ void Logger::DebugEvent(const char* event_type, Vector<uint16_t> parameter) { void Logger::TickEvent(TickSample* sample, bool overflow) { if (!Log::is_enabled() || !FLAG_prof) return; LogMessageBuilder msg; - msg.Append("tick,0x%x,0x%x,%d", sample->pc, sample->sp, + msg.Append("tick,0x%p,0x%p,%d", sample->pc, sample->sp, static_cast<int>(sample->state)); if (overflow) { msg.Append(",overflow"); } for (int i = 0; i < sample->frames_count; ++i) { - msg.Append(",0x%x", reinterpret_cast<uint32_t>(sample->stack[i])); + msg.Append(",0x%p", reinterpret_cast<uint32_t>(sample->stack[i])); } msg.Append('\n'); msg.WriteToLogFile(); Index: src/platform-linux.cc diff --git a/src/platform-linux.cc b/src/platform-linux.cc index 026d251f5c339c5e5c8b2a29cc2403597d43e7d4..c02eebc3b4c8a4e8e7beadd4037f856b91bbc729 100644 --- a/src/platform-linux.cc +++ b/src/platform-linux.cc @@ -605,7 +605,6 @@ static void ProfilerSignalHandler(int signal, siginfo_t* info, void* context) { sample.sp = mcontext.gregs[REG_ESP]; sample.fp = mcontext.gregs[REG_EBP]; #elif V8_HOST_ARCH_X64 - UNIMPLEMENTED(); sample.pc = mcontext.gregs[REG_RIP]; sample.sp = mcontext.gregs[REG_RSP]; sample.fp = mcontext.gregs[REG_RBP]; Index: src/platform-win32.cc diff --git a/src/platform-win32.cc b/src/platform-win32.cc index 597a21716b2b655e4962b7b55b6ccb76d57ecc15..eeaea700f0a6a50106bce0227bda0cce273b92b6 100644 --- a/src/platform-win32.cc +++ b/src/platform-win32.cc @@ -1775,9 +1775,16 @@ class Sampler::PlatformData : public Malloced { context.ContextFlags = CONTEXT_FULL; GetThreadContext(profiled_thread_, &context); // Invoke tick handler with program counter and stack pointer. +#if V8_HOST_ARCH_64_BIT + UNIMPLEMENTED(); + sample.pc = context.Rip; + sample.sp = context.Rsp; + sample.fp = context.Rbp; +#else sample.pc = context.Eip; sample.sp = context.Esp; sample.fp = context.Ebp; +#endif } // We always sample the VM state. Index: src/platform.h diff --git a/src/platform.h b/src/platform.h index a34661505564665407a814a43287b7309605707b..e23abfc375de08380991ea1dee918b45298f3bf2 100644 --- a/src/platform.h +++ b/src/platform.h @@ -492,9 +492,9 @@ class Socket { class TickSample { public: TickSample() : pc(0), sp(0), fp(0), state(OTHER) {} - unsigned int pc; // Instruction pointer. - unsigned int sp; // Stack pointer. - unsigned int fp; // Frame pointer. + uintptr_t pc; // Instruction pointer. + uintptr_t sp; // Stack pointer. + uintptr_t fp; // Frame pointer. StateTag state; // The state of the VM. static const int kMaxFramesCount = 100; EmbeddedVector<Address, kMaxFramesCount> stack; // Call stack. --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
