# HG changeset patch # User ksrini # Date 1496871828 25200 # Wed Jun 07 14:43:48 2017 -0700 # Node ID e4debd336341bd6f717315d7f72b7975f87cf3f5 # Parent 7c54889c0ec649ee04643e5cace434623d0dc667 [mq]: 8180334-00.patch diff --git a/make/launcher/Launcher-jdk.aot.gmk b/make/launcher/Launcher-jdk.aot.gmk --- a/make/launcher/Launcher-jdk.aot.gmk +++ b/make/launcher/Launcher-jdk.aot.gmk @@ -30,7 +30,7 @@ $(eval $(call SetupBuildLauncher, jaotc, \ MAIN_CLASS := jdk.tools.jaotc.Main, \ - JAVA_ARGS := -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI \ + EXTRA_JAVA_ARGS := -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI \ --add-exports=jdk.internal.vm.ci/jdk.vm.ci.aarch64=$(call CommaList, jdk.internal.vm.compiler jdk.aot) \ --add-exports=jdk.internal.vm.ci/jdk.vm.ci.amd64=$(call CommaList, jdk.internal.vm.compiler jdk.aot) \ --add-exports=jdk.internal.vm.ci/jdk.vm.ci.code=$(call CommaList, jdk.internal.vm.compiler jdk.aot) \ @@ -38,12 +38,13 @@ --add-exports=jdk.internal.vm.ci/jdk.vm.ci.code.stack=$(call CommaList, jdk.internal.vm.compiler jdk.aot) \ --add-exports=jdk.internal.vm.ci/jdk.vm.ci.common=$(call CommaList, jdk.internal.vm.compiler jdk.aot) \ --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot=$(call CommaList, jdk.internal.vm.compiler jdk.aot) \ - --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.aarch64=$(call CommaList, jdk.internal.vm.compiler jdk.aot) \ + , \ + JAVA_ARGS := --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.aarch64=$(call CommaList, jdk.internal.vm.compiler jdk.aot) \ --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.amd64=$(call CommaList, jdk.internal.vm.compiler jdk.aot) \ --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.sparc=$(call CommaList, jdk.internal.vm.compiler jdk.aot) \ --add-exports=jdk.internal.vm.ci/jdk.vm.ci.meta=$(call CommaList, jdk.internal.vm.compiler jdk.aot) \ --add-exports=jdk.internal.vm.ci/jdk.vm.ci.runtime=$(call CommaList, jdk.internal.vm.compiler jdk.aot) \ - --add-exports=jdk.internal.vm.ci/jdk.vm.ci.sparc=$(call CommaList, jdk.internal.vm.compiler jdk.aot) \ + --add-exports=jdk.internal.vm.ci/jdk.vm.ci.sparc=$(call CommaList, jdk.internal.vm.compiler jdk.aot) \ -XX:+UseAOT \ -Djvmci.UseProfilingInformation=false \ -Dgraal.UseExceptionProbability=false \ diff --git a/make/launcher/LauncherCommon.gmk b/make/launcher/LauncherCommon.gmk --- a/make/launcher/LauncherCommon.gmk +++ b/make/launcher/LauncherCommon.gmk @@ -66,7 +66,9 @@ # MAIN_MODULE The module of the main class to launch if different from the # current module # MAIN_CLASS The Java main class to launch -# JAVA_ARGS Processed into a -DJAVA_ARGS C flag +# JAVA_ARGS Processed into a -DJAVA_ARGS and added to CFLAGS +# EXTRA_JAVA_ARGS Processed into a -DEXTRA_JAVA_ARGS and is prependedi +# before JAVA_ARGS to CFLAGS # CFLAGS Additional CFLAGS # CFLAGS_windows Additional CFLAGS_windows # LIBS_unix Additional LIBS_unix @@ -104,6 +106,11 @@ endif ifneq ($$($1_JAVA_ARGS), ) + ifneq ($$($1_EXTRA_JAVA_ARGS), ) + $1_EXTRA_JAVA_ARGS_STR := '{ $$(strip $$(foreach a, \ + $$(addprefix -J, $$($1_EXTRA_JAVA_ARGS)), "$$a"$(COMMA) )) }' + $1_CFLAGS += -DEXTRA_JAVA_ARGS=$$($1_EXTRA_JAVA_ARGS_STR) + endif $1_JAVA_ARGS_STR := '{ $$(strip $$(foreach a, \ $$(addprefix -J, $$($1_JAVA_ARGS)) -m $$($1_MAIN_MODULE)/$$($1_MAIN_CLASS), "$$a"$(COMMA) )) }' $1_CFLAGS += -DJAVA_ARGS=$$($1_JAVA_ARGS_STR) diff --git a/src/java.base/share/native/launcher/defines.h b/src/java.base/share/native/launcher/defines.h --- a/src/java.base/share/native/launcher/defines.h +++ b/src/java.base/share/native/launcher/defines.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,17 +44,21 @@ #define DOT_VERSION "0.0" #ifdef JAVA_ARGS -#define HAS_JAVA_ARGS JNI_TRUE #ifdef PROGNAME static const char* const_progname = PROGNAME; #else static char* const_progname = NULL; #endif static const char* const_jargs[] = JAVA_ARGS; +#ifdef EXTRA_JAVA_ARGS +static const char* const_extra_jargs[] = EXTRA_JAVA_ARGS; +#else +static const char** const_extra_jargs = NULL; +#endif #else /* !JAVA_ARGS */ -#define HAS_JAVA_ARGS JNI_FALSE static const char* const_progname = "java"; static const char** const_jargs = NULL; +static const char** const_extra_jargs = NULL; static const char* const_appclasspath[] = { NULL }; #endif /* JAVA_ARGS */ diff --git a/src/java.base/share/native/launcher/main.c b/src/java.base/share/native/launcher/main.c --- a/src/java.base/share/native/launcher/main.c +++ b/src/java.base/share/native/launcher/main.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -85,6 +85,8 @@ { int margc; char** margv; + int jargc; + char** jargv; const jboolean const_javaw = JNI_TRUE; __initenv = _environ; @@ -95,10 +97,44 @@ { int margc; char** margv; + int jargc; + char** jargv; const jboolean const_javaw = JNI_FALSE; #endif /* JAVAW */ + { + int i, main_jargc, extra_jargc; + JLI_List list; - JLI_InitArgProcessing(!HAS_JAVA_ARGS, const_disable_argfile); + main_jargc = (sizeof(const_jargs) / sizeof(char *)) > 1 + ? sizeof(const_jargs) / sizeof(char *) + : 0; // ignore the null terminator index + + extra_jargc = (sizeof(const_extra_jargs) / sizeof(char *)) > 1 + ? sizeof(const_extra_jargs) / sizeof(char *) + : 0; // ignore the null terminator index + + if (main_jargc > 0 && extra_jargc > 0) { // combine extra java args + jargc = main_jargc + extra_jargc; + list = JLI_List_new(jargc + 1); + + for (i = 0 ; i < extra_jargc; i++) { + JLI_List_add(list, JLI_StringDup(const_extra_jargs[i])); + } + + for (i = 0 ; i < main_jargc ; i++) { + JLI_List_add(list, JLI_StringDup(const_jargs[i])); + } + + // terminate the list + JLI_List_add(list, NULL); + jargv = list->elements; + } else { // no extra args, business as usual + jargc = main_jargc; + jargv = (char **) const_jargs; + } + } + + JLI_InitArgProcessing(jargc > 0, const_disable_argfile); #ifdef _WIN32 { @@ -164,12 +200,12 @@ } #endif /* WIN32 */ return JLI_Launch(margc, margv, - sizeof(const_jargs) / sizeof(char *), const_jargs, + jargc, (const char**) jargv, 0, NULL, VERSION_STRING, DOT_VERSION, (const_progname != NULL) ? const_progname : *margv, (const_launcher != NULL) ? const_launcher : *margv, - HAS_JAVA_ARGS, + jargc > 0, const_cpwildcard, const_javaw, 0); } diff --git a/src/java.base/share/native/libjli/args.c b/src/java.base/share/native/libjli/args.c --- a/src/java.base/share/native/libjli/args.c +++ b/src/java.base/share/native/libjli/args.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -78,7 +78,7 @@ static jboolean stopExpansion = JNI_FALSE; static jboolean relaunch = JNI_FALSE; -void JLI_InitArgProcessing(jboolean isJava, jboolean disableArgFile) { +void JLI_InitArgProcessing(jboolean hasJavaArgs, jboolean disableArgFile) { // No expansion for relaunch if (argsCount != 1) { relaunch = JNI_TRUE; @@ -91,7 +91,7 @@ expectingNoDashArg = JNI_FALSE; // for tools, this value remains 0 all the time. - firstAppArgIndex = isJava ? NOT_FOUND : 0; + firstAppArgIndex = hasJavaArgs ? 0: NOT_FOUND; } int JLI_GetAppArgIndex() { diff --git a/src/java.base/share/native/libjli/java.c b/src/java.base/share/native/libjli/java.c --- a/src/java.base/share/native/libjli/java.c +++ b/src/java.base/share/native/libjli/java.c @@ -246,6 +246,10 @@ DumpState(); if (JLI_IsTraceLauncher()) { int i; + printf("Java args:\n"); + for (i = 0; i < jargc ; i++) { + printf("jargv[%d] = %s\n", i, jargv[i]); + } printf("Command line args:\n"); for (i = 0; i < argc ; i++) { printf("argv[%d] = %s\n", i, argv[i]); diff --git a/src/java.base/share/native/libjli/jli_util.h b/src/java.base/share/native/libjli/jli_util.h --- a/src/java.base/share/native/libjli/jli_util.h +++ b/src/java.base/share/native/libjli/jli_util.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -133,7 +133,7 @@ char *JLI_List_join(JLI_List l, char sep); JLI_List JLI_List_split(const char *str, char sep); -void JLI_InitArgProcessing(jboolean isJava, jboolean disableArgFile); +void JLI_InitArgProcessing(jboolean hasJavaArgs, jboolean disableArgFile); JLI_List JLI_PreprocessArg(const char *arg); jboolean JLI_AddArgsFromEnvVar(JLI_List args, const char *var_name);