diff options
| author | 2014-05-22 22:07:37 +0000 | |
|---|---|---|
| committer | 2014-05-22 22:07:38 +0000 | |
| commit | 7d5cf703f3c03769e5b2f7ebc9d216c52ee5c70d (patch) | |
| tree | 6d6f6aff838a440f418fe4a4e1451d9db8c8d5dc /compiler | |
| parent | be2cb9b284f3eca3b99571e83b7e0e3109f1ef06 (diff) | |
| parent | 3bdb873122964da7937eb070cbcf2ef638a8e459 (diff) | |
Merge "Revert "Fix an outstanding compaction bug in interpreter.""
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/common_compiler_test.h | 4 | ||||
| -rw-r--r-- | compiler/driver/compiler_driver-inl.h | 31 | ||||
| -rw-r--r-- | compiler/driver/compiler_driver.cc | 14 | ||||
| -rw-r--r-- | compiler/driver/compiler_driver.h | 16 | ||||
| -rw-r--r-- | compiler/driver/compiler_driver_test.cc | 7 | ||||
| -rw-r--r-- | compiler/elf_writer_mclinker.cc | 7 | ||||
| -rw-r--r-- | compiler/image_writer.cc | 14 | ||||
| -rw-r--r-- | compiler/oat_test.cc | 4 | ||||
| -rw-r--r-- | compiler/oat_writer.cc | 5 |
9 files changed, 50 insertions, 52 deletions
diff --git a/compiler/common_compiler_test.h b/compiler/common_compiler_test.h index 5050d4eb78..fb6c625926 100644 --- a/compiler/common_compiler_test.h +++ b/compiler/common_compiler_test.h @@ -377,7 +377,7 @@ class CommonCompilerTest : public CommonRuntimeTest { timings.EndSplit(); } - void CompileDirectMethod(Handle<mirror::ClassLoader> class_loader, const char* class_name, + void CompileDirectMethod(Handle<mirror::ClassLoader>& class_loader, const char* class_name, const char* method_name, const char* signature) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { std::string class_descriptor(DotToDescriptor(class_name)); @@ -390,7 +390,7 @@ class CommonCompilerTest : public CommonRuntimeTest { CompileMethod(method); } - void CompileVirtualMethod(Handle<mirror::ClassLoader> class_loader, const char* class_name, + void CompileVirtualMethod(Handle<mirror::ClassLoader>& class_loader, const char* class_name, const char* method_name, const char* signature) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { std::string class_descriptor(DotToDescriptor(class_name)); diff --git a/compiler/driver/compiler_driver-inl.h b/compiler/driver/compiler_driver-inl.h index 45abfcc895..08fd386226 100644 --- a/compiler/driver/compiler_driver-inl.h +++ b/compiler/driver/compiler_driver-inl.h @@ -42,8 +42,8 @@ inline mirror::ClassLoader* CompilerDriver::GetClassLoader(ScopedObjectAccess& s } inline mirror::Class* CompilerDriver::ResolveCompilingMethodsClass( - ScopedObjectAccess& soa, Handle<mirror::DexCache> dex_cache, - Handle<mirror::ClassLoader> class_loader, const DexCompilationUnit* mUnit) { + ScopedObjectAccess& soa, const Handle<mirror::DexCache>& dex_cache, + const Handle<mirror::ClassLoader>& class_loader, const DexCompilationUnit* mUnit) { DCHECK_EQ(dex_cache->GetDexFile(), mUnit->GetDexFile()); DCHECK_EQ(class_loader.Get(), soa.Decode<mirror::ClassLoader*>(mUnit->GetClassLoader())); const DexFile::MethodId& referrer_method_id = @@ -59,8 +59,8 @@ inline mirror::Class* CompilerDriver::ResolveCompilingMethodsClass( } inline mirror::ArtField* CompilerDriver::ResolveField( - ScopedObjectAccess& soa, Handle<mirror::DexCache> dex_cache, - Handle<mirror::ClassLoader> class_loader, const DexCompilationUnit* mUnit, + ScopedObjectAccess& soa, const Handle<mirror::DexCache>& dex_cache, + const Handle<mirror::ClassLoader>& class_loader, const DexCompilationUnit* mUnit, uint32_t field_idx, bool is_static) { DCHECK_EQ(dex_cache->GetDexFile(), mUnit->GetDexFile()); DCHECK_EQ(class_loader.Get(), soa.Decode<mirror::ClassLoader*>(mUnit->GetClassLoader())); @@ -165,14 +165,13 @@ inline std::pair<bool, bool> CompilerDriver::IsFastStaticField( } inline mirror::ArtMethod* CompilerDriver::ResolveMethod( - ScopedObjectAccess& soa, Handle<mirror::DexCache> dex_cache, - Handle<mirror::ClassLoader> class_loader, const DexCompilationUnit* mUnit, + ScopedObjectAccess& soa, const Handle<mirror::DexCache>& dex_cache, + const Handle<mirror::ClassLoader>& class_loader, const DexCompilationUnit* mUnit, uint32_t method_idx, InvokeType invoke_type) { - DCHECK_EQ(dex_cache->GetDexFile(), mUnit->GetDexFile()); - DCHECK_EQ(class_loader.Get(), soa.Decode<mirror::ClassLoader*>(mUnit->GetClassLoader())); + DCHECK(dex_cache->GetDexFile() == mUnit->GetDexFile()); + DCHECK(class_loader.Get() == soa.Decode<mirror::ClassLoader*>(mUnit->GetClassLoader())); mirror::ArtMethod* resolved_method = mUnit->GetClassLinker()->ResolveMethod( - *mUnit->GetDexFile(), method_idx, dex_cache, class_loader, NullHandle<mirror::ArtMethod>(), - invoke_type); + *mUnit->GetDexFile(), method_idx, dex_cache, class_loader, nullptr, invoke_type); DCHECK_EQ(resolved_method == nullptr, soa.Self()->IsExceptionPending()); if (UNLIKELY(resolved_method == nullptr)) { // Clean up any exception left by type resolution. @@ -207,8 +206,8 @@ inline uint16_t CompilerDriver::GetResolvedMethodVTableIndex( } inline int CompilerDriver::IsFastInvoke( - ScopedObjectAccess& soa, Handle<mirror::DexCache> dex_cache, - Handle<mirror::ClassLoader> class_loader, const DexCompilationUnit* mUnit, + ScopedObjectAccess& soa, const Handle<mirror::DexCache>& dex_cache, + const Handle<mirror::ClassLoader>& class_loader, const DexCompilationUnit* mUnit, mirror::Class* referrer_class, mirror::ArtMethod* resolved_method, InvokeType* invoke_type, MethodReference* target_method, const MethodReference* devirt_target, uintptr_t* direct_code, uintptr_t* direct_method) { @@ -257,17 +256,15 @@ inline int CompilerDriver::IsFastInvoke( ClassLinker* class_linker = mUnit->GetClassLinker(); if (LIKELY(devirt_target->dex_file == mUnit->GetDexFile())) { called_method = class_linker->ResolveMethod(*devirt_target->dex_file, - devirt_target->dex_method_index, dex_cache, - class_loader, NullHandle<mirror::ArtMethod>(), - kVirtual); + devirt_target->dex_method_index, + dex_cache, class_loader, NULL, kVirtual); } else { StackHandleScope<1> hs(soa.Self()); Handle<mirror::DexCache> target_dex_cache( hs.NewHandle(class_linker->FindDexCache(*devirt_target->dex_file))); called_method = class_linker->ResolveMethod(*devirt_target->dex_file, devirt_target->dex_method_index, - target_dex_cache, class_loader, - NullHandle<mirror::ArtMethod>(), kVirtual); + target_dex_cache, class_loader, NULL, kVirtual); } CHECK(called_method != NULL); CHECK(!called_method->IsAbstract()); diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc index 330456180b..0f41d2b2f6 100644 --- a/compiler/driver/compiler_driver.cc +++ b/compiler/driver/compiler_driver.cc @@ -511,7 +511,7 @@ void CompilerDriver::CompileAll(jobject class_loader, } static DexToDexCompilationLevel GetDexToDexCompilationlevel( - Thread* self, Handle<mirror::ClassLoader> class_loader, const DexFile& dex_file, + Thread* self, Handle<mirror::ClassLoader>& class_loader, const DexFile& dex_file, const DexFile::ClassDef& class_def) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { const char* descriptor = dex_file.GetClassDescriptor(class_def); ClassLinker* class_linker = Runtime::Current()->GetClassLinker(); @@ -731,11 +731,11 @@ void CompilerDriver::LoadImageClasses(TimingLogger* timings) for (const std::pair<uint16_t, const DexFile*>& exception_type : unresolved_exception_types) { uint16_t exception_type_idx = exception_type.first; const DexFile* dex_file = exception_type.second; - StackHandleScope<2> hs(self); + StackHandleScope<3> hs(self); Handle<mirror::DexCache> dex_cache(hs.NewHandle(class_linker->FindDexCache(*dex_file))); + auto class_loader(hs.NewHandle<mirror::ClassLoader>(nullptr)); Handle<mirror::Class> klass(hs.NewHandle( - class_linker->ResolveType(*dex_file, exception_type_idx, dex_cache, - NullHandle<mirror::ClassLoader>()))); + class_linker->ResolveType(*dex_file, exception_type_idx, dex_cache, class_loader))); if (klass.Get() == NULL) { const DexFile::TypeId& type_id = dex_file->GetTypeId(exception_type_idx); const char* descriptor = dex_file->GetTypeDescriptor(type_id); @@ -1541,8 +1541,7 @@ static void ResolveClassFieldsAndMethods(const ParallelCompilationManager* manag if (resolve_fields_and_methods) { while (it.HasNextDirectMethod()) { mirror::ArtMethod* method = class_linker->ResolveMethod(dex_file, it.GetMemberIndex(), - dex_cache, class_loader, - NullHandle<mirror::ArtMethod>(), + dex_cache, class_loader, NULL, it.GetMethodInvokeType(class_def)); if (method == NULL) { CHECK(soa.Self()->IsExceptionPending()); @@ -1552,8 +1551,7 @@ static void ResolveClassFieldsAndMethods(const ParallelCompilationManager* manag } while (it.HasNextVirtualMethod()) { mirror::ArtMethod* method = class_linker->ResolveMethod(dex_file, it.GetMemberIndex(), - dex_cache, class_loader, - NullHandle<mirror::ArtMethod>(), + dex_cache, class_loader, NULL, it.GetMethodInvokeType(class_def)); if (method == NULL) { CHECK(soa.Self()->IsExceptionPending()); diff --git a/compiler/driver/compiler_driver.h b/compiler/driver/compiler_driver.h index 14ccb5047b..abca659cce 100644 --- a/compiler/driver/compiler_driver.h +++ b/compiler/driver/compiler_driver.h @@ -221,15 +221,15 @@ class CompilerDriver { // Resolve compiling method's class. Returns nullptr on failure. mirror::Class* ResolveCompilingMethodsClass( - ScopedObjectAccess& soa, Handle<mirror::DexCache> dex_cache, - Handle<mirror::ClassLoader> class_loader, const DexCompilationUnit* mUnit) + ScopedObjectAccess& soa, const Handle<mirror::DexCache>& dex_cache, + const Handle<mirror::ClassLoader>& class_loader, const DexCompilationUnit* mUnit) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); // Resolve a field. Returns nullptr on failure, including incompatible class change. // NOTE: Unlike ClassLinker's ResolveField(), this method enforces is_static. mirror::ArtField* ResolveField( - ScopedObjectAccess& soa, Handle<mirror::DexCache> dex_cache, - Handle<mirror::ClassLoader> class_loader, const DexCompilationUnit* mUnit, + ScopedObjectAccess& soa, const Handle<mirror::DexCache>& dex_cache, + const Handle<mirror::ClassLoader>& class_loader, const DexCompilationUnit* mUnit, uint32_t field_idx, bool is_static) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); @@ -258,8 +258,8 @@ class CompilerDriver { // Resolve a method. Returns nullptr on failure, including incompatible class change. mirror::ArtMethod* ResolveMethod( - ScopedObjectAccess& soa, Handle<mirror::DexCache> dex_cache, - Handle<mirror::ClassLoader> class_loader, const DexCompilationUnit* mUnit, + ScopedObjectAccess& soa, const Handle<mirror::DexCache>& dex_cache, + const Handle<mirror::ClassLoader>& class_loader, const DexCompilationUnit* mUnit, uint32_t method_idx, InvokeType invoke_type) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); @@ -277,8 +277,8 @@ class CompilerDriver { // Can we fast-path an INVOKE? If no, returns 0. If yes, returns a non-zero opaque flags value // for ProcessedInvoke() and computes the necessary lowering info. int IsFastInvoke( - ScopedObjectAccess& soa, Handle<mirror::DexCache> dex_cache, - Handle<mirror::ClassLoader> class_loader, const DexCompilationUnit* mUnit, + ScopedObjectAccess& soa, const Handle<mirror::DexCache>& dex_cache, + const Handle<mirror::ClassLoader>& class_loader, const DexCompilationUnit* mUnit, mirror::Class* referrer_class, mirror::ArtMethod* resolved_method, InvokeType* invoke_type, MethodReference* target_method, const MethodReference* devirt_target, uintptr_t* direct_code, uintptr_t* direct_method) diff --git a/compiler/driver/compiler_driver_test.cc b/compiler/driver/compiler_driver_test.cc index 964dfeb5b1..4efd27d476 100644 --- a/compiler/driver/compiler_driver_test.cc +++ b/compiler/driver/compiler_driver_test.cc @@ -152,9 +152,10 @@ TEST_F(CompilerDriverTest, AbstractMethodErrorStub) { jobject class_loader; { ScopedObjectAccess soa(Thread::Current()); - CompileVirtualMethod(NullHandle<mirror::ClassLoader>(), "java.lang.Class", "isFinalizable", - "()Z"); - CompileDirectMethod(NullHandle<mirror::ClassLoader>(), "java.lang.Object", "<init>", "()V"); + StackHandleScope<1> hs(soa.Self()); + auto null_loader(hs.NewHandle<mirror::ClassLoader>(nullptr)); + CompileVirtualMethod(null_loader, "java.lang.Class", "isFinalizable", "()Z"); + CompileDirectMethod(null_loader, "java.lang.Object", "<init>", "()V"); class_loader = LoadDex("AbstractMethod"); } ASSERT_TRUE(class_loader != NULL); diff --git a/compiler/elf_writer_mclinker.cc b/compiler/elf_writer_mclinker.cc index 3dba426242..0e2721014a 100644 --- a/compiler/elf_writer_mclinker.cc +++ b/compiler/elf_writer_mclinker.cc @@ -361,11 +361,10 @@ void ElfWriterMclinker::FixupOatMethodOffsets(const std::vector<const DexFile*>& ClassLinker* linker = Runtime::Current()->GetClassLinker(); // Unchecked as we hold mutator_lock_ on entry. ScopedObjectAccessUnchecked soa(Thread::Current()); - StackHandleScope<1> hs(soa.Self()); + StackHandleScope<2> hs(soa.Self()); Handle<mirror::DexCache> dex_cache(hs.NewHandle(linker->FindDexCache(dex_file))); - method = linker->ResolveMethod(dex_file, method_idx, dex_cache, - NullHandle<mirror::ClassLoader>(), - NullHandle<mirror::ArtMethod>(), invoke_type); + auto class_loader(hs.NewHandle<mirror::ClassLoader>(nullptr)); + method = linker->ResolveMethod(dex_file, method_idx, dex_cache, class_loader, NULL, invoke_type); CHECK(method != NULL); } const CompiledMethod* compiled_method = diff --git a/compiler/image_writer.cc b/compiler/image_writer.cc index be53926ac8..70144c80fc 100644 --- a/compiler/image_writer.cc +++ b/compiler/image_writer.cc @@ -695,14 +695,15 @@ void ImageWriter::FixupMethod(ArtMethod* orig, ArtMethod* copy) { static ArtMethod* GetTargetMethod(const CompilerDriver::CallPatchInformation* patch) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { ClassLinker* class_linker = Runtime::Current()->GetClassLinker(); - StackHandleScope<1> hs(Thread::Current()); + StackHandleScope<2> hs(Thread::Current()); Handle<mirror::DexCache> dex_cache( hs.NewHandle(class_linker->FindDexCache(*patch->GetTargetDexFile()))); + auto class_loader(hs.NewHandle<mirror::ClassLoader>(nullptr)); ArtMethod* method = class_linker->ResolveMethod(*patch->GetTargetDexFile(), patch->GetTargetMethodIdx(), dex_cache, - NullHandle<mirror::ClassLoader>(), - NullHandle<mirror::ArtMethod>(), + class_loader, + NULL, patch->GetTargetInvokeType()); CHECK(method != NULL) << patch->GetTargetDexFile()->GetLocation() << " " << patch->GetTargetMethodIdx(); @@ -720,8 +721,11 @@ static Class* GetTargetType(const CompilerDriver::TypePatchInformation* patch) ClassLinker* class_linker = Runtime::Current()->GetClassLinker(); StackHandleScope<2> hs(Thread::Current()); Handle<mirror::DexCache> dex_cache(hs.NewHandle(class_linker->FindDexCache(patch->GetDexFile()))); - Class* klass = class_linker->ResolveType(patch->GetDexFile(), patch->GetTargetTypeIdx(), - dex_cache, NullHandle<mirror::ClassLoader>()); + auto class_loader(hs.NewHandle<mirror::ClassLoader>(nullptr)); + Class* klass = class_linker->ResolveType(patch->GetDexFile(), + patch->GetTargetTypeIdx(), + dex_cache, + class_loader); CHECK(klass != NULL) << patch->GetDexFile().GetLocation() << " " << patch->GetTargetTypeIdx(); CHECK(dex_cache->GetResolvedTypes()->Get(patch->GetTargetTypeIdx()) == klass) diff --git a/compiler/oat_test.cc b/compiler/oat_test.cc index 6812f3c9df..a7ee82edd3 100644 --- a/compiler/oat_test.cc +++ b/compiler/oat_test.cc @@ -154,8 +154,8 @@ TEST_F(OatTest, WriteRead) { } const char* descriptor = dex_file->GetClassDescriptor(class_def); StackHandleScope<1> hs(soa.Self()); - mirror::Class* klass = class_linker->FindClass(soa.Self(), descriptor, - NullHandle<mirror::ClassLoader>()); + auto loader(hs.NewHandle<mirror::ClassLoader>(nullptr)); + mirror::Class* klass = class_linker->FindClass(soa.Self(), descriptor, loader); const OatFile::OatClass oat_class = oat_dex_file->GetOatClass(i); CHECK_EQ(mirror::Class::Status::kStatusNotReady, oat_class.GetStatus()) << descriptor; diff --git a/compiler/oat_writer.cc b/compiler/oat_writer.cc index 5d532abdd6..bace25c84e 100644 --- a/compiler/oat_writer.cc +++ b/compiler/oat_writer.cc @@ -513,10 +513,9 @@ class OatWriter::InitImageMethodVisitor : public OatDexMethodVisitor { ScopedObjectAccessUnchecked soa(Thread::Current()); StackHandleScope<2> hs(soa.Self()); Handle<mirror::DexCache> dex_cache(hs.NewHandle(linker->FindDexCache(*dex_file_))); + auto class_loader = hs.NewHandle<mirror::ClassLoader>(nullptr); mirror::ArtMethod* method = linker->ResolveMethod(*dex_file_, it.GetMemberIndex(), dex_cache, - NullHandle<mirror::ClassLoader>(), - NullHandle<mirror::ArtMethod>(), - invoke_type); + class_loader, nullptr, invoke_type); CHECK(method != NULL); // Portable code offsets are set by ElfWriterMclinker::FixupCompiledCodeOffset after linking. method->SetQuickOatCodeOffset(offsets.code_offset_); |