Revert "VIXL simulator for ART (Stage1)"
This reverts commit 48ca6a681efe1fa1cf82d8af918bf9bbfd35ae96.
Reason for revert: broken build 6685551 on aosp-master on full-eng
Bug: 161440641
Change-Id: I849fe53f56c4786f0f2a1605cbfd215559f11072
diff --git a/build/apex/art_apex_test.py b/build/apex/art_apex_test.py
index 021fd5a..1a337cb 100755
--- a/build/apex/art_apex_test.py
+++ b/build/apex/art_apex_test.py
@@ -546,8 +546,6 @@
self._checker.check_native_library('libopenjdkjvmti')
self._checker.check_native_library('libprofile')
self._checker.check_native_library('libsigchain')
- # Only on ARM/ARM64
- self._checker.check_optional_native_library('libart-simulator-container')
# Check java libraries for Managed Core Library.
self._checker.check_java_library('apache-xml')
@@ -690,8 +688,6 @@
self._checker.check_native_library('libopenjdkjvmd')
self._checker.check_native_library('libopenjdkjvmtid')
self._checker.check_native_library('libprofiled')
- # Only on ARM/ARM64
- self._checker.check_optional_native_library('libartd-simulator-container')
# Check internal libraries for Managed Core Library.
self._checker.check_native_library('libopenjdkd')
@@ -763,6 +759,7 @@
# Check ART test (internal) libraries.
self._checker.check_native_library('libart-gtest')
+ self._checker.check_native_library('libartd-simulator-container')
# Check ART test tools.
self._checker.check_executable('signal_dumper')
diff --git a/compiler/optimizing/codegen_test_utils.h b/compiler/optimizing/codegen_test_utils.h
index f873e75..9d15f1f 100644
--- a/compiler/optimizing/codegen_test_utils.h
+++ b/compiler/optimizing/codegen_test_utils.h
@@ -223,15 +223,12 @@
Expected expected) {
ASSERT_TRUE(CanExecute(target_isa)) << "Target isa is not executable.";
- // Simulator cannot run without runtime, because it needs quick entrypoints.
- if (Runtime::Current() != nullptr) {
- // Verify on simulator.
- CodeSimulatorContainer simulator(target_isa);
- if (simulator.CanSimulate()) {
- Expected result = SimulatorExecute<Expected>(simulator.Get(), f);
- if (has_result) {
- ASSERT_EQ(expected, result);
- }
+ // Verify on simulator.
+ CodeSimulatorContainer simulator(target_isa);
+ if (simulator.CanSimulate()) {
+ Expected result = SimulatorExecute<Expected>(simulator.Get(), f);
+ if (has_result) {
+ ASSERT_EQ(expected, result);
}
}
diff --git a/runtime/Android.bp b/runtime/Android.bp
index f82a623..e3200c4 100644
--- a/runtime/Android.bp
+++ b/runtime/Android.bp
@@ -410,7 +410,6 @@
export_generated_headers: ["cpp-define-generator-asm-support"],
header_libs: [
"art_cmdlineparser_headers",
- "libart_simulator_headers",
"cpp-define-generator-definitions",
"jni_platform_headers",
"libnativehelper_header_only",
@@ -437,7 +436,6 @@
name: "libart_static_base_defaults",
static_libs: [
"libartpalette",
- "libart-simulator-container",
"libbacktrace",
"libbase",
"liblog",
@@ -531,7 +529,6 @@
],
shared_libs: [
"libartbase",
- "libart-simulator-container",
"libdexfile",
// We need to eagerly load it so libdexfile_support used from libunwindstack can find it.
"libdexfile_external",
@@ -566,7 +563,6 @@
],
shared_libs: [
"libartbased",
- "libartd-simulator-container",
"libdexfiled",
// We need to eagerly preload it, so that libunwindstack can find it.
// Otherwise, it would try to load the non-debug version with dlopen.
diff --git a/runtime/art_method.cc b/runtime/art_method.cc
index 3c70a92..2db2faa 100644
--- a/runtime/art_method.cc
+++ b/runtime/art_method.cc
@@ -20,14 +20,13 @@
#include <cstddef>
#include "android-base/stringprintf.h"
+
#include "arch/context.h"
#include "art_method-inl.h"
#include "base/enums.h"
#include "base/stl_util.h"
#include "class_linker-inl.h"
#include "class_root-inl.h"
-#include "code_simulator.h"
-#include "code_simulator_container.h"
#include "debugger.h"
#include "dex/class_accessor-inl.h"
#include "dex/descriptors_names.h"
@@ -102,11 +101,6 @@
return reinterpret_cast<ArtMethod*>(GetDataPtrSize(pointer_size));
}
-bool ArtMethod::CanBeSimulated() REQUIRES_SHARED(Locks::mutator_lock_) {
- CodeSimulatorContainer* simulator = Thread::Current()->GetSimulator();
- return simulator->Get()->CanSimulate(this);
-}
-
ArtMethod* ArtMethod::FromReflectedMethod(const ScopedObjectAccessAlreadyRunnable& soa,
jobject jlr_method) {
ObjPtr<mirror::Executable> executable = soa.Decode<mirror::Executable>(jlr_method);
@@ -361,9 +355,7 @@
}
// Ensure that we won't be accidentally calling quick compiled code when -Xint.
- if (kIsDebugBuild &&
- runtime->GetInstrumentation()->IsForcedInterpretOnly() &&
- !Runtime::SimulatorMode()) {
+ if (kIsDebugBuild && runtime->GetInstrumentation()->IsForcedInterpretOnly()) {
CHECK(!runtime->UseJitCompilation());
const void* oat_quick_code =
(IsNative() || !IsInvokable() || IsProxyMethod() || IsObsolete())
@@ -373,10 +365,7 @@
<< "Don't call compiled code when -Xint " << PrettyMethod();
}
- if (Runtime::SimulatorMode() && CanBeSimulated()) {
- CodeSimulatorContainer* simulator = Thread::Current()->GetSimulator();
- simulator->Get()->Invoke(this, args, args_size, self, result, shorty, IsStatic());
- } else if (!IsStatic()) {
+ if (!IsStatic()) {
(*art_quick_invoke_stub)(this, args, args_size, self, result, shorty);
} else {
(*art_quick_invoke_static_stub)(this, args, args_size, self, result, shorty);
@@ -581,10 +570,6 @@
return nullptr;
}
- if (Runtime::SimulatorMode()) {
- return nullptr;
- }
-
Runtime* runtime = Runtime::Current();
const void* existing_entry_point = GetEntryPointFromQuickCompiledCode();
CHECK(existing_entry_point != nullptr) << PrettyMethod() << "@" << this;
diff --git a/runtime/art_method.h b/runtime/art_method.h
index 7f6004a..16b4648 100644
--- a/runtime/art_method.h
+++ b/runtime/art_method.h
@@ -384,8 +384,6 @@
ClearAccessFlags(kAccSkipAccessChecks);
}
- bool CanBeSimulated() REQUIRES_SHARED(Locks::mutator_lock_);
-
// Returns true if this method could be overridden by a default method.
bool IsOverridableByDefaultMethod() REQUIRES_SHARED(Locks::mutator_lock_);
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index 3ea4a8d..8bf38d3 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -2185,14 +2185,9 @@
header.VisitPackedArtMethods([&](ArtMethod& method) REQUIRES_SHARED(Locks::mutator_lock_) {
if (!method.IsRuntimeMethod()) {
DCHECK(method.GetDeclaringClass() != nullptr);
- if (!method.IsResolutionMethod()) {
- if (!method.IsNative()) {
- method.SetEntryPointFromQuickCompiledCodePtrSize(GetQuickToInterpreterBridge(),
- image_pointer_size_);
- } else if (Runtime::SimulatorMode()) {
- method.SetEntryPointFromQuickCompiledCodePtrSize(GetQuickGenericJniStub(),
- image_pointer_size_);
- }
+ if (!method.IsNative() && !method.IsResolutionMethod()) {
+ method.SetEntryPointFromQuickCompiledCodePtrSize(GetQuickToInterpreterBridge(),
+ image_pointer_size_);
}
}
}, space->Begin(), image_pointer_size_);
@@ -3559,10 +3554,6 @@
return true;
}
- if (Runtime::SimulatorMode()) {
- return !method->CanBeSimulated();
- }
-
Runtime* runtime = Runtime::Current();
instrumentation::Instrumentation* instr = runtime->GetInstrumentation();
if (instr->InterpretOnly()) {
@@ -3680,7 +3671,7 @@
}
// Check whether the method is native, in which case it's generic JNI.
- if ((Runtime::SimulatorMode() || quick_code == nullptr) && method->IsNative()) {
+ if (quick_code == nullptr && method->IsNative()) {
quick_code = GetQuickGenericJniStub();
} else if (ShouldUseInterpreterEntrypoint(method, quick_code)) {
// Use interpreter entry point.
@@ -3740,7 +3731,7 @@
// Note: this mimics the logic in image_writer.cc that installs the resolution
// stub only if we have compiled code and the method needs a class initialization
// check.
- if (quick_code == nullptr || Runtime::SimulatorMode()) {
+ if (quick_code == nullptr) {
method->SetEntryPointFromQuickCompiledCode(
method->IsNative() ? GetQuickGenericJniStub() : GetQuickToInterpreterBridge());
} else if (enter_interpreter) {
diff --git a/runtime/elf_file.cc b/runtime/elf_file.cc
index 88992f1..6bd1c8f 100644
--- a/runtime/elf_file.cc
+++ b/runtime/elf_file.cc
@@ -31,7 +31,6 @@
#include "base/utils.h"
#include "elf/elf_utils.h"
#include "elf_file_impl.h"
-#include "runtime.h"
namespace art {
@@ -1102,9 +1101,9 @@
if (executable) {
InstructionSet elf_ISA = GetInstructionSetFromELF(GetHeader().e_machine, GetHeader().e_flags);
- if (elf_ISA != Runtime::GetQuickCodeISA()) {
+ if (elf_ISA != kRuntimeISA) {
std::ostringstream oss;
- oss << "Expected ISA " << Runtime::GetQuickCodeISA() << " but found " << elf_ISA;
+ oss << "Expected ISA " << kRuntimeISA << " but found " << elf_ISA;
*error_msg = oss.str();
return false;
}
diff --git a/runtime/entrypoints_order_test.cc b/runtime/entrypoints_order_test.cc
index e3f0d00..52c4142 100644
--- a/runtime/entrypoints_order_test.cc
+++ b/runtime/entrypoints_order_test.cc
@@ -136,12 +136,12 @@
EXPECT_OFFSET_DIFFP(Thread, tlsPtr_, thread_local_mark_stack, async_exception, sizeof(void*));
EXPECT_OFFSET_DIFFP(Thread, tlsPtr_, async_exception, top_reflective_handle_scope,
sizeof(void*));
- EXPECT_OFFSET_DIFFP(Thread, tlsPtr_, top_reflective_handle_scope, simulator, sizeof(void*));
// The first field after tlsPtr_ is forced to a 16 byte alignment so it might have some space.
auto offset_tlsptr_end = OFFSETOF_MEMBER(Thread, tlsPtr_) +
sizeof(decltype(reinterpret_cast<Thread*>(16)->tlsPtr_));
- CHECKED(offset_tlsptr_end - OFFSETOF_MEMBER(Thread, tlsPtr_.simulator) == sizeof(void*),
- "simulator last field");
+ CHECKED(offset_tlsptr_end - OFFSETOF_MEMBER(Thread, tlsPtr_.top_reflective_handle_scope) ==
+ sizeof(void*),
+ "async_exception last field");
}
void CheckJniEntryPoints() {
diff --git a/runtime/interpreter/mterp/mterp.cc b/runtime/interpreter/mterp/mterp.cc
index 01a6213..c6d3258 100644
--- a/runtime/interpreter/mterp/mterp.cc
+++ b/runtime/interpreter/mterp/mterp.cc
@@ -150,9 +150,6 @@
runtime->IsStarted() &&
!runtime->IsAotCompiler() &&
!runtime->GetInstrumentation()->IsActive() &&
- // In simulator mode, mterp and its fast path are avoided to ensure every
- // called method can go through ArtMethod::Invoke().
- !Runtime::SimulatorMode() &&
// mterp only knows how to deal with the normal exits. It cannot handle any of the
// non-standard force-returns.
!runtime->AreNonStandardExitsEnabled() &&
diff --git a/runtime/native/java_lang_VMClassLoader.cc b/runtime/native/java_lang_VMClassLoader.cc
index 27dd970..11e02a2 100644
--- a/runtime/native/java_lang_VMClassLoader.cc
+++ b/runtime/native/java_lang_VMClassLoader.cc
@@ -143,10 +143,8 @@
const DexFile* dex_file = path[i];
// For multidex locations, e.g., x.jar!classes2.dex, we want to look into x.jar.
- std::string location(DexFileLoader::GetBaseLocation(dex_file->GetLocation()));
- if (Runtime::SimulatorMode()) {
- location = getenv("ANDROID_PRODUCT_OUT") + location;
- }
+ const std::string location(DexFileLoader::GetBaseLocation(dex_file->GetLocation()));
+
ScopedLocalRef<jstring> javaPath(env, env->NewStringUTF(location.c_str()));
if (javaPath.get() == nullptr) {
DCHECK(env->ExceptionCheck());
diff --git a/runtime/oat_file_assistant.cc b/runtime/oat_file_assistant.cc
index de3d878..9c169e6 100644
--- a/runtime/oat_file_assistant.cc
+++ b/runtime/oat_file_assistant.cc
@@ -111,9 +111,9 @@
dex_location_.assign(dex_location);
- if (load_executable_ && isa != Runtime::GetQuickCodeISA()) {
+ if (load_executable_ && isa != kRuntimeISA) {
LOG(WARNING) << "OatFileAssistant: Load executable specified, "
- << "but isa is not executable isa. Will not attempt to load executable.";
+ << "but isa is not kRuntimeISA. Will not attempt to load executable.";
load_executable_ = false;
}
diff --git a/runtime/oat_file_manager.cc b/runtime/oat_file_manager.cc
index 1480c1d..85992ea 100644
--- a/runtime/oat_file_manager.cc
+++ b/runtime/oat_file_manager.cc
@@ -236,10 +236,10 @@
std::unique_ptr<ClassLoaderContext> context(
ClassLoaderContext::CreateContextForClassLoader(class_loader, dex_elements));
- OatFileAssistant oat_file_assistant(dex_location,
- Runtime::GetQuickCodeISA(),
- runtime->GetOatFilesExecutable(),
- only_use_system_oat_files_);
+ OatFileAssistant oat_file_assistant(dex_location,
+ kRuntimeISA,
+ runtime->GetOatFilesExecutable(),
+ only_use_system_oat_files_);
// Get the oat file on disk.
std::unique_ptr<const OatFile> oat_file(oat_file_assistant.GetBestOatFile().release());
diff --git a/runtime/parsed_options.cc b/runtime/parsed_options.cc
index 073ccfb..5bb9ed6 100644
--- a/runtime/parsed_options.cc
+++ b/runtime/parsed_options.cc
@@ -391,11 +391,6 @@
.WithType<bool>()
.WithValueMap({{"false", false}, {"true", true}})
.IntoKey(M::PerfettoHprof)
- .Define("--simulate-isa=_")
- .WithType<InstructionSet>()
- .WithValueMap({{"none", InstructionSet::kNone},
- {"arm64", InstructionSet::kArm64}})
- .IntoKey(M::SimulateInstructionSet)
.Ignore({
"-ea", "-da", "-enableassertions", "-disableassertions", "--runtime-arg", "-esa",
"-dsa", "-enablesystemassertions", "-disablesystemassertions", "-Xrs", "-Xint:_",
@@ -725,8 +720,6 @@
// "requires -Xexperimental:agent, some features might not be supported)\n");
UsageMessage(stream, " -agentpath:library_path=options (Experimental feature, requires\n"
" -Xexperimental:agent, some features might not be supported)\n");
- UsageMessage(stream, " --simulate-isa=isa \n"
- " ('none', 'arm', 'arm64', 'x64', 'x86_64')\n");
UsageMessage(stream, "\n");
UsageMessage(stream, "The following extended options are supported:\n");
diff --git a/runtime/parsed_options_test.cc b/runtime/parsed_options_test.cc
index 60a0837..8873eb9 100644
--- a/runtime/parsed_options_test.cc
+++ b/runtime/parsed_options_test.cc
@@ -109,7 +109,6 @@
EXPECT_FALSE(VLOG_IS_ON(startup));
EXPECT_FALSE(VLOG_IS_ON(third_party_jni));
EXPECT_FALSE(VLOG_IS_ON(threads));
- EXPECT_PARSED_EQ(InstructionSet::kNone, Opt::SimulateInstructionSet);
auto&& properties_list = map.GetOrDefault(Opt::PropertiesList);
ASSERT_EQ(2U, properties_list.size());
@@ -182,18 +181,4 @@
}
}
-TEST_F(ParsedOptionsTest, ParsedOptionSimulateInstructionSet) {
- RuntimeOptions options;
- options.push_back(std::make_pair("--simulate-isa=arm64", nullptr));
-
- RuntimeArgumentMap map;
- bool parsed = ParsedOptions::Parse(options, false, &map);
- ASSERT_TRUE(parsed);
- ASSERT_NE(0u, map.Size());
-
- using Opt = RuntimeArgumentMap;
-
- EXPECT_PARSED_EQ(InstructionSet::kArm64, Opt::SimulateInstructionSet);
-}
-
} // namespace art
diff --git a/runtime/runtime.cc b/runtime/runtime.cc
index 79b51da..fc1a3c8 100644
--- a/runtime/runtime.cc
+++ b/runtime/runtime.cc
@@ -69,7 +69,6 @@
#include "base/utils.h"
#include "class_linker-inl.h"
#include "class_root-inl.h"
-#include "code_simulator_container.h"
#include "compiler_callbacks.h"
#include "debugger.h"
#include "dex/art_dex_file_loader.h"
@@ -231,7 +230,6 @@
imt_conflict_method_(nullptr),
imt_unimplemented_method_(nullptr),
instruction_set_(InstructionSet::kNone),
- simulate_isa_(InstructionSet::kNone),
compiler_callbacks_(nullptr),
is_zygote_(false),
is_primary_zygote_(false),
@@ -1342,9 +1340,7 @@
fingerprint_ = runtime_options.ReleaseOrDefault(Opt::Fingerprint);
- if (runtime_options.GetOrDefault(Opt::Interpret) ||
- runtime_options.GetOrDefault(Opt::SimulateInstructionSet) != InstructionSet::kNone) {
- // Both -Xint and --simulate-isa options force interpreter only.
+ if (runtime_options.GetOrDefault(Opt::Interpret)) {
GetInstrumentation()->ForceInterpretOnly();
}
@@ -1380,12 +1376,6 @@
image_space_loading_order_ = runtime_options.GetOrDefault(Opt::ImageSpaceLoadingOrder);
- instruction_set_ = runtime_options.GetOrDefault(Opt::ImageInstructionSet);
- SetInstructionSet(instruction_set_);
-
- InstructionSet simulate_isa = runtime_options.GetOrDefault(Opt::SimulateInstructionSet);
- SetSimulateISA(simulate_isa);
-
heap_ = new gc::Heap(runtime_options.GetOrDefault(Opt::MemoryInitialSize),
runtime_options.GetOrDefault(Opt::HeapGrowthLimit),
runtime_options.GetOrDefault(Opt::HeapMinFree),
@@ -1398,7 +1388,7 @@
GetBootClassPath(),
GetBootClassPathLocations(),
image_location_,
- GetQuickCodeISA(),
+ instruction_set_,
// Override the collector type to CC if the read barrier config.
kUseReadBarrier ? gc::kCollectorTypeCC : xgc_option.collector_type_,
kUseReadBarrier ? BackgroundGcOption(gc::kCollectorTypeCCBackground)
@@ -1626,6 +1616,7 @@
}
// TODO: Should we move the following to InitWithoutImage?
+ SetInstructionSet(instruction_set_);
for (uint32_t i = 0; i < kCalleeSaveSize; i++) {
CalleeSaveType type = CalleeSaveType(i);
if (!HasCalleeSaveMethod(type)) {
@@ -2376,24 +2367,6 @@
}
}
-InstructionSet Runtime::GetQuickCodeISA() {
- Runtime* runtime = Runtime::Current();
- if (runtime == nullptr) {
- return kRuntimeISA;
- }
-
- // In simulator mode, image ISA should align with simulator.
- if (SimulatorMode()) {
- return runtime->GetSimulateISA();
- }
-
- // Otherwise, image ISA should align with runtime.
- if (runtime->GetInstructionSet() == InstructionSet::kNone) {
- return kRuntimeISA;
- }
- return runtime->GetInstructionSet();
-}
-
void Runtime::SetInstructionSet(InstructionSet instruction_set) {
instruction_set_ = instruction_set;
switch (instruction_set) {
@@ -2416,16 +2389,6 @@
instruction_set_ = InstructionSet::kNone;
}
-void Runtime::SetSimulateISA(InstructionSet instruction_set) {
- DCHECK(GetInstructionSet() != InstructionSet::kNone) << "Simulator ISA set before runtime ISA.";
- if (instruction_set == InstructionSet::kNone) {
- return;
- }
- CodeSimulatorContainer simulator(instruction_set);
- DCHECK(simulator.CanSimulate()) << "Fail to set simulator isa: " << instruction_set;
- simulate_isa_ = instruction_set;
-}
-
void Runtime::SetCalleeSaveMethod(ArtMethod* method, CalleeSaveType type) {
DCHECK_LT(static_cast<uint32_t>(type), kCalleeSaveSize);
CHECK(method != nullptr);
@@ -2662,12 +2625,8 @@
// Make the dex2oat instruction set match that of the launching runtime. If we have multiple
// architecture support, dex2oat may be compiled as a different instruction-set than that
// currently being executed.
- // In simulator mode, the dex2oat instruction set should match the simulator, so that we can
- // compile for simulating ISA.
- InstructionSet target_isa =
- (simulate_isa_ == InstructionSet::kNone) ? kRuntimeISA : simulate_isa_;
std::string instruction_set("--instruction-set=");
- instruction_set += GetInstructionSetString(target_isa);
+ instruction_set += GetInstructionSetString(kRuntimeISA);
argv->push_back(instruction_set);
if (InstructionSetFeatures::IsRuntimeDetectionSupported()) {
diff --git a/runtime/runtime.h b/runtime/runtime.h
index 0ee280c..594edaa 100644
--- a/runtime/runtime.h
+++ b/runtime/runtime.h
@@ -461,10 +461,6 @@
return OFFSETOF_MEMBER(Runtime, callee_save_methods_[static_cast<size_t>(type)]);
}
- // There are different kinds of ISAs in runtime:
- // 1) Runtime ISA: for compiler, frame information
- // 2) Quick code ISA: for image loading
- // 3) Simulate ISA: for simulator
InstructionSet GetInstructionSet() const {
return instruction_set_;
}
@@ -472,26 +468,6 @@
void SetInstructionSet(InstructionSet instruction_set);
void ClearInstructionSet();
- static InstructionSet GetQuickCodeISA();
-
- void SetSimulateISA(InstructionSet instruction_set);
-
- InstructionSet GetSimulateISA() const {
- return simulate_isa_;
- }
-
- static inline bool SimulatorMode() {
- if (kIsDebugBuild) {
- Runtime* runtime = Current();
- // Disable simulator for compiler.
- if (runtime == nullptr || runtime->IsCompiler()) {
- return false;
- }
- return runtime->GetSimulateISA() != InstructionSet::kNone;
- }
- return false;
- }
-
void SetCalleeSaveMethod(ArtMethod* method, CalleeSaveType type);
void ClearCalleeSaveMethods();
@@ -1070,10 +1046,6 @@
InstructionSet instruction_set_;
- // The ISA of code we are simulating. If it is not kNone, we will run the code with that ISA and
- // run with a simulator. The code might come from JIT compiler or a pre-built image.
- InstructionSet simulate_isa_;
-
CompilerCallbacks* compiler_callbacks_;
bool is_zygote_;
bool is_primary_zygote_;
diff --git a/runtime/runtime_options.def b/runtime/runtime_options.def
index ce5a16b..a342973 100644
--- a/runtime/runtime_options.def
+++ b/runtime/runtime_options.def
@@ -139,8 +139,6 @@
RUNTIME_OPTIONS_KEY (std::list<ti::AgentSpec>, AgentLib) // -agentlib:<libname>=<options>
RUNTIME_OPTIONS_KEY (std::list<ti::AgentSpec>, AgentPath) // -agentpath:<libname>=<options>
RUNTIME_OPTIONS_KEY (std::vector<Plugin>, Plugins) // -Xplugin:<library>
-// Simulator is disabled by default.
-RUNTIME_OPTIONS_KEY (InstructionSet, SimulateInstructionSet, InstructionSet::kNone) // --simulate-isa=_
// Not parse-able from command line, but can be provided explicitly.
// (Do not add anything here that is defined in ParsedOptions::MakeParser)
diff --git a/runtime/thread.cc b/runtime/thread.cc
index b71c41e..21b8d05 100644
--- a/runtime/thread.cc
+++ b/runtime/thread.cc
@@ -57,8 +57,6 @@
#include "base/utils.h"
#include "class_linker-inl.h"
#include "class_root-inl.h"
-#include "code_simulator.h"
-#include "code_simulator_container.h"
#include "debugger.h"
#include "dex/descriptors_names.h"
#include "dex/dex_file-inl.h"
@@ -166,15 +164,6 @@
UpdateReadBarrierEntrypoints(&tlsPtr_.quick_entrypoints, /* is_active= */ is_marking);
}
-void Thread::InitSimulator() {
- tlsPtr_.simulator = new CodeSimulatorContainer(Runtime::Current()->GetSimulateISA());
-}
-
-CodeSimulatorContainer* Thread::GetSimulator() {
- DCHECK(tlsPtr_.simulator != nullptr);
- return tlsPtr_.simulator;
-}
-
void Thread::InitTlsEntryPoints() {
ScopedTrace trace("InitTlsEntryPoints");
// Insert a placeholder so we can easily tell if we call an unimplemented entry point.
@@ -185,14 +174,6 @@
*it = reinterpret_cast<uintptr_t>(UnimplementedEntryPoint);
}
InitEntryPoints(&tlsPtr_.jni_entrypoints, &tlsPtr_.quick_entrypoints);
-
- // Initialize entry points for simulator because some entry points are not needed in normal run,
- // but required in simulator mode.
- if (Runtime::SimulatorMode()) {
- CodeSimulatorContainer *simulator = GetSimulator();
- DCHECK(simulator->CanSimulate());
- simulator->Get()->InitEntryPoints(&tlsPtr_.quick_entrypoints);
- }
}
void Thread::ResetQuickAllocEntryPointsForThread() {
@@ -953,9 +934,6 @@
return false;
}
InitCpu();
- if (Runtime::SimulatorMode()) {
- InitSimulator();
- }
InitTlsEntryPoints();
RemoveSuspendTrigger();
InitCardTable();
@@ -2510,10 +2488,6 @@
CleanupCpu();
}
- if (tlsPtr_.simulator != nullptr) {
- delete tlsPtr_.simulator;
- }
-
delete tlsPtr_.instrumentation_stack;
delete tlsPtr_.name;
delete tlsPtr_.deps_or_stack_trace_sample.stack_trace_sample;
diff --git a/runtime/thread.h b/runtime/thread.h
index c2416e6..d2833b0 100644
--- a/runtime/thread.h
+++ b/runtime/thread.h
@@ -49,8 +49,6 @@
namespace art {
-class CodeSimulatorContainer;
-
namespace gc {
namespace accounting {
template<class T> class AtomicStack;
@@ -194,8 +192,6 @@
// TODO: mark as PURE so the compiler may coalesce and remove?
static Thread* Current();
- CodeSimulatorContainer* GetSimulator();
-
// On a runnable thread, check for pending thread suspension request and handle if pending.
void AllowThreadSuspension() REQUIRES_SHARED(Locks::mutator_lock_);
@@ -1423,7 +1419,6 @@
REQUIRES(Locks::runtime_shutdown_lock_);
void InitCardTable();
void InitCpu();
- void InitSimulator();
void CleanupCpu();
void InitTlsEntryPoints();
void InitTid();
@@ -1688,7 +1683,7 @@
thread_local_objects(0), mterp_current_ibase(nullptr), thread_local_alloc_stack_top(nullptr),
thread_local_alloc_stack_end(nullptr),
flip_function(nullptr), method_verifier(nullptr), thread_local_mark_stack(nullptr),
- async_exception(nullptr), top_reflective_handle_scope(nullptr), simulator(nullptr) {
+ async_exception(nullptr), top_reflective_handle_scope(nullptr) {
std::fill(held_mutexes, held_mutexes + kLockLevelCount, nullptr);
}
@@ -1847,9 +1842,6 @@
// Top of the linked-list for reflective-handle scopes or null if none.
BaseReflectiveHandleScope* top_reflective_handle_scope;
-
- // A pointer to the simulator container.
- CodeSimulatorContainer* simulator;
} tlsPtr_;
// Small thread-local cache to be used from the interpreter.
diff --git a/simulator/Android.bp b/simulator/Android.bp
index fe97850..1410444 100644
--- a/simulator/Android.bp
+++ b/simulator/Android.bp
@@ -18,15 +18,12 @@
name: "libart_simulator_headers",
host_supported: true,
export_include_dirs: ["include"],
- apex_available: [
- "com.android.art.release",
- "com.android.art.debug",
- ],
}
cc_defaults {
name: "libart_simulator_defaults",
host_supported: true,
+ device_supported: false,
defaults: ["art_defaults"],
srcs: [
@@ -39,12 +36,7 @@
],
cflags: ["-DVIXL_INCLUDE_SIMULATOR_AARCH64"],
- header_libs: [
- "jni_platform_headers",
- "libdexfile_all_headers",
- "libart_runtime_headers_ndk",
- "libart_simulator_headers",
- ],
+ header_libs: ["libart_simulator_headers"],
}
art_cc_library {
@@ -81,12 +73,8 @@
shared_libs: [
"libbase",
],
- header_libs: [
- "jni_platform_headers",
- "libdexfile_all_headers",
- "libart_runtime_headers_ndk",
- "libart_simulator_headers",
- ],
+
+ header_libs: ["libart_simulator_headers"],
export_include_dirs: ["."], // TODO: Consider a proper separation.
}
@@ -95,10 +83,7 @@
defaults: ["libart_simulator_container_defaults"],
shared_libs: [
"libartbase",
- ],
- apex_available: [
- "com.android.art.release",
- "com.android.art.debug",
+ "libart",
],
}
@@ -110,6 +95,7 @@
],
shared_libs: [
"libartbased",
+ "libartd",
],
apex_available: [
"com.android.art.debug",
diff --git a/simulator/code_simulator_arm64.cc b/simulator/code_simulator_arm64.cc
index 7521d18..a64bd0b 100644
--- a/simulator/code_simulator_arm64.cc
+++ b/simulator/code_simulator_arm64.cc
@@ -16,178 +16,13 @@
#include "code_simulator_arm64.h"
-#include "art_method.h"
-#include "base/logging.h"
-#include "class_linker.h"
-#include "thread.h"
-
-#include <string>
-#include <cstring>
-#include <math.h>
-
-static constexpr bool kEnableSimulateMethodAllowList = false;
-
-static const std::vector<std::string> simulate_method_allow_list = {
- // Add any run test method you want to simulate here, for example:
- // test/684-checker-simd-dotprod
- "other.TestByte.testDotProdComplex",
- "other.TestByte.testDotProdComplexSignedCastedToUnsigned",
- "other.TestByte.testDotProdComplexUnsigned",
- "other.TestByte.testDotProdComplexUnsignedCastedToSigned",
-};
-static const std::vector<std::string> avoid_simulation_method_list = {
- // For now, we can focus on simulating run test methods called by main().
- "main",
- "<clinit>",
- // Currently, we don't simulate Java library methods.
- "java.",
- "sun.",
- "dalvik.",
- "android.",
- "libcore.",
-};
+#include <android-base/logging.h>
using namespace vixl::aarch64; // NOLINT(build/namespaces)
namespace art {
namespace arm64 {
- // Special registers defined in asm_support_arm64.s.
- // Register holding Thread::current().
- static const unsigned kSelf = 19;
- // Marking register.
- static const unsigned kMR = 20;
- // Frame Pointer.
- static const unsigned kFp = 29;
- // Stack Pointer.
- static const unsigned kSp = 31;
-
-class CustomSimulator final: public Simulator {
- public:
- explicit CustomSimulator(Decoder* decoder) : Simulator(decoder), qpoints_(nullptr) {}
- virtual ~CustomSimulator() {}
-
- void SetEntryPoints(QuickEntryPoints* qpoints) {
- DCHECK(qpoints_ == nullptr);
- qpoints_ = qpoints;
- }
-
- template <typename R, typename... P>
- struct RuntimeCallHelper {
- static void Execute(Simulator* simulator, R (*f)(P...)) {
- simulator->RuntimeCallNonVoid(f);
- }
- };
-
- // Partial specialization when the return type is `void`.
- template <typename... P>
- struct RuntimeCallHelper<void, P...> {
- static void Execute(Simulator* simulator, void (*f)(P...)) {
- simulator->RuntimeCallVoid(f);
- }
- };
-
- // Override Simulator::VisitUnconditionalBranchToRegister to handle any runtime invokes
- // which can be simulated.
- void VisitUnconditionalBranchToRegister(const vixl::aarch64::Instruction* instr) override
- REQUIRES_SHARED(Locks::mutator_lock_) {
- DCHECK(qpoints_ != nullptr);
- if (instr->Mask(UnconditionalBranchToRegisterMask) == BR) {
- // The thunk mechansim code (LDR, BR) is generated by
- // CodeGeneratorARM64::InvokeRuntime()
-
- // Conceptually, the control flow works as if:
- // #########################################################################
- // Compiled Method (arm64) | THUNK (arm64) | Runtime Function (x86_64)
- // #########################################################################
- // BL kQuickTestSuspend@thunk -> LDR x16, [...]
- // BR x16 -------> art_quick_test_suspend
- // ^ (x86 ret)
- // | |
- // +---------------------------------------------------+
-
- // Actual control flow: arm64 code <-> x86_64 runtime, intercepted by simulator.
- // ##########################################################################
- // arm64 code in simulator | | ART Runtime (x86_64)
- // ##########################################################################
- // BL kQuickTestSuspend@thunk -> LDR x16, [...]
- // BR x16 ---> simulator ---> art_quick_test_suspend
- // ^ (x86 call) (x86 ret)
- // | |
- // +------------------------------------- simulator <-------------+
- // (ARM ret)
- //
-
- const void* target = reinterpret_cast<const void*>(ReadXRegister(instr->GetRn()));
- auto lr = vixl::aarch64::Instruction::Cast(get_lr());
- if (target == reinterpret_cast<const void*>(qpoints_->pTestSuspend)) {
- RuntimeCallHelper<void>::Execute(this, qpoints_->pTestSuspend);
- } else {
- // For branching to fixed addresses or labels, nothing has changed.
- Simulator::VisitUnconditionalBranchToRegister(instr);
- return;
- }
- WritePc(lr); // aarch64 return
- return;
- } else if (instr->Mask(UnconditionalBranchToRegisterMask) == BLR) {
- const void* target = reinterpret_cast<const void*>(ReadXRegister(instr->GetRn()));
- auto lr = instr->GetNextInstruction();
- if (target == reinterpret_cast<const void*>(qpoints_->pAllocObjectInitialized)) {
- RuntimeCallHelper<void *, mirror::Class *>::Execute(this, qpoints_->pAllocObjectInitialized);
- } else if (target == reinterpret_cast<const void*>(qpoints_->pAllocArrayResolved8) ||
- target == reinterpret_cast<const void*>(qpoints_->pAllocArrayResolved16) ||
- target == reinterpret_cast<const void*>(qpoints_->pAllocArrayResolved32) ||
- target == reinterpret_cast<const void*>(qpoints_->pAllocArrayResolved64)) {
- RuntimeCallHelper<void *, mirror::Class *, int32_t>::Execute(this,
- reinterpret_cast<void *(*)(art::mirror::Class *, int)>(const_cast<void*>(target)));
- } else {
- // For branching to fixed addresses or labels, nothing has changed.
- Simulator::VisitUnconditionalBranchToRegister(instr);
- return;
- }
- WritePc(lr); // aarch64 return
- return;
- }
- Simulator::VisitUnconditionalBranchToRegister(instr);
- return;
- }
-
- // TODO(simulator): Maybe integrate these into vixl?
- int64_t get_sp() const {
- return ReadRegister<int64_t>(kSp, Reg31IsStackPointer);
- }
-
- int64_t get_x(int32_t n) const {
- return ReadRegister<int64_t>(n, Reg31IsStackPointer);
- }
-
- int64_t get_lr() const {
- return ReadRegister<int64_t>(kLinkRegCode);
- }
-
- int64_t get_fp() const {
- return ReadXRegister(kFp);
- }
-
- private:
- QuickEntryPoints* qpoints_;
-};
-
-static const void* GetQuickCodeFromArtMethod(ArtMethod* method)
- REQUIRES_SHARED(Locks::mutator_lock_) {
- DCHECK(!method->IsAbstract());
- DCHECK(!method->IsNative());
- DCHECK(Runtime::SimulatorMode());
- DCHECK(method->CanBeSimulated());
-
- ClassLinker* linker = Runtime::Current()->GetClassLinker();
- const void* code = method->GetOatMethodQuickCode(linker->GetImagePointerSize());
- if (code != nullptr) {
- return code;
- }
- return nullptr;
-}
-
// VIXL has not been tested on 32bit architectures, so Simulator is not always
// available. To avoid linker error on these architectures, we check if we can simulate
// in the beginning of following methods, with compile time constant `kCanSimulate`.
@@ -205,11 +40,7 @@
: CodeSimulator(), decoder_(nullptr), simulator_(nullptr) {
DCHECK(kCanSimulate);
decoder_ = new Decoder();
- simulator_ = new CustomSimulator(decoder_);
- if (VLOG_IS_ON(simulator)) {
- simulator_->SetColouredTrace(true);
- simulator_->SetTraceParameters(LOG_DISASM | LOG_WRITE);
- }
+ simulator_ = new Simulator(decoder_);
}
CodeSimulatorArm64::~CodeSimulatorArm64() {
@@ -220,7 +51,7 @@
void CodeSimulatorArm64::RunFrom(intptr_t code_buffer) {
DCHECK(kCanSimulate);
- simulator_->RunFrom(reinterpret_cast<const vixl::aarch64::Instruction*>(code_buffer));
+ simulator_->RunFrom(reinterpret_cast<const Instruction*>(code_buffer));
}
bool CodeSimulatorArm64::GetCReturnBool() const {
@@ -238,208 +69,5 @@
return simulator_->ReadXRegister(0);
}
-void CodeSimulatorArm64::Invoke(ArtMethod* method, uint32_t* args, uint32_t args_size_in_bytes,
- Thread* self, JValue* result, const char* shorty, bool isStatic)
- REQUIRES_SHARED(Locks::mutator_lock_) {
- DCHECK(kCanSimulate);
- // ARM64 simulator only supports 64-bit host machines. Because:
- // 1) vixl simulator is not tested on 32-bit host machines.
- // 2) Data structures in ART have different representations for 32/64-bit machines.
- DCHECK(sizeof(args) == sizeof(int64_t));
-
- if (VLOG_IS_ON(simulator)) {
- VLOG(simulator) << "\nVIXL_SIMULATOR simulate: " << method->PrettyMethod();
- }
-
- InitRegistersForInvokeStub(method, args, args_size_in_bytes, self, result, shorty, isStatic);
-
- int64_t quick_code = reinterpret_cast<int64_t>(GetQuickCodeFromArtMethod(method));
- RunFrom(quick_code);
-
- GetResultFromShorty(result, shorty);
-
- // Ensure simulation state is not carried over from one method to another.
- simulator_->ResetState();
-
- // Reset stack pointer.
- simulator_->WriteSp(saved_sp_);
-}
-
-void CodeSimulatorArm64::GetResultFromShorty(JValue* result, const char* shorty) {
- switch (shorty[0]) {
- case 'V':
- return;
- case 'D':
- result->SetD(simulator_->ReadDRegister(0));
- return;
- case 'F':
- result->SetF(simulator_->ReadSRegister(0));
- return;
- default:
- // Just store x0. Doesn't matter if it is 64 or 32 bits.
- result->SetJ(simulator_->ReadXRegister(0));
- return;
- }
-}
-
-// Init registers for invoking art_quick_invoke_stub:
-//
-// extern"C" void art_quick_invoke_stub(ArtMethod *method, x0
-// uint32_t *args, x1
-// uint32_t argsize, w2
-// Thread *self, x3
-// JValue *result, x4
-// char *shorty); x5
-//
-// See art/runtime/arch/arm64/quick_entrypoints_arm64.S
-//
-// +----------------------+
-// | |
-// | C/C++ frame |
-// | LR'' |
-// | FP'' | <- SP'
-// +----------------------+
-// +----------------------+
-// | X28 |
-// | : |
-// | X19 (*self) |
-// | SP' | Saved registers
-// | X5 (*shorty) |
-// | X4 (*result) |
-// | LR' |
-// | FP' | <- FP
-// +----------------------+
-// | uint32_t out[n-1] |
-// | : : | Outs
-// | uint32_t out[0] |
-// | ArtMethod* | <- SP value=null
-// +----------------------+
-//
-// Outgoing registers:
-// x0 - Current ArtMethod*
-// x1-x7 - integer parameters.
-// d0-d7 - Floating point parameters.
-// xSELF = self
-// SP = & of ArtMethod*
-// x1 - "this" pointer (for non-static method)
-void CodeSimulatorArm64::InitRegistersForInvokeStub(ArtMethod* method, uint32_t* args,
- uint32_t args_size_in_bytes, Thread* self,
- JValue* result, const char* shorty,
- bool isStatic)
- REQUIRES_SHARED(Locks::mutator_lock_) {
- DCHECK(kCanSimulate);
-
- // Set registers x0, x4, x5, and x19.
- simulator_->WriteXRegister(0, reinterpret_cast<int64_t>(method));
- simulator_->WriteXRegister(kSelf, reinterpret_cast<int64_t>(self));
- simulator_->WriteXRegister(4, reinterpret_cast<int64_t>(result));
- simulator_->WriteXRegister(5, reinterpret_cast<int64_t>(shorty));
-
- // Stack Pointer here is not the real one in hardware. This will break stack overflow check.
- // Also note that the simulator stack is limited.
- saved_sp_ = simulator_->get_sp();
- // x4, x5, x19, x20 .. x28, SP, LR, FP saved (15 in total).
- const int64_t regs_save_size_in_bytes = kXRegSizeInBytes * 15;
- const int64_t frame_save_size = regs_save_size_in_bytes +
- kXRegSizeInBytes + // ArtMethod*
- static_cast<int64_t>(args_size_in_bytes);
- // Comply with 16-byte alignment requirement for SP.
- void** new_sp = reinterpret_cast<void**>((saved_sp_ - frame_save_size) & (~0xfUL));
-
- simulator_->WriteSp(new_sp);
-
- // Store null into ArtMethod* at bottom of frame.
- *new_sp++ = nullptr;
- // Copy arguments into stack frame.
- std::memcpy(new_sp, args, args_size_in_bytes * sizeof(uint32_t));
-
- // Callee-saved registers.
- int64_t* save_registers = reinterpret_cast<int64_t*>(saved_sp_) + 3;
- save_registers[0] = simulator_->get_fp();
- save_registers[1] = simulator_->get_lr();
- save_registers[2] = simulator_->get_x(4); // X4 (*result)
- save_registers[3] = simulator_->get_x(5); // X5 (*shorty)
- save_registers[4] = saved_sp_;
- save_registers[5] = simulator_->get_x(kSelf); // X19 (*self)
- for (unsigned int i = 6; i < 15; i++) {
- save_registers[i] = simulator_->get_x(i + 14); // X20 .. X28
- }
-
- // Use xFP (Frame Pointer) now, as it's callee-saved.
- simulator_->WriteXRegister(kFp, saved_sp_ - regs_save_size_in_bytes);
-
- // Fill registers from args, according to shorty.
- static const unsigned kRegisterIndexLimit = 8;
- unsigned fpr_index = 0;
- unsigned gpr_index = 1; // x1 ~ x7 integer parameters.
- shorty++; // Skip the return value.
- // For non-static method, load "this" parameter, and increment args pointer.
- if (!isStatic) {
- simulator_->WriteWRegister(gpr_index++, *args++);
- }
- // Loop to fill registers.
- for (const char* s = shorty; *s != '\0'; s++) {
- switch (*s) {
- case 'D':
- simulator_->WriteDRegister(fpr_index++, *reinterpret_cast<double*>(args));
- args += 2;
- break;
- case 'J':
- simulator_->WriteXRegister(gpr_index++, *reinterpret_cast<int64_t*>(args));
- args += 2;
- break;
- case 'F':
- simulator_->WriteSRegister(fpr_index++, *reinterpret_cast<float*>(args));
- args++;
- break;
- default:
- // Everything else takes one vReg.
- simulator_->WriteWRegister(gpr_index++, *reinterpret_cast<int32_t*>(args));
- args++;
- break;
- }
- if (gpr_index > kRegisterIndexLimit || fpr_index < kRegisterIndexLimit) {
- // TODO: Handle register spill.
- UNREACHABLE();
- }
- }
-
- // REFRESH_MARKING_REGISTER
- if (kUseReadBarrier) {
- simulator_->WriteWRegister(kMR, self->GetIsGcMarking());
- }
-}
-
-void CodeSimulatorArm64::InitEntryPoints(QuickEntryPoints* qpoints) {
- simulator_->SetEntryPoints(qpoints);
-}
-
-bool CodeSimulatorArm64::CanSimulate(ArtMethod* method) REQUIRES_SHARED(Locks::mutator_lock_) {
- std::string name = method->PrettyMethod();
-
- // Make sure simulate methods with $simulate$ in their names.
- if (name.find("$simulate$") != std::string::npos) {
- return true;
- }
- // Simulation allow list mode, only simulate method on the allow list.
- if (kEnableSimulateMethodAllowList) {
- for (auto& s : simulate_method_allow_list) {
- if (name.find(s) != std::string::npos) {
- return true;
- }
- }
- return false;
- }
- // Avoid simulating following methods.
- for (auto& s : avoid_simulation_method_list) {
- if (name.find(s) != std::string::npos) {
- return false;
- }
- }
-
- // Try to simulate as much as we can.
- return true;
-}
-
} // namespace arm64
} // namespace art
diff --git a/simulator/code_simulator_arm64.h b/simulator/code_simulator_arm64.h
index ea5c95a..e726500 100644
--- a/simulator/code_simulator_arm64.h
+++ b/simulator/code_simulator_arm64.h
@@ -27,13 +27,10 @@
#include "arch/instruction_set.h"
#include "code_simulator.h"
-#include "entrypoints/quick/quick_entrypoints.h"
namespace art {
namespace arm64 {
-class CustomSimulator;
-
class CodeSimulatorArm64 : public CodeSimulator {
public:
static CodeSimulatorArm64* CreateCodeSimulatorArm64();
@@ -45,24 +42,11 @@
int32_t GetCReturnInt32() const override;
int64_t GetCReturnInt64() const override;
- bool CanSimulate(ArtMethod* method) REQUIRES_SHARED(Locks::mutator_lock_) override;
- void Invoke(ArtMethod* method, uint32_t* args, uint32_t args_size, Thread* self, JValue* result,
- const char* shorty, bool isStatic) override REQUIRES_SHARED(Locks::mutator_lock_);
-
- void InitEntryPoints(QuickEntryPoints* qpoints) override;
-
private:
CodeSimulatorArm64();
- void InitRegistersForInvokeStub(ArtMethod* method, uint32_t* args, uint32_t args_size,
- Thread* self, JValue* result, const char* shorty, bool isStatic)
- REQUIRES_SHARED(Locks::mutator_lock_);
-
- void GetResultFromShorty(JValue* result, const char* shorty);
-
vixl::aarch64::Decoder* decoder_;
- CustomSimulator* simulator_;
- int64_t saved_sp_;
+ vixl::aarch64::Simulator* simulator_;
// TODO: Enable CodeSimulatorArm64 for more host ISAs once Simulator supports them.
static constexpr bool kCanSimulate = (kRuntimeISA == InstructionSet::kX86_64);
diff --git a/simulator/include/code_simulator.h b/simulator/include/code_simulator.h
index 22bac1e..256ab23 100644
--- a/simulator/include/code_simulator.h
+++ b/simulator/include/code_simulator.h
@@ -18,15 +18,9 @@
#define ART_SIMULATOR_INCLUDE_CODE_SIMULATOR_H_
#include "arch/instruction_set.h"
-#include "runtime.h"
namespace art {
-class ArtMethod;
-union JValue;
-class Thread;
-struct QuickEntryPoints;
-
class CodeSimulator {
public:
CodeSimulator() {}
@@ -41,13 +35,6 @@
virtual int32_t GetCReturnInt32() const = 0;
virtual int64_t GetCReturnInt64() const = 0;
- virtual bool CanSimulate(ArtMethod* method) REQUIRES_SHARED(Locks::mutator_lock_) = 0;
- virtual void Invoke(ArtMethod* method, uint32_t* args, uint32_t args_size, Thread* self,
- JValue* result, const char* shorty, bool isStatic)
- REQUIRES_SHARED(Locks::mutator_lock_) = 0;
-
- virtual void InitEntryPoints(QuickEntryPoints* qpoints) = 0;
-
private:
DISALLOW_COPY_AND_ASSIGN(CodeSimulator);
};
diff --git a/test.py b/test.py
index 1cbad72..9e54363 100755
--- a/test.py
+++ b/test.py
@@ -33,7 +33,6 @@
parser.add_argument('--gtest', '-g', action='store_true', dest='gtest', help='execute gtest tests')
parser.add_argument('--target', action='store_true', dest='target', help='test on target system')
parser.add_argument('--host', action='store_true', dest='host', help='test on build host system')
-parser.add_argument('--simulate-arm64', action='store_true', dest='simulate_arm64', help='test on build host system')
parser.add_argument('--help-runner', action='store_true', dest='help_runner', help='show help for optional run test arguments')
options, unknown = parser.parse_known_args()
diff --git a/test/README.simulator.md b/test/README.simulator.md
deleted file mode 100644
index c575c35..0000000
--- a/test/README.simulator.md
+++ /dev/null
@@ -1,98 +0,0 @@
-# ART VIXL Simulator Integration
-
-This file documents the use of the VIXL Simulator for running tests on ART. The
-simulator enables us to run the ART run-tests without the need for a target
-device. This helps to speed up the development/debug/test cycle. The full AOSP
-source tree, as well as the partial master-art AOSP source tree, are supported.
-
-## Quick User Guide
-1. Set lunch target and setup environment:
-
- ```bash
- source build/envsetup.sh; lunch armv8-eng
- ```
-
-2. Build ART target and host:
-
- ```bash
- art/tools/buildbot-build.sh --target
- art/tools/buildbot-build.sh --host
- ```
-
-3. Run Tests:
-
- To enable the simulator we use the `--simulate-arm64` flag. The simulator can
- be used directly with the dalvikvm or the ART test scripts.
-
- To run a single test on simulator, use the command:
- ```bash
- art/test/run-test --host --simulate-arm64 --64 <TEST_NAME>
- ```
-
- To run all ART run-tests on simulator, use the `art/test.py` script with the
- following command:
- ```bash
- ./art/test.py --simulate-arm64 --run-test --optimizing
- ```
-
-4. Enable simulator tracing
-
- Simulator provides tracing feature which is useful in debugging. Setting
- runtime option `-verbose:simulator` will enable instruction trace and register
- updates.
- For example,
- ```bash
- ./art/test/run-test --host --runtime-option -verbose:simulator --optimizing \
- --never-clean --simulate-arm64 --64 640-checker-simd
- ```
-
-5. Debug
-
- Another useful usecase of the simulator is debugging using the `--gdb` flag.
- ```bash
- ./art/test/run-test --gdb --host --simulate-arm64 --64 527-checker-array-access-split
- ```
- If developing a compiler optimization which affects the test case
- `527-checker-array-access-split`, you can use the simulator to run and
- generate the control flow graph with:
- ```bash
- ./art/test/run-test --host --dex2oat-jobs 1 -Xcompiler-option --dump-cfg=oat.cfg \
- --never-clean --simulate-arm64 --64 527-checker-array-access-split
- ```
-
-6. Control simulation
-
- By default, in simulator mode, all methods in `art/test/` run-tests files are
- simulated. However, within `art/simulator/code_simulator_arm64.cc`, the
- `CanSimulate()` function provides options for developer to control simulation:
- - the `kEnableSimulateMethodAllowList` to restrict the methods run in the simulator;
- - the `$simulate$` tag to force the simulator to run a method.
-
- #### Allow list to control simulation
- Sometimes we may wish to restrict the methods run in the simulator, this can
- be done using the `simulate_method_white_list`. Here a list of methods which
- we know to be safe to run in the simulator is kept in
- `art/simulator/code_simulator_arm64.cc`, the simulator can be forced to only
- run the methods on this list by setting
- ```
- kEnableSimulateMethodAllowList = true
- ```
- and recompile art and rerun the test cases. For example, if we set the white list to
- ```
- static const std::vector<std::string> simulate_method_white_list = {
- "other.TestByte.testDotProdComplex",
- "other.TestByte.testDotProdComplexSignedCastedToUnsigned",
- "other.TestByte.testDotProdComplexUnsigned",
- "other.TestByte.testDotProdComplexUnsignedCastedToSigned",
- };
- ```
- We only allow these methods to be run in simulator and all the other methods
- will run in the interpreter.
-
- #### The `$simulate$` tag to control simulation
- In the case that we may wish to quickly change a Java method test case and
- force the simulator to run a method without recompiling art, add the
- `$simulate$` tag in the method name. For example,
- ```
- public void $simulate$foo() {}
- ```
diff --git a/test/etc/run-test-jar b/test/etc/run-test-jar
index a7190ce..487958f 100755
--- a/test/etc/run-test-jar
+++ b/test/etc/run-test-jar
@@ -109,7 +109,6 @@
# The same for dex2oatd, both prebuild and runtime-driven.
ANDROID_FLAGS="${ANDROID_FLAGS} -Xcompiler-option --runtime-arg -Xcompiler-option -XX:SlowDebug=true"
COMPILER_FLAGS="${COMPILER_FLAGS} --runtime-arg -XX:SlowDebug=true"
-SIMULATOR="none"
# Let the compiler and runtime know that we are running tests.
COMPILE_FLAGS="${COMPILE_FLAGS} --compile-art-test"
@@ -469,14 +468,6 @@
elif [ "x$1" = "x--random-profile" ]; then
RANDOM_PROFILE="y"
shift
- elif [ "x$1" = "x--simulate-isa" ]; then
- HOST="y"
- ANDROID_ROOT="${ANDROID_PRODUCT_OUT}/system"
- ANDROID_RUNTIME_ROOT="${ANDROID_PRODUCT_OUT}/apex/com.android.runtime.debug"
- shift
- SIMULATOR=$1
- FLAGS="${FLAGS} --simulate-isa=${SIMULATOR}"
- shift
elif expr "x$1" : "x--" >/dev/null 2>&1; then
echo "unknown $0 option: $1" 1>&2
exit 1
@@ -722,11 +713,7 @@
bpath_separator=""
bpath_prefix=""
bpath_location_prefix=""
-if [ "$SIMULATOR" != "none" ]; then
- # Simulator mode uses a mix of host and target bootclasspath locations.
- bpath_prefix="${ANDROID_HOST_OUT}"
- bpath_location_prefix=""
-elif [ "${HOST}" = "y" ]; then
+if [ "${HOST}" = "y" ]; then
bpath_prefix="${ANDROID_HOST_OUT}"
if [ "${ANDROID_HOST_OUT:0:${#ANDROID_BUILD_TOP}+1}" = "${ANDROID_BUILD_TOP}/" ]; then
bpath_location_prefix="${ANDROID_HOST_OUT:${#ANDROID_BUILD_TOP}+1}"
@@ -870,15 +857,13 @@
exit 1
fi
-if [ "$HOST" = "y" ] && [ "$SIMULATOR" = "none" ]; then
+if [ "$HOST" = "y" ]; then
# On host, run binaries (`dex2oat(d)`, `dalvikvm`, `profman`) from the `bin`
# directory under the "Android Root" (usually `out/host/linux-x86`).
#
# TODO(b/130295968): Adjust this if/when ART host artifacts are installed
# under the ART root (usually `out/host/linux-x86/com.android.art`).
ANDROID_ART_BIN_DIR=$ANDROID_ROOT/bin
-elif [ "$SIMULATOR" != "none" ]; then
- ANDROID_ART_BIN_DIR=$ANDROID_HOST_OUT/bin
else
# On target, run binaries (`dex2oat(d)`, `dalvikvm`, `profman`) from the ART
# APEX's `bin` directory. This means the linker will observe the ART APEX
@@ -888,10 +873,6 @@
fi
profman_cmdline="true"
-if [ "$SIMULATOR" != "none" ]; then
- ISA=$SIMULATOR
-fi
-
dex2oat_cmdline="true"
vdex_cmdline="true"
dm_cmdline="true"
diff --git a/test/knownfailures.json b/test/knownfailures.json
index 1eb8e79..6143dc7 100644
--- a/test/knownfailures.json
+++ b/test/knownfailures.json
@@ -1344,636 +1344,5 @@
"variant": "jvm",
"bug": "b/154802847",
"description": ["Failing on RI. Needs further investigating."]
- },
- {
- "tests": ["004-JniTest",
- "003-omnibus-opcodes",
- "004-NativeAllocations",
- "004-ReferenceMap",
- "004-SignalTest",
- "004-StackWalk",
- "004-ThreadStress",
- "004-UnsafeTest",
- "004-checker-UnsafeTest18",
- "006-args",
- "007-count10",
- "008-exceptions",
- "011-array-copy",
- "012-math",
- "013-math2",
- "014-math3",
- "015-switch",
- "017-float",
- "018-stack-overflow",
- "020-string",
- "021-string2",
- "022-interface",
- "023-many-interfaces",
- "024-illegal-access",
- "027-arithmetic",
- "028-array-write",
- "030-bad-finalizer",
- "031-class-attributes",
- "032-concrete-sub",
- "033-class-init-deadlock",
- "036-finalizer",
- "037-inherit",
- "038-inner-null",
- "039-join-main",
- "041-narrowing",
- "042-new-instance",
- "043-privates",
- "044-proxy",
- "045-reflect-array",
- "046-reflect",
- "047-returns",
- "048-reflect-v8",
- "049-show-object",
- "050-sync-test",
- "051-thread",
- "052-verifier-fun",
- "054-uncaught",
- "058-enum-order",
- "059-finalizer-throw",
- "061-out-of-memory",
- "062-character-encodings",
- "063-process-manager",
- "064-field-access",
- "067-preemptive-unpark",
- "068-classloader",
- "070-nio-buffer",
- "071-dexfile",
- "071-dexfile-get-static-size",
- "071-dexfile-map-clean",
- "072-precise-gc",
- "073-mismatched-field",
- "074-gc-thrash",
- "075-verification-error",
- "076-boolean-put",
- "077-method-override",
- "078-polymorphic-virtual",
- "079-phantom",
- "080-oom-throw",
- "080-oom-throw-with-finalizer",
- "081-hot-exceptions",
- "082-inline-execute",
- "083-compiler-regressions",
- "084-class-init",
- "086-null-super",
- "087-gc-after-link",
- "088-monitor-verification",
- "090-loop-formation",
- "091-override-package-private-method",
- "092-locale",
- "093-serialization",
- "096-array-copy-concurrent-gc",
- "098-ddmc",
- "099-vmdebug",
- "100-reflect2",
- "1002-notify-startup",
- "1003-metadata-section-strings",
- "1004-checker-volatile-ref-load",
- "104-growth-limit",
- "105-invoke",
- "106-exceptions2",
- "107-int-math2",
- "109-suspend-check",
- "110-field-access",
- "111-unresolvable-exception",
- "113-multidex",
- "114-ParallelGC",
- "115-native-bridge",
- "121-simple-suspend-check",
- "122-npe",
- "123-compiler-regressions-mt",
- "124-missing-classes",
- "125-gc-and-classloading",
- "126-miranda-multidex",
- "127-checker-secondarydex",
- "129-ThreadGetId",
- "130-hprof",
- "132-daemon-locks-shutdown",
- "1336-short-finalizer-timeout",
- "1337-gc-coverage",
- "1339-dead-reference-safe",
- "134-reg-promotion",
- "135-MirandaDispatch",
- "136-daemon-jni-shutdown",
- "137-cfi",
- "138-duplicate-classes-check",
- "138-duplicate-classes-check2",
- "139-register-natives",
- "140-dce-regression",
- "140-field-packing",
- "141-class-unload",
- "142-classloader2",
- "144-static-field-sigquit",
- "145-alloc-tracking-stress",
- "146-bad-interface",
- "148-multithread-gc-annotations",
- "151-OpenFileLimit",
- "154-gc-loop",
- "155-java-set-resolved-type",
- "156-register-dex-file-multi-loader",
- "158-app-image-class-table",
- "159-app-image-fields",
- "160-read-barrier-stress",
- "161-final-abstract-class",
- "162-method-resolution",
- "163-app-image-methods",
- "164-resolution-trampoline-dex-cache",
- "165-lock-owner-proxy",
- "167-visit-locks",
- "168-vmstack-annotated",
- "170-interface-init",
- "172-app-image-twice",
- "173-missing-field-type",
- "174-escaping-instance-of-bad-class",
- "177-visibly-initialized-deadlock",
- "178-app-image-native-method",
- "201-built-in-except-detail-messages",
- "203-multi-checkpoint",
- "300-package-override",
- "302-float-conversion",
- "303-verification-stress",
- "304-method-tracing",
- "305-other-fault-handler",
- "401-optimizing-compiler",
- "403-optimizing-long",
- "406-fields",
- "407-arrays",
- "409-materialized-condition",
- "410-floats",
- "411-checker-instruct-simplifier-hrem",
- "411-checker-hdiv-hrem-const",
- "411-checker-hdiv-hrem-pow2",
- "411-optimizing-arith",
- "412-new-array",
- "414-static-fields",
- "416-optimizing-arith-not",
- "420-const-class",
- "421-exceptions",
- "421-large-frame",
- "422-instanceof",
- "422-type-conversion",
- "423-invoke-interface",
- "424-checkcast",
- "426-monitor",
- "427-bitwise",
- "427-bounds",
- "430-live-register-slow-path",
- "432-optimizing-cmp",
- "434-invoke-direct",
- "435-try-finally-without-catch",
- "436-rem-float",
- "438-volatile",
- "439-npe",
- "439-swap-double",
- "440-stmp",
- "441-checker-inliner",
- "442-checker-constant-folding",
- "445-checker-licm",
- "449-checker-bce",
- "449-checker-bce-rem",
- "455-checker-gvn",
- "458-checker-instruct-simplification",
- "461-get-reference-vreg",
- "462-checker-inlining-dex-files",
- "464-checker-inline-sharpen-calls",
- "465-checker-clinit-gvn",
- "466-get-live-vreg",
- "467-regalloc-pair",
- "468-checker-bool-simplif-regression",
- "470-huge-method",
- "472-type-propagation",
- "472-unreachable-if-regression",
- "474-fp-sub-neg",
- "476-checker-ctor-fence-redun-elim",
- "476-clinit-inline-static-invoke",
- "477-long-2-float-convers-precision",
- "478-checker-clinit-check-pruning",
- "478-checker-inline-noreturn",
- "479-regression-implicit-null-check",
- "480-checker-dead-blocks",
- "487-checker-inline-calls",
- "488-checker-inline-recursive-calls",
- "491-current-method",
- "492-checker-inline-invoke-interface",
- "493-checker-inline-invoke-interface",
- "494-checker-instanceof-tests",
- "495-checker-checkcast-tests",
- "496-checker-inlining-class-loader",
- "508-referrer-method",
- "510-checker-try-catch",
- "517-checker-builder-fallthrough",
- "518-null-array-get",
- "519-bound-load-class",
- "524-boolean-simplifier-regression",
- "525-checker-arrays-fields1",
- "525-checker-arrays-fields2",
- "526-checker-caller-callee-regs",
- "526-long-regalloc",
- "529-checker-unresolved",
- "529-long-split",
- "530-checker-loops1",
- "530-checker-loops2",
- "530-checker-loops3",
- "530-checker-lse",
- "530-checker-lse-ctor-fences",
- "530-checker-lse-simd",
- "530-checker-lse2",
- "530-checker-peel-unroll",
- "530-checker-regression-reftyp-final",
- "530-instanceof-checkcast",
- "530-regression-lse",
- "534-checker-bce-deoptimization",
- "535-deopt-and-inlining",
- "536-checker-intrinsic-optimization",
- "536-checker-needs-access-check",
- "537-checker-inline-and-unverified",
- "541-regression-inlined-deopt",
- "542-bitfield-rotates",
- "542-inline-trycatch",
- "543-env-long-ref",
- "545-tracing-and-jit",
- "550-checker-multiply-accumulate",
- "550-checker-regression-wide-store",
- "551-checker-shifter-operand",
- "551-implicit-null-checks",
- "551-invoke-super",
- "552-checker-primitive-typeprop",
- "552-checker-sharpening",
- "552-invoke-non-existent-super",
- "553-invoke-super",
- "556-invoke-super",
- "559-checker-irreducible-loop",
- "561-shared-slowpaths",
- "563-checker-fakestring",
- "564-checker-bitcount",
- "564-checker-irreducible-loop",
- "565-checker-doublenegbitwise",
- "565-checker-irreducible-loop",
- "566-polymorphic-inlining",
- "567-checker-builder-intrinsics",
- "569-checker-pattern-replacement",
- "570-checker-osr",
- "570-checker-osr-locals",
- "574-irreducible-and-constant-area",
- "575-checker-string-init-alias",
- "576-polymorphic-inlining",
- "578-bce-visit",
- "578-polymorphic-inlining",
- "579-inline-infinite",
- "580-checker-string-fact-intrinsics",
- "580-crc32",
- "580-fp16",
- "582-checker-bce-length",
- "584-checker-div-bool",
- "585-inline-unresolved",
- "586-checker-null-array-get",
- "587-inline-class-error",
- "588-checker-irreducib-lifetime-hole",
- "589-super-imt",
- "590-checker-arr-set-null-regression",
- "591-new-instance-string",
- "592-checker-regression-bool-input",
- "593-checker-shift-and-simplifier",
- "594-invoke-super",
- "594-load-string-regression",
- "595-profile-saving",
- "596-app-images",
- "596-checker-dead-phi",
- "596-monitor-inflation",
- "597-app-images-same-classloader",
- "597-deopt-busy-loop",
- "597-deopt-new-string",
- "600-verifier-fails",
- "601-method-access",
- "603-checker-instanceof",
- "607-daemon-stress",
- "608-checker-unresolved-lse",
- "609-checker-inline-interface",
- "612-jit-dex-cache",
- "613-inlining-dex-cache",
- "615-checker-arm64-store-zero",
- "616-cha",
- "616-cha-abstract",
- "616-cha-interface",
- "616-cha-interface-default",
- "616-cha-miranda",
- "616-cha-proxy-method-inline",
- "616-cha-regression-proxy-method",
- "616-cha-unloading",
- "618-checker-induction",
- "622-simplifyifs-exception-edges",
- "623-checker-loop-regressions",
- "624-checker-stringops",
- "625-checker-licm-regressions",
- "626-checker-arm64-scratch-register",
- "626-const-class-linking",
- "626-set-resolved-string",
- "633-checker-rtp-getclass",
- "635-checker-arm64-volatile-load-cc",
- "636-wrong-static-access",
- "638-checker-inline-cache-intrinsic",
- "638-checker-inline-caches",
- "639-checker-code-sinking",
- "641-irreducible-inline",
- "641-iterations",
- "642-fp-callees",
- "643-checker-bogus-ic",
- "647-jni-get-field-id",
- "647-sinking-catch",
- "650-checker-inline-access-thunks",
- "652-deopt-intrinsic",
- "655-jit-clinit",
- "656-annotation-lookup-generic-jni",
- "656-checker-simd-opt",
- "656-loop-deopt",
- "657-branches",
- "658-fp-read-barrier",
- "660-clinit",
- "661-classloader-allocator",
- "661-oat-writer-layout",
- "662-regression-alias",
- "666-dex-cache-itf",
- "667-checker-simd-alignment",
- "667-jit-jni-stub",
- "667-out-of-bounds",
- "668-aiobe",
- "670-bitstring-type-check",
- "671-npe-field-opts",
- "672-checker-throw-method",
- "673-checker-throw-vmethod",
- "674-hiddenapi",
- "674-vdex-uncompress",
- "676-proxy-jit-at-first-use",
- "676-resolve-field-type",
- "677-fsi",
- "677-fsi2",
- "678-quickening",
- "679-locks",
- "680-checker-deopt-dex-pc-0",
- "680-sink-regression",
- "683-clinit-inline-static-invoke",
- "684-checker-simd-dotprod",
- "684-select-condition",
- "686-get-this",
- "687-deopt",
- "688-shared-library",
- "689-multi-catch",
- "689-zygote-jit-deopt",
- "690-hiddenapi-same-name-methods",
- "691-hiddenapi-proxy",
- "692-vdex-inmem-loader",
- "693-vdex-inmem-loader-evict",
- "694-clinit-jit",
- "695-simplify-throws",
- "697-checker-string-append",
- "700-LoadArgRegs",
- "701-easy-div-rem",
- "702-LargeBranchOffset",
- "703-floating-point-div",
- "704-multiply-accumulate",
- "706-checker-scheduler",
- "707-checker-invalid-profile",
- "708-jit-cache-churn",
- "710-varhandle-creation",
- "711-checker-type-conversion",
- "712-varhandle-invocations",
- "713-varhandle-invokers",
- "716-jli-jit-samples",
- "717-integer-value-of",
- "718-zipfile-finalizer",
- "179-nonvirtual-jni",
- "720-thread-priority",
- "721-osr",
- "724-invoke-super-npe",
- "800-smali",
- "802-deoptimization",
- "804-class-extends-itself",
- "807-method-handle-and-mr",
- "900-hello-plugin",
- "901-hello-ti-agent",
- "902-hello-transformation",
- "903-hello-tagging",
- "904-object-allocation",
- "905-object-free",
- "906-iterate-heap",
- "907-get-loaded-classes",
- "908-gc-start-finish",
- "909-attach-agent",
- "910-methods",
- "911-get-stack-trace",
- "912-classes",
- "913-heaps",
- "914-hello-obsolescence",
- "915-obsolete-2",
- "916-obsolete-jit",
- "917-fields-transformation",
- "918-fields",
- "919-obsolete-fields",
- "920-objects",
- "921-hello-failure",
- "922-properties",
- "923-monitors",
- "924-threads",
- "925-threadgroups",
- "926-multi-obsolescence",
- "927-timers",
- "928-jni-table",
- "929-search",
- "930-hello-retransform",
- "931-agent-thread",
- "932-transform-saves",
- "933-misc-events",
- "934-load-transform",
- "935-non-retransformable",
- "936-search-onload",
- "937-hello-retransform-package",
- "938-load-transform-bcp",
- "939-hello-transformation-bcp",
- "940-recursive-obsolete",
- "941-recursive-obsolete-jit",
- "942-private-recursive",
- "943-private-recursive-jit",
- "944-transform-classloaders",
- "945-obsolete-native",
- "946-obsolete-throw",
- "947-reflect-method",
- "948-change-annotations",
- "949-in-memory-transform",
- "950-redefine-intrinsic",
- "951-threaded-obsolete",
- "952-invoke-custom",
- "953-invoke-polymorphic-compiler",
- "954-invoke-polymorphic-verifier",
- "956-methodhandles",
- "957-methodhandle-transforms",
- "959-invoke-polymorphic-accessors",
- "960-default-smali",
- "961-default-iface-resolution-gen",
- "962-iface-static",
- "964-default-iface-init-gen",
- "965-default-verify",
- "966-default-conflict",
- "967-default-ame",
- "968-default-partial-compile-gen",
- "969-iface-super",
- "970-iface-super-resolution-gen",
- "971-iface-super",
- "972-default-imt-collision",
- "975-iface-private",
- "978-virtual-interface",
- "979-const-method-handle",
- "980-redefine-object",
- "981-dedup-original-dex",
- "982-ok-no-retransform",
- "983-source-transform-verify",
- "984-obsolete-invoke",
- "985-re-obsolete",
- "986-native-method-bind",
- "987-agent-bind",
- "988-method-trace",
- "989-method-trace-throw",
- "990-field-trace",
- "991-field-trace-2",
- "992-source-data",
- "993-breakpoints",
- "994-breakpoint-line",
- "995-breakpoints-throw",
- "996-breakpoint-obsolete",
- "997-single-step",
- "998-redefine-use-after-free",
- "999-redefine-hiddenapi",
- "1900-track-alloc",
- "1901-get-bytecodes",
- "1902-suspend",
- "1903-suspend-self",
- "1904-double-suspend",
- "1905-suspend-native",
- "1906-suspend-list-me-first",
- "1907-suspend-list-self-twice",
- "1908-suspend-native-resume-self",
- "1909-per-agent-tls",
- "1910-transform-with-default",
- "1911-get-local-var-table",
- "1912-get-set-local-primitive",
- "1913-get-set-local-objects",
- "1914-get-local-instance",
- "1915-get-set-local-current-thread",
- "1916-get-set-current-frame",
- "1917-get-stack-frame",
- "1919-vminit-thread-start-timing",
- "1920-suspend-native-monitor",
- "1921-suspend-native-recursive-monitor",
- "1922-owned-monitors-info",
- "1923-frame-pop",
- "1924-frame-pop-toggle",
- "1925-self-frame-pop",
- "1926-missed-frame-pop",
- "1927-exception-event",
- "1928-exception-event-exception",
- "1929-exception-catch-exception",
- "1930-monitor-info",
- "1931-monitor-events",
- "1932-monitor-events-misc",
- "1933-monitor-current-contended",
- "1934-jvmti-signal-thread",
- "1935-get-set-current-frame-jit",
- "1936-thread-end-events",
- "1937-transform-soft-fail",
- "1938-transform-abstract-single-impl",
- "1939-proxy-frames",
- "1940-ddms-ext",
- "1941-dispose-stress",
- "1942-suspend-raw-monitor-exit",
- "1943-suspend-raw-monitor-wait",
- "1945-proxy-method-arguments",
- "1946-list-descriptors",
- "1947-breakpoint-redefine-deopt",
- "1948-obsolete-const-method-handle",
- "1949-short-dex-file",
- "1950-unprepared-transform",
- "1951-monitor-enter-no-suspend",
- "1953-pop-frame",
- "1954-pop-frame-jit",
- "1955-pop-frame-jit-called",
- "1956-pop-frame-jit-calling",
- "1957-error-ext",
- "1958-transform-try-jit",
- "1959-redefine-object-instrument",
- "1960-checker-bounds-codegen",
- "1960-obsolete-jit-multithread-native",
- "1961-checker-loop-vectorizer",
- "1961-obsolete-jit-multithread",
- "1962-multi-thread-events",
- "1963-add-to-dex-classloader-in-memory",
- "1964-add-to-dex-classloader-file",
- "1965-get-set-local-primitive-no-tables",
- "1966-get-set-local-objects-no-table",
- "1967-get-set-local-bad-slot",
- "1968-force-early-return",
- "1969-force-early-return-void",
- "1970-force-early-return-long",
- "1971-multi-force-early-return",
- "1972-jni-id-swap-indices",
- "1973-jni-id-swap-pointer",
- "1974-resize-array",
- "1975-hello-structural-transformation",
- "1976-hello-structural-static-methods",
- "1977-hello-structural-obsolescence",
- "1978-regular-obsolete-then-structural-obsolescence",
- "1979-threaded-structural-transformation",
- "1980-obsolete-object-cleared",
- "1981-structural-redef-private-method-handles",
- "1982-no-virtuals-structural-redefinition",
- "1983-structural-redefinition-failures",
- "1984-structural-redefine-field-trace",
- "1985-structural-redefine-stack-scope",
- "1986-structural-redefine-multi-thread-stack-scope",
- "1988-multi-structural-redefine",
- "1989-transform-bad-monitor",
- "1990-structural-bad-verify",
- "1991-hello-structural-retransform",
- "1992-retransform-no-such-field",
- "1993-fallback-non-structural",
- "1994-final-virtual-structural",
- "1995-final-virtual-structural-multithread",
- "1996-final-override-virtual-structural",
- "1997-structural-shadow-method",
- "1998-structural-shadow-field",
- "1999-virtual-structural",
- "2000-virtual-list-structural",
- "2001-virtual-structural-multithread",
- "2002-virtual-structural-initializing",
- "2003-double-virtual-structural",
- "2004-double-virtual-structural-abstract",
- "2005-pause-all-redefine-multithreaded",
- "2006-virtual-structural-finalizing",
- "2007-virtual-structural-finalizable",
- "2008-redefine-then-old-reflect-field",
- "2009-structural-local-ref",
- "2011-stack-walk-concurrent-instrument",
- "2012-structural-redefinition-failures-jni-id",
- "2019-constantcalculationsinking",
- "2020-InvokeVirtual-Inlining",
- "2022-Invariantloops",
- "2023-InvariantLoops_typecast",
- "2024-InvariantNegativeLoop",
- "2025-ChangedArrayValue",
- "2026-DifferentMemoryLSCouples",
- "2027-TwiceTheSameMemoryCouple",
- "2028-MultiBackward",
- "2029-contended-monitors",
- "2030-long-running-child",
- "2032-default-method-private-override",
- "2033-shutdown-mechanics",
- "2035-structural-native-method",
- "2036-jni-filechannel",
- "1987-structural-redefine-recursive-stack-scope"
- ],
- "variant": "simulate-arm64",
- "description": ["TODO: Support more quick entry points in ART-VIXL simulator."]
}
]
diff --git a/test/run-test b/test/run-test
index cfe8111..86d30d5 100755
--- a/test/run-test
+++ b/test/run-test
@@ -141,7 +141,6 @@
create_runner="no"
update_mode="no"
debug_mode="no"
-simulator_mode="no"
relocate="no"
runtime="art"
usage="no"
@@ -182,9 +181,6 @@
DEX_LOCATION=$tmp_dir
run_args+=(--host)
shift
- elif [ "x$1" = "x--simulate-arm64" ]; then
- simulator_mode="yes"
- shift
elif [ "x$1" = "x--quiet" ]; then
quiet="yes"
shift
@@ -678,14 +674,10 @@
true # defaults to using target BOOTCLASSPATH
fi
elif [ "$runtime" = "art" ]; then
- if [ "$target_mode" = "no" ] && [ "$simulator_mode" = "no" ]; then
+ if [ "$target_mode" = "no" ]; then
guess_host_arch_name
run_args+=(--boot "${ANDROID_HOST_OUT}/apex/com.android.art/javalib/boot.art")
run_args+=(--runtime-option "-Djava.library.path=${host_lib_root}/lib${suffix64}:${host_lib_root}/nativetest${suffix64}")
- elif [ "$simulator_mode" = "yes" ]; then
- run_args+=(--simulate-isa "arm64")
- run_args+=(--boot "${ANDROID_PRODUCT_OUT}/system/apex/com.android.art.testing/javalib/boot.art")
- run_args+=(--runtime-option "-Djava.library.path=${host_lib_root}/lib${suffix64}:${host_lib_root}/nativetest${suffix64}")
else
guess_target_arch_name
run_args+=(--runtime-option "-Djava.library.path=/data/nativetest${suffix64}/art/${target_arch_name}")
@@ -923,10 +915,7 @@
if [ "$prebuild_mode" = "yes" -a "$have_image" = "yes" ]; then
run_checker="yes"
- if [ "$simulator_mode" = "yes" ]; then
- cfg_output_dir="$tmp_dir"
- checker_args="--arch=ARM64"
- elif [ "$target_mode" = "no" ]; then
+ if [ "$target_mode" = "no" ]; then
cfg_output_dir="$tmp_dir"
checker_args="--arch=${host_arch_name^^}"
else
diff --git a/test/testrunner/testrunner.py b/test/testrunner/testrunner.py
index f547681..b8e8cb7 100755
--- a/test/testrunner/testrunner.py
+++ b/test/testrunner/testrunner.py
@@ -182,7 +182,7 @@
global TOTAL_VARIANTS_SET
# TODO: Avoid duplication of the variant names in different lists.
VARIANT_TYPE_DICT['run'] = {'ndebug', 'debug'}
- VARIANT_TYPE_DICT['target'] = {'target', 'host', 'jvm', 'simulate-arm64'}
+ VARIANT_TYPE_DICT['target'] = {'target', 'host', 'jvm'}
VARIANT_TYPE_DICT['trace'] = {'trace', 'ntrace', 'stream'}
VARIANT_TYPE_DICT['image'] = {'picimage', 'no-image'}
VARIANT_TYPE_DICT['debuggable'] = {'ndebuggable', 'debuggable'}
@@ -254,7 +254,6 @@
_user_input_variants['address_sizes_target'] = collections.defaultdict(set)
if not _user_input_variants['address_sizes']:
- _user_input_variants['address_sizes_target']['simulate-arm64'].add('64')
_user_input_variants['address_sizes_target']['target'].add(
env.ART_PHONY_TEST_TARGET_SUFFIX)
_user_input_variants['address_sizes_target']['host'].add(
@@ -424,8 +423,6 @@
if target == 'host':
options_test += ' --host'
- elif target == 'simulate-arm64':
- options_test += ' --host --simulate-arm64'
elif target == 'jvm':
options_test += ' --jvm'