diff options
| -rw-r--r-- | runtime/arch/arm/quick_entrypoints_arm.S | 6 | ||||
| -rw-r--r-- | runtime/arch/x86/quick_entrypoints_x86.S | 16 | ||||
| -rw-r--r-- | runtime/thread_list.cc | 6 |
3 files changed, 11 insertions, 17 deletions
diff --git a/runtime/arch/arm/quick_entrypoints_arm.S b/runtime/arch/arm/quick_entrypoints_arm.S index 0797def8e8..d940164c2c 100644 --- a/runtime/arch/arm/quick_entrypoints_arm.S +++ b/runtime/arch/arm/quick_entrypoints_arm.S @@ -88,12 +88,6 @@ #endif .endm - // Ugly compile-time check, but we only have the preprocessor. -#if (FRAME_SIZE_REFS_ONLY_CALLEE_SAVE != 28 + 4) -#error "REFS_ONLY_CALLEE_SAVE_FRAME(ARM) size not as expected." -#endif -.endm - .macro RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME add sp, #4 @ bottom word holds Method* .cfi_adjust_cfa_offset -4 diff --git a/runtime/arch/x86/quick_entrypoints_x86.S b/runtime/arch/x86/quick_entrypoints_x86.S index 5851fbd804..6234f0f73a 100644 --- a/runtime/arch/x86/quick_entrypoints_x86.S +++ b/runtime/arch/x86/quick_entrypoints_x86.S @@ -228,7 +228,7 @@ END_MACRO MACRO0(DELIVER_PENDING_EXCEPTION) SETUP_SAVE_ALL_CALLEE_SAVE_FRAME ebx, ebx // save callee saves for throw // Outgoing argument set up - subl MACRO_LITERAL(12), %esp // Alignment padding + subl MACRO_LITERAL(12), %esp // alignment padding CFI_ADJUST_CFA_OFFSET(12) pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() CFI_ADJUST_CFA_OFFSET(4) @@ -254,7 +254,7 @@ MACRO2(ONE_ARG_RUNTIME_EXCEPTION, c_name, cxx_name) SETUP_SAVE_ALL_CALLEE_SAVE_FRAME ebx, ebx // save all registers as basis for long jump context mov %esp, %ecx // Outgoing argument set up - subl MACRO_LITERAL(8), %esp // alignment padding + subl MACRO_LITERAL(8), %esp // alignment padding CFI_ADJUST_CFA_OFFSET(8) pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() CFI_ADJUST_CFA_OFFSET(4) @@ -1909,10 +1909,12 @@ DEFINE_FUNCTION art_nested_signal_return END_FUNCTION art_nested_signal_return DEFINE_FUNCTION art_quick_read_barrier_mark + subl LITERAL(8), %esp // alignment padding + CFI_ADJUST_CFA_OFFSET(8) PUSH eax // pass arg1 - obj call SYMBOL(artReadBarrierMark) // artReadBarrierMark(obj) - addl LITERAL(4), %esp // pop argument - CFI_ADJUST_CFA_OFFSET(-4) + addl LITERAL(12), %esp // pop argument and remove padding + CFI_ADJUST_CFA_OFFSET(-12) ret END_FUNCTION art_quick_read_barrier_mark @@ -1927,10 +1929,12 @@ DEFINE_FUNCTION art_quick_read_barrier_slow END_FUNCTION art_quick_read_barrier_slow DEFINE_FUNCTION art_quick_read_barrier_for_root_slow + subl LITERAL(8), %esp // alignment padding + CFI_ADJUST_CFA_OFFSET(8) PUSH eax // pass arg1 - root call SYMBOL(artReadBarrierForRootSlow) // artReadBarrierForRootSlow(root) - addl LITERAL(4), %esp // pop argument - CFI_ADJUST_CFA_OFFSET(-4) + addl LITERAL(12), %esp // pop argument and remove padding + CFI_ADJUST_CFA_OFFSET(-12) ret END_FUNCTION art_quick_read_barrier_for_root_slow diff --git a/runtime/thread_list.cc b/runtime/thread_list.cc index 97bcb7d406..16ef0fff22 100644 --- a/runtime/thread_list.cc +++ b/runtime/thread_list.cc @@ -613,11 +613,7 @@ void ThreadList::SuspendAllInternal(Thread* self, PLOG(FATAL) << "futex wait failed for SuspendAllInternal()"; } } - } else { - cur_val = pending_threads.LoadRelaxed(); - CHECK_EQ(cur_val, 0); - break; - } + } // else re-check pending_threads in the next iteration (this may be a spurious wake-up). #else // Spin wait. This is likely to be slow, but on most architecture ART_USE_FUTEXES is set. #endif |