2bd5914bc3
For platforms that use function descriptors (currently AIX and PPC64BE), log an external callback's entrypoint address rather than its function descriptor address. This allows proper lookup in the tick processor's symbol table. R=jkummerow@chromium.org, michael_dawson@ca.ibm.com BUG= Review URL: https://codereview.chromium.org/1409993006 Cr-Commit-Position: refs/heads/master@{#31633}
61 lines
1.5 KiB
C++
61 lines
1.5 KiB
C++
// Copyright 2010 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef V8_VM_STATE_H_
|
|
#define V8_VM_STATE_H_
|
|
|
|
#include "src/allocation.h"
|
|
#include "src/isolate.h"
|
|
|
|
namespace v8 {
|
|
namespace internal {
|
|
|
|
// Logging and profiling. A StateTag represents a possible state of
|
|
// the VM. The logger maintains a stack of these. Creating a VMState
|
|
// object enters a state by pushing on the stack, and destroying a
|
|
// VMState object leaves a state by popping the current state from the
|
|
// stack.
|
|
template <StateTag Tag>
|
|
class VMState BASE_EMBEDDED {
|
|
public:
|
|
explicit inline VMState(Isolate* isolate);
|
|
inline ~VMState();
|
|
|
|
private:
|
|
Isolate* isolate_;
|
|
StateTag previous_tag_;
|
|
};
|
|
|
|
|
|
class ExternalCallbackScope BASE_EMBEDDED {
|
|
public:
|
|
inline ExternalCallbackScope(Isolate* isolate, Address callback);
|
|
inline ~ExternalCallbackScope();
|
|
Address callback() { return callback_; }
|
|
Address* callback_entrypoint_address() {
|
|
if (callback_ == nullptr) return nullptr;
|
|
#if USES_FUNCTION_DESCRIPTORS
|
|
return FUNCTION_ENTRYPOINT_ADDRESS(callback_);
|
|
#else
|
|
return &callback_;
|
|
#endif
|
|
}
|
|
ExternalCallbackScope* previous() { return previous_scope_; }
|
|
inline Address scope_address();
|
|
|
|
private:
|
|
Isolate* isolate_;
|
|
Address callback_;
|
|
ExternalCallbackScope* previous_scope_;
|
|
#ifdef USE_SIMULATOR
|
|
Address scope_address_;
|
|
#endif
|
|
};
|
|
|
|
} // namespace internal
|
|
} // namespace v8
|
|
|
|
|
|
#endif // V8_VM_STATE_H_
|