< prev index next >

src/share/vm/runtime/arguments.cpp

Print this page

        

*** 89,99 **** const char* Arguments::_java_vendor_url_bug = DEFAULT_VENDOR_URL_BUG; const char* Arguments::_sun_java_launcher = DEFAULT_JAVA_LAUNCHER; int Arguments::_sun_java_launcher_pid = -1; bool Arguments::_sun_java_launcher_is_altjvm = false; ! // These parameters are reset in method parse_vm_init_args(JavaVMInitArgs*) bool Arguments::_AlwaysCompileLoopMethods = AlwaysCompileLoopMethods; bool Arguments::_UseOnStackReplacement = UseOnStackReplacement; bool Arguments::_BackgroundCompilation = BackgroundCompilation; bool Arguments::_ClipInlining = ClipInlining; intx Arguments::_Tier3InvokeNotifyFreqLog = Tier3InvokeNotifyFreqLog; --- 89,99 ---- const char* Arguments::_java_vendor_url_bug = DEFAULT_VENDOR_URL_BUG; const char* Arguments::_sun_java_launcher = DEFAULT_JAVA_LAUNCHER; int Arguments::_sun_java_launcher_pid = -1; bool Arguments::_sun_java_launcher_is_altjvm = false; ! // These parameters are reset in method parse_vm_init_args() bool Arguments::_AlwaysCompileLoopMethods = AlwaysCompileLoopMethods; bool Arguments::_UseOnStackReplacement = UseOnStackReplacement; bool Arguments::_BackgroundCompilation = BackgroundCompilation; bool Arguments::_ClipInlining = ClipInlining; intx Arguments::_Tier3InvokeNotifyFreqLog = Tier3InvokeNotifyFreqLog;
*** 2247,2257 **** return check_memory_size(*long_arg, min_size); } // Parse JavaVMInitArgs structure ! jint Arguments::parse_vm_init_args(const JavaVMInitArgs* args) { // For components of the system classpath. SysClassPath scp(Arguments::get_sysclasspath()); bool scp_assembly_required = false; // Save default settings for some mode flags --- 2247,2259 ---- return check_memory_size(*long_arg, min_size); } // Parse JavaVMInitArgs structure ! jint Arguments::parse_vm_init_args(const JavaVMInitArgs *java_tool_options_args, ! const JavaVMInitArgs *java_options_args, ! const JavaVMInitArgs *cmd_line_args) { // For components of the system classpath. SysClassPath scp(Arguments::get_sysclasspath()); bool scp_assembly_required = false; // Save default settings for some mode flags
*** 2265,2288 **** } // Setup flags for mixed which is the default set_mode_flags(_mixed); ! // Parse JAVA_TOOL_OPTIONS environment variable (if present) ! jint result = parse_java_tool_options_environment_variable(&scp, &scp_assembly_required); if (result != JNI_OK) { return result; } ! // Parse JavaVMInitArgs structure passed in ! result = parse_each_vm_init_arg(args, &scp, &scp_assembly_required, Flag::COMMAND_LINE); if (result != JNI_OK) { return result; } ! // Parse _JAVA_OPTIONS environment variable (if present) (mimics classic VM) ! result = parse_java_options_environment_variable(&scp, &scp_assembly_required); if (result != JNI_OK) { return result; } // Do final processing now that all arguments have been parsed --- 2267,2295 ---- } // Setup flags for mixed which is the default set_mode_flags(_mixed); ! // Parse args structure generated from JAVA_TOOL_OPTIONS environment ! // variable (if present). ! jint result = parse_each_vm_init_arg( ! java_tool_options_args, &scp, &scp_assembly_required, Flag::ENVIRON_VAR); if (result != JNI_OK) { return result; } ! // Parse args structure generated from the command line flags. ! result = parse_each_vm_init_arg(cmd_line_args, &scp, &scp_assembly_required, ! Flag::COMMAND_LINE); if (result != JNI_OK) { return result; } ! // Parse args structure generated from the _JAVA_OPTIONS environment ! // variable (if present) (mimics classic VM) ! result = parse_each_vm_init_arg( ! java_options_args, &scp, &scp_assembly_required, Flag::ENVIRON_VAR); if (result != JNI_OK) { return result; } // Do final processing now that all arguments have been parsed
*** 3381,3404 **** } return JNI_OK; } ! jint Arguments::parse_java_options_environment_variable(SysClassPath* scp_p, bool* scp_assembly_required_p) { ! return parse_options_environment_variable("_JAVA_OPTIONS", scp_p, ! scp_assembly_required_p); } ! jint Arguments::parse_java_tool_options_environment_variable(SysClassPath* scp_p, bool* scp_assembly_required_p) { ! return parse_options_environment_variable("JAVA_TOOL_OPTIONS", scp_p, ! scp_assembly_required_p); } ! jint Arguments::parse_options_environment_variable(const char* name, SysClassPath* scp_p, bool* scp_assembly_required_p) { char *buffer = ::getenv(name); ! // Don't check this variable if user has special privileges // (e.g. unix su command). if (buffer == NULL || os::have_special_privileges()) { return JNI_OK; } --- 3388,3414 ---- } return JNI_OK; } ! jint Arguments::parse_java_options_environment_variable(JavaVMInitArgs* args) { ! return parse_options_environment_variable("_JAVA_OPTIONS", args); } ! jint Arguments::parse_java_tool_options_environment_variable(JavaVMInitArgs* args) { ! return parse_options_environment_variable("JAVA_TOOL_OPTIONS", args); } ! jint Arguments::parse_options_environment_variable(const char* name, JavaVMInitArgs* vm_args) { char *buffer = ::getenv(name); ! vm_args->version = JNI_VERSION_1_2; ! vm_args->options = NULL; ! vm_args->nOptions = 0; ! vm_args->ignoreUnrecognized = false; ! ! // Don't check this environment variable if user has special privileges // (e.g. unix su command). if (buffer == NULL || os::have_special_privileges()) { return JNI_OK; }
*** 3439,3456 **** rd++; // don't copy close quote } else { *wrt++ = *rd++; // copy to option string } } ! // Need to check if we're done before writing a NULL, ! // because the write could be to the byte that rd is pointing to. ! if (*rd++ == 0) { ! *wrt = 0; ! break; } *wrt = 0; // Zero terminate option } JavaVMOption* options_arr = NEW_C_HEAP_ARRAY_RETURN_NULL(JavaVMOption, options->length(), mtInternal); if (options_arr == NULL) { delete options; os::free(buffer); --- 3449,3467 ---- rd++; // don't copy close quote } else { *wrt++ = *rd++; // copy to option string } } ! if (*rd != 0) { ! // In this case, the assignment to wrt below will make *rd nul, ! // which will interfere with the next loop iteration. ! rd++; } *wrt = 0; // Zero terminate option } + + // Fill out JavaVMInitArgs structure. JavaVMOption* options_arr = NEW_C_HEAP_ARRAY_RETURN_NULL(JavaVMOption, options->length(), mtInternal); if (options_arr == NULL) { delete options; os::free(buffer);
*** 3458,3490 **** } for (int i = 0; i < options->length(); i++) { options_arr[i] = options->at(i); } ! // Construct JavaVMInitArgs structure and parse as if it was part of the command line ! JavaVMInitArgs vm_args; ! vm_args.version = JNI_VERSION_1_2; ! vm_args.options = options_arr; ! vm_args.nOptions = options->length(); ! vm_args.ignoreUnrecognized = IgnoreUnrecognizedVMOptions; - if (PrintVMOptions) { - const char* tail; - for (int i = 0; i < vm_args.nOptions; i++) { - const JavaVMOption *option = vm_args.options + i; - if (match_option(option, "-XX:", &tail)) { - logOption(tail); - } - } - } - - jint result = parse_each_vm_init_arg(&vm_args, scp_p, scp_assembly_required_p, - Flag::ENVIRON_VAR); - FREE_C_HEAP_ARRAY(JavaVMOption, options_arr); delete options; ! os::free(buffer); ! return result; } void Arguments::set_shared_spaces_flags() { if (DumpSharedSpaces) { if (RequireSharedSpaces) { --- 3469,3484 ---- } for (int i = 0; i < options->length(); i++) { options_arr[i] = options->at(i); } ! vm_args->options = options_arr; ! vm_args->nOptions = options->length(); ! vm_args->ignoreUnrecognized = IgnoreUnrecognizedVMOptions; delete options; ! return JNI_OK; } void Arguments::set_shared_spaces_flags() { if (DumpSharedSpaces) { if (RequireSharedSpaces) {
*** 3563,3598 **** return false; } #endif // PRODUCT ! // Parse entry point called from JNI_CreateJavaVM ! ! jint Arguments::parse(const JavaVMInitArgs* args) { ! ! // Initialize ranges and constraints ! CommandLineFlagRangeList::init(); ! CommandLineFlagConstraintList::init(); ! // Remaining part of option string const char* tail; ! // If flag "-XX:Flags=flags-file" is used it will be the first option to be processed. ! const char* hotspotrc = ".hotspotrc"; ! bool settings_file_specified = false; ! bool needs_hotspotrc_warning = false; ! ! const char* flags_file; ! int index; ! for (index = 0; index < args->nOptions; index++) { ! const JavaVMOption *option = args->options + index; if (ArgumentsExt::process_options(option)) { continue; } if (match_option(option, "-XX:Flags=", &tail)) { ! flags_file = tail; ! settings_file_specified = true; continue; } if (match_option(option, "-XX:+PrintVMOptions")) { PrintVMOptions = true; continue; --- 3557,3578 ---- return false; } #endif // PRODUCT ! static int match_special_option_and_act(const JavaVMInitArgs* args, ! char** flags_file) { // Remaining part of option string const char* tail; ! for (int index = 0; index < args->nOptions; index++) { ! const JavaVMOption* option = args->options + index; if (ArgumentsExt::process_options(option)) { continue; } if (match_option(option, "-XX:Flags=", &tail)) { ! *flags_file = (char *) tail; continue; } if (match_option(option, "-XX:+PrintVMOptions")) { PrintVMOptions = true; continue;
*** 3642,3655 **** --- 3622,3676 ---- CommandLineFlags::printFlags(tty, true); vm_exit(0); } #endif } + return JNI_OK; + } + + static void print_options(const JavaVMInitArgs *args) { + const char* tail; + for (int index = 0; index < args->nOptions; index++) { + const JavaVMOption *option = args->options + index; + if (match_option(option, "-XX:", &tail)) { + logOption(tail); + } + } + } + + // Parse entry point called from JNI_CreateJavaVM + + jint Arguments::parse(const JavaVMInitArgs* args) { + // If flag "-XX:Flags=flags-file" is used it will be the first option to be processed. + const char* hotspotrc = ".hotspotrc"; + char* flags_file = NULL; + bool settings_file_specified = false; + bool needs_hotspotrc_warning = false; + JavaVMInitArgs java_tool_options_args; + JavaVMInitArgs java_options_args; + + int code = + parse_java_tool_options_environment_variable(&java_tool_options_args); + if (code != JNI_OK) { + return code; + } + + code = parse_java_options_environment_variable(&java_options_args); + if (code != JNI_OK) { + return code; + } + + match_special_option_and_act(args, &flags_file); + match_special_option_and_act(&java_tool_options_args, &flags_file); + match_special_option_and_act(&java_options_args, &flags_file); + settings_file_specified = (flags_file != NULL); if (IgnoreUnrecognizedVMOptions) { // uncast const to modify the flag args->ignoreUnrecognized *(jboolean*)(&args->ignoreUnrecognized) = true; + java_tool_options_args.ignoreUnrecognized = true; + java_options_args.ignoreUnrecognized = true; } // Parse specified settings file if (settings_file_specified) { if (!process_settings_file(flags_file, true, args->ignoreUnrecognized)) {
*** 3668,3687 **** } #endif } if (PrintVMOptions) { ! for (index = 0; index < args->nOptions; index++) { ! const JavaVMOption *option = args->options + index; ! if (match_option(option, "-XX:", &tail)) { ! logOption(tail); ! } ! } } // Parse JavaVMInitArgs structure passed in, as well as JAVA_TOOL_OPTIONS and _JAVA_OPTIONS ! jint result = parse_vm_init_args(args); if (result != JNI_OK) { return result; } // Call get_shared_archive_path() here, after possible SharedArchiveFile option got parsed. --- 3689,3710 ---- } #endif } if (PrintVMOptions) { ! print_options(args); ! print_options(&java_tool_options_args); ! print_options(&java_options_args); } // Parse JavaVMInitArgs structure passed in, as well as JAVA_TOOL_OPTIONS and _JAVA_OPTIONS ! jint result = ! parse_vm_init_args(&java_tool_options_args, &java_options_args, args); ! ! // Done with the envvars ! FREE_C_HEAP_ARRAY(JavaVMOption, java_tool_options_args.options); ! FREE_C_HEAP_ARRAY(JavaVMOption, java_options_args.options); if (result != JNI_OK) { return result; } // Call get_shared_archive_path() here, after possible SharedArchiveFile option got parsed.
< prev index next >