1 /* |
1 /* |
2 * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 1995, 2016, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. Oracle designates this |
7 * published by the Free Software Foundation. Oracle designates this |
76 static const char *_launcher_name; |
76 static const char *_launcher_name; |
77 static jboolean _is_java_args = JNI_FALSE; |
77 static jboolean _is_java_args = JNI_FALSE; |
78 static jboolean _have_classpath = JNI_FALSE; |
78 static jboolean _have_classpath = JNI_FALSE; |
79 static const char *_fVersion; |
79 static const char *_fVersion; |
80 static jboolean _wc_enabled = JNI_FALSE; |
80 static jboolean _wc_enabled = JNI_FALSE; |
81 static jint _ergo_policy = DEFAULT_POLICY; |
|
82 |
81 |
83 /* |
82 /* |
84 * Entries for splash screen environment variables. |
83 * Entries for splash screen environment variables. |
85 * putenv is performed in SelectVersion. We need |
84 * putenv is performed in SelectVersion. We need |
86 * them in memory until UnsetEnv, so they are made static |
85 * them in memory until UnsetEnv, so they are made static |
216 const char* pname, /* program name */ |
215 const char* pname, /* program name */ |
217 const char* lname, /* launcher name */ |
216 const char* lname, /* launcher name */ |
218 jboolean javaargs, /* JAVA_ARGS */ |
217 jboolean javaargs, /* JAVA_ARGS */ |
219 jboolean cpwildcard, /* classpath wildcard*/ |
218 jboolean cpwildcard, /* classpath wildcard*/ |
220 jboolean javaw, /* windows-only javaw */ |
219 jboolean javaw, /* windows-only javaw */ |
221 jint ergo /* ergonomics class policy */ |
220 jint ergo /* unused */ |
222 ) |
221 ) |
223 { |
222 { |
224 int mode = LM_UNKNOWN; |
223 int mode = LM_UNKNOWN; |
225 char *what = NULL; |
224 char *what = NULL; |
226 char *main_class = NULL; |
225 char *main_class = NULL; |
234 _fVersion = fullversion; |
233 _fVersion = fullversion; |
235 _launcher_name = lname; |
234 _launcher_name = lname; |
236 _program_name = pname; |
235 _program_name = pname; |
237 _is_java_args = javaargs; |
236 _is_java_args = javaargs; |
238 _wc_enabled = cpwildcard; |
237 _wc_enabled = cpwildcard; |
239 _ergo_policy = ergo; |
|
240 |
238 |
241 InitLauncher(javaw); |
239 InitLauncher(javaw); |
242 DumpState(); |
240 DumpState(); |
243 if (JLI_IsTraceLauncher()) { |
241 if (JLI_IsTraceLauncher()) { |
244 int i; |
242 int i; |
429 PrintUsage(env, printXUsage); |
427 PrintUsage(env, printXUsage); |
430 CHECK_EXCEPTION_LEAVE(1); |
428 CHECK_EXCEPTION_LEAVE(1); |
431 LEAVE(); |
429 LEAVE(); |
432 } |
430 } |
433 |
431 |
434 FreeKnownVMs(); /* after last possible PrintUsage() */ |
432 FreeKnownVMs(); /* after last possible PrintUsage */ |
435 |
433 |
436 if (JLI_IsTraceLauncher()) { |
434 if (JLI_IsTraceLauncher()) { |
437 end = CounterGet(); |
435 end = CounterGet(); |
438 JLI_TraceLauncher("%ld micro seconds to InitializeJVM\n", |
436 JLI_TraceLauncher("%ld micro seconds to InitializeJVM\n", |
439 (long)(jint)Counter2Micros(end-start)); |
437 (long)(jint)Counter2Micros(end-start)); |
667 *pargc = newArgvIdx; |
665 *pargc = newArgvIdx; |
668 |
666 |
669 /* use the default VM type if not specified (no alias processing) */ |
667 /* use the default VM type if not specified (no alias processing) */ |
670 if (jvmtype == NULL) { |
668 if (jvmtype == NULL) { |
671 char* result = knownVMs[0].name+1; |
669 char* result = knownVMs[0].name+1; |
672 /* Use a different VM type if we are on a server class machine? */ |
|
673 if ((knownVMs[0].flag == VM_IF_SERVER_CLASS) && |
|
674 (ServerClassMachine() == JNI_TRUE)) { |
|
675 result = knownVMs[0].server_class+1; |
|
676 } |
|
677 JLI_TraceLauncher("Default VM: %s\n", result); |
670 JLI_TraceLauncher("Default VM: %s\n", result); |
678 return result; |
671 return result; |
679 } |
672 } |
680 |
673 |
681 /* if using an alternate VM, no alias processing */ |
674 /* if using an alternate VM, no alias processing */ |
1775 jmethodID showSettingsID; |
1768 jmethodID showSettingsID; |
1776 jstring joptString; |
1769 jstring joptString; |
1777 jclass cls = GetLauncherHelperClass(env); |
1770 jclass cls = GetLauncherHelperClass(env); |
1778 NULL_CHECK(cls); |
1771 NULL_CHECK(cls); |
1779 NULL_CHECK(showSettingsID = (*env)->GetStaticMethodID(env, cls, |
1772 NULL_CHECK(showSettingsID = (*env)->GetStaticMethodID(env, cls, |
1780 "showSettings", "(ZLjava/lang/String;JJJZ)V")); |
1773 "showSettings", "(ZLjava/lang/String;JJJ)V")); |
1781 NULL_CHECK(joptString = (*env)->NewStringUTF(env, optString)); |
1774 NULL_CHECK(joptString = (*env)->NewStringUTF(env, optString)); |
1782 (*env)->CallStaticVoidMethod(env, cls, showSettingsID, |
1775 (*env)->CallStaticVoidMethod(env, cls, showSettingsID, |
1783 USE_STDERR, |
1776 USE_STDERR, |
1784 joptString, |
1777 joptString, |
1785 (jlong)initialHeapSize, |
1778 (jlong)initialHeapSize, |
1786 (jlong)maxHeapSize, |
1779 (jlong)maxHeapSize, |
1787 (jlong)threadStackSize, |
1780 (jlong)threadStackSize); |
1788 ServerClassMachine()); |
|
1789 } |
1781 } |
1790 |
1782 |
1791 /** |
1783 /** |
1792 * List modules supported by the runtime |
1784 * List modules supported by the runtime |
1793 */ |
1785 */ |
1810 * Prints default usage or the Xusage message, see sun.launcher.LauncherHelper.java |
1802 * Prints default usage or the Xusage message, see sun.launcher.LauncherHelper.java |
1811 */ |
1803 */ |
1812 static void |
1804 static void |
1813 PrintUsage(JNIEnv* env, jboolean doXUsage) |
1805 PrintUsage(JNIEnv* env, jboolean doXUsage) |
1814 { |
1806 { |
1815 jmethodID initHelp, vmSelect, vmSynonym, vmErgo, printHelp, printXUsageMessage; |
1807 jmethodID initHelp, vmSelect, vmSynonym, printHelp, printXUsageMessage; |
1816 jstring jprogname, vm1, vm2; |
1808 jstring jprogname, vm1, vm2; |
1817 int i; |
1809 int i; |
1818 jclass cls = GetLauncherHelperClass(env); |
1810 jclass cls = GetLauncherHelperClass(env); |
1819 NULL_CHECK(cls); |
1811 NULL_CHECK(cls); |
1820 if (doXUsage) { |
1812 if (doXUsage) { |
1829 "(Ljava/lang/String;Ljava/lang/String;)V")); |
1821 "(Ljava/lang/String;Ljava/lang/String;)V")); |
1830 |
1822 |
1831 NULL_CHECK(vmSynonym = (*env)->GetStaticMethodID(env, cls, |
1823 NULL_CHECK(vmSynonym = (*env)->GetStaticMethodID(env, cls, |
1832 "appendVmSynonymMessage", |
1824 "appendVmSynonymMessage", |
1833 "(Ljava/lang/String;Ljava/lang/String;)V")); |
1825 "(Ljava/lang/String;Ljava/lang/String;)V")); |
1834 NULL_CHECK(vmErgo = (*env)->GetStaticMethodID(env, cls, |
|
1835 "appendVmErgoMessage", "(ZLjava/lang/String;)V")); |
|
1836 |
1826 |
1837 NULL_CHECK(printHelp = (*env)->GetStaticMethodID(env, cls, |
1827 NULL_CHECK(printHelp = (*env)->GetStaticMethodID(env, cls, |
1838 "printHelpMessage", "(Z)V")); |
1828 "printHelpMessage", "(Z)V")); |
1839 |
1829 |
1840 NULL_CHECK(jprogname = (*env)->NewStringUTF(env, _program_name)); |
1830 NULL_CHECK(jprogname = (*env)->NewStringUTF(env, _program_name)); |
1843 (*env)->CallStaticVoidMethod(env, cls, initHelp, jprogname); |
1833 (*env)->CallStaticVoidMethod(env, cls, initHelp, jprogname); |
1844 CHECK_EXCEPTION_RETURN(); |
1834 CHECK_EXCEPTION_RETURN(); |
1845 |
1835 |
1846 |
1836 |
1847 /* Assemble the other variant part of the usage */ |
1837 /* Assemble the other variant part of the usage */ |
1848 if ((knownVMs[0].flag == VM_KNOWN) || |
|
1849 (knownVMs[0].flag == VM_IF_SERVER_CLASS)) { |
|
1850 NULL_CHECK(vm1 = (*env)->NewStringUTF(env, knownVMs[0].name)); |
|
1851 NULL_CHECK(vm2 = (*env)->NewStringUTF(env, knownVMs[0].name+1)); |
|
1852 (*env)->CallStaticVoidMethod(env, cls, vmSelect, vm1, vm2); |
|
1853 CHECK_EXCEPTION_RETURN(); |
|
1854 } |
|
1855 for (i=1; i<knownVMsCount; i++) { |
1838 for (i=1; i<knownVMsCount; i++) { |
1856 if (knownVMs[i].flag == VM_KNOWN) { |
1839 if (knownVMs[i].flag == VM_KNOWN) { |
1857 NULL_CHECK(vm1 = (*env)->NewStringUTF(env, knownVMs[i].name)); |
1840 NULL_CHECK(vm1 = (*env)->NewStringUTF(env, knownVMs[i].name)); |
1858 NULL_CHECK(vm2 = (*env)->NewStringUTF(env, knownVMs[i].name+1)); |
1841 NULL_CHECK(vm2 = (*env)->NewStringUTF(env, knownVMs[i].name+1)); |
1859 (*env)->CallStaticVoidMethod(env, cls, vmSelect, vm1, vm2); |
1842 (*env)->CallStaticVoidMethod(env, cls, vmSelect, vm1, vm2); |
1865 NULL_CHECK(vm1 = (*env)->NewStringUTF(env, knownVMs[i].name)); |
1848 NULL_CHECK(vm1 = (*env)->NewStringUTF(env, knownVMs[i].name)); |
1866 NULL_CHECK(vm2 = (*env)->NewStringUTF(env, knownVMs[i].alias+1)); |
1849 NULL_CHECK(vm2 = (*env)->NewStringUTF(env, knownVMs[i].alias+1)); |
1867 (*env)->CallStaticVoidMethod(env, cls, vmSynonym, vm1, vm2); |
1850 (*env)->CallStaticVoidMethod(env, cls, vmSynonym, vm1, vm2); |
1868 CHECK_EXCEPTION_RETURN(); |
1851 CHECK_EXCEPTION_RETURN(); |
1869 } |
1852 } |
1870 } |
|
1871 |
|
1872 /* The first known VM is the default */ |
|
1873 { |
|
1874 jboolean isServerClassMachine = ServerClassMachine(); |
|
1875 |
|
1876 const char* defaultVM = knownVMs[0].name+1; |
|
1877 if ((knownVMs[0].flag == VM_IF_SERVER_CLASS) && isServerClassMachine) { |
|
1878 defaultVM = knownVMs[0].server_class+1; |
|
1879 } |
|
1880 |
|
1881 NULL_CHECK(vm1 = (*env)->NewStringUTF(env, defaultVM)); |
|
1882 (*env)->CallStaticVoidMethod(env, cls, vmErgo, isServerClassMachine, vm1); |
|
1883 CHECK_EXCEPTION_RETURN(); |
|
1884 } |
1853 } |
1885 |
1854 |
1886 /* Complete the usage message and print to stderr*/ |
1855 /* Complete the usage message and print to stderr*/ |
1887 (*env)->CallStaticVoidMethod(env, cls, printHelp, USE_STDERR); |
1856 (*env)->CallStaticVoidMethod(env, cls, printHelp, USE_STDERR); |
1888 } |
1857 } |
2009 } else if (!JLI_StrCCmp(tmpPtr, "IGNORE")) { |
1978 } else if (!JLI_StrCCmp(tmpPtr, "IGNORE")) { |
2010 vmType = VM_IGNORE; |
1979 vmType = VM_IGNORE; |
2011 } else if (!JLI_StrCCmp(tmpPtr, "ERROR")) { |
1980 } else if (!JLI_StrCCmp(tmpPtr, "ERROR")) { |
2012 vmType = VM_ERROR; |
1981 vmType = VM_ERROR; |
2013 } else if (!JLI_StrCCmp(tmpPtr, "IF_SERVER_CLASS")) { |
1982 } else if (!JLI_StrCCmp(tmpPtr, "IF_SERVER_CLASS")) { |
2014 tmpPtr += JLI_StrCSpn(tmpPtr, whiteSpace); |
1983 /* ignored */ |
2015 if (*tmpPtr != 0) { |
|
2016 tmpPtr += JLI_StrSpn(tmpPtr, whiteSpace); |
|
2017 } |
|
2018 if (*tmpPtr == 0) { |
|
2019 JLI_ReportErrorMessage(CFG_WARN4, lineno, jvmCfgName); |
|
2020 } else { |
|
2021 /* Null terminate server class VM name */ |
|
2022 serverClassVMName = tmpPtr; |
|
2023 tmpPtr += JLI_StrCSpn(tmpPtr, whiteSpace); |
|
2024 *tmpPtr = 0; |
|
2025 vmType = VM_IF_SERVER_CLASS; |
|
2026 } |
|
2027 } else { |
1984 } else { |
2028 JLI_ReportErrorMessage(CFG_WARN5, lineno, &jvmCfgName[0]); |
1985 JLI_ReportErrorMessage(CFG_WARN5, lineno, &jvmCfgName[0]); |
2029 vmType = VM_KNOWN; |
1986 vmType = VM_KNOWN; |
2030 } |
1987 } |
2031 } |
1988 } |
2041 case VM_ALIASED_TO: |
1998 case VM_ALIASED_TO: |
2042 knownVMs[cnt].alias = JLI_StringDup(altVMName); |
1999 knownVMs[cnt].alias = JLI_StringDup(altVMName); |
2043 JLI_TraceLauncher(" name: %s vmType: %s alias: %s\n", |
2000 JLI_TraceLauncher(" name: %s vmType: %s alias: %s\n", |
2044 knownVMs[cnt].name, "VM_ALIASED_TO", knownVMs[cnt].alias); |
2001 knownVMs[cnt].name, "VM_ALIASED_TO", knownVMs[cnt].alias); |
2045 break; |
2002 break; |
2046 case VM_IF_SERVER_CLASS: |
|
2047 knownVMs[cnt].server_class = JLI_StringDup(serverClassVMName); |
|
2048 JLI_TraceLauncher(" name: %s vmType: %s server_class: %s\n", |
|
2049 knownVMs[cnt].name, "VM_IF_SERVER_CLASS", knownVMs[cnt].server_class); |
|
2050 break; |
|
2051 } |
2003 } |
2052 cnt++; |
2004 cnt++; |
2053 } |
2005 } |
2054 } |
2006 } |
2055 fclose(jvmCfg); |
2007 fclose(jvmCfg); |
2265 printf("\tjavargs:%s\n", (_is_java_args == JNI_TRUE) ? "on" : "off"); |
2211 printf("\tjavargs:%s\n", (_is_java_args == JNI_TRUE) ? "on" : "off"); |
2266 printf("\tprogram name:%s\n", GetProgramName()); |
2212 printf("\tprogram name:%s\n", GetProgramName()); |
2267 printf("\tlauncher name:%s\n", GetLauncherName()); |
2213 printf("\tlauncher name:%s\n", GetLauncherName()); |
2268 printf("\tjavaw:%s\n", (IsJavaw() == JNI_TRUE) ? "on" : "off"); |
2214 printf("\tjavaw:%s\n", (IsJavaw() == JNI_TRUE) ? "on" : "off"); |
2269 printf("\tfullversion:%s\n", GetFullVersion()); |
2215 printf("\tfullversion:%s\n", GetFullVersion()); |
2270 printf("\tergo_policy:"); |
|
2271 switch(GetErgoPolicy()) { |
|
2272 case NEVER_SERVER_CLASS: |
|
2273 printf("NEVER_ACT_AS_A_SERVER_CLASS_MACHINE\n"); |
|
2274 break; |
|
2275 case ALWAYS_SERVER_CLASS: |
|
2276 printf("ALWAYS_ACT_AS_A_SERVER_CLASS_MACHINE\n"); |
|
2277 break; |
|
2278 default: |
|
2279 printf("DEFAULT_ERGONOMICS_POLICY\n"); |
|
2280 } |
|
2281 } |
2216 } |
2282 |
2217 |
2283 /* |
2218 /* |
2284 * Return JNI_TRUE for an option string that has no effect but should |
2219 * Return JNI_TRUE for an option string that has no effect but should |
2285 * _not_ be passed on to the vm; return JNI_FALSE otherwise. On |
2220 * _not_ be passed on to the vm; return JNI_FALSE otherwise. On |