src/hotspot/share/runtime/arguments.cpp
changeset 48490 4f647519c8be
parent 48363 b6a8e9658abd
parent 48475 18fb03624696
child 48608 1dab70e20292
child 48619 1703d83b3ffe
child 56021 864ee22719af
equal deleted inserted replaced
48461:6a1c3a5e04f3 48490:4f647519c8be
   198   _next = NULL;
   198   _next = NULL;
   199   _internal = internal;
   199   _internal = internal;
   200   _writeable = writeable;
   200   _writeable = writeable;
   201 }
   201 }
   202 
   202 
   203 AgentLibrary::AgentLibrary(const char* name, const char* options, bool is_absolute_path, void* os_lib) {
   203 AgentLibrary::AgentLibrary(const char* name, const char* options,
       
   204                bool is_absolute_path, void* os_lib,
       
   205                bool instrument_lib) {
   204   _name = AllocateHeap(strlen(name)+1, mtArguments);
   206   _name = AllocateHeap(strlen(name)+1, mtArguments);
   205   strcpy(_name, name);
   207   strcpy(_name, name);
   206   if (options == NULL) {
   208   if (options == NULL) {
   207     _options = NULL;
   209     _options = NULL;
   208   } else {
   210   } else {
   212   _is_absolute_path = is_absolute_path;
   214   _is_absolute_path = is_absolute_path;
   213   _os_lib = os_lib;
   215   _os_lib = os_lib;
   214   _next = NULL;
   216   _next = NULL;
   215   _state = agent_invalid;
   217   _state = agent_invalid;
   216   _is_static_lib = false;
   218   _is_static_lib = false;
       
   219   _is_instrument_lib = instrument_lib;
   217 }
   220 }
   218 
   221 
   219 // Check if head of 'option' matches 'name', and sets 'tail' to the remaining
   222 // Check if head of 'option' matches 'name', and sets 'tail' to the remaining
   220 // part of the option string.
   223 // part of the option string.
   221 static bool match_option(const JavaVMOption *option, const char* name,
   224 static bool match_option(const JavaVMOption *option, const char* name,
   286   _libraryList.add(new AgentLibrary(name, options, false, NULL));
   289   _libraryList.add(new AgentLibrary(name, options, false, NULL));
   287 }
   290 }
   288 
   291 
   289 void Arguments::add_init_agent(const char* name, char* options, bool absolute_path) {
   292 void Arguments::add_init_agent(const char* name, char* options, bool absolute_path) {
   290   _agentList.add(new AgentLibrary(name, options, absolute_path, NULL));
   293   _agentList.add(new AgentLibrary(name, options, absolute_path, NULL));
       
   294 }
       
   295 
       
   296 void Arguments::add_instrument_agent(const char* name, char* options, bool absolute_path) {
       
   297   _agentList.add(new AgentLibrary(name, options, absolute_path, NULL, true));
   291 }
   298 }
   292 
   299 
   293 // Late-binding agents not started via arguments
   300 // Late-binding agents not started via arguments
   294 void Arguments::add_loaded_agent(AgentLibrary *agentLib) {
   301 void Arguments::add_loaded_agent(AgentLibrary *agentLib) {
   295   _agentList.add(agentLib);
   302   _agentList.add(agentLib);
  2795 #else
  2802 #else
  2796       if (tail != NULL) {
  2803       if (tail != NULL) {
  2797         size_t length = strlen(tail) + 1;
  2804         size_t length = strlen(tail) + 1;
  2798         char *options = NEW_C_HEAP_ARRAY(char, length, mtArguments);
  2805         char *options = NEW_C_HEAP_ARRAY(char, length, mtArguments);
  2799         jio_snprintf(options, length, "%s", tail);
  2806         jio_snprintf(options, length, "%s", tail);
  2800         add_init_agent("instrument", options, false);
  2807         add_instrument_agent("instrument", options, false);
  2801         // java agents need module java.instrument
  2808         // java agents need module java.instrument
  2802         if (!create_numbered_property("jdk.module.addmods", "java.instrument", addmods_count++)) {
  2809         if (!create_numbered_property("jdk.module.addmods", "java.instrument", addmods_count++)) {
  2803           return JNI_ENOMEM;
  2810           return JNI_ENOMEM;
  2804         }
  2811         }
  2805       }
  2812       }