[vm] Drop Android 6.0.0 specific workaround
Flutter does not support Android versions below Android 7 (API level
24).
Simplify the code by removing workaround introduced in
a013de84e0 to work-around crashes
which only happen on Android 6.0.0.
TEST=ci
Cq-Include-Trybots: luci.dart.try:vm-aot-android-release-arm_x64-try,vm-aot-android-release-arm64c-try
Change-Id: Ib29535e66e87b17bc9b2ac72bcbb46e06a6a6964
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/472861
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Slava Egorov <vegorov@google.com>
This commit is contained in:
committed by
Commit Queue
parent
d222ed2656
commit
832a205895
@@ -115,13 +115,6 @@ OSThread::~OSThread() {
|
||||
#endif
|
||||
timeline_block_ = nullptr;
|
||||
free(name_);
|
||||
#if !defined(PRODUCT)
|
||||
if (prepared_for_interrupts_) {
|
||||
ThreadInterrupter::CleanupCurrentThreadState(thread_interrupter_state_);
|
||||
thread_interrupter_state_ = nullptr;
|
||||
prepared_for_interrupts_ = false;
|
||||
}
|
||||
#endif // !defined(PRODUCT)
|
||||
}
|
||||
|
||||
void OSThread::SetName(const char* name) {
|
||||
@@ -161,12 +154,6 @@ void OSThread::EnableThreadInterrupts() {
|
||||
ASSERT(OSThread::Current() == this);
|
||||
uintptr_t old = thread_interrupt_disabled_.fetch_sub(1u);
|
||||
if (FLAG_profiler && (old == 1)) {
|
||||
// We just decremented from 1 to 0.
|
||||
// Make sure the thread interrupter is awake.
|
||||
if (!prepared_for_interrupts_) {
|
||||
thread_interrupter_state_ = ThreadInterrupter::PrepareCurrentThread();
|
||||
prepared_for_interrupts_ = true;
|
||||
}
|
||||
ThreadInterrupter::WakeUp();
|
||||
}
|
||||
if (old == 0) {
|
||||
|
||||
@@ -297,8 +297,6 @@ class OSThread : public BaseThread {
|
||||
#if defined(DART_INCLUDE_PROFILER)
|
||||
// Thread interrupts disabled by default.
|
||||
RelaxedAtomic<uintptr_t> thread_interrupt_disabled_ = {1};
|
||||
bool prepared_for_interrupts_ = false;
|
||||
void* thread_interrupter_state_ = nullptr;
|
||||
#endif // defined(DART_INCLUDE_PROFILER)
|
||||
|
||||
Log* log_;
|
||||
|
||||
@@ -51,15 +51,6 @@ class SignalHandler : public AllStatic {
|
||||
static uintptr_t GetCStackPointer(const mcontext_t& mcontext);
|
||||
static uintptr_t GetDartStackPointer(const mcontext_t& mcontext);
|
||||
static uintptr_t GetLinkRegister(const mcontext_t& mcontext);
|
||||
|
||||
#if defined(DART_HOST_OS_ANDROID)
|
||||
// Prepare current thread for handling interrupts. Returns
|
||||
// opaque pointer to the allocated state (if any).
|
||||
static void* PrepareCurrentThread();
|
||||
|
||||
// Cleanup any state which was created by |PrepareCurrentThread|.
|
||||
static void CleanupCurrentThreadState(void* state);
|
||||
#endif
|
||||
};
|
||||
|
||||
#undef USE_SIGNAL_HANDLER_TRAMPOLINE
|
||||
|
||||
@@ -136,55 +136,6 @@ void SignalHandler::Remove() {
|
||||
RELEASE_ASSERT(r == 0);
|
||||
}
|
||||
|
||||
void* SignalHandler::PrepareCurrentThread() {
|
||||
// These constants are selected to prevent allocating alternative signal
|
||||
// stack if Bionic has already allocated large enough one for us. They
|
||||
// match current values used in Bionic[1].
|
||||
//
|
||||
// [1]: https://cs.android.com/android/platform/superproject/main/+/main:bionic/libc/bionic/pthread_internal.h;drc=3649db34a154cedb8ef53a5adbaa349970159b58;l=243
|
||||
const intptr_t kGuardPageSize = 4 * KB;
|
||||
#if defined(TARGET_ARCH_IS_64_BIT)
|
||||
const intptr_t kSigAltStackSize = 32 * KB;
|
||||
#else
|
||||
const intptr_t kSigAltStackSize = 16 * KB;
|
||||
#endif
|
||||
|
||||
// First check if the alternative signal stack is already installed and
|
||||
// large enough.
|
||||
int r;
|
||||
stack_t ss;
|
||||
memset(&ss, 0, sizeof(ss));
|
||||
r = sigaltstack(nullptr, &ss);
|
||||
ASSERT(r == 0);
|
||||
if (ss.ss_flags == 0 && ss.ss_size >= (kSigAltStackSize - kGuardPageSize)) {
|
||||
// Bionic has created a large enough stack already.
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// We are running on an older version of Android, where Bionic creates
|
||||
// stacks which are too small.
|
||||
ss.ss_sp = malloc(kSigAltStackSize);
|
||||
ss.ss_size = kSigAltStackSize;
|
||||
ss.ss_flags = 0;
|
||||
r = sigaltstack(&ss, nullptr);
|
||||
ASSERT(r == 0);
|
||||
|
||||
return ss.ss_sp;
|
||||
}
|
||||
|
||||
void SignalHandler::CleanupCurrentThreadState(void* stack) {
|
||||
if (stack != nullptr) {
|
||||
// Disable alternative stack then free allocated memory.
|
||||
stack_t ss, old_ss;
|
||||
memset(&ss, 0, sizeof(ss));
|
||||
ss.ss_flags = SS_DISABLE;
|
||||
int r = sigaltstack(&ss, &old_ss);
|
||||
ASSERT(r == 0);
|
||||
ASSERT(old_ss.ss_sp == stack);
|
||||
free(stack);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace dart
|
||||
|
||||
#endif // defined(DART_HOST_OS_ANDROID)
|
||||
|
||||
@@ -231,14 +231,6 @@ void ThreadInterrupter::ThreadMain(uword parameters) {
|
||||
}
|
||||
}
|
||||
|
||||
#if !defined(DART_HOST_OS_ANDROID)
|
||||
void* ThreadInterrupter::PrepareCurrentThread() {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void ThreadInterrupter::CleanupCurrentThreadState(void* state) {}
|
||||
#endif
|
||||
|
||||
#endif // defined(DART_INCLUDE_PROFILER)
|
||||
|
||||
} // namespace dart
|
||||
|
||||
@@ -39,13 +39,6 @@ class ThreadInterrupter : public AllStatic {
|
||||
// Interrupt a thread.
|
||||
static void InterruptThread(OSThread* thread);
|
||||
|
||||
// Prepare current thread for handling interrupts. Returns
|
||||
// opaque pointer to the allocated state (if any).
|
||||
static void* PrepareCurrentThread();
|
||||
|
||||
// Cleanup any state which was created by |PrepareCurrentThread|.
|
||||
static void CleanupCurrentThreadState(void* state);
|
||||
|
||||
private:
|
||||
static constexpr intptr_t kMaxThreads = 4096;
|
||||
static bool initialized_;
|
||||
|
||||
@@ -147,14 +147,6 @@ void ThreadInterrupter::RemoveSignalHandler() {
|
||||
SignalHandler::Remove();
|
||||
}
|
||||
|
||||
void* ThreadInterrupter::PrepareCurrentThread() {
|
||||
return SignalHandler::PrepareCurrentThread();
|
||||
}
|
||||
|
||||
void ThreadInterrupter::CleanupCurrentThreadState(void* state) {
|
||||
SignalHandler::CleanupCurrentThreadState(state);
|
||||
}
|
||||
|
||||
#endif // defined(DART_INCLUDE_PROFILER)
|
||||
|
||||
} // namespace dart
|
||||
|
||||
Reference in New Issue
Block a user