You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gs...@apache.org on 2007/12/29 14:30:31 UTC
svn commit: r607415 -
/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti.cpp
Author: gshimansky
Date: Sat Dec 29 05:30:29 2007
New Revision: 607415
URL: http://svn.apache.org/viewvc?rev=607415&view=rev
Log:
Seatch for Agent_OnLoad and Agent_OnUnload functions in agent library on win32.
This is necessary because of braindead symbols conventions on win32. Symbols
may be with stdcall decorations and without them.
Modified:
harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti.cpp
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti.cpp?rev=607415&r1=607414&r2=607415&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti.cpp Sat Dec 29 05:30:29 2007
@@ -43,15 +43,25 @@
#include <apr_atomic.h>
#if defined(PLATFORM_NT) && !defined(_WIN64)
-#define AGENT_ONLOAD "_Agent_OnLoad@12"
-#define AGENT_ONUNLOAD "_Agent_OnUnload@4"
-#define JVM_ONLOAD "_JVM_OnLoad@12"
-#define JVM_ONUNLOAD "_JVM_OnUnLoad@4"
+#define AGENT_ONLOAD1 "_Agent_OnLoad@12"
+#define AGENT_ONUNLOAD1 "_Agent_OnUnload@4"
+#define JVM_ONLOAD1 "_JVM_OnLoad@12"
+#define JVM_ONUNLOAD1 "_JVM_OnUnLoad@4"
+
+#define AGENT_ONLOAD2 "Agent_OnLoad"
+#define AGENT_ONUNLOAD2 "Agent_OnUnload"
+#define JVM_ONLOAD2 "JVM_OnLoad"
+#define JVM_ONUNLOAD2 "JVM_OnUnLoad"
#else
-#define AGENT_ONLOAD "Agent_OnLoad"
-#define AGENT_ONUNLOAD "Agent_OnUnload"
-#define JVM_ONLOAD "JVM_OnLoad"
-#define JVM_ONUNLOAD "JVM_OnUnLoad"
+#define AGENT_ONLOAD1 "Agent_OnLoad"
+#define AGENT_ONUNLOAD1 "Agent_OnUnload"
+#define JVM_ONLOAD1 "JVM_OnLoad"
+#define JVM_ONUNLOAD1 "JVM_OnUnLoad"
+
+#define AGENT_ONLOAD2 NULL
+#define AGENT_ONUNLOAD2 NULL
+#define JVM_ONLOAD2 NULL
+#define JVM_ONUNLOAD2 NULL
#endif
static void JNICALL jvmtiUnimpStub(JNIEnv*);
@@ -450,18 +460,22 @@
return true;
}
-bool find_agent_onload_function(Agent *agent, const char *function_name)
+bool find_agent_onload_function(Agent *agent, const char *function_name1, const char *function_name2)
{
apr_dso_handle_sym_t handle = 0;
- apr_status_t status = apr_dso_sym(&handle, agent->agentLib, function_name);
+ apr_status_t status = apr_dso_sym(&handle, agent->agentLib, function_name1);
+ if (handle == 0 && function_name2 != NULL)
+ status = apr_dso_sym(&handle, agent->agentLib, function_name2);
agent->Agent_OnLoad_func = (f_Agent_OnLoad)handle;
return status == APR_SUCCESS;
}
-bool find_agent_onunload_function(Agent *agent, const char *function_name)
+bool find_agent_onunload_function(Agent *agent, const char *function_name1, const char *function_name2)
{
apr_dso_handle_sym_t handle = 0;
- apr_status_t status = apr_dso_sym(&handle, agent->agentLib, function_name);
+ apr_status_t status = apr_dso_sym(&handle, agent->agentLib, function_name1);
+ if (handle == 0 && function_name2 != NULL)
+ status = apr_dso_sym(&handle, agent->agentLib, function_name2);
agent->Agent_OnUnLoad_func = (f_Agent_OnUnLoad)handle;
return status == APR_SUCCESS;
}
@@ -473,8 +487,7 @@
if (!open_agent_library(agent, lib_name, true))
return -1;
- const char *callback = AGENT_ONLOAD, *callback_unload = AGENT_ONUNLOAD;
- if (!find_agent_onload_function(agent, callback))
+ if (!find_agent_onload_function(agent, AGENT_ONLOAD1, AGENT_ONLOAD2))
{
char buf[256];
LWARN(33, "No agent entry function found in library {0} : {1}" << lib_name
@@ -491,7 +504,7 @@
TRACE2("jvmti", "Calling onload in lib " << lib_name << " with options " << agent_options);
}
#endif
- find_agent_onunload_function(agent, callback_unload);
+ find_agent_onunload_function(agent, AGENT_ONUNLOAD1, AGENT_ONUNLOAD2);
assert(agent->Agent_OnLoad_func);
jint result = agent->Agent_OnLoad_func(vm, agent_options, NULL);
if (0 != result)
@@ -537,9 +550,7 @@
path = path1;
}
- const char *callback = AGENT_ONLOAD, *callback_unload = AGENT_ONUNLOAD;
-
- if (!find_agent_onload_function(agent, callback))
+ if (!find_agent_onload_function(agent, AGENT_ONLOAD1, AGENT_ONLOAD2))
{
char buf[256];
LWARN(33, "No agent entry function found in library {0} : {1}" << path
@@ -556,7 +567,7 @@
TRACE2("jvmti", "Calling onload in lib " << path << " with options " << agent_options);
}
#endif
- find_agent_onunload_function(agent, callback_unload);
+ find_agent_onunload_function(agent, AGENT_ONUNLOAD1, AGENT_ONUNLOAD2);
assert(agent->Agent_OnLoad_func);
jint result = agent->Agent_OnLoad_func(vm, agent_options, NULL);
if (0 != result)
@@ -588,12 +599,9 @@
path = path1;
}
- const char *callback1 = AGENT_ONLOAD, *callback1_unload = AGENT_ONUNLOAD;
- const char *callback2 = JVM_ONLOAD, *callback2_unload = JVM_ONUNLOAD;
-
- if (!find_agent_onload_function(agent, callback1))
+ if (!find_agent_onload_function(agent, AGENT_ONLOAD1, AGENT_ONLOAD2))
{
- if (!find_agent_onload_function(agent, callback2))
+ if (!find_agent_onload_function(agent, JVM_ONLOAD1, JVM_ONLOAD2))
{
char buf[256];
LWARN(33, "No agent entry function found in library {0} : {1}" << path
@@ -601,10 +609,10 @@
return -1;
}
else
- find_agent_onunload_function(agent, callback2_unload);
+ find_agent_onunload_function(agent, JVM_ONUNLOAD1, JVM_ONUNLOAD2);
}
else
- find_agent_onunload_function(agent, callback1_unload);
+ find_agent_onunload_function(agent, AGENT_ONUNLOAD1, AGENT_ONUNLOAD2);
#ifdef _DEBUG
if (NULL == agent_options)
{