Index: test/cctest/test-log-stack-tracer.cc |
diff --git a/test/cctest/test-log-stack-tracer.cc b/test/cctest/test-log-stack-tracer.cc |
index c85f6c0bc3af97bbd1779db2cb6aeb7024963801..bf72184fb013d0a337f8238a4c523fc0e7014ef4 100644 |
--- a/test/cctest/test-log-stack-tracer.cc |
+++ b/test/cctest/test-log-stack-tracer.cc |
@@ -33,6 +33,7 @@ |
#include "v8.h" |
+#include "api.h" |
#include "codegen.h" |
#include "log.h" |
#include "top.h" |
@@ -200,16 +201,16 @@ static void InitializeVM() { |
} |
-static void CheckJSFunctionAtAddress(const char* func_name, Address addr) { |
- CHECK(i::Heap::Contains(addr)); |
- i::Object* obj = i::HeapObject::FromAddress(addr); |
- CHECK(obj->IsJSFunction()); |
- CHECK(JSFunction::cast(obj)->shared()->name()->IsString()); |
- i::SmartPointer<char> found_name = |
- i::String::cast( |
- JSFunction::cast( |
- obj)->shared()->name())->ToCString(); |
- CHECK_EQ(func_name, *found_name); |
+static bool IsAddressWithinFuncCode(JSFunction* function, Address addr) { |
+ i::Code* code = function->code(); |
+ return code->contains(addr); |
+} |
+ |
+static bool IsAddressWithinFuncCode(const char* func_name, Address addr) { |
+ v8::Local<v8::Value> func = env->Global()->Get(v8_str(func_name)); |
+ CHECK(func->IsFunction()); |
+ JSFunction* js_func = JSFunction::cast(*v8::Utils::OpenHandle(*func)); |
+ return IsAddressWithinFuncCode(js_func, addr); |
} |
@@ -309,8 +310,8 @@ TEST(CFromJSStackTrace) { |
// Stack tracing will start from the first JS function, i.e. "JSFuncDoTrace" |
CHECK_GT(sample.frames_count, base + 1); |
- CheckJSFunctionAtAddress("JSFuncDoTrace", sample.stack[base + 0]); |
- CheckJSFunctionAtAddress("JSTrace", sample.stack[base + 1]); |
+ CHECK(IsAddressWithinFuncCode("JSFuncDoTrace", sample.stack[base + 0])); |
+ CHECK(IsAddressWithinFuncCode("JSTrace", sample.stack[base + 1])); |
} |
@@ -351,9 +352,6 @@ TEST(PureJSStackTrace) { |
// DoTraceHideCEntryFPAddress(EBP) [native] |
// StackTracer::Trace |
// |
- // The last JS function called. It is only visible through |
- // sample.function, as its return address is above captured EBP value. |
- CheckJSFunctionAtAddress("JSFuncDoTrace", sample.function); |
// The VM state tracking keeps track of external callbacks and puts |
// them at the top of the sample stack. |
@@ -363,8 +361,8 @@ TEST(PureJSStackTrace) { |
// Stack sampling will start from the caller of JSFuncDoTrace, i.e. "JSTrace" |
CHECK_GT(sample.frames_count, base + 1); |
- CheckJSFunctionAtAddress("JSTrace", sample.stack[base + 0]); |
- CheckJSFunctionAtAddress("OuterJSTrace", sample.stack[base + 1]); |
+ CHECK(IsAddressWithinFuncCode("JSTrace", sample.stack[base + 0])); |
+ CHECK(IsAddressWithinFuncCode("OuterJSTrace", sample.stack[base + 1])); |
} |