diff options
author | 2018-12-07 18:04:10 +0000 | |
---|---|---|
committer | 2018-12-07 18:13:55 +0000 | |
commit | 91f1032505cfaec3aef51fc0a3085b213813f0ed (patch) | |
tree | 6469e772d9fb562d26dc1d22dd0b71844bbb743f /runtime/class_linker.cc | |
parent | 573b3877fac3c5a4a9703301502694fe7219b21c (diff) |
Revert^2 "Pass boot class path to ImageSpace::LoadBootImage."
This reverts commit db4b1deebf425be5f1d0f597d1ef540f19908324.
Fixed JDWP tests, see "Test:" stanzas below.
Change-Id: I6fb56ac990b78164cbd3f93c9f6df66e0dd9a813
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Test: Pixel 2 XL boots.
Test: m test-art-target-gtest
Test: testrunner.py --target --optimizing
Test: run-libcore-tests.sh --mode=device --variant=X64
Test: run-jdwp-tests.sh --mode=host --variant=X64
Test: run-jdwp-tests.sh --mode=device --variant=X64
Bug: 119868597
Diffstat (limited to 'runtime/class_linker.cc')
-rw-r--r-- | runtime/class_linker.cc | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc index c964dbcf59..e31fe6315b 100644 --- a/runtime/class_linker.cc +++ b/runtime/class_linker.cc @@ -1037,13 +1037,20 @@ bool ClassLinker::InitFromBootImage(std::string* error_msg) { runtime->SetSentinel(heap->AllocNonMovableObject<true>( self, java_lang_Object, java_lang_Object->GetObjectSize(), VoidFunctor())); - for (gc::space::ImageSpace* image_space : spaces) { + const std::vector<std::string>& boot_class_path = runtime->GetBootClassPath(); + if (boot_class_path.size() != spaces.size()) { + *error_msg = StringPrintf("Boot class path has %zu components but there are %zu image spaces.", + boot_class_path.size(), + spaces.size()); + return false; + } + for (size_t i = 0u, size = spaces.size(); i != size; ++i) { // Boot class loader, use a null handle. std::vector<std::unique_ptr<const DexFile>> dex_files; - if (!AddImageSpace(image_space, + if (!AddImageSpace(spaces[i], ScopedNullHandle<mirror::ClassLoader>(), - /*dex_elements=*/nullptr, - /*dex_location=*/nullptr, + /*dex_elements=*/ nullptr, + /*dex_location=*/ boot_class_path[i].c_str(), /*out*/&dex_files, error_msg)) { return false; @@ -1981,13 +1988,7 @@ bool ClassLinker::AddImageSpace( std::string dex_file_location(dex_cache->GetLocation()->ToModifiedUtf8()); // TODO: Only store qualified paths. // If non qualified, qualify it. - if (dex_file_location.find('/') == std::string::npos) { - std::string dex_location_path = dex_location; - const size_t pos = dex_location_path.find_last_of('/'); - CHECK_NE(pos, std::string::npos); - dex_location_path = dex_location_path.substr(0, pos + 1); // Keep trailing '/' - dex_file_location = dex_location_path + dex_file_location; - } + dex_file_location = OatFile::ResolveRelativeEncodedDexLocation(dex_location, dex_file_location); std::unique_ptr<const DexFile> dex_file = OpenOatDexFile(oat_file, dex_file_location.c_str(), error_msg); |