src/os/windows/vm/os_windows.cpp
Print this page
@@ -5382,10 +5382,69 @@
inline BOOL os::Advapi32Dll::AdvapiAvailable() {
return true;
}
+void* os::getDefaultProcessHandle() {
+ return (void*)GetModuleHandle(NULL);
+}
+
+char* os::buildAgentFunctionName(const char *symName, const char *name,
+ bool is_absolute_path) {
+ char *agentEntryName;
+ size_t len;
+ size_t nameLen;
+ size_t prefixLen = strlen(JNI_LIB_PREFIX);
+ size_t suffixLen = strlen(JNI_LIB_SUFFIX);
+ const char *start;
+
+ if (name != NULL) {
+ len = nameLen = strlen(name);
+ if (is_absolute_path) {
+ // Need to strip path, prefix and suffix
+ if ((start = strrchr(name, *os::file_separator())) != NULL) {
+ name = ++start;
+ } else {
+ // Need to check for C:
+ if ((start = strchr(name, ':')) != NULL) {
+ name = ++start;
+ }
+ }
+ if (len <= (prefixLen + suffixLen)) {
+ return NULL;
+ }
+ name += prefixLen;
+ nameLen = strlen(name) - suffixLen;
+ }
+ }
+ len = (name != NULL ? nameLen : 0) + strlen(symName) + 2;
+ agentEntryName = NEW_C_HEAP_ARRAY(char, len, mtThread);
+ if (agentEntryName == NULL) {
+ return NULL;
+ }
+ if (name != NULL) {
+ const char *p = strrchr(symName, '@');
+ if (p != NULL && p != symName) {
+ // symName == _Agent_OnLoad@12
+ strncpy(agentEntryName, symName, (p - symName));
+ agentEntryName[(p-symName)] = '\0';
+ // agentEntryName == _Agent_OnLoad
+ strcat(agentEntryName, "_");
+ strncat(agentEntryName, name, nameLen);
+ strcat(agentEntryName, p);
+ //agentEntryName == _Agent_OnLoad_libName@12
+ } else {
+ strcpy(agentEntryName, symName);
+ strcat(agentEntryName, "_");
+ strncat(agentEntryName, name, nameLen);
+ }
+ } else {
+ strcpy(agentEntryName, symName);
+ }
+ return agentEntryName;
+}
+
#else
// Kernel32 API
typedef BOOL (WINAPI* SwitchToThread_Fn)(void);
typedef HANDLE (WINAPI* CreateToolhelp32Snapshot_Fn)(DWORD,DWORD);
typedef BOOL (WINAPI* Module32First_Fn)(HANDLE,LPMODULEENTRY32);