comparison src/os/windows/vm/os_windows.cpp @ 12124:62f527c674d2

Merge
author dholmes
date Thu, 29 Aug 2013 00:22:13 -0400
parents 4c84d351cca9 f92b82d454fa
children 8e94527f601e f7bc2ab5f659
comparison
equal deleted inserted replaced
12116:1624a68007bd 12124:62f527c674d2
5397 5397
5398 inline BOOL os::Advapi32Dll::AdvapiAvailable() { 5398 inline BOOL os::Advapi32Dll::AdvapiAvailable() {
5399 return true; 5399 return true;
5400 } 5400 }
5401 5401
5402 void* os::get_default_process_handle() {
5403 return (void*)GetModuleHandle(NULL);
5404 }
5405
5406 // Builds a platform dependent Agent_OnLoad_<lib_name> function name
5407 // which is used to find statically linked in agents.
5408 // Additionally for windows, takes into account __stdcall names.
5409 // Parameters:
5410 // sym_name: Symbol in library we are looking for
5411 // lib_name: Name of library to look in, NULL for shared libs.
5412 // is_absolute_path == true if lib_name is absolute path to agent
5413 // such as "C:/a/b/L.dll"
5414 // == false if only the base name of the library is passed in
5415 // such as "L"
5416 char* os::build_agent_function_name(const char *sym_name, const char *lib_name,
5417 bool is_absolute_path) {
5418 char *agent_entry_name;
5419 size_t len;
5420 size_t name_len;
5421 size_t prefix_len = strlen(JNI_LIB_PREFIX);
5422 size_t suffix_len = strlen(JNI_LIB_SUFFIX);
5423 const char *start;
5424
5425 if (lib_name != NULL) {
5426 len = name_len = strlen(lib_name);
5427 if (is_absolute_path) {
5428 // Need to strip path, prefix and suffix
5429 if ((start = strrchr(lib_name, *os::file_separator())) != NULL) {
5430 lib_name = ++start;
5431 } else {
5432 // Need to check for C:
5433 if ((start = strchr(lib_name, ':')) != NULL) {
5434 lib_name = ++start;
5435 }
5436 }
5437 if (len <= (prefix_len + suffix_len)) {
5438 return NULL;
5439 }
5440 lib_name += prefix_len;
5441 name_len = strlen(lib_name) - suffix_len;
5442 }
5443 }
5444 len = (lib_name != NULL ? name_len : 0) + strlen(sym_name) + 2;
5445 agent_entry_name = NEW_C_HEAP_ARRAY_RETURN_NULL(char, len, mtThread);
5446 if (agent_entry_name == NULL) {
5447 return NULL;
5448 }
5449 if (lib_name != NULL) {
5450 const char *p = strrchr(sym_name, '@');
5451 if (p != NULL && p != sym_name) {
5452 // sym_name == _Agent_OnLoad@XX
5453 strncpy(agent_entry_name, sym_name, (p - sym_name));
5454 agent_entry_name[(p-sym_name)] = '\0';
5455 // agent_entry_name == _Agent_OnLoad
5456 strcat(agent_entry_name, "_");
5457 strncat(agent_entry_name, lib_name, name_len);
5458 strcat(agent_entry_name, p);
5459 // agent_entry_name == _Agent_OnLoad_lib_name@XX
5460 } else {
5461 strcpy(agent_entry_name, sym_name);
5462 strcat(agent_entry_name, "_");
5463 strncat(agent_entry_name, lib_name, name_len);
5464 }
5465 } else {
5466 strcpy(agent_entry_name, sym_name);
5467 }
5468 return agent_entry_name;
5469 }
5470
5402 #else 5471 #else
5403 // Kernel32 API 5472 // Kernel32 API
5404 typedef BOOL (WINAPI* SwitchToThread_Fn)(void); 5473 typedef BOOL (WINAPI* SwitchToThread_Fn)(void);
5405 typedef HANDLE (WINAPI* CreateToolhelp32Snapshot_Fn)(DWORD,DWORD); 5474 typedef HANDLE (WINAPI* CreateToolhelp32Snapshot_Fn)(DWORD,DWORD);
5406 typedef BOOL (WINAPI* Module32First_Fn)(HANDLE,LPMODULEENTRY32); 5475 typedef BOOL (WINAPI* Module32First_Fn)(HANDLE,LPMODULEENTRY32);