hotspot/src/os/windows/vm/os_windows.cpp
changeset 19553 9bbd930be684
parent 19274 a09ed3dff789
child 19560 d44eb8cd7ecc
equal deleted inserted replaced
19530:0c39c59e1624 19553:9bbd930be684
  5392 
  5392 
  5393 inline BOOL os::Advapi32Dll::AdvapiAvailable() {
  5393 inline BOOL os::Advapi32Dll::AdvapiAvailable() {
  5394   return true;
  5394   return true;
  5395 }
  5395 }
  5396 
  5396 
       
  5397 void* os::get_default_process_handle() {
       
  5398   return (void*)GetModuleHandle(NULL);
       
  5399 }
       
  5400 
       
  5401 // Builds a platform dependent Agent_OnLoad_<lib_name> function name
       
  5402 // which is used to find statically linked in agents.
       
  5403 // Additionally for windows, takes into account __stdcall names.
       
  5404 // Parameters:
       
  5405 //            sym_name: Symbol in library we are looking for
       
  5406 //            lib_name: Name of library to look in, NULL for shared libs.
       
  5407 //            is_absolute_path == true if lib_name is absolute path to agent
       
  5408 //                                     such as "C:/a/b/L.dll"
       
  5409 //            == false if only the base name of the library is passed in
       
  5410 //               such as "L"
       
  5411 char* os::build_agent_function_name(const char *sym_name, const char *lib_name,
       
  5412                                     bool is_absolute_path) {
       
  5413   char *agent_entry_name;
       
  5414   size_t len;
       
  5415   size_t name_len;
       
  5416   size_t prefix_len = strlen(JNI_LIB_PREFIX);
       
  5417   size_t suffix_len = strlen(JNI_LIB_SUFFIX);
       
  5418   const char *start;
       
  5419 
       
  5420   if (lib_name != NULL) {
       
  5421     len = name_len = strlen(lib_name);
       
  5422     if (is_absolute_path) {
       
  5423       // Need to strip path, prefix and suffix
       
  5424       if ((start = strrchr(lib_name, *os::file_separator())) != NULL) {
       
  5425         lib_name = ++start;
       
  5426       } else {
       
  5427         // Need to check for C:
       
  5428         if ((start = strchr(lib_name, ':')) != NULL) {
       
  5429           lib_name = ++start;
       
  5430         }
       
  5431       }
       
  5432       if (len <= (prefix_len + suffix_len)) {
       
  5433         return NULL;
       
  5434       }
       
  5435       lib_name += prefix_len;
       
  5436       name_len = strlen(lib_name) - suffix_len;
       
  5437     }
       
  5438   }
       
  5439   len = (lib_name != NULL ? name_len : 0) + strlen(sym_name) + 2;
       
  5440   agent_entry_name = NEW_C_HEAP_ARRAY_RETURN_NULL(char, len, mtThread);
       
  5441   if (agent_entry_name == NULL) {
       
  5442     return NULL;
       
  5443   }
       
  5444   if (lib_name != NULL) {
       
  5445     const char *p = strrchr(sym_name, '@');
       
  5446     if (p != NULL && p != sym_name) {
       
  5447       // sym_name == _Agent_OnLoad@XX
       
  5448       strncpy(agent_entry_name, sym_name, (p - sym_name));
       
  5449       agent_entry_name[(p-sym_name)] = '\0';
       
  5450       // agent_entry_name == _Agent_OnLoad
       
  5451       strcat(agent_entry_name, "_");
       
  5452       strncat(agent_entry_name, lib_name, name_len);
       
  5453       strcat(agent_entry_name, p);
       
  5454       // agent_entry_name == _Agent_OnLoad_lib_name@XX
       
  5455     } else {
       
  5456       strcpy(agent_entry_name, sym_name);
       
  5457       strcat(agent_entry_name, "_");
       
  5458       strncat(agent_entry_name, lib_name, name_len);
       
  5459     }
       
  5460   } else {
       
  5461     strcpy(agent_entry_name, sym_name);
       
  5462   }
       
  5463   return agent_entry_name;
       
  5464 }
       
  5465 
  5397 #else
  5466 #else
  5398 // Kernel32 API
  5467 // Kernel32 API
  5399 typedef BOOL (WINAPI* SwitchToThread_Fn)(void);
  5468 typedef BOOL (WINAPI* SwitchToThread_Fn)(void);
  5400 typedef HANDLE (WINAPI* CreateToolhelp32Snapshot_Fn)(DWORD,DWORD);
  5469 typedef HANDLE (WINAPI* CreateToolhelp32Snapshot_Fn)(DWORD,DWORD);
  5401 typedef BOOL (WINAPI* Module32First_Fn)(HANDLE,LPMODULEENTRY32);
  5470 typedef BOOL (WINAPI* Module32First_Fn)(HANDLE,LPMODULEENTRY32);