equal
deleted
inserted
replaced
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 } |