diff options
Diffstat (limited to 'deps/v8/test/cctest/test-log-stack-tracer.cc')
-rw-r--r-- | deps/v8/test/cctest/test-log-stack-tracer.cc | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/deps/v8/test/cctest/test-log-stack-tracer.cc b/deps/v8/test/cctest/test-log-stack-tracer.cc index ad79bfe412..8a09a17684 100644 --- a/deps/v8/test/cctest/test-log-stack-tracer.cc +++ b/deps/v8/test/cctest/test-log-stack-tracer.cc @@ -85,10 +85,15 @@ static void construct_call(const v8::FunctionCallbackInfo<v8::Value>& args) { .FromJust(); #elif defined(V8_HOST_ARCH_64_BIT) Address fp = calling_frame->fp(); - int32_t low_bits = static_cast<int32_t>(fp & 0xFFFFFFFF); - int32_t high_bits = static_cast<int32_t>(fp >> 32); - args.This()->Set(context, v8_str("low_bits"), v8_num(low_bits)).FromJust(); - args.This()->Set(context, v8_str("high_bits"), v8_num(high_bits)).FromJust(); + uint64_t kSmiValueMask = + (static_cast<uintptr_t>(1) << (kSmiValueSize - 1)) - 1; + int32_t low_bits = static_cast<int32_t>(fp & kSmiValueMask); + fp >>= kSmiValueSize - 1; + int32_t high_bits = static_cast<int32_t>(fp & kSmiValueMask); + fp >>= kSmiValueSize - 1; + CHECK_EQ(fp, 0); // Ensure all the bits are successfully encoded. + args.This()->Set(context, v8_str("low_bits"), v8_int(low_bits)).FromJust(); + args.This()->Set(context, v8_str("high_bits"), v8_int(high_bits)).FromJust(); #else #error Host architecture is neither 32-bit nor 64-bit. #endif |