diff options
Diffstat (limited to 'runtime/thread.h')
| -rw-r--r-- | runtime/thread.h | 26 | 
1 files changed, 18 insertions, 8 deletions
diff --git a/runtime/thread.h b/runtime/thread.h index d08c2fce82..c2b200bf1a 100644 --- a/runtime/thread.h +++ b/runtime/thread.h @@ -104,8 +104,7 @@ class Thread {    // is protected against reads and the lower is available for use while    // throwing the StackOverflow exception.    static constexpr size_t kStackOverflowProtectedSize = 16 * KB; -  static constexpr size_t kStackOverflowImplicitCheckSize = kStackOverflowProtectedSize + -      kRuntimeStackOverflowReservedBytes; +  static const size_t kStackOverflowImplicitCheckSize;    // Creates a new native thread corresponding to the given managed peer.    // Used to implement Thread.start. @@ -323,7 +322,9 @@ class Thread {      tlsPtr_.long_jump_context = context;    } -  mirror::ArtMethod* GetCurrentMethod(uint32_t* dex_pc) const +  // Get the current method and dex pc. If there are errors in retrieving the dex pc, this will +  // abort the runtime iff abort_on_error is true. +  mirror::ArtMethod* GetCurrentMethod(uint32_t* dex_pc, bool abort_on_error = true) const        SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);    ThrowLocation GetCurrentLocationForThrow() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); @@ -430,12 +431,11 @@ class Thread {      tlsPtr_.wait_next = next;    } -  mirror::ClassLoader* GetClassLoaderOverride() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { +  jobject GetClassLoaderOverride() {      return tlsPtr_.class_loader_override;    } -  void SetClassLoaderOverride(mirror::ClassLoader* class_loader_override) -      SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); +  void SetClassLoaderOverride(jobject class_loader_override);    // Create the internal representation of a stack trace, that is more time    // and space efficient to compute than the StackTraceElement[]. @@ -551,6 +551,16 @@ class Thread {      return tlsPtr_.stack_size - (tlsPtr_.stack_end - tlsPtr_.stack_begin);    } +  byte* GetStackEndForInterpreter(bool implicit_overflow_check) const { +    if (implicit_overflow_check) { +      // The interpreter needs the extra overflow bytes that stack_end does +      // not include. +      return tlsPtr_.stack_end + GetStackOverflowReservedBytes(kRuntimeISA); +    } else { +      return tlsPtr_.stack_end; +    } +  } +    byte* GetStackEnd() const {      return tlsPtr_.stack_end;    } @@ -567,7 +577,7 @@ class Thread {        // overflow region.        tlsPtr_.stack_end = tlsPtr_.stack_begin + kStackOverflowImplicitCheckSize;      } else { -      tlsPtr_.stack_end = tlsPtr_.stack_begin + kRuntimeStackOverflowReservedBytes; +      tlsPtr_.stack_end = tlsPtr_.stack_begin + GetStackOverflowReservedBytes(kRuntimeISA);      }    } @@ -1029,7 +1039,7 @@ class Thread {      // Needed to get the right ClassLoader in JNI_OnLoad, but also      // useful for testing. -    mirror::ClassLoader* class_loader_override; +    jobject class_loader_override;      // Thread local, lazily allocated, long jump context. Used to deliver exceptions.      Context* long_jump_context;  |