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);