src/share/vm/runtime/arguments.hpp

Wed, 27 Mar 2013 19:21:18 +0100

author
tschatzl
date
Wed, 27 Mar 2013 19:21:18 +0100
changeset 4854
754c24457b20
parent 4741
eac371996b44
child 5276
0abfeed51c9e
permissions
-rw-r--r--

7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM
Summary: Ergonomics now also takes available virtual memory into account when deciding for a heap size. The helper method to determine the maximum allocatable memory block now uses the appropriate OS specific calls to retrieve available virtual memory for the java process. In 32 bit environments this method now also searches for the maximum actually reservable amount of memory. Merge previously separate implementations for Linux/BSD/Solaris into a single method.
Reviewed-by: jmasa, tamao

duke@435 1 /*
zgu@4492 2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
duke@435 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@435 4 *
duke@435 5 * This code is free software; you can redistribute it and/or modify it
duke@435 6 * under the terms of the GNU General Public License version 2 only, as
duke@435 7 * published by the Free Software Foundation.
duke@435 8 *
duke@435 9 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@435 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@435 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@435 12 * version 2 for more details (a copy is included in the LICENSE file that
duke@435 13 * accompanied this code).
duke@435 14 *
duke@435 15 * You should have received a copy of the GNU General Public License version
duke@435 16 * 2 along with this work; if not, write to the Free Software Foundation,
duke@435 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@435 18 *
trims@1907 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
trims@1907 20 * or visit www.oracle.com if you need additional information or have any
trims@1907 21 * questions.
duke@435 22 *
duke@435 23 */
duke@435 24
stefank@2314 25 #ifndef SHARE_VM_RUNTIME_ARGUMENTS_HPP
stefank@2314 26 #define SHARE_VM_RUNTIME_ARGUMENTS_HPP
stefank@2314 27
stefank@2314 28 #include "runtime/java.hpp"
stefank@2314 29 #include "runtime/perfData.hpp"
stefank@2314 30 #include "utilities/top.hpp"
stefank@2314 31
duke@435 32 // Arguments parses the command line and recognizes options
duke@435 33
duke@435 34 // Invocation API hook typedefs (these should really be defined in jni.hpp)
duke@435 35 extern "C" {
duke@435 36 typedef void (JNICALL *abort_hook_t)(void);
duke@435 37 typedef void (JNICALL *exit_hook_t)(jint code);
duke@435 38 typedef jint (JNICALL *vfprintf_hook_t)(FILE *fp, const char *format, va_list args);
duke@435 39 }
duke@435 40
duke@435 41 // Forward declarations
duke@435 42
duke@435 43 class SysClassPath;
duke@435 44
duke@435 45 // Element describing System and User (-Dkey=value flags) defined property.
duke@435 46
zgu@3900 47 class SystemProperty: public CHeapObj<mtInternal> {
duke@435 48 private:
duke@435 49 char* _key;
duke@435 50 char* _value;
duke@435 51 SystemProperty* _next;
duke@435 52 bool _writeable;
duke@435 53 bool writeable() { return _writeable; }
duke@435 54
duke@435 55 public:
duke@435 56 // Accessors
duke@435 57 const char* key() const { return _key; }
duke@435 58 char* value() const { return _value; }
duke@435 59 SystemProperty* next() const { return _next; }
duke@435 60 void set_next(SystemProperty* next) { _next = next; }
duke@435 61 bool set_value(char *value) {
duke@435 62 if (writeable()) {
duke@435 63 if (_value != NULL) {
duke@435 64 FreeHeap(_value);
duke@435 65 }
zgu@3900 66 _value = AllocateHeap(strlen(value)+1, mtInternal);
duke@435 67 if (_value != NULL) {
duke@435 68 strcpy(_value, value);
duke@435 69 }
duke@435 70 return true;
duke@435 71 }
duke@435 72 return false;
duke@435 73 }
duke@435 74
duke@435 75 void append_value(const char *value) {
duke@435 76 char *sp;
duke@435 77 size_t len = 0;
duke@435 78 if (value != NULL) {
duke@435 79 len = strlen(value);
duke@435 80 if (_value != NULL) {
duke@435 81 len += strlen(_value);
duke@435 82 }
zgu@3900 83 sp = AllocateHeap(len+2, mtInternal);
duke@435 84 if (sp != NULL) {
duke@435 85 if (_value != NULL) {
duke@435 86 strcpy(sp, _value);
duke@435 87 strcat(sp, os::path_separator());
duke@435 88 strcat(sp, value);
duke@435 89 FreeHeap(_value);
duke@435 90 } else {
duke@435 91 strcpy(sp, value);
duke@435 92 }
duke@435 93 _value = sp;
duke@435 94 }
duke@435 95 }
duke@435 96 }
duke@435 97
duke@435 98 // Constructor
duke@435 99 SystemProperty(const char* key, const char* value, bool writeable) {
duke@435 100 if (key == NULL) {
duke@435 101 _key = NULL;
duke@435 102 } else {
zgu@3900 103 _key = AllocateHeap(strlen(key)+1, mtInternal);
duke@435 104 strcpy(_key, key);
duke@435 105 }
duke@435 106 if (value == NULL) {
duke@435 107 _value = NULL;
duke@435 108 } else {
zgu@3900 109 _value = AllocateHeap(strlen(value)+1, mtInternal);
duke@435 110 strcpy(_value, value);
duke@435 111 }
duke@435 112 _next = NULL;
duke@435 113 _writeable = writeable;
duke@435 114 }
duke@435 115 };
duke@435 116
duke@435 117
duke@435 118 // For use by -agentlib, -agentpath and -Xrun
zgu@3900 119 class AgentLibrary : public CHeapObj<mtInternal> {
duke@435 120 friend class AgentLibraryList;
duke@435 121 private:
duke@435 122 char* _name;
duke@435 123 char* _options;
duke@435 124 void* _os_lib;
duke@435 125 bool _is_absolute_path;
duke@435 126 AgentLibrary* _next;
duke@435 127
duke@435 128 public:
duke@435 129 // Accessors
duke@435 130 const char* name() const { return _name; }
duke@435 131 char* options() const { return _options; }
duke@435 132 bool is_absolute_path() const { return _is_absolute_path; }
duke@435 133 void* os_lib() const { return _os_lib; }
duke@435 134 void set_os_lib(void* os_lib) { _os_lib = os_lib; }
duke@435 135 AgentLibrary* next() const { return _next; }
duke@435 136
duke@435 137 // Constructor
duke@435 138 AgentLibrary(const char* name, const char* options, bool is_absolute_path, void* os_lib) {
zgu@3900 139 _name = AllocateHeap(strlen(name)+1, mtInternal);
duke@435 140 strcpy(_name, name);
duke@435 141 if (options == NULL) {
duke@435 142 _options = NULL;
duke@435 143 } else {
zgu@3900 144 _options = AllocateHeap(strlen(options)+1, mtInternal);
duke@435 145 strcpy(_options, options);
duke@435 146 }
duke@435 147 _is_absolute_path = is_absolute_path;
duke@435 148 _os_lib = os_lib;
duke@435 149 _next = NULL;
duke@435 150 }
duke@435 151 };
duke@435 152
duke@435 153 // maintain an order of entry list of AgentLibrary
duke@435 154 class AgentLibraryList VALUE_OBJ_CLASS_SPEC {
duke@435 155 private:
duke@435 156 AgentLibrary* _first;
duke@435 157 AgentLibrary* _last;
duke@435 158 public:
duke@435 159 bool is_empty() const { return _first == NULL; }
duke@435 160 AgentLibrary* first() const { return _first; }
duke@435 161
duke@435 162 // add to the end of the list
duke@435 163 void add(AgentLibrary* lib) {
duke@435 164 if (is_empty()) {
duke@435 165 _first = _last = lib;
duke@435 166 } else {
duke@435 167 _last->_next = lib;
duke@435 168 _last = lib;
duke@435 169 }
duke@435 170 lib->_next = NULL;
duke@435 171 }
duke@435 172
duke@435 173 // search for and remove a library known to be in the list
duke@435 174 void remove(AgentLibrary* lib) {
duke@435 175 AgentLibrary* curr;
duke@435 176 AgentLibrary* prev = NULL;
duke@435 177 for (curr = first(); curr != NULL; prev = curr, curr = curr->next()) {
duke@435 178 if (curr == lib) {
duke@435 179 break;
duke@435 180 }
duke@435 181 }
duke@435 182 assert(curr != NULL, "always should be found");
duke@435 183
duke@435 184 if (curr != NULL) {
duke@435 185 // it was found, by-pass this library
duke@435 186 if (prev == NULL) {
duke@435 187 _first = curr->_next;
duke@435 188 } else {
duke@435 189 prev->_next = curr->_next;
duke@435 190 }
duke@435 191 if (curr == _last) {
duke@435 192 _last = prev;
duke@435 193 }
duke@435 194 curr->_next = NULL;
duke@435 195 }
duke@435 196 }
duke@435 197
duke@435 198 AgentLibraryList() {
duke@435 199 _first = NULL;
duke@435 200 _last = NULL;
duke@435 201 }
duke@435 202 };
duke@435 203
duke@435 204
duke@435 205 class Arguments : AllStatic {
duke@435 206 friend class VMStructs;
duke@435 207 friend class JvmtiExport;
duke@435 208 public:
duke@435 209 // Operation modi
duke@435 210 enum Mode {
duke@435 211 _int, // corresponds to -Xint
duke@435 212 _mixed, // corresponds to -Xmixed
duke@435 213 _comp // corresponds to -Xcomp
duke@435 214 };
duke@435 215
duke@435 216 enum ArgsRange {
duke@435 217 arg_unreadable = -3,
duke@435 218 arg_too_small = -2,
duke@435 219 arg_too_big = -1,
duke@435 220 arg_in_range = 0
duke@435 221 };
duke@435 222
duke@435 223 private:
duke@435 224
duke@435 225 // an array containing all flags specified in the .hotspotrc file
duke@435 226 static char** _jvm_flags_array;
duke@435 227 static int _num_jvm_flags;
duke@435 228 // an array containing all jvm arguments specified in the command line
duke@435 229 static char** _jvm_args_array;
duke@435 230 static int _num_jvm_args;
duke@435 231 // string containing all java command (class/jarfile name and app args)
duke@435 232 static char* _java_command;
duke@435 233
duke@435 234 // Property list
duke@435 235 static SystemProperty* _system_properties;
duke@435 236
duke@435 237 // Quick accessor to System properties in the list:
duke@435 238 static SystemProperty *_java_ext_dirs;
duke@435 239 static SystemProperty *_java_endorsed_dirs;
duke@435 240 static SystemProperty *_sun_boot_library_path;
duke@435 241 static SystemProperty *_java_library_path;
duke@435 242 static SystemProperty *_java_home;
duke@435 243 static SystemProperty *_java_class_path;
duke@435 244 static SystemProperty *_sun_boot_class_path;
duke@435 245
duke@435 246 // Meta-index for knowing what packages are in the boot class path
duke@435 247 static char* _meta_index_path;
duke@435 248 static char* _meta_index_dir;
duke@435 249
duke@435 250 // java.vendor.url.bug, bug reporting URL for fatal errors.
duke@435 251 static const char* _java_vendor_url_bug;
duke@435 252
duke@435 253 // sun.java.launcher, private property to provide information about
duke@435 254 // java/gamma launcher
duke@435 255 static const char* _sun_java_launcher;
duke@435 256
duke@435 257 // sun.java.launcher.pid, private property
duke@435 258 static int _sun_java_launcher_pid;
duke@435 259
sla@2584 260 // was this VM created by the gamma launcher
sla@2584 261 static bool _created_by_gamma_launcher;
sla@2584 262
duke@435 263 // Option flags
duke@435 264 static bool _has_profile;
duke@435 265 static bool _has_alloc_profile;
duke@435 266 static const char* _gc_log_filename;
duke@435 267 static uintx _min_heap_size;
duke@435 268
duke@435 269 // -Xrun arguments
duke@435 270 static AgentLibraryList _libraryList;
duke@435 271 static void add_init_library(const char* name, char* options)
duke@435 272 { _libraryList.add(new AgentLibrary(name, options, false, NULL)); }
duke@435 273
duke@435 274 // -agentlib and -agentpath arguments
duke@435 275 static AgentLibraryList _agentList;
duke@435 276 static void add_init_agent(const char* name, char* options, bool absolute_path)
duke@435 277 { _agentList.add(new AgentLibrary(name, options, absolute_path, NULL)); }
duke@435 278
duke@435 279 // Late-binding agents not started via arguments
duke@435 280 static void add_loaded_agent(const char* name, char* options, bool absolute_path, void* os_lib)
duke@435 281 { _agentList.add(new AgentLibrary(name, options, absolute_path, os_lib)); }
duke@435 282
duke@435 283 // Operation modi
duke@435 284 static Mode _mode;
duke@435 285 static void set_mode_flags(Mode mode);
duke@435 286 static bool _java_compiler;
duke@435 287 static void set_java_compiler(bool arg) { _java_compiler = arg; }
duke@435 288 static bool java_compiler() { return _java_compiler; }
duke@435 289
duke@435 290 // -Xdebug flag
duke@435 291 static bool _xdebug_mode;
duke@435 292 static void set_xdebug_mode(bool arg) { _xdebug_mode = arg; }
duke@435 293 static bool xdebug_mode() { return _xdebug_mode; }
duke@435 294
duke@435 295 // Used to save default settings
duke@435 296 static bool _AlwaysCompileLoopMethods;
duke@435 297 static bool _UseOnStackReplacement;
duke@435 298 static bool _BackgroundCompilation;
duke@435 299 static bool _ClipInlining;
duke@435 300 static bool _CIDynamicCompilePriority;
duke@435 301
iveresov@2138 302 // Tiered
iveresov@2138 303 static void set_tiered_flags();
duke@435 304 // CMS/ParNew garbage collectors
duke@435 305 static void set_parnew_gc_flags();
duke@435 306 static void set_cms_and_parnew_gc_flags();
ysr@777 307 // UseParallel[Old]GC
duke@435 308 static void set_parallel_gc_flags();
ysr@777 309 // Garbage-First (UseG1GC)
ysr@777 310 static void set_g1_gc_flags();
duke@435 311 // GC ergonomics
brutisso@4741 312 static void set_use_compressed_oops();
duke@435 313 static void set_ergonomics_flags();
jcoomes@2644 314 static void set_shared_spaces_flags();
tschatzl@4854 315 // limits the given memory size by the maximum amount of memory this process is
tschatzl@4854 316 // currently allowed to allocate or reserve.
tschatzl@4854 317 static julong limit_by_allocatable_memory(julong size);
phh@1499 318 // Setup heap size
phh@1499 319 static void set_heap_size();
duke@435 320 // Based on automatic selection criteria, should the
duke@435 321 // low pause collector be used.
duke@435 322 static bool should_auto_select_low_pause_collector();
duke@435 323
duke@435 324 // Bytecode rewriting
duke@435 325 static void set_bytecode_flags();
duke@435 326
duke@435 327 // Invocation API hooks
duke@435 328 static abort_hook_t _abort_hook;
duke@435 329 static exit_hook_t _exit_hook;
duke@435 330 static vfprintf_hook_t _vfprintf_hook;
duke@435 331
duke@435 332 // System properties
duke@435 333 static bool add_property(const char* prop);
duke@435 334
duke@435 335 // Aggressive optimization flags.
duke@435 336 static void set_aggressive_opts_flags();
duke@435 337
duke@435 338 // Argument parsing
duke@435 339 static void do_pd_flag_adjustments();
duke@435 340 static bool parse_argument(const char* arg, FlagValueOrigin origin);
duke@435 341 static bool process_argument(const char* arg, jboolean ignore_unrecognized, FlagValueOrigin origin);
duke@435 342 static void process_java_launcher_argument(const char*, void*);
duke@435 343 static void process_java_compiler_argument(char* arg);
duke@435 344 static jint parse_options_environment_variable(const char* name, SysClassPath* scp_p, bool* scp_assembly_required_p);
duke@435 345 static jint parse_java_tool_options_environment_variable(SysClassPath* scp_p, bool* scp_assembly_required_p);
duke@435 346 static jint parse_java_options_environment_variable(SysClassPath* scp_p, bool* scp_assembly_required_p);
duke@435 347 static jint parse_vm_init_args(const JavaVMInitArgs* args);
duke@435 348 static jint parse_each_vm_init_arg(const JavaVMInitArgs* args, SysClassPath* scp_p, bool* scp_assembly_required_p, FlagValueOrigin origin);
duke@435 349 static jint finalize_vm_init_args(SysClassPath* scp_p, bool scp_assembly_required);
duke@435 350 static bool is_bad_option(const JavaVMOption* option, jboolean ignore,
duke@435 351 const char* option_type);
duke@435 352 static bool is_bad_option(const JavaVMOption* option, jboolean ignore) {
duke@435 353 return is_bad_option(option, ignore, NULL);
duke@435 354 }
johnc@1679 355 static bool verify_interval(uintx val, uintx min,
johnc@1679 356 uintx max, const char* name);
ptisnovs@2099 357 static bool verify_min_value(intx val, intx min, const char* name);
duke@435 358 static bool verify_percentage(uintx value, const char* name);
duke@435 359 static void describe_range_error(ArgsRange errcode);
swamyv@924 360 static ArgsRange check_memory_size(julong size, julong min_size);
swamyv@924 361 static ArgsRange parse_memory_size(const char* s, julong* long_arg,
swamyv@924 362 julong min_size);
jmasa@1719 363 // Parse a string for a unsigned integer. Returns true if value
jmasa@1719 364 // is an unsigned integer greater than or equal to the minimum
jmasa@1719 365 // parameter passed and returns the value in uintx_arg. Returns
jmasa@1719 366 // false otherwise, with uintx_arg undefined.
jmasa@1719 367 static bool parse_uintx(const char* value, uintx* uintx_arg,
jmasa@1719 368 uintx min_size);
duke@435 369
duke@435 370 // methods to build strings from individual args
duke@435 371 static void build_jvm_args(const char* arg);
duke@435 372 static void build_jvm_flags(const char* arg);
duke@435 373 static void add_string(char*** bldarray, int* count, const char* arg);
duke@435 374 static const char* build_resource_string(char** args, int count);
duke@435 375
duke@435 376 static bool methodExists(
duke@435 377 char* className, char* methodName,
duke@435 378 int classesNum, char** classes, bool* allMethods,
duke@435 379 int methodsNum, char** methods, bool* allClasses
duke@435 380 );
duke@435 381
duke@435 382 static void parseOnlyLine(
duke@435 383 const char* line,
duke@435 384 short* classesNum, short* classesMax, char*** classes, bool** allMethods,
duke@435 385 short* methodsNum, short* methodsMax, char*** methods, bool** allClasses
duke@435 386 );
duke@435 387
kamg@677 388 // Returns true if the string s is in the list of flags that have recently
kamg@677 389 // been made obsolete. If we detect one of these flags on the command
kamg@677 390 // line, instead of failing we print a warning message and ignore the
kamg@677 391 // flag. This gives the user a release or so to stop using the flag.
kamg@677 392 static bool is_newly_obsolete(const char* s, JDK_Version* buffer);
duke@435 393
duke@435 394 static short CompileOnlyClassesNum;
duke@435 395 static short CompileOnlyClassesMax;
duke@435 396 static char** CompileOnlyClasses;
duke@435 397 static bool* CompileOnlyAllMethods;
duke@435 398
duke@435 399 static short CompileOnlyMethodsNum;
duke@435 400 static short CompileOnlyMethodsMax;
duke@435 401 static char** CompileOnlyMethods;
duke@435 402 static bool* CompileOnlyAllClasses;
duke@435 403
duke@435 404 static short InterpretOnlyClassesNum;
duke@435 405 static short InterpretOnlyClassesMax;
duke@435 406 static char** InterpretOnlyClasses;
duke@435 407 static bool* InterpretOnlyAllMethods;
duke@435 408
duke@435 409 static bool CheckCompileOnly;
duke@435 410
duke@435 411 static char* SharedArchivePath;
duke@435 412
duke@435 413 public:
duke@435 414 // Parses the arguments
duke@435 415 static jint parse(const JavaVMInitArgs* args);
brutisso@4296 416 // Adjusts the arguments after the OS have adjusted the arguments
brutisso@4296 417 static jint adjust_after_os();
jmasa@445 418 // Check for consistency in the selection of the garbage collector.
jmasa@445 419 static bool check_gc_consistency();
brutisso@4388 420 static void check_deprecated_gcs();
tamao@4734 421 static void check_deprecated_gc_flags();
duke@435 422 // Check consistecy or otherwise of VM argument settings
duke@435 423 static bool check_vm_args_consistency();
ptisnovs@2099 424 // Check stack pages settings
ptisnovs@2099 425 static bool check_stack_pages();
duke@435 426 // Used by os_solaris
duke@435 427 static bool process_settings_file(const char* file_name, bool should_exist, jboolean ignore_unrecognized);
duke@435 428
duke@435 429 // return a char* array containing all options
duke@435 430 static char** jvm_flags_array() { return _jvm_flags_array; }
duke@435 431 static char** jvm_args_array() { return _jvm_args_array; }
duke@435 432 static int num_jvm_flags() { return _num_jvm_flags; }
duke@435 433 static int num_jvm_args() { return _num_jvm_args; }
duke@435 434 // return the arguments passed to the Java application
duke@435 435 static const char* java_command() { return _java_command; }
duke@435 436
duke@435 437 // print jvm_flags, jvm_args and java_command
duke@435 438 static void print_on(outputStream* st);
duke@435 439
duke@435 440 // convenient methods to obtain / print jvm_flags and jvm_args
duke@435 441 static const char* jvm_flags() { return build_resource_string(_jvm_flags_array, _num_jvm_flags); }
duke@435 442 static const char* jvm_args() { return build_resource_string(_jvm_args_array, _num_jvm_args); }
duke@435 443 static void print_jvm_flags_on(outputStream* st);
duke@435 444 static void print_jvm_args_on(outputStream* st);
duke@435 445
duke@435 446 // -Dkey=value flags
duke@435 447 static SystemProperty* system_properties() { return _system_properties; }
duke@435 448 static const char* get_property(const char* key);
duke@435 449
duke@435 450 // -Djava.vendor.url.bug
duke@435 451 static const char* java_vendor_url_bug() { return _java_vendor_url_bug; }
duke@435 452
duke@435 453 // -Dsun.java.launcher
duke@435 454 static const char* sun_java_launcher() { return _sun_java_launcher; }
duke@435 455 // Was VM created by a Java launcher?
duke@435 456 static bool created_by_java_launcher();
sla@2584 457 // Was VM created by the gamma Java launcher?
sla@2584 458 static bool created_by_gamma_launcher();
duke@435 459 // -Dsun.java.launcher.pid
duke@435 460 static int sun_java_launcher_pid() { return _sun_java_launcher_pid; }
duke@435 461
duke@435 462 // -Xloggc:<file>, if not specified will be NULL
duke@435 463 static const char* gc_log_filename() { return _gc_log_filename; }
duke@435 464
duke@435 465 // -Xprof/-Xaprof
duke@435 466 static bool has_profile() { return _has_profile; }
duke@435 467 static bool has_alloc_profile() { return _has_alloc_profile; }
duke@435 468
phh@1499 469 // -Xms, -Xmx
duke@435 470 static uintx min_heap_size() { return _min_heap_size; }
duke@435 471 static void set_min_heap_size(uintx v) { _min_heap_size = v; }
duke@435 472
duke@435 473 // -Xrun
duke@435 474 static AgentLibrary* libraries() { return _libraryList.first(); }
duke@435 475 static bool init_libraries_at_startup() { return !_libraryList.is_empty(); }
duke@435 476 static void convert_library_to_agent(AgentLibrary* lib)
duke@435 477 { _libraryList.remove(lib);
duke@435 478 _agentList.add(lib); }
duke@435 479
duke@435 480 // -agentlib -agentpath
duke@435 481 static AgentLibrary* agents() { return _agentList.first(); }
duke@435 482 static bool init_agents_at_startup() { return !_agentList.is_empty(); }
duke@435 483
duke@435 484 // abort, exit, vfprintf hooks
duke@435 485 static abort_hook_t abort_hook() { return _abort_hook; }
duke@435 486 static exit_hook_t exit_hook() { return _exit_hook; }
duke@435 487 static vfprintf_hook_t vfprintf_hook() { return _vfprintf_hook; }
duke@435 488
duke@435 489 static bool GetCheckCompileOnly () { return CheckCompileOnly; }
duke@435 490
duke@435 491 static const char* GetSharedArchivePath() { return SharedArchivePath; }
duke@435 492
duke@435 493 static bool CompileMethod(char* className, char* methodName) {
duke@435 494 return
duke@435 495 methodExists(
duke@435 496 className, methodName,
duke@435 497 CompileOnlyClassesNum, CompileOnlyClasses, CompileOnlyAllMethods,
duke@435 498 CompileOnlyMethodsNum, CompileOnlyMethods, CompileOnlyAllClasses
duke@435 499 );
duke@435 500 }
duke@435 501
duke@435 502 // Java launcher properties
duke@435 503 static void process_sun_java_launcher_properties(JavaVMInitArgs* args);
duke@435 504
duke@435 505 // System properties
duke@435 506 static void init_system_properties();
duke@435 507
zgu@2219 508 // Update/Initialize System properties after JDK version number is known
zgu@2219 509 static void init_version_specific_system_properties();
zgu@2219 510
phh@1126 511 // Property List manipulation
duke@435 512 static void PropertyList_add(SystemProperty** plist, SystemProperty *element);
duke@435 513 static void PropertyList_add(SystemProperty** plist, const char* k, char* v);
phh@1126 514 static void PropertyList_unique_add(SystemProperty** plist, const char* k, char* v) {
phh@1126 515 PropertyList_unique_add(plist, k, v, false);
phh@1126 516 }
phh@1126 517 static void PropertyList_unique_add(SystemProperty** plist, const char* k, char* v, jboolean append);
duke@435 518 static const char* PropertyList_get_value(SystemProperty* plist, const char* key);
duke@435 519 static int PropertyList_count(SystemProperty* pl);
duke@435 520 static const char* PropertyList_get_key_at(SystemProperty* pl,int index);
duke@435 521 static char* PropertyList_get_value_at(SystemProperty* pl,int index);
duke@435 522
duke@435 523 // Miscellaneous System property value getter and setters.
duke@435 524 static void set_dll_dir(char *value) { _sun_boot_library_path->set_value(value); }
duke@435 525 static void set_java_home(char *value) { _java_home->set_value(value); }
duke@435 526 static void set_library_path(char *value) { _java_library_path->set_value(value); }
duke@435 527 static void set_ext_dirs(char *value) { _java_ext_dirs->set_value(value); }
duke@435 528 static void set_endorsed_dirs(char *value) { _java_endorsed_dirs->set_value(value); }
duke@435 529 static void set_sysclasspath(char *value) { _sun_boot_class_path->set_value(value); }
duke@435 530 static void append_sysclasspath(const char *value) { _sun_boot_class_path->append_value(value); }
duke@435 531 static void set_meta_index_path(char* meta_index_path, char* meta_index_dir) {
duke@435 532 _meta_index_path = meta_index_path;
duke@435 533 _meta_index_dir = meta_index_dir;
duke@435 534 }
duke@435 535
duke@435 536 static char *get_java_home() { return _java_home->value(); }
duke@435 537 static char *get_dll_dir() { return _sun_boot_library_path->value(); }
duke@435 538 static char *get_endorsed_dir() { return _java_endorsed_dirs->value(); }
duke@435 539 static char *get_sysclasspath() { return _sun_boot_class_path->value(); }
duke@435 540 static char* get_meta_index_path() { return _meta_index_path; }
duke@435 541 static char* get_meta_index_dir() { return _meta_index_dir; }
duke@435 542
duke@435 543 // Operation modi
duke@435 544 static Mode mode() { return _mode; }
duke@435 545
duke@435 546 // Utility: copies src into buf, replacing "%%" with "%" and "%p" with pid.
duke@435 547 static bool copy_expand_pid(const char* src, size_t srclen, char* buf, size_t buflen);
duke@435 548 };
stefank@2314 549
stefank@2314 550 #endif // SHARE_VM_RUNTIME_ARGUMENTS_HPP

mercurial