summaryrefslogtreecommitdiff
path: root/libartbase/base/file_utils.cc
diff options
context:
space:
mode:
author Jiakai Zhang <jiakaiz@google.com> 2023-02-27 16:21:11 +0000
committer Jiakai Zhang <jiakaiz@google.com> 2023-02-27 18:20:36 +0000
commit51754b860868fc5629da6b572e6966448834e293 (patch)
tree2bd5d496b1ddcf280db3cde8d1f93540c16394bc /libartbase/base/file_utils.cc
parent771b44f32420c613acdf2046777c6df7d68a2734 (diff)
Revert "Add the mainline framework boot image extension to the default."
This reverts commit c66398d182443208e73133705da1a25a3794fc8e. Reason for revert: Maybe(?) caused regressions on Golem. Bug: 270958761 Change-Id: If9f27d2cbe2d22a1f4bd1e0efab8f85d0e1f1a78
Diffstat (limited to 'libartbase/base/file_utils.cc')
-rw-r--r--libartbase/base/file_utils.cc119
1 files changed, 22 insertions, 97 deletions
diff --git a/libartbase/base/file_utils.cc b/libartbase/base/file_utils.cc
index bf0422a954..239628978e 100644
--- a/libartbase/base/file_utils.cc
+++ b/libartbase/base/file_utils.cc
@@ -40,7 +40,6 @@
#include <memory>
#include <sstream>
-#include <vector>
#include "android-base/file.h"
#include "android-base/logging.h"
@@ -51,7 +50,6 @@
#include "base/os.h"
#include "base/stl_util.h"
#include "base/unix_file/fd_file.h"
-#include "base/utils.h"
#if defined(__APPLE__)
#include <crt_externs.h>
@@ -80,7 +78,6 @@ static constexpr const char* kAndroidConscryptRootEnvVar = "ANDROID_CONSCRYPT_RO
static constexpr const char* kAndroidI18nRootEnvVar = "ANDROID_I18N_ROOT";
static constexpr const char* kApexDefaultPath = "/apex/";
static constexpr const char* kArtApexDataEnvVar = "ART_APEX_DATA";
-static constexpr const char* kBootImageStem = "boot";
// Get the "root" directory containing the "lib" directory where this instance
// of the libartbase library (which contains `GetRootContainingLibartbase`) is
@@ -301,73 +298,10 @@ std::string GetPrebuiltPrimaryBootImageDir() {
return GetPrebuiltPrimaryBootImageDir(android_root);
}
-static std::string GetFirstMainlineFrameworkLibraryName(std::string* error_msg) {
- const char* env_bcp = getenv("BOOTCLASSPATH");
- const char* env_dex2oat_bcp = getenv("DEX2OATBOOTCLASSPATH");
- if (env_bcp == nullptr || env_dex2oat_bcp == nullptr) {
- *error_msg = "BOOTCLASSPATH and DEX2OATBOOTCLASSPATH must not be empty";
- return "";
- }
-
- // DEX2OATBOOTCLASSPATH contains core libraries and framework libraries. We used to only compile
- // those libraries. Now we compile mainline framework libraries as well, and we have repurposed
- // DEX2OATBOOTCLASSPATH to indicate the separation between mainline framework libraries and other
- // libraries.
- std::string_view mainline_bcp(env_bcp);
- if (!android::base::ConsumePrefix(&mainline_bcp, env_dex2oat_bcp)) {
- *error_msg = "DEX2OATBOOTCLASSPATH must be a prefix of BOOTCLASSPATH";
- return "";
- }
-
- std::vector<std::string_view> mainline_bcp_jars;
- Split(mainline_bcp, ':', &mainline_bcp_jars);
- if (mainline_bcp_jars.empty()) {
- *error_msg = "No mainline framework library found";
- return "";
- }
-
- std::string jar_name = android::base::Basename(mainline_bcp_jars[0]);
-
- std::string_view library_name(jar_name);
- if (!android::base::ConsumeSuffix(&library_name, ".jar")) {
- *error_msg = "Invalid mainline framework jar: " + jar_name;
- return "";
- }
-
- return std::string(library_name);
-}
-
-// Returns true when no error occurs, even if the extension doesn't exist.
-static bool MaybeAppendBootImageMainlineExtension(const std::string& android_root,
- /*inout*/ std::string* location,
- /*out*/ std::string* error_msg) {
- if (!kIsTargetAndroid) {
- return true;
- }
- // Due to how the runtime determines the mapping between boot images and bootclasspath jars, the
- // name of the boot image extension must be in the format of
- // `<primary-boot-image-stem>-<first-library-name>.art`.
- std::string library_name = GetFirstMainlineFrameworkLibraryName(error_msg);
- if (library_name.empty()) {
- return false;
- }
- std::string mainline_extension_location = StringPrintf(
- "%s/framework/%s-%s.art", android_root.c_str(), kBootImageStem, library_name.c_str());
- std::string mainline_extension_path =
- GetSystemImageFilename(mainline_extension_location.c_str(), kRuntimeISA);
- if (!OS::FileExists(mainline_extension_path.c_str(), /*check_file_type=*/true)) {
- // This is expected when the ART module is preloaded on an old source tree that doesn't
- // dexpreopt mainline BCP jars, so it shouldn't be considered as an error.
- return true;
- }
- *location += ":" + mainline_extension_location;
- return true;
-}
-
-std::string GetDefaultBootImageLocationSafe(const std::string& android_root,
- bool deny_art_apex_data_files,
- std::string* error_msg) {
+std::string GetDefaultBootImageLocation(const std::string& android_root,
+ bool deny_art_apex_data_files) {
constexpr static const char* kEtcBootImageProf = "etc/boot-image.prof";
+ constexpr static const char* kBootImageStem = "boot";
constexpr static const char* kMinimalBootImageStem = "boot_minimal";
// If an update for the ART module has been been installed, a single boot image for the entire
@@ -413,37 +347,28 @@ std::string GetDefaultBootImageLocationSafe(const std::string& android_root,
PLOG(ERROR) << "Minimal boot image check failed, could not stat: " << boot_image_filename;
}
}
-
- // Boot image consists of three parts:
+ // Boot image consists of two parts:
// - the primary boot image (contains the Core Libraries)
- // - the boot image framework extension (contains framework libraries)
- // - the boot image mainline extension (contains mainline framework libraries)
- // Typically "/system/framework/boot.art!/apex/com.android.art/etc/boot-image.prof:
- // /system/framework/boot-framework.art!/system/etc/boot-image.prof:
- // /system/framework/boot-framework-adservices.art".
-
- std::string location = StringPrintf("%s/%s.art!%s/%s:%s/framework/%s-framework.art!%s/%s",
- GetPrebuiltPrimaryBootImageDir(android_root).c_str(),
- kBootImageStem,
- kAndroidArtApexDefaultPath,
- kEtcBootImageProf,
- android_root.c_str(),
- kBootImageStem,
- android_root.c_str(),
- kEtcBootImageProf);
- if (!MaybeAppendBootImageMainlineExtension(android_root, &location, error_msg)) {
+ // - the boot image extensions (contains framework libraries)
+ // Typically "/apex/com.android.art/javalib/boot.art!/apex/com.android.art/etc/boot-image.prof:
+ // /system/framework/boot-framework.art!/system/etc/boot-image.prof".
+ return StringPrintf("%s/%s.art!%s/%s:%s/framework/%s-framework.art!%s/%s",
+ GetPrebuiltPrimaryBootImageDir(android_root).c_str(),
+ kBootImageStem,
+ kAndroidArtApexDefaultPath,
+ kEtcBootImageProf,
+ android_root.c_str(),
+ kBootImageStem,
+ android_root.c_str(),
+ kEtcBootImageProf);
+}
+
+std::string GetDefaultBootImageLocation(std::string* error_msg) {
+ std::string android_root = GetAndroidRootSafe(error_msg);
+ if (android_root.empty()) {
return "";
}
- return location;
-}
-
-std::string GetDefaultBootImageLocation(const std::string& android_root,
- bool deny_art_apex_data_files) {
- std::string error_msg;
- std::string location =
- GetDefaultBootImageLocationSafe(android_root, deny_art_apex_data_files, &error_msg);
- CHECK(!location.empty()) << error_msg;
- return location;
+ return GetDefaultBootImageLocation(android_root, /*deny_art_apex_data_files=*/false);
}
std::string GetJitZygoteBootImageLocation() {