Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(887)

Unified Diff: runtime/vm/thread.h

Issue 1812753002: - Move (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/thread.h
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index 3bf5aab1e6de811ed47e911e26b2f34ae5ca814c..3dbc47306d3280f2efbaa0db37dfc348cefdf4ca 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -145,6 +145,60 @@ class Thread : public BaseThread {
// Empties the store buffer block into the isolate.
void PrepareForGC();
+ void SetStackLimit(uword value);
+ void SetStackLimitFromStackBase(uword stack_base);
+ void ClearStackLimit();
+
+ // Returns the current C++ stack pointer. Equivalent taking the address of a
+ // stack allocated local, but plays well with AddressSanitizer.
+ static uword GetCurrentStackPointer();
+
+ // Access to the current stack limit for generated code. This may be
+ // overwritten with a special value to trigger interrupts.
+ uword stack_limit_address() const {
+ return reinterpret_cast<uword>(&stack_limit_);
+ }
+ static intptr_t stack_limit_offset() {
+ return OFFSET_OF(Thread, stack_limit_);
+ }
+
+ // The true stack limit for this isolate.
+ uword saved_stack_limit() const { return saved_stack_limit_; }
+
+ // Stack overflow flags
+ enum {
+ kOsrRequest = 0x1, // Current stack overflow caused by OSR request.
+ };
+
+ uword stack_overflow_flags_address() const {
+ return reinterpret_cast<uword>(&stack_overflow_flags_);
+ }
+ static intptr_t stack_overflow_flags_offset() {
+ return OFFSET_OF(Thread, stack_overflow_flags_);
+ }
+
+ int32_t IncrementAndGetStackOverflowCount() {
+ return ++stack_overflow_count_;
+ }
+
+ // Retrieves and clears the stack overflow flags. These are set by
+ // the generated code before the slow path runtime routine for a
+ // stack overflow is called.
+ uword GetAndClearStackOverflowFlags();
+
+ // Interrupt bits.
+ enum {
+ kVMInterrupt = 0x1, // Internal VM checks: safepoints, store buffers, etc.
+ kMessageInterrupt = 0x2, // An interrupt to process an out of band message.
+
+ kInterruptsMask = (kVMInterrupt | kMessageInterrupt),
+ };
+
+ void ScheduleInterrupts(uword interrupt_bits);
+ void ScheduleInterruptsLocked(uword interrupt_bits);
+ RawError* HandleInterrupts();
+ uword GetAndClearInterrupts();
+
// OSThread corresponding to this thread.
OSThread* os_thread() const { return os_thread_; }
void set_os_thread(OSThread* os_thread) {
@@ -533,17 +587,37 @@ LEAF_RUNTIME_ENTRY_LIST(DEFINE_OFFSET_METHOD)
private:
template<class T> T* AllocateReusableHandle();
- OSThread* os_thread_;
- Monitor* thread_lock_;
+ // Accessed from generated code:
+ uword stack_limit_;
+ uword stack_overflow_flags_;
Isolate* isolate_;
Heap* heap_;
+ uword top_exit_frame_info_;
+ StoreBufferBlock* store_buffer_block_;
+ uword vm_tag_;
+ // State that is cached in the TLS for fast access in generated code.
+#define DECLARE_MEMBERS(type_name, member_name, expr, default_init_value) \
+ type_name member_name;
+CACHED_CONSTANTS_LIST(DECLARE_MEMBERS)
+#undef DECLARE_MEMBERS
+
+#define DECLARE_MEMBERS(name) \
+ uword name##_entry_point_;
+RUNTIME_ENTRY_LIST(DECLARE_MEMBERS)
+#undef DECLARE_MEMBERS
+
+#define DECLARE_MEMBERS(returntype, name, ...) \
+ uword name##_entry_point_;
+LEAF_RUNTIME_ENTRY_LIST(DECLARE_MEMBERS)
+#undef DECLARE_MEMBERS
+
+ OSThread* os_thread_;
+ Monitor* thread_lock_;
Zone* zone_;
ApiLocalScope* api_reusable_scope_;
ApiLocalScope* api_top_scope_;
- uword top_exit_frame_info_;
StackResource* top_resource_;
LongJumpScope* long_jump_base_;
- StoreBufferBlock* store_buffer_block_;
int32_t no_callback_scope_depth_;
#if defined(DEBUG)
HandleScope* top_handle_scope_;
@@ -551,31 +625,18 @@ LEAF_RUNTIME_ENTRY_LIST(DEFINE_OFFSET_METHOD)
int32_t no_safepoint_scope_depth_;
#endif
VMHandles reusable_handles_;
+ uword saved_stack_limit_;
+ uint16_t deferred_interrupts_mask_;
+ uint16_t deferred_interrupts_;
+ int32_t stack_overflow_count_;
// Compiler state:
CHA* cha_;
intptr_t deopt_id_; // Compilation specific counter.
- uword vm_tag_;
RawGrowableObjectArray* pending_functions_;
RawError* sticky_error_;
- // State that is cached in the TLS for fast access in generated code.
-#define DECLARE_MEMBERS(type_name, member_name, expr, default_init_value) \
- type_name member_name;
-CACHED_CONSTANTS_LIST(DECLARE_MEMBERS)
-#undef DECLARE_MEMBERS
-
-#define DECLARE_MEMBERS(name) \
- uword name##_entry_point_;
-RUNTIME_ENTRY_LIST(DECLARE_MEMBERS)
-#undef DECLARE_MEMBERS
-
-#define DECLARE_MEMBERS(returntype, name, ...) \
- uword name##_entry_point_;
-LEAF_RUNTIME_ENTRY_LIST(DECLARE_MEMBERS)
-#undef DECLARE_MEMBERS
-
// Reusable handles support.
#define REUSABLE_HANDLE_FIELDS(object) \
object* object##_handle_;
@@ -622,13 +683,19 @@ LEAF_RUNTIME_ENTRY_LIST(DECLARE_MEMBERS)
OSThread::SetCurrentTLS(reinterpret_cast<uword>(current));
}
+ void DeferOOBMessageInterrupts();
+ void RestoreOOBMessageInterrupts();
+
#define REUSABLE_FRIEND_DECLARATION(name) \
friend class Reusable##name##HandleScope;
REUSABLE_HANDLE_LIST(REUSABLE_FRIEND_DECLARATION)
#undef REUSABLE_FRIEND_DECLARATION
friend class ApiZone;
+ friend class InterruptChecker;
friend class Isolate;
+ friend class IsolateTestHelper;
+ friend class NoOOBMessageScope;
friend class Simulator;
friend class StackZone;
friend class ThreadRegistry;

Powered by Google App Engine
This is Rietveld 408576698