Revert "[vm/ffi] Regression test for dartbug.com/36993"
This reverts commit e1a7ef52afbbf4d8978508aa9bec554e88866a21.
Reason for revert:
Caused crash on cross-vm-linux-release-arm64: https://ci.chromium.org/p/dart/builders/ci.sandbox/cross-vm-linux-release-arm64/2036
Original change's description:
> [vm/ffi] Regression test for dartbug.com/36993
>
> Follow up of: https://dart-review.googlesource.com/c/sdk/+/103136
> Bug: https://github.com/dart-lang/sdk/issues/36993
> Change-Id: Ib5e8308b91b9b5ce5b95362dd79d12e79499a75c
> Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try, app-kernel-linux-debug-x64-try, vm-kernel-linux-debug-simdbc64-try,vm-kernel-mac-debug-simdbc64-try,vm-kernel-reload-mac-debug-simdbc64-try,vm-kernel-linux-debug-ia32-try,vm-dartkb-linux-debug-simarm64-try,vm-kernel-win-debug-x64-try
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/104820
> Commit-Queue: Daco Harkes <dacoharkes@google.com>
> Reviewed-by: Samir Jindel <sjindel@google.com>
> Auto-Submit: Daco Harkes <dacoharkes@google.com>
TBR=sjindel@google.com,dacoharkes@google.com
Change-Id: I51cb94dc4a6046bedb6be0580d0092010992c684
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: https://github.com/dart-lang/sdk/issues/36993
Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try, app-kernel-linux-debug-x64-try, vm-kernel-linux-debug-simdbc64-try, vm-kernel-mac-debug-simdbc64-try, vm-kernel-reload-mac-debug-simdbc64-try, vm-kernel-linux-debug-ia32-try, vm-dartkb-linux-debug-simarm64-try, vm-kernel-win-debug-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/105301
Reviewed-by: Samir Jindel <sjindel@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
diff --git a/runtime/vm/compiler/assembler/assembler_arm.cc b/runtime/vm/compiler/assembler/assembler_arm.cc
index 34ccfa1..dbfc95e 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm.cc
@@ -24,7 +24,6 @@
DECLARE_FLAG(bool, check_code_pointer);
DECLARE_FLAG(bool, inline_alloc);
DECLARE_FLAG(bool, precompiled_mode);
-DECLARE_FLAG(bool, use_slow_path);
namespace compiler {
@@ -561,7 +560,7 @@
LoadImmediate(state, compiler::target::Thread::native_execution_state());
StoreToOffset(kWord, state, THR, Thread::execution_state_offset());
- if (FLAG_use_slow_path || TargetCPUFeatures::arm_version() == ARMv5TE) {
+ if (TargetCPUFeatures::arm_version() == ARMv5TE) {
EnterSafepointSlowly();
} else {
Label slow_path, done, retry;
@@ -593,7 +592,7 @@
}
void Assembler::TransitionNativeToGenerated(Register addr, Register state) {
- if (FLAG_use_slow_path || TargetCPUFeatures::arm_version() == ARMv5TE) {
+ if (TargetCPUFeatures::arm_version() == ARMv5TE) {
ExitSafepointSlowly();
} else {
Label slow_path, done, retry;
@@ -1390,9 +1389,7 @@
code = 4 | (idx << 3);
break;
}
- default: {
- break;
- }
+ default: { break; }
}
EmitSIMDddd(B24 | B23 | B11 | B10 | B6, kWordPair,
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index ecdede6..d56909a 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -18,7 +18,6 @@
DECLARE_FLAG(bool, check_code_pointer);
DECLARE_FLAG(bool, inline_alloc);
DECLARE_FLAG(bool, precompiled_mode);
-DECLARE_FLAG(bool, use_slow_path);
DEFINE_FLAG(bool, use_far_branches, false, "Always use far branches");
@@ -1327,20 +1326,17 @@
StoreToOffset(state, THR, compiler::target::Thread::execution_state_offset());
Label slow_path, done, retry;
- if (!FLAG_use_slow_path) {
- movz(addr, Immediate(compiler::target::Thread::safepoint_state_offset()),
- 0);
- add(addr, THR, Operand(addr));
- Bind(&retry);
- ldxr(state, addr);
- cmp(state, Operand(Thread::safepoint_state_unacquired()));
- b(&slow_path, NE);
+ movz(addr, Immediate(compiler::target::Thread::safepoint_state_offset()), 0);
+ add(addr, THR, Operand(addr));
+ Bind(&retry);
+ ldxr(state, addr);
+ cmp(state, Operand(Thread::safepoint_state_unacquired()));
+ b(&slow_path, NE);
- movz(state, Immediate(Thread::safepoint_state_acquired()), 0);
- stxr(TMP, state, addr);
- cbz(&done, TMP); // 0 means stxr was successful.
- b(&retry);
- }
+ movz(state, Immediate(Thread::safepoint_state_acquired()), 0);
+ stxr(TMP, state, addr);
+ cbz(&done, TMP); // 0 means stxr was successful.
+ b(&retry);
Bind(&slow_path);
ldr(addr,
@@ -1355,20 +1351,17 @@
Register addr = TMP2;
Label slow_path, done, retry;
- if (!FLAG_use_slow_path) {
- movz(addr, Immediate(compiler::target::Thread::safepoint_state_offset()),
- 0);
- add(addr, THR, Operand(addr));
- Bind(&retry);
- ldxr(state, addr);
- cmp(state, Operand(Thread::safepoint_state_acquired()));
- b(&slow_path, NE);
+ movz(addr, Immediate(compiler::target::Thread::safepoint_state_offset()), 0);
+ add(addr, THR, Operand(addr));
+ Bind(&retry);
+ ldxr(state, addr);
+ cmp(state, Operand(Thread::safepoint_state_acquired()));
+ b(&slow_path, NE);
- movz(state, Immediate(Thread::safepoint_state_unacquired()), 0);
- stxr(TMP, state, addr);
- cbz(&done, TMP); // 0 means stxr was successful.
- b(&retry);
- }
+ movz(state, Immediate(Thread::safepoint_state_unacquired()), 0);
+ stxr(TMP, state, addr);
+ cbz(&done, TMP); // 0 means stxr was successful.
+ b(&retry);
Bind(&slow_path);
ldr(addr,
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.cc b/runtime/vm/compiler/assembler/assembler_ia32.cc
index aca37d1..a451572 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.cc
+++ b/runtime/vm/compiler/assembler/assembler_ia32.cc
@@ -16,7 +16,6 @@
#if !defined(DART_PRECOMPILED_RUNTIME)
DECLARE_FLAG(bool, inline_alloc);
-DECLARE_FLAG(bool, use_slow_path);
#endif
namespace compiler {
@@ -2110,17 +2109,16 @@
// Compare and swap the value at Thread::safepoint_state from unacquired to
// acquired. On success, jump to 'success'; otherwise, fallthrough.
+ pushl(EAX);
+ movl(EAX, Immediate(Thread::safepoint_state_unacquired()));
+ movl(scratch, Immediate(Thread::safepoint_state_acquired()));
+ LockCmpxchgl(Address(THR, Thread::safepoint_state_offset()), scratch);
+ movl(scratch, EAX);
+ popl(EAX);
+ cmpl(scratch, Immediate(Thread::safepoint_state_unacquired()));
+
Label done;
- if (!FLAG_use_slow_path) {
- pushl(EAX);
- movl(EAX, Immediate(Thread::safepoint_state_unacquired()));
- movl(scratch, Immediate(Thread::safepoint_state_acquired()));
- LockCmpxchgl(Address(THR, Thread::safepoint_state_offset()), scratch);
- movl(scratch, EAX);
- popl(EAX);
- cmpl(scratch, Immediate(Thread::safepoint_state_unacquired()));
- j(EQUAL, &done);
- }
+ j(EQUAL, &done);
movl(scratch,
Address(THR, compiler::target::Thread::enter_safepoint_stub_offset()));
@@ -2134,20 +2132,18 @@
void Assembler::TransitionNativeToGenerated(Register scratch) {
// Compare and swap the value at Thread::safepoint_state from acquired to
// unacquired. On success, jump to 'success'; otherwise, fallthrough.
+ pushl(EAX);
+ movl(EAX, Immediate(compiler::target::Thread::safepoint_state_acquired()));
+ movl(scratch,
+ Immediate(compiler::target::Thread::safepoint_state_unacquired()));
+ LockCmpxchgl(Address(THR, compiler::target::Thread::safepoint_state_offset()),
+ scratch);
+ movl(scratch, EAX);
+ popl(EAX);
+ cmpl(scratch, Immediate(Thread::safepoint_state_acquired()));
+
Label done;
- if (!FLAG_use_slow_path) {
- pushl(EAX);
- movl(EAX, Immediate(compiler::target::Thread::safepoint_state_acquired()));
- movl(scratch,
- Immediate(compiler::target::Thread::safepoint_state_unacquired()));
- LockCmpxchgl(
- Address(THR, compiler::target::Thread::safepoint_state_offset()),
- scratch);
- movl(scratch, EAX);
- popl(EAX);
- cmpl(scratch, Immediate(Thread::safepoint_state_acquired()));
- j(EQUAL, &done);
- }
+ j(EQUAL, &done);
movl(scratch,
Address(THR, compiler::target::Thread::exit_safepoint_stub_offset()));
diff --git a/runtime/vm/compiler/assembler/assembler_x64.cc b/runtime/vm/compiler/assembler/assembler_x64.cc
index 1e161a9..f9e725b 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64.cc
@@ -18,7 +18,6 @@
DECLARE_FLAG(bool, check_code_pointer);
DECLARE_FLAG(bool, inline_alloc);
DECLARE_FLAG(bool, precompiled_mode);
-DECLARE_FLAG(bool, use_slow_path);
#endif
namespace compiler {
@@ -177,16 +176,14 @@
// Compare and swap the value at Thread::safepoint_state from unacquired to
// acquired. If the CAS fails, go to a slow-path stub.
Label done;
- if (!FLAG_use_slow_path) {
- pushq(RAX);
- movq(RAX, Immediate(Thread::safepoint_state_unacquired()));
- movq(TMP, Immediate(Thread::safepoint_state_acquired()));
- LockCmpxchgq(Address(THR, Thread::safepoint_state_offset()), TMP);
- movq(TMP, RAX);
- popq(RAX);
- cmpq(TMP, Immediate(Thread::safepoint_state_unacquired()));
- j(EQUAL, &done);
- }
+ pushq(RAX);
+ movq(RAX, Immediate(Thread::safepoint_state_unacquired()));
+ movq(TMP, Immediate(Thread::safepoint_state_acquired()));
+ LockCmpxchgq(Address(THR, Thread::safepoint_state_offset()), TMP);
+ movq(TMP, RAX);
+ popq(RAX);
+ cmpq(TMP, Immediate(Thread::safepoint_state_unacquired()));
+ j(EQUAL, &done);
movq(TMP,
Address(THR, compiler::target::Thread::enter_safepoint_stub_offset()));
@@ -200,16 +197,14 @@
// Compare and swap the value at Thread::safepoint_state from acquired to
// unacquired. On success, jump to 'success'; otherwise, fallthrough.
Label done;
- if (!FLAG_use_slow_path) {
- pushq(RAX);
- movq(RAX, Immediate(Thread::safepoint_state_acquired()));
- movq(TMP, Immediate(Thread::safepoint_state_unacquired()));
- LockCmpxchgq(Address(THR, Thread::safepoint_state_offset()), TMP);
- movq(TMP, RAX);
- popq(RAX);
- cmpq(TMP, Immediate(Thread::safepoint_state_acquired()));
- j(EQUAL, &done);
- }
+ pushq(RAX);
+ movq(RAX, Immediate(Thread::safepoint_state_acquired()));
+ movq(TMP, Immediate(Thread::safepoint_state_unacquired()));
+ LockCmpxchgq(Address(THR, Thread::safepoint_state_offset()), TMP);
+ movq(TMP, RAX);
+ popq(RAX);
+ cmpq(TMP, Immediate(Thread::safepoint_state_acquired()));
+ j(EQUAL, &done);
movq(TMP,
Address(THR, compiler::target::Thread::exit_safepoint_stub_offset()));
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index 674623b..7eebe0f 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -2759,7 +2759,6 @@
}
extern "C" void DFLRT_EnterSafepoint(NativeArguments __unusable_) {
- CHECK_STACK_ALIGNMENT;
Thread* thread = Thread::Current();
ASSERT(thread->top_exit_frame_info() != 0);
ASSERT(thread->execution_state() == Thread::kThreadInNative);
@@ -2768,7 +2767,6 @@
DEFINE_RAW_LEAF_RUNTIME_ENTRY(EnterSafepoint, 0, false, &DFLRT_EnterSafepoint);
extern "C" void DFLRT_ExitSafepoint(NativeArguments __unusable_) {
- CHECK_STACK_ALIGNMENT;
Thread* thread = Thread::Current();
ASSERT(thread->top_exit_frame_info() != 0);
ASSERT(thread->execution_state() == Thread::kThreadInNative);
diff --git a/tests/ffi/function_test.dart b/tests/ffi/function_test.dart
index 014c66e..07f8fc2 100644
--- a/tests/ffi/function_test.dart
+++ b/tests/ffi/function_test.dart
@@ -6,7 +6,6 @@
//
// VMOptions=
// VMOptions=--deterministic --optimization-counter-threshold=10
-// VMOptions=--use-slow-path
// SharedObjects=ffi_test_functions
library FfiTest;