Merge "Create arch specific cache dirs during zygote startup."
This commit is contained in:
committed by
Android (Google) Code Review
commit
dfacf855fd
@@ -15,6 +15,7 @@
|
||||
#include <cutils/properties.h>
|
||||
#include <cutils/trace.h>
|
||||
#include <android_runtime/AndroidRuntime.h>
|
||||
#include <private/android_filesystem_config.h> // for AID_SYSTEM
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -137,6 +138,44 @@ static size_t computeArgBlockSize(int argc, char* const argv[]) {
|
||||
return (end - start);
|
||||
}
|
||||
|
||||
static void maybeCreateDalvikCache() {
|
||||
#if defined(__aarch64__)
|
||||
static const char kInstructionSet[] = "arm64";
|
||||
#elif defined(__x86_64__)
|
||||
static const char kInstructionSet[] = "x86_64";
|
||||
#elif defined(__arm__)
|
||||
static const char kInstructionSet[] = "arm";
|
||||
#elif defined(__x86__)
|
||||
static const char kInstructionSet[] = "x86";
|
||||
#elif defined (__mips__)
|
||||
static const char kInstructionSet[] = "mips";
|
||||
#else
|
||||
#error "Unknown instruction set"
|
||||
#endif
|
||||
const char* androidRoot = getenv("ANDROID_DATA");
|
||||
LOG_ALWAYS_FATAL_IF(androidRoot == NULL, "ANDROID_DATA environment variable unset");
|
||||
|
||||
char dalvikCacheDir[PATH_MAX];
|
||||
const int numChars = snprintf(dalvikCacheDir, PATH_MAX,
|
||||
"%s/dalvik-cache/%s", androidRoot, kInstructionSet);
|
||||
LOG_ALWAYS_FATAL_IF((numChars >= PATH_MAX || numChars < 0),
|
||||
"Error constructing dalvik cache : %s", strerror(errno));
|
||||
|
||||
int result = mkdir(dalvikCacheDir, 0771);
|
||||
LOG_ALWAYS_FATAL_IF((result < 0 && errno != EEXIST),
|
||||
"Error creating cache dir %s : %s", dalvikCacheDir, strerror(errno));
|
||||
|
||||
// We always perform these steps because the directory might
|
||||
// already exist, with wider permissions and a different owner
|
||||
// than we'd like.
|
||||
result = chown(dalvikCacheDir, AID_SYSTEM, AID_SYSTEM);
|
||||
LOG_ALWAYS_FATAL_IF((result < 0), "Error changing dalvik-cache ownership : %s", strerror(errno));
|
||||
|
||||
result = chmod(dalvikCacheDir, 0771);
|
||||
LOG_ALWAYS_FATAL_IF((result < 0),
|
||||
"Error changing dalvik-cache permissions : %s", strerror(errno));
|
||||
}
|
||||
|
||||
#if defined(__LP64__)
|
||||
static const char ABI_LIST_PROPERTY[] = "ro.product.cpu.abilist64";
|
||||
static const char ZYGOTE_NICE_NAME[] = "zygote64";
|
||||
@@ -223,6 +262,9 @@ int main(int argc, char* const argv[])
|
||||
args.add(application ? String8("application") : String8("tool"));
|
||||
runtime.setClassNameAndArgs(className, argc - i, argv + i);
|
||||
} else {
|
||||
// We're in zygote mode.
|
||||
maybeCreateDalvikCache();
|
||||
|
||||
if (startSystemServer) {
|
||||
args.add(String8("start-system-server"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user