Allow more than one dex2oat extra option
All extra options are provided as one argument to dex2oat. The patch splits all options to individual ones. Change-Id: Ied65bb9cf38b114611e88a8d5d86305021700d0b Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> Signed-off-by: Yevgeny Rouban <yevgeny.y.rouban@intel.com>
This commit is contained in:
parent
e1e3d27854
commit
b0d8d00b29
@ -621,6 +621,38 @@ static void run_dexopt(int zip_fd, int odex_fd, const char* input_file_name,
|
|||||||
ALOGE("execl(%s) failed: %s\n", DEX_OPT_BIN, strerror(errno));
|
ALOGE("execl(%s) failed: %s\n", DEX_OPT_BIN, strerror(errno));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int split_count(const char *str)
|
||||||
|
{
|
||||||
|
char *ctx;
|
||||||
|
int count = 0;
|
||||||
|
char buf[PROPERTY_VALUE_MAX];
|
||||||
|
|
||||||
|
strncpy(buf, str, sizeof(buf));
|
||||||
|
char *pBuf = buf;
|
||||||
|
|
||||||
|
while(strtok_r(pBuf, " ", &ctx) != NULL) {
|
||||||
|
count++;
|
||||||
|
pBuf = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int split(char *buf, char **argv)
|
||||||
|
{
|
||||||
|
char *ctx;
|
||||||
|
int count = 0;
|
||||||
|
char *tok;
|
||||||
|
char *pBuf = buf;
|
||||||
|
|
||||||
|
while((tok = strtok_r(pBuf, " ", &ctx)) != NULL) {
|
||||||
|
argv[count++] = tok;
|
||||||
|
pBuf = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
static void run_patchoat(int input_fd, int oat_fd, const char* input_file_name,
|
static void run_patchoat(int input_fd, int oat_fd, const char* input_file_name,
|
||||||
const char* output_file_name, const char *pkgname __unused, const char *instruction_set)
|
const char* output_file_name, const char *pkgname __unused, const char *instruction_set)
|
||||||
{
|
{
|
||||||
@ -693,7 +725,8 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name,
|
|||||||
dex2oat_isa_features, NULL) > 0;
|
dex2oat_isa_features, NULL) > 0;
|
||||||
|
|
||||||
char dex2oat_flags[PROPERTY_VALUE_MAX];
|
char dex2oat_flags[PROPERTY_VALUE_MAX];
|
||||||
bool have_dex2oat_flags = property_get("dalvik.vm.dex2oat-flags", dex2oat_flags, NULL) > 0;
|
int dex2oat_flags_count = property_get("dalvik.vm.dex2oat-flags",
|
||||||
|
dex2oat_flags, NULL) <= 0 ? 0 : split_count(dex2oat_flags);
|
||||||
ALOGV("dalvik.vm.dex2oat-flags=%s\n", dex2oat_flags);
|
ALOGV("dalvik.vm.dex2oat-flags=%s\n", dex2oat_flags);
|
||||||
|
|
||||||
// If we booting without the real /data, don't spend time compiling.
|
// If we booting without the real /data, don't spend time compiling.
|
||||||
@ -771,7 +804,7 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name,
|
|||||||
+ (have_dex2oat_Xms_flag ? 2 : 0)
|
+ (have_dex2oat_Xms_flag ? 2 : 0)
|
||||||
+ (have_dex2oat_Xmx_flag ? 2 : 0)
|
+ (have_dex2oat_Xmx_flag ? 2 : 0)
|
||||||
+ (have_dex2oat_compiler_filter_flag ? 1 : 0)
|
+ (have_dex2oat_compiler_filter_flag ? 1 : 0)
|
||||||
+ (have_dex2oat_flags ? 1 : 0)];
|
+ dex2oat_flags_count];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
argv[i++] = (char*)DEX2OAT_BIN;
|
argv[i++] = (char*)DEX2OAT_BIN;
|
||||||
argv[i++] = zip_fd_arg;
|
argv[i++] = zip_fd_arg;
|
||||||
@ -799,14 +832,14 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name,
|
|||||||
if (have_dex2oat_compiler_filter_flag) {
|
if (have_dex2oat_compiler_filter_flag) {
|
||||||
argv[i++] = dex2oat_compiler_filter_arg;
|
argv[i++] = dex2oat_compiler_filter_arg;
|
||||||
}
|
}
|
||||||
if (have_dex2oat_flags) {
|
if (dex2oat_flags_count) {
|
||||||
argv[i++] = dex2oat_flags;
|
i += split(dex2oat_flags, argv + i);
|
||||||
}
|
}
|
||||||
// Do not add after dex2oat_flags, they should override others for debugging.
|
// Do not add after dex2oat_flags, they should override others for debugging.
|
||||||
argv[i] = NULL;
|
argv[i] = NULL;
|
||||||
|
|
||||||
execv(DEX2OAT_BIN, (char* const *)argv);
|
execv(DEX2OAT_BIN, (char* const *)argv);
|
||||||
ALOGE("execl(%s) failed: %s\n", DEX2OAT_BIN, strerror(errno));
|
ALOGE("execv(%s) failed: %s\n", DEX2OAT_BIN, strerror(errno));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int wait_child(pid_t pid)
|
static int wait_child(pid_t pid)
|
||||||
|
Loading…
Reference in New Issue
Block a user