comparison src/share/vm/runtime/thread.cpp @ 1980:828eafbd85cc

6348631: remove the use of the HPI library from Hotspot Summary: move functions from hpi library to hotspot, communicate with licensees and open source community, check jdk for dependency, file CCC request Reviewed-by: coleenp, acorn, dsamersoff
author ikrylov
date Wed, 01 Dec 2010 18:26:32 -0500
parents f95d63e2154a
children 4de5f4101cfd
comparison
equal deleted inserted replaced
1972:f95d63e2154a 1980:828eafbd85cc
45 #include "runtime/arguments.hpp" 45 #include "runtime/arguments.hpp"
46 #include "runtime/biasedLocking.hpp" 46 #include "runtime/biasedLocking.hpp"
47 #include "runtime/deoptimization.hpp" 47 #include "runtime/deoptimization.hpp"
48 #include "runtime/fprofiler.hpp" 48 #include "runtime/fprofiler.hpp"
49 #include "runtime/frame.inline.hpp" 49 #include "runtime/frame.inline.hpp"
50 #include "runtime/hpi.hpp"
51 #include "runtime/init.hpp" 50 #include "runtime/init.hpp"
52 #include "runtime/interfaceSupport.hpp" 51 #include "runtime/interfaceSupport.hpp"
53 #include "runtime/java.hpp" 52 #include "runtime/java.hpp"
54 #include "runtime/javaCalls.hpp" 53 #include "runtime/javaCalls.hpp"
55 #include "runtime/jniPeriodicChecker.hpp" 54 #include "runtime/jniPeriodicChecker.hpp"
3384 char ebuf[1024]; 3383 char ebuf[1024];
3385 const char *name = agent->name(); 3384 const char *name = agent->name();
3386 const char *msg = "Could not find agent library "; 3385 const char *msg = "Could not find agent library ";
3387 3386
3388 if (agent->is_absolute_path()) { 3387 if (agent->is_absolute_path()) {
3389 library = hpi::dll_load(name, ebuf, sizeof ebuf); 3388 library = os::dll_load(name, ebuf, sizeof ebuf);
3390 if (library == NULL) { 3389 if (library == NULL) {
3391 const char *sub_msg = " in absolute path, with error: "; 3390 const char *sub_msg = " in absolute path, with error: ";
3392 size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) + strlen(ebuf) + 1; 3391 size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) + strlen(ebuf) + 1;
3393 char *buf = NEW_C_HEAP_ARRAY(char, len); 3392 char *buf = NEW_C_HEAP_ARRAY(char, len);
3394 jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf); 3393 jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf);
3396 vm_exit_during_initialization(buf, NULL); 3395 vm_exit_during_initialization(buf, NULL);
3397 FREE_C_HEAP_ARRAY(char, buf); 3396 FREE_C_HEAP_ARRAY(char, buf);
3398 } 3397 }
3399 } else { 3398 } else {
3400 // Try to load the agent from the standard dll directory 3399 // Try to load the agent from the standard dll directory
3401 hpi::dll_build_name(buffer, sizeof(buffer), Arguments::get_dll_dir(), name); 3400 os::dll_build_name(buffer, sizeof(buffer), Arguments::get_dll_dir(), name);
3402 library = hpi::dll_load(buffer, ebuf, sizeof ebuf); 3401 library = os::dll_load(buffer, ebuf, sizeof ebuf);
3403 #ifdef KERNEL 3402 #ifdef KERNEL
3404 // Download instrument dll 3403 // Download instrument dll
3405 if (library == NULL && strcmp(name, "instrument") == 0) { 3404 if (library == NULL && strcmp(name, "instrument") == 0) {
3406 char *props = Arguments::get_kernel_properties(); 3405 char *props = Arguments::get_kernel_properties();
3407 char *home = Arguments::get_java_home(); 3406 char *home = Arguments::get_java_home();
3417 vm_exit_during_initialization("fork_and_exec failed: %s", 3416 vm_exit_during_initialization("fork_and_exec failed: %s",
3418 strerror(errno)); 3417 strerror(errno));
3419 } 3418 }
3420 FREE_C_HEAP_ARRAY(char, cmd); 3419 FREE_C_HEAP_ARRAY(char, cmd);
3421 // when this comes back the instrument.dll should be where it belongs. 3420 // when this comes back the instrument.dll should be where it belongs.
3422 library = hpi::dll_load(buffer, ebuf, sizeof ebuf); 3421 library = os::dll_load(buffer, ebuf, sizeof ebuf);
3423 } 3422 }
3424 #endif // KERNEL 3423 #endif // KERNEL
3425 if (library == NULL) { // Try the local directory 3424 if (library == NULL) { // Try the local directory
3426 char ns[1] = {0}; 3425 char ns[1] = {0};
3427 hpi::dll_build_name(buffer, sizeof(buffer), ns, name); 3426 os::dll_build_name(buffer, sizeof(buffer), ns, name);
3428 library = hpi::dll_load(buffer, ebuf, sizeof ebuf); 3427 library = os::dll_load(buffer, ebuf, sizeof ebuf);
3429 if (library == NULL) { 3428 if (library == NULL) {
3430 const char *sub_msg = " on the library path, with error: "; 3429 const char *sub_msg = " on the library path, with error: ";
3431 size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) + strlen(ebuf) + 1; 3430 size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) + strlen(ebuf) + 1;
3432 char *buf = NEW_C_HEAP_ARRAY(char, len); 3431 char *buf = NEW_C_HEAP_ARRAY(char, len);
3433 jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf); 3432 jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf);
3440 agent->set_os_lib(library); 3439 agent->set_os_lib(library);
3441 } 3440 }
3442 3441
3443 // Find the OnLoad function. 3442 // Find the OnLoad function.
3444 for (size_t symbol_index = 0; symbol_index < num_symbol_entries; symbol_index++) { 3443 for (size_t symbol_index = 0; symbol_index < num_symbol_entries; symbol_index++) {
3445 on_load_entry = CAST_TO_FN_PTR(OnLoadEntry_t, hpi::dll_lookup(library, on_load_symbols[symbol_index])); 3444 on_load_entry = CAST_TO_FN_PTR(OnLoadEntry_t, os::dll_lookup(library, on_load_symbols[symbol_index]));
3446 if (on_load_entry != NULL) break; 3445 if (on_load_entry != NULL) break;
3447 } 3446 }
3448 return on_load_entry; 3447 return on_load_entry;
3449 } 3448 }
3450 3449
3522 for (AgentLibrary* agent = Arguments::agents(); agent != NULL; agent = agent->next()) { 3521 for (AgentLibrary* agent = Arguments::agents(); agent != NULL; agent = agent->next()) {
3523 3522
3524 // Find the Agent_OnUnload function. 3523 // Find the Agent_OnUnload function.
3525 for (uint symbol_index = 0; symbol_index < ARRAY_SIZE(on_unload_symbols); symbol_index++) { 3524 for (uint symbol_index = 0; symbol_index < ARRAY_SIZE(on_unload_symbols); symbol_index++) {
3526 Agent_OnUnload_t unload_entry = CAST_TO_FN_PTR(Agent_OnUnload_t, 3525 Agent_OnUnload_t unload_entry = CAST_TO_FN_PTR(Agent_OnUnload_t,
3527 hpi::dll_lookup(agent->os_lib(), on_unload_symbols[symbol_index])); 3526 os::dll_lookup(agent->os_lib(), on_unload_symbols[symbol_index]));
3528 3527
3529 // Invoke the Agent_OnUnload function 3528 // Invoke the Agent_OnUnload function
3530 if (unload_entry != NULL) { 3529 if (unload_entry != NULL) {
3531 JavaThread* thread = JavaThread::current(); 3530 JavaThread* thread = JavaThread::current();
3532 ThreadToNativeFromVM ttn(thread); 3531 ThreadToNativeFromVM ttn(thread);
3691 // will be stopped at native=>Java/VM barriers. Note that we can't 3690 // will be stopped at native=>Java/VM barriers. Note that we can't
3692 // simply kill or suspend them, as it is inherently deadlock-prone. 3691 // simply kill or suspend them, as it is inherently deadlock-prone.
3693 3692
3694 #ifndef PRODUCT 3693 #ifndef PRODUCT
3695 // disable function tracing at JNI/JVM barriers 3694 // disable function tracing at JNI/JVM barriers
3696 TraceHPI = false;
3697 TraceJNICalls = false; 3695 TraceJNICalls = false;
3698 TraceJVMCalls = false; 3696 TraceJVMCalls = false;
3699 TraceRuntimeCalls = false; 3697 TraceRuntimeCalls = false;
3700 #endif 3698 #endif
3701 3699