Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
1cb28fec
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
1cb28fec
编写于
3月 27, 2008
作者:
D
dcubed
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
1dab318d
1c00e55a
变更
59
隐藏空白更改
内联
并排
Showing
59 changed file
with
3063 addition
and
68 deletion
+3063
-68
src/share/classes/java/lang/instrument/Instrumentation.java
src/share/classes/java/lang/instrument/Instrumentation.java
+5
-1
src/share/classes/sun/instrument/InstrumentationImpl.java
src/share/classes/sun/instrument/InstrumentationImpl.java
+55
-16
src/share/instrument/InvocationAdapter.c
src/share/instrument/InvocationAdapter.c
+4
-0
src/share/instrument/JPLISAgent.c
src/share/instrument/JPLISAgent.c
+44
-3
src/share/instrument/JPLISAgent.h
src/share/instrument/JPLISAgent.h
+42
-0
src/share/instrument/JarFacade.c
src/share/instrument/JarFacade.c
+35
-1
src/share/instrument/Reentrancy.c
src/share/instrument/Reentrancy.c
+3
-0
src/share/instrument/Utilities.c
src/share/instrument/Utilities.c
+2
-0
test/java/lang/instrument/BootClassPath/BootClassPathTest.sh
test/java/lang/instrument/BootClassPath/BootClassPathTest.sh
+4
-2
test/java/lang/instrument/MakeJAR2.sh
test/java/lang/instrument/MakeJAR2.sh
+5
-3
test/java/lang/instrument/ManifestTest.sh
test/java/lang/instrument/ManifestTest.sh
+483
-0
test/java/lang/instrument/ManifestTestAgent.java
test/java/lang/instrument/ManifestTestAgent.java
+41
-0
test/java/lang/instrument/ManifestTestApp.java
test/java/lang/instrument/ManifestTestApp.java
+69
-0
test/java/lang/instrument/NativeMethodPrefixAgent.java
test/java/lang/instrument/NativeMethodPrefixAgent.java
+1
-1
test/java/lang/instrument/ParallelTransformerLoader.sh
test/java/lang/instrument/ParallelTransformerLoader.sh
+72
-0
test/java/lang/instrument/ParallelTransformerLoaderAgent.java
.../java/lang/instrument/ParallelTransformerLoaderAgent.java
+120
-0
test/java/lang/instrument/ParallelTransformerLoaderApp.java
test/java/lang/instrument/ParallelTransformerLoaderApp.java
+90
-0
test/java/lang/instrument/PremainClass/DummyMain.java
test/java/lang/instrument/PremainClass/DummyMain.java
+2
-3
test/java/lang/instrument/PremainClass/InheritAgent0001.java
test/java/lang/instrument/PremainClass/InheritAgent0001.java
+54
-0
test/java/lang/instrument/PremainClass/InheritAgent0010.java
test/java/lang/instrument/PremainClass/InheritAgent0010.java
+54
-0
test/java/lang/instrument/PremainClass/InheritAgent0011.java
test/java/lang/instrument/PremainClass/InheritAgent0011.java
+61
-0
test/java/lang/instrument/PremainClass/InheritAgent0100.java
test/java/lang/instrument/PremainClass/InheritAgent0100.java
+54
-0
test/java/lang/instrument/PremainClass/InheritAgent0101.java
test/java/lang/instrument/PremainClass/InheritAgent0101.java
+61
-0
test/java/lang/instrument/PremainClass/InheritAgent0110.java
test/java/lang/instrument/PremainClass/InheritAgent0110.java
+61
-0
test/java/lang/instrument/PremainClass/InheritAgent0111.java
test/java/lang/instrument/PremainClass/InheritAgent0111.java
+69
-0
test/java/lang/instrument/PremainClass/InheritAgent1000.java
test/java/lang/instrument/PremainClass/InheritAgent1000.java
+54
-0
test/java/lang/instrument/PremainClass/InheritAgent1001.java
test/java/lang/instrument/PremainClass/InheritAgent1001.java
+61
-0
test/java/lang/instrument/PremainClass/InheritAgent1010.java
test/java/lang/instrument/PremainClass/InheritAgent1010.java
+61
-0
test/java/lang/instrument/PremainClass/InheritAgent1011.java
test/java/lang/instrument/PremainClass/InheritAgent1011.java
+68
-0
test/java/lang/instrument/PremainClass/InheritAgent1100.java
test/java/lang/instrument/PremainClass/InheritAgent1100.java
+61
-0
test/java/lang/instrument/PremainClass/InheritAgent1101.java
test/java/lang/instrument/PremainClass/InheritAgent1101.java
+68
-0
test/java/lang/instrument/PremainClass/InheritAgent1110.java
test/java/lang/instrument/PremainClass/InheritAgent1110.java
+68
-0
test/java/lang/instrument/PremainClass/InheritAgent1111.java
test/java/lang/instrument/PremainClass/InheritAgent1111.java
+75
-0
test/java/lang/instrument/PremainClass/NoPremainAgent.java
test/java/lang/instrument/PremainClass/NoPremainAgent.java
+29
-0
test/java/lang/instrument/PremainClass/NoPremainAgent.sh
test/java/lang/instrument/PremainClass/NoPremainAgent.sh
+68
-0
test/java/lang/instrument/PremainClass/PremainClassTest.sh
test/java/lang/instrument/PremainClass/PremainClassTest.sh
+1
-1
test/java/lang/instrument/PremainClass/ZeroArgPremainAgent.java
...ava/lang/instrument/PremainClass/ZeroArgPremainAgent.java
+32
-0
test/java/lang/instrument/PremainClass/ZeroArgPremainAgent.sh
.../java/lang/instrument/PremainClass/ZeroArgPremainAgent.sh
+68
-0
test/java/lang/instrument/RedefineClassWithNativeMethod.sh
test/java/lang/instrument/RedefineClassWithNativeMethod.sh
+81
-0
test/java/lang/instrument/RedefineClassWithNativeMethodAgent.java
...a/lang/instrument/RedefineClassWithNativeMethodAgent.java
+70
-0
test/java/lang/instrument/RedefineClassWithNativeMethodApp.java
...ava/lang/instrument/RedefineClassWithNativeMethodApp.java
+38
-0
test/java/lang/instrument/RedefineMethodAddInvoke.sh
test/java/lang/instrument/RedefineMethodAddInvoke.sh
+82
-0
test/java/lang/instrument/RedefineMethodAddInvokeAgent.java
test/java/lang/instrument/RedefineMethodAddInvokeAgent.java
+43
-0
test/java/lang/instrument/RedefineMethodAddInvokeApp.java
test/java/lang/instrument/RedefineMethodAddInvokeApp.java
+70
-0
test/java/lang/instrument/RedefineMethodAddInvokeTarget.java
test/java/lang/instrument/RedefineMethodAddInvokeTarget.java
+37
-0
test/java/lang/instrument/RedefineMethodAddInvokeTarget_1.java
...java/lang/instrument/RedefineMethodAddInvokeTarget_1.java
+43
-0
test/java/lang/instrument/RedefineMethodAddInvokeTarget_2.java
...java/lang/instrument/RedefineMethodAddInvokeTarget_2.java
+49
-0
test/java/lang/instrument/RetransformAgent.java
test/java/lang/instrument/RetransformAgent.java
+1
-1
test/java/lang/instrument/StressGetObjectSizeApp.java
test/java/lang/instrument/StressGetObjectSizeApp.java
+86
-0
test/java/lang/instrument/StressGetObjectSizeTest.sh
test/java/lang/instrument/StressGetObjectSizeTest.sh
+70
-0
test/java/lang/instrument/TestClass1.java
test/java/lang/instrument/TestClass1.java
+36
-0
test/java/lang/instrument/TestClass2.java
test/java/lang/instrument/TestClass2.java
+36
-0
test/java/lang/instrument/TestClass3.java
test/java/lang/instrument/TestClass3.java
+36
-0
test/java/lang/instrument/TransformerManagementThreadAddTests.java
.../lang/instrument/TransformerManagementThreadAddTests.java
+48
-7
test/java/lang/instrument/TransformerManagementThreadRemoveTests.java
...ng/instrument/TransformerManagementThreadRemoveTests.java
+8
-4
test/java/lang/instrument/appendToClassLoaderSearch/CircularityErrorTest.sh
...trument/appendToClassLoaderSearch/CircularityErrorTest.sh
+4
-4
test/java/lang/instrument/appendToClassLoaderSearch/ClassUnloadTest.sh
...g/instrument/appendToClassLoaderSearch/ClassUnloadTest.sh
+9
-9
test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh
.../lang/instrument/appendToClassLoaderSearch/CommonSetup.sh
+1
-2
test/java/lang/instrument/appendToClassLoaderSearch/run_tests.sh
...va/lang/instrument/appendToClassLoaderSearch/run_tests.sh
+10
-10
未找到文件。
src/share/classes/java/lang/instrument/Instrumentation.java
浏览文件 @
1cb28fec
...
...
@@ -636,7 +636,11 @@ public interface Instrumentation {
* @param transformer
* The ClassFileTransformer which wraps using this prefix.
* @param prefix
* The prefix which has been applied to wrapped native methods.
* The prefix to apply to wrapped native methods when
* retrying a failed native method resolution. If prefix
* is either <code>null</code> or the empty string, then
* failed native method resolutions are not retried for
* this transformer.
* @throws java.lang.NullPointerException if passed a <code>null</code> transformer.
* @throws java.lang.UnsupportedOperationException if the current configuration of
* the JVM does not allow setting a native method prefix
...
...
src/share/classes/sun/instrument/InstrumentationImpl.java
浏览文件 @
1cb28fec
...
...
@@ -303,39 +303,78 @@ public class InstrumentationImpl implements Instrumentation {
NoSuchMethodException
firstExc
=
null
;
boolean
twoArgAgent
=
false
;
// The agent class has a premain or agentmain method that has 1 or 2
// arguments. We first check for a signature of (String, Instrumentation),
// and if not found we check for (String). If neither is found then we
// throw the NoSuchMethodException from the first attempt so that the
// exception text indicates the lookup failed for the 2-arg method
// (same as JDK5.0).
// The agent class must have a premain or agentmain method that
// has 1 or 2 arguments. We check in the following order:
//
// 1) declared with a signature of (String, Instrumentation)
// 2) declared with a signature of (String)
// 3) inherited with a signature of (String, Instrumentation)
// 4) inherited with a signature of (String)
//
// So the declared version of either 1-arg or 2-arg always takes
// primary precedence over an inherited version. After that, the
// 2-arg version takes precedence over the 1-arg version.
//
// If no method is found then we throw the NoSuchMethodException
// from the first attempt so that the exception text indicates
// the lookup failed for the 2-arg method (same as JDK5.0).
try
{
m
=
javaAgentClass
.
getMethod
(
methodname
,
new
Class
[]
{
String
.
class
,
java
.
lang
.
instrument
.
Instrumentation
.
class
}
);
m
=
javaAgentClass
.
get
Declared
Method
(
methodname
,
new
Class
[]
{
String
.
class
,
java
.
lang
.
instrument
.
Instrumentation
.
class
}
);
twoArgAgent
=
true
;
}
catch
(
NoSuchMethodException
x
)
{
// remember the NoSuchMethodException
firstExc
=
x
;
}
// check for the 1-arg method
if
(
m
==
null
)
{
// now try the declared 1-arg method
try
{
m
=
javaAgentClass
.
getMethod
(
methodname
,
new
Class
[]
{
String
.
class
});
m
=
javaAgentClass
.
getDeclaredMethod
(
methodname
,
new
Class
[]
{
String
.
class
});
}
catch
(
NoSuchMethodException
x
)
{
// Neither method exists so we throw the first NoSuchMethodException
// as per 5.0
// ignore this exception because we'll try
// two arg inheritance next
}
}
if
(
m
==
null
)
{
// now try the inherited 2-arg method
try
{
m
=
javaAgentClass
.
getMethod
(
methodname
,
new
Class
[]
{
String
.
class
,
java
.
lang
.
instrument
.
Instrumentation
.
class
}
);
twoArgAgent
=
true
;
}
catch
(
NoSuchMethodException
x
)
{
// ignore this exception because we'll try
// one arg inheritance next
}
}
if
(
m
==
null
)
{
// finally try the inherited 1-arg method
try
{
m
=
javaAgentClass
.
getMethod
(
methodname
,
new
Class
[]
{
String
.
class
});
}
catch
(
NoSuchMethodException
x
)
{
// none of the methods exists so we throw the
// first NoSuchMethodException as per 5.0
throw
firstExc
;
}
}
// the premain method should not be required to be public,
// make it accessible so we can call it
// Note: The spec says the following:
// The agent class must implement a public static premain method...
setAccessible
(
m
,
true
);
// invoke the 1 or 2-arg method
...
...
src/share/instrument/InvocationAdapter.c
浏览文件 @
1cb28fec
...
...
@@ -626,6 +626,7 @@ appendClassPath( JPLISAgent* agent,
jvmtiError
jvmtierr
;
jvmtierr
=
(
*
jvmtienv
)
->
AddToSystemClassLoaderSearch
(
jvmtienv
,
jarfile
);
check_phase_ret_1
(
jvmtierr
);
if
(
jvmtierr
==
JVMTI_ERROR_NONE
)
{
return
0
;
...
...
@@ -634,6 +635,7 @@ appendClassPath( JPLISAgent* agent,
jvmtiError
err
;
err
=
(
*
jvmtienv
)
->
GetPhase
(
jvmtienv
,
&
phase
);
/* can be called from any phase */
jplis_assert
(
err
==
JVMTI_ERROR_NONE
);
if
(
phase
==
JVMTI_PHASE_LIVE
)
{
...
...
@@ -805,6 +807,8 @@ appendBootClassPath( JPLISAgent* agent,
/* print warning if boot class path not updated */
if
(
jvmtierr
!=
JVMTI_ERROR_NONE
)
{
check_phase_blob_ret
(
jvmtierr
,
free
(
path
));
fprintf
(
stderr
,
"WARNING: %s not added to bootstrap class loader search: "
,
path
);
switch
(
jvmtierr
)
{
case
JVMTI_ERROR_ILLEGAL_ARGUMENT
:
...
...
src/share/instrument/JPLISAgent.c
浏览文件 @
1cb28fec
...
...
@@ -179,6 +179,7 @@ getJPLISEnvironment(jvmtiEnv * jvmtienv) {
jvmtierror
=
(
*
jvmtienv
)
->
GetEnvironmentLocalStorage
(
jvmtienv
,
(
void
**
)
&
environment
);
/* can be called from any phase */
jplis_assert
(
jvmtierror
==
JVMTI_ERROR_NONE
);
if
(
jvmtierror
==
JVMTI_ERROR_NONE
)
{
...
...
@@ -230,6 +231,7 @@ createNewJPLISAgent(JavaVM * vm, JPLISAgent **agent_ptr) {
/* don't leak envs */
if
(
initerror
!=
JPLIS_INIT_ERROR_NONE
)
{
jvmtiError
jvmtierror
=
(
*
jvmtienv
)
->
DisposeEnvironment
(
jvmtienv
);
/* can be called from any phase */
jplis_assert
(
jvmtierror
==
JVMTI_ERROR_NONE
);
}
}
...
...
@@ -259,7 +261,7 @@ initializeJPLISAgent( JPLISAgent * agent,
agent
->
mNormalEnvironment
.
mIsRetransformer
=
JNI_FALSE
;
agent
->
mRetransformEnvironment
.
mJVMTIEnv
=
NULL
;
/* NULL until needed */
agent
->
mRetransformEnvironment
.
mAgent
=
agent
;
agent
->
mRetransformEnvironment
.
mIsRetransformer
=
JNI_
TRUE
;
agent
->
mRetransformEnvironment
.
mIsRetransformer
=
JNI_
FALSE
;
/* JNI_FALSE until mJVMTIEnv is set */
agent
->
mAgentmainCaller
=
NULL
;
agent
->
mInstrumentationImpl
=
NULL
;
agent
->
mPremainCaller
=
NULL
;
...
...
@@ -277,18 +279,25 @@ initializeJPLISAgent( JPLISAgent * agent,
jvmtierror
=
(
*
jvmtienv
)
->
SetEnvironmentLocalStorage
(
jvmtienv
,
&
(
agent
->
mNormalEnvironment
));
/* can be called from any phase */
jplis_assert
(
jvmtierror
==
JVMTI_ERROR_NONE
);
/* check what capabilities are available */
checkCapabilities
(
agent
);
/* check phase - if live phase then we don't need the VMInit event */
jvmtierror
==
(
*
jvmtienv
)
->
GetPhase
(
jvmtienv
,
&
phase
);
jvmtierror
=
(
*
jvmtienv
)
->
GetPhase
(
jvmtienv
,
&
phase
);
/* can be called from any phase */
jplis_assert
(
jvmtierror
==
JVMTI_ERROR_NONE
);
if
(
phase
==
JVMTI_PHASE_LIVE
)
{
return
JPLIS_INIT_ERROR_NONE
;
}
if
(
phase
!=
JVMTI_PHASE_ONLOAD
)
{
/* called too early or called too late; either way bail out */
return
JPLIS_INIT_ERROR_FAILURE
;
}
/* now turn on the VMInit event */
if
(
jvmtierror
==
JVMTI_ERROR_NONE
)
{
jvmtiEventCallbacks
callbacks
;
...
...
@@ -298,6 +307,7 @@ initializeJPLISAgent( JPLISAgent * agent,
jvmtierror
=
(
*
jvmtienv
)
->
SetEventCallbacks
(
jvmtienv
,
&
callbacks
,
sizeof
(
callbacks
));
check_phase_ret_blob
(
jvmtierror
,
JPLIS_INIT_ERROR_FAILURE
);
jplis_assert
(
jvmtierror
==
JVMTI_ERROR_NONE
);
}
...
...
@@ -307,6 +317,7 @@ initializeJPLISAgent( JPLISAgent * agent,
JVMTI_ENABLE
,
JVMTI_EVENT_VM_INIT
,
NULL
/* all threads */
);
check_phase_ret_blob
(
jvmtierror
,
JPLIS_INIT_ERROR_FAILURE
);
jplis_assert
(
jvmtierror
==
JVMTI_ERROR_NONE
);
}
...
...
@@ -622,6 +633,7 @@ setLivePhaseEventHandlers( JPLISAgent * agent) {
jvmtierror
=
(
*
jvmtienv
)
->
SetEventCallbacks
(
jvmtienv
,
&
callbacks
,
sizeof
(
callbacks
));
check_phase_ret_false
(
jvmtierror
);
jplis_assert
(
jvmtierror
==
JVMTI_ERROR_NONE
);
...
...
@@ -632,6 +644,7 @@ setLivePhaseEventHandlers( JPLISAgent * agent) {
JVMTI_DISABLE
,
JVMTI_EVENT_VM_INIT
,
NULL
/* all threads */
);
check_phase_ret_false
(
jvmtierror
);
jplis_assert
(
jvmtierror
==
JVMTI_ERROR_NONE
);
}
...
...
@@ -642,6 +655,7 @@ setLivePhaseEventHandlers( JPLISAgent * agent) {
JVMTI_ENABLE
,
JVMTI_EVENT_CLASS_FILE_LOAD_HOOK
,
NULL
/* all threads */
);
check_phase_ret_false
(
jvmtierror
);
jplis_assert
(
jvmtierror
==
JVMTI_ERROR_NONE
);
}
...
...
@@ -660,6 +674,7 @@ checkCapabilities(JPLISAgent * agent) {
memset
(
&
potentialCapabilities
,
0
,
sizeof
(
potentialCapabilities
));
jvmtierror
=
(
*
jvmtienv
)
->
GetPotentialCapabilities
(
jvmtienv
,
&
potentialCapabilities
);
check_phase_ret
(
jvmtierror
);
jplis_assert
(
jvmtierror
==
JVMTI_ERROR_NONE
);
if
(
jvmtierror
==
JVMTI_ERROR_NONE
)
{
...
...
@@ -681,9 +696,11 @@ enableNativeMethodPrefixCapability(jvmtiEnv * jvmtienv) {
jvmtiError
jvmtierror
;
jvmtierror
=
(
*
jvmtienv
)
->
GetCapabilities
(
jvmtienv
,
&
desiredCapabilities
);
/* can be called from any phase */
jplis_assert
(
jvmtierror
==
JVMTI_ERROR_NONE
);
desiredCapabilities
.
can_set_native_method_prefix
=
1
;
jvmtierror
=
(
*
jvmtienv
)
->
AddCapabilities
(
jvmtienv
,
&
desiredCapabilities
);
check_phase_ret
(
jvmtierror
);
jplis_assert
(
jvmtierror
==
JVMTI_ERROR_NONE
);
}
...
...
@@ -715,9 +732,11 @@ addOriginalMethodOrderCapability(JPLISAgent * agent) {
jvmtiError
jvmtierror
;
jvmtierror
=
(
*
jvmtienv
)
->
GetCapabilities
(
jvmtienv
,
&
desiredCapabilities
);
/* can be called from any phase */
jplis_assert
(
jvmtierror
==
JVMTI_ERROR_NONE
);
desiredCapabilities
.
can_maintain_original_method_order
=
1
;
jvmtierror
=
(
*
jvmtienv
)
->
AddCapabilities
(
jvmtienv
,
&
desiredCapabilities
);
check_phase_ret
(
jvmtierror
);
jplis_assert
(
jvmtierror
==
JVMTI_ERROR_NONE
);
}
...
...
@@ -732,9 +751,11 @@ addRedefineClassesCapability(JPLISAgent * agent) {
if
(
agent
->
mRedefineAvailable
&&
!
agent
->
mRedefineAdded
)
{
jvmtierror
=
(
*
jvmtienv
)
->
GetCapabilities
(
jvmtienv
,
&
desiredCapabilities
);
/* can be called from any phase */
jplis_assert
(
jvmtierror
==
JVMTI_ERROR_NONE
);
desiredCapabilities
.
can_redefine_classes
=
1
;
jvmtierror
=
(
*
jvmtienv
)
->
AddCapabilities
(
jvmtienv
,
&
desiredCapabilities
);
check_phase_ret
(
jvmtierror
);
/*
* With mixed premain/agentmain agents then it's possible that the
...
...
@@ -998,6 +1019,7 @@ retransformableEnvironment(JPLISAgent * agent) {
if
(
jvmtierror
==
JVMTI_ERROR_NONE
)
{
// install the retransforming environment
agent
->
mRetransformEnvironment
.
mJVMTIEnv
=
retransformerEnv
;
agent
->
mRetransformEnvironment
.
mIsRetransformer
=
JNI_TRUE
;
// Make it for ClassFileLoadHook handling
jvmtierror
=
(
*
retransformerEnv
)
->
SetEnvironmentLocalStorage
(
...
...
@@ -1025,6 +1047,7 @@ isModifiableClass(JNIEnv * jnienv, JPLISAgent * agent, jclass clazz) {
jvmtierror
=
(
*
jvmtienv
)
->
IsModifiableClass
(
jvmtienv
,
clazz
,
&
is_modifiable
);
check_phase_ret_false
(
jvmtierror
);
jplis_assert
(
jvmtierror
==
JVMTI_ERROR_NONE
);
return
is_modifiable
;
...
...
@@ -1032,7 +1055,7 @@ isModifiableClass(JNIEnv * jnienv, JPLISAgent * agent, jclass clazz) {
jboolean
isRetransformClassesSupported
(
JNIEnv
*
jnienv
,
JPLISAgent
*
agent
)
{
return
retransformableEnvironment
(
agent
)
!=
NULL
;
return
agent
->
mRetransformEnvironment
.
mIsRetransformer
;
}
void
...
...
@@ -1075,6 +1098,12 @@ retransformClasses(JNIEnv * jnienv, JPLISAgent * agent, jobjectArray classes) {
numClasses
=
(
*
jnienv
)
->
GetArrayLength
(
jnienv
,
classes
);
errorOccurred
=
checkForThrowable
(
jnienv
);
jplis_assert
(
!
errorOccurred
);
if
(
!
errorOccurred
&&
numClasses
==
0
)
{
jplis_assert
(
numClasses
!=
0
);
errorOccurred
=
JNI_TRUE
;
errorCode
=
JVMTI_ERROR_NULL_POINTER
;
}
}
if
(
!
errorOccurred
)
{
...
...
@@ -1096,6 +1125,13 @@ retransformClasses(JNIEnv * jnienv, JPLISAgent * agent, jobjectArray classes) {
if
(
errorOccurred
)
{
break
;
}
if
(
classArray
[
index
]
==
NULL
)
{
jplis_assert
(
classArray
[
index
]
!=
NULL
);
errorOccurred
=
JNI_TRUE
;
errorCode
=
JVMTI_ERROR_NULL_POINTER
;
break
;
}
}
}
...
...
@@ -1217,6 +1253,7 @@ redefineClasses(JNIEnv * jnienv, JPLISAgent * agent, jobjectArray classDefinitio
if
(
!
errorOccurred
)
{
jvmtiError
errorCode
=
JVMTI_ERROR_NONE
;
errorCode
=
(
*
jvmtienv
)
->
RedefineClasses
(
jvmtienv
,
numDefs
,
classDefs
);
check_phase_blob_ret
(
errorCode
,
deallocate
(
jvmtienv
,
(
void
*
)
classDefs
));
errorOccurred
=
(
errorCode
!=
JVMTI_ERROR_NONE
);
if
(
errorOccurred
)
{
createAndThrowThrowableFromJVMTIErrorCode
(
jnienv
,
errorCode
);
...
...
@@ -1250,6 +1287,7 @@ commonGetClassList( JNIEnv * jnienv,
classLoader
,
&
classCount
,
&
classes
);
check_phase_ret_blob
(
jvmtierror
,
localArray
);
errorOccurred
=
(
jvmtierror
!=
JVMTI_ERROR_NONE
);
jplis_assert
(
!
errorOccurred
);
...
...
@@ -1311,6 +1349,7 @@ getObjectSize(JNIEnv * jnienv, JPLISAgent * agent, jobject objectToSize) {
jvmtiError
jvmtierror
=
JVMTI_ERROR_NONE
;
jvmtierror
=
(
*
jvmtienv
)
->
GetObjectSize
(
jvmtienv
,
objectToSize
,
&
objectSize
);
check_phase_ret_0
(
jvmtierror
);
jplis_assert
(
jvmtierror
==
JVMTI_ERROR_NONE
);
if
(
jvmtierror
!=
JVMTI_ERROR_NONE
)
{
createAndThrowThrowableFromJVMTIErrorCode
(
jnienv
,
jvmtierror
);
...
...
@@ -1360,6 +1399,7 @@ appendToClassLoaderSearch(JNIEnv * jnienv, JPLISAgent * agent, jstring jarFile,
}
else
{
jvmtierror
=
(
*
jvmtienv
)
->
AddToSystemClassLoaderSearch
(
jvmtienv
,
platformChars
);
}
check_phase_ret
(
jvmtierror
);
if
(
jvmtierror
!=
JVMTI_ERROR_NONE
)
{
createAndThrowThrowableFromJVMTIErrorCode
(
jnienv
,
jvmtierror
);
...
...
@@ -1450,6 +1490,7 @@ setNativeMethodPrefixes(JNIEnv * jnienv, JPLISAgent * agent, jobjectArray prefix
}
err
=
(
*
jvmtienv
)
->
SetNativeMethodPrefixes
(
jvmtienv
,
inx
,
(
char
**
)
prefixes
);
/* can be called from any phase */
jplis_assert
(
err
==
JVMTI_ERROR_NONE
);
for
(
i
=
0
;
i
<
inx
;
i
++
)
{
...
...
src/share/instrument/JPLISAgent.h
浏览文件 @
1cb28fec
...
...
@@ -266,6 +266,48 @@ setNativeMethodPrefixes(JNIEnv * jnienv, JPLISAgent * agent, jobjectArray prefix
#define jvmti(a) a->mNormalEnvironment.mJVMTIEnv
/*
* A set of macros for insulating the JLI method callers from
* JVMTI_ERROR_WRONG_PHASE return codes.
*/
/* for a JLI method where "blob" is executed before simply returning */
#define check_phase_blob_ret(ret, blob) \
if ((ret) == JVMTI_ERROR_WRONG_PHASE) { \
blob; \
return; \
}
/* for a JLI method where simply returning is benign */
#define check_phase_ret(ret) \
if ((ret) == JVMTI_ERROR_WRONG_PHASE) { \
return; \
}
/* for a JLI method where returning zero (0) is benign */
#define check_phase_ret_0(ret) \
if ((ret) == JVMTI_ERROR_WRONG_PHASE) { \
return 0; \
}
/* for a JLI method where returning one (1) is benign */
#define check_phase_ret_1(ret) \
if ((ret) == JVMTI_ERROR_WRONG_PHASE) { \
return 1; \
}
/* for a case where a specific "blob" must be returned */
#define check_phase_ret_blob(ret, blob) \
if ((ret) == JVMTI_ERROR_WRONG_PHASE) { \
return (blob); \
}
/* for a JLI method where returning false is benign */
#define check_phase_ret_false(ret) \
if ((ret) == JVMTI_ERROR_WRONG_PHASE) { \
return (jboolean) 0; \
}
#ifdef __cplusplus
}
/* extern "C" */
#endif
/* __cplusplus */
...
...
src/share/instrument/JarFacade.c
浏览文件 @
1cb28fec
...
...
@@ -23,6 +23,14 @@
* have any questions.
*/
#ifdef _WIN32
/*
* Win* needs this include. However, Linux and Solaris do not.
* Having this include on Solaris SPARC breaks having non US-ASCII
* characters in the value of the Premain-Class attribute.
*/
#include <ctype.h>
#endif
/* _WIN32 */
#include <string.h>
#include <stdlib.h>
...
...
@@ -45,11 +53,37 @@ doAttribute(const char* name, const char* value, void* user_data) {
if
(
attribute
->
name
==
NULL
)
{
free
(
attribute
);
}
else
{
attribute
->
value
=
strdup
(
value
);
char
*
begin
=
(
char
*
)
value
;
char
*
end
;
size_t
value_len
;
/* skip any leading white space */
while
(
isspace
(
*
begin
))
{
begin
++
;
}
/* skip any trailing white space */
end
=
&
begin
[
strlen
(
begin
)];
while
(
end
>
begin
&&
isspace
(
end
[
-
1
]))
{
end
--
;
}
if
(
begin
==
end
)
{
/* no value so skip this attribute */
free
(
attribute
->
name
);
free
(
attribute
);
return
;
}
value_len
=
(
size_t
)(
end
-
begin
);
attribute
->
value
=
malloc
(
value_len
+
1
);
if
(
attribute
->
value
==
NULL
)
{
free
(
attribute
->
name
);
free
(
attribute
);
}
else
{
/* save the value without leading or trailing whitespace */
strncpy
(
attribute
->
value
,
begin
,
value_len
);
attribute
->
value
[
value_len
]
=
'\0'
;
attribute
->
next
=
NULL
;
if
(
context
->
head
==
NULL
)
{
context
->
head
=
attribute
;
...
...
src/share/instrument/Reentrancy.c
浏览文件 @
1cb28fec
...
...
@@ -74,6 +74,7 @@ confirmingTLSSet( jvmtiEnv * jvmtienv,
jvmtienv
,
thread
,
newValue
);
check_phase_ret_blob
(
error
,
error
);
#if JPLISASSERT_ENABLEASSERTIONS
assertTLSValue
(
jvmtienv
,
...
...
@@ -96,6 +97,7 @@ assertTLSValue( jvmtiEnv * jvmtienv,
jvmtienv
,
thread
,
&
test
);
check_phase_ret
(
error
);
jplis_assert
(
error
==
JVMTI_ERROR_NONE
);
jplis_assert
(
test
==
expected
);
}
...
...
@@ -111,6 +113,7 @@ tryToAcquireReentrancyToken( jvmtiEnv * jvmtienv,
jvmtienv
,
thread
,
&
storedValue
);
check_phase_ret_false
(
error
);
jplis_assert
(
error
==
JVMTI_ERROR_NONE
);
if
(
error
==
JVMTI_ERROR_NONE
)
{
/* if this thread is already inside, just return false and short-circuit */
...
...
src/share/instrument/Utilities.c
浏览文件 @
1cb28fec
...
...
@@ -46,6 +46,7 @@ allocate(jvmtiEnv * jvmtienv, size_t bytecount) {
error
=
(
*
jvmtienv
)
->
Allocate
(
jvmtienv
,
bytecount
,
(
unsigned
char
**
)
&
resultBuffer
);
/* may be called from any phase */
jplis_assert
(
error
==
JVMTI_ERROR_NONE
);
if
(
error
!=
JVMTI_ERROR_NONE
)
{
resultBuffer
=
NULL
;
...
...
@@ -66,6 +67,7 @@ deallocate(jvmtiEnv * jvmtienv, void * buffer) {
error
=
(
*
jvmtienv
)
->
Deallocate
(
jvmtienv
,
(
unsigned
char
*
)
buffer
);
/* may be called from any phase */
jplis_assert_msg
(
error
==
JVMTI_ERROR_NONE
,
"Can't deallocate memory"
);
return
;
}
...
...
test/java/lang/instrument/BootClassPath/BootClassPathTest.sh
浏览文件 @
1cb28fec
...
...
@@ -23,8 +23,10 @@
# @test
# @bug 5055293
# @summary Test non US-ASCII characters in the value of the Boot-Class-Path
# @summary Test non US-ASCII characters in the value of the Boot-Class-Path
# attribute.
#
# @run shell/timeout=240 BootClassPathTest.sh
if
[
"
${
TESTJAVA
}
"
=
""
]
then
...
...
@@ -72,7 +74,7 @@ echo "Creating agent jar file..."
echo
"Running test..."
"
${
JAVA
}
"
-javaagent
:
"
${
TESTCLASSES
}
"
/Agent.jar
-classpath
"
${
TESTCLASSES
}
"
DummyMain
"
${
JAVA
}
"
${
TESTVMOPTS
}
-javaagent
:
"
${
TESTCLASSES
}
"
/Agent.jar
-classpath
"
${
TESTCLASSES
}
"
DummyMain
result
=
$?
echo
"Cleanup..."
...
...
test/java/lang/instrument/MakeJAR2.sh
浏览文件 @
1cb28fec
...
...
@@ -70,9 +70,11 @@ JAR="${TESTJAVA}/bin/jar"
cp
${
TESTSRC
}
/
${
AGENT
}
.java
.
cp
${
TESTSRC
}
/
${
APP
}
.java
.
rm
-rf
ilib
cp
-r
${
TESTSRC
}
/ilib
.
mkdir
bootpath
cp
-r
${
TESTSRC
}
/bootreporter bootpath
mkdir
ilib
cp
${
TESTSRC
}
/ilib/
*
.java ilib
rm
-rf
bootpath
mkdir
-p
bootpath/bootreporter
cp
${
TESTSRC
}
/bootreporter/
*
.java bootpath/bootreporter
cd
bootpath
${
JAVAC
}
bootreporter/
*
.java
...
...
test/java/lang/instrument/ManifestTest.sh
0 → 100644
浏览文件 @
1cb28fec
#
# Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#
# @test
# @bug 6274276
# @summary JLI JAR manifest processing should ignore leading and trailing white space.
# @author Daniel D. Daugherty
#
# @run build ManifestTestApp
# @run shell/timeout=900 ManifestTest.sh
#
make_a_JAR
()
{
# version_line and premain_line are required
version_line
=
"Manifest-Version: 1.0"
premain_line
=
"Premain-Class:
${
AGENT
}
"
boot_cp_line
=
""
expect_boot_cp_line
=
"ExampleForBootClassPath was not loaded."
can_redef_line
=
""
expect_redef_line
=
"isRedefineClassesSupported()=false"
can_retrans_line
=
""
expect_retrans_line
=
"isRetransformClassesSupported()=false"
can_set_nmp_line
=
""
expect_set_nmp_line
=
"isNativeMethodPrefixSupported()=false"
while
[
$#
!=
0
]
;
do
case
"
$1
"
in
defaults
)
# just use the defaults for the test
;;
boot_cp_line1
)
boot_cp_line
=
"Boot-Class-Path: no_white_space"
expect_boot_cp_line
=
"ExampleForBootClassPath was loaded."
mkdir
-p
no_white_space
cp
-p
$OUT_OF_THE_WAY
/ExampleForBootClassPath.class no_white_space
;;
boot_cp_line2
)
boot_cp_line
=
"Boot-Class-Path: has_leading_blank"
expect_boot_cp_line
=
"ExampleForBootClassPath was loaded."
mkdir
-p
has_leading_blank
" has_leading_blank"
# the good class is in the directory without the blank
cp
-p
$OUT_OF_THE_WAY
/ExampleForBootClassPath.class
\
has_leading_blank
# the bad class is in the directory with the blank
cp
-p
$OUT_OF_THE_WAY
/ExampleForBootClassPath.class.bad
\
" has_leading_blank"
/ExampleForBootClassPath.class
;;
boot_cp_line3
)
boot_cp_line
=
"Boot-Class-Path: has_trailing_blank "
expect_boot_cp_line
=
"ExampleForBootClassPath was loaded."
mkdir
-p
has_trailing_blank
"has_trailing_blank "
# the good class is in the directory without the blank
cp
-p
$OUT_OF_THE_WAY
/ExampleForBootClassPath.class
\
has_trailing_blank
# the bad class is in the directory with the blank
cp
-p
$OUT_OF_THE_WAY
/ExampleForBootClassPath.class.bad
\
"has_trailing_blank "
/ExampleForBootClassPath.class
;;
boot_cp_line4
)
boot_cp_line
=
"Boot-Class-Path: has_leading_and_trailing_blank "
expect_boot_cp_line
=
"ExampleForBootClassPath was loaded."
mkdir
-p
has_leading_and_trailing_blank
\
" has_leading_and_trailing_blank "
# the good class is in the directory without the blanks
cp
-p
$OUT_OF_THE_WAY
/ExampleForBootClassPath.class
\
has_leading_and_trailing_blank
# the bad class is in the directory with the blanks
cp
-p
$OUT_OF_THE_WAY
/ExampleForBootClassPath.class.bad
\
" has_leading_and_trailing_blank "
/ExampleForBootClassPath.class
;;
boot_cp_line5
)
boot_cp_line
=
"Boot-Class-Path: has_embedded blank"
expect_boot_cp_line
=
"ExampleForBootClassPath was loaded."
mkdir
-p
has_embedded
"has_embedded blank"
# the good class is in the first blank separated word
cp
-p
$OUT_OF_THE_WAY
/ExampleForBootClassPath.class has_embedded
# the bad class is in the directory with the blank
cp
-p
$OUT_OF_THE_WAY
/ExampleForBootClassPath.class.bad
\
"has_embedded blank"
/ExampleForBootClassPath.class
;;
can_redef_line1
)
can_redef_line
=
"Can-Redefine-Classes: true"
expect_redef_line
=
"isRedefineClassesSupported()=true"
;;
can_redef_line2
)
can_redef_line
=
"Can-Redefine-Classes: true"
expect_redef_line
=
"isRedefineClassesSupported()=true"
;;
can_redef_line3
)
can_redef_line
=
"Can-Redefine-Classes: true "
expect_redef_line
=
"isRedefineClassesSupported()=true"
;;
can_redef_line4
)
can_redef_line
=
"Can-Redefine-Classes: true "
expect_redef_line
=
"isRedefineClassesSupported()=true"
;;
can_redef_line5
)
can_redef_line
=
"Can-Redefine-Classes: false"
;;
can_redef_line6
)
can_redef_line
=
"Can-Redefine-Classes: false"
;;
can_redef_line7
)
can_redef_line
=
"Can-Redefine-Classes: false "
;;
can_redef_line8
)
can_redef_line
=
"Can-Redefine-Classes: false "
;;
can_redef_line9
)
# this line makes the jar command unhappy and that's
# not what we're testing so skip this case
can_redef_line
=
"Can-Redefine-Classes:"
;;
can_redef_line10
)
can_redef_line
=
"Can-Redefine-Classes: "
;;
can_redef_line11
)
can_redef_line
=
"Can-Redefine-Classes: "
;;
can_retrans_line1
)
can_retrans_line
=
"Can-Retransform-Classes: true"
expect_retrans_line
=
"isRetransformClassesSupported()=true"
;;
can_retrans_line2
)
can_retrans_line
=
"Can-Retransform-Classes: true"
expect_retrans_line
=
"isRetransformClassesSupported()=true"
;;
can_retrans_line3
)
can_retrans_line
=
"Can-Retransform-Classes: true "
expect_retrans_line
=
"isRetransformClassesSupported()=true"
;;
can_retrans_line4
)
can_retrans_line
=
"Can-Retransform-Classes: true "
expect_retrans_line
=
"isRetransformClassesSupported()=true"
;;
can_retrans_line5
)
can_retrans_line
=
"Can-Retransform-Classes: false"
;;
can_retrans_line6
)
can_retrans_line
=
"Can-Retransform-Classes: false"
;;
can_retrans_line7
)
can_retrans_line
=
"Can-Retransform-Classes: false "
;;
can_retrans_line8
)
can_retrans_line
=
"Can-Retransform-Classes: false "
;;
can_retrans_line9
)
# this line makes the jar command unhappy and that's
# not what we're testing so skip this case
can_retrans_line
=
"Can-Retransform-Classes:"
;;
can_retrans_line10
)
can_retrans_line
=
"Can-Retransform-Classes: "
;;
can_retrans_line11
)
can_retrans_line
=
"Can-Retransform-Classes: "
;;
can_set_nmp_line1
)
can_set_nmp_line
=
"Can-Set-Native-Method-Prefix: true"
expect_set_nmp_line
=
"isNativeMethodPrefixSupported()=true"
;;
can_set_nmp_line2
)
can_set_nmp_line
=
"Can-Set-Native-Method-Prefix: true"
expect_set_nmp_line
=
"isNativeMethodPrefixSupported()=true"
;;
can_set_nmp_line3
)
can_set_nmp_line
=
"Can-Set-Native-Method-Prefix: true "
expect_set_nmp_line
=
"isNativeMethodPrefixSupported()=true"
;;
can_set_nmp_line4
)
can_set_nmp_line
=
"Can-Set-Native-Method-Prefix: true "
expect_set_nmp_line
=
"isNativeMethodPrefixSupported()=true"
;;
can_set_nmp_line5
)
can_set_nmp_line
=
"Can-Set-Native-Method-Prefix: false"
;;
can_set_nmp_line6
)
can_set_nmp_line
=
"Can-Set-Native-Method-Prefix: false"
;;
can_set_nmp_line7
)
can_set_nmp_line
=
"Can-Set-Native-Method-Prefix: false "
;;
can_set_nmp_line8
)
can_set_nmp_line
=
"Can-Set-Native-Method-Prefix: false "
;;
can_set_nmp_line9
)
# this line makes the jar command unhappy and that's
# not what we're testing so skip this case
can_set_nmp_line
=
"Can-Set-Native-Method-Prefix:"
;;
can_set_nmp_line10
)
can_set_nmp_line
=
"Can-Set-Native-Method-Prefix: "
;;
can_set_nmp_line11
)
can_set_nmp_line
=
"Can-Set-Native-Method-Prefix: "
;;
premain_line1
)
premain_line
=
"Premain-Class:
${
AGENT
}
"
;;
premain_line2
)
premain_line
=
"Premain-Class:
${
AGENT
}
"
;;
premain_line3
)
premain_line
=
"Premain-Class:
${
AGENT
}
"
;;
version_line1
)
version_line
=
"Manifest-Version: 1.0"
;;
version_line2
)
version_line
=
"Manifest-Version: 1.0 "
;;
version_line3
)
version_line
=
"Manifest-Version: 1.0 "
;;
*
)
echo
"ERROR: invalid test token"
exit
1
esac
shift
done
echo
"
${
version_line
}
"
>
${
AGENT
}
.mf
echo
"
${
premain_line
}
"
>>
${
AGENT
}
.mf
if
[
-n
"
$boot_cp_line
"
]
;
then
echo
"
${
boot_cp_line
}
"
>>
${
AGENT
}
.mf
fi
if
[
-n
"
$can_redef_line
"
]
;
then
echo
"
${
can_redef_line
}
"
>>
${
AGENT
}
.mf
fi
if
[
-n
"
$can_retrans_line
"
]
;
then
echo
"
${
can_retrans_line
}
"
>>
${
AGENT
}
.mf
fi
if
[
-n
"
$can_set_nmp_line
"
]
;
then
echo
"
${
can_set_nmp_line
}
"
>>
${
AGENT
}
.mf
fi
rm
-f
${
AGENT
}
.jar
${
JAR
}
cvfm
${
AGENT
}
.jar
${
AGENT
}
.mf
${
AGENT
}
.class
echo
"
$expect_boot_cp_line
"
>
expect_boot_cp_line
echo
"
$expect_redef_line
"
>
expect_redef_line
echo
"
$expect_retrans_line
"
>
expect_retrans_line
echo
"
$expect_set_nmp_line
"
>
expect_set_nmp_line
}
if
[
"
${
TESTJAVA
}
"
=
""
]
then
echo
"TESTJAVA not set. Test cannot execute. Failed."
exit
1
fi
if
[
"
${
TESTSRC
}
"
=
""
]
then
echo
"TESTSRC not set. Test cannot execute. Failed."
exit
1
fi
if
[
"
${
TESTCLASSES
}
"
=
""
]
then
echo
"TESTCLASSES not set. Test cannot execute. Failed."
exit
1
fi
JAR
=
"
${
TESTJAVA
}
/bin/jar"
JAVAC
=
"
${
TESTJAVA
}
"
/bin/javac
JAVA
=
"
${
TESTJAVA
}
"
/bin/java
# Now that ManifestTestApp.class is built, we move
# ExampleForBootClassPath.class so that it cannot be found
# by default
OUT_OF_THE_WAY
=
out_of_the_way
mkdir
$OUT_OF_THE_WAY
mv
"
${
TESTCLASSES
}
/ExampleForBootClassPath.class"
$OUT_OF_THE_WAY
# create a bad version of ExampleForBootClassPath.class
# so we can tell when the wrong version is run
sed
's/return 15/return 42/'
"
${
TESTSRC
}
"
/ExampleForBootClassPath.java
\
>
ExampleForBootClassPath.java
"
$JAVAC
"
ExampleForBootClassPath.java
mv
ExampleForBootClassPath.class
\
$OUT_OF_THE_WAY
/ExampleForBootClassPath.class.bad
mv
ExampleForBootClassPath.java
\
$OUT_OF_THE_WAY
/ExampleForBootClassPath.java.bad
AGENT
=
ManifestTestAgent
# We compile the agent in the working directory instead of with
# a build task because we construct a different agent JAR file
# for each test case.
${
JAVAC
}
-d
.
${
TESTSRC
}
/
${
AGENT
}
.java
FAIL_MARKER
=
fail_marker
rm
-f
$FAIL_MARKER
while
read
token
;
do
echo
echo
"===== begin test case:
$token
====="
make_a_JAR
"
$token
"
"
${
JAVA
}
"
${
TESTVMOPTS
}
-javaagent
:
${
AGENT
}
.jar
\
-classpath
"
${
TESTCLASSES
}
"
ManifestTestApp
>
output.log 2>&1
result
=
$?
cat
output.log
if
[
"
$result
"
=
0
]
;
then
echo
"PASS: ManifestTestApp exited with status of 0."
else
echo
"FAIL: ManifestTestApp exited with status of
$result
"
touch
$FAIL_MARKER
fi
MESG
=
"Hello from
${
AGENT
}
!"
grep
-s
"
$MESG
"
output.log
>
/dev/null
result
=
$?
if
[
"
$result
"
=
0
]
;
then
echo
"PASS: found '
$MESG
' in the test output"
else
echo
"FAIL: did NOT find '
$MESG
' in the test output"
touch
$FAIL_MARKER
fi
MESG
=
`
cat
expect_boot_cp_line
`
grep
-s
"
$MESG
"
output.log
>
/dev/null
result
=
$?
if
[
"
$result
"
=
0
]
;
then
echo
"PASS: found '
$MESG
' in the test output"
else
echo
"FAIL: did NOT find '
$MESG
' in the test output"
touch
$FAIL_MARKER
fi
MESG
=
`
cat
expect_redef_line
`
grep
-s
"
$MESG
"
output.log
>
/dev/null
result
=
$?
if
[
"
$result
"
=
0
]
;
then
echo
"PASS: found '
$MESG
' in the test output"
else
echo
"FAIL: did NOT find '
$MESG
' in the test output"
touch
$FAIL_MARKER
fi
MESG
=
`
cat
expect_retrans_line
`
grep
-s
"
$MESG
"
output.log
>
/dev/null
result
=
$?
if
[
"
$result
"
=
0
]
;
then
echo
"PASS: found '
$MESG
' in the test output"
else
echo
"FAIL: did NOT find '
$MESG
' in the test output"
touch
$FAIL_MARKER
fi
MESG
=
`
cat
expect_set_nmp_line
`
grep
-s
"
$MESG
"
output.log
>
/dev/null
result
=
$?
if
[
"
$result
"
=
0
]
;
then
echo
"PASS: found '
$MESG
' in the test output"
else
echo
"FAIL: did NOT find '
$MESG
' in the test output"
touch
$FAIL_MARKER
fi
echo
"===== end test case:
$token
====="
echo
done
<<
EOF
defaults
version_line1
version_line2
version_line3
premain_line1
premain_line2
premain_line3
boot_cp_line1
boot_cp_line2
boot_cp_line3
boot_cp_line4
boot_cp_line5
can_redef_line1
can_redef_line2
can_redef_line3
can_redef_line4
can_redef_line5
can_redef_line6
can_redef_line7
can_redef_line8
can_redef_line10
can_redef_line11
can_retrans_line1
can_retrans_line2
can_retrans_line3
can_retrans_line4
can_retrans_line5
can_retrans_line6
can_retrans_line7
can_retrans_line8
can_retrans_line10
can_retrans_line11
can_set_nmp_line1
can_set_nmp_line2
can_set_nmp_line3
can_set_nmp_line4
can_set_nmp_line5
can_set_nmp_line6
can_set_nmp_line7
can_set_nmp_line8
can_set_nmp_line10
can_set_nmp_line11
EOF
if
[
-f
$FAIL_MARKER
]
;
then
exit
1
else
exit
0
fi
test/java/lang/instrument/ManifestTestAgent.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
import
java.lang.instrument.Instrumentation
;
public
class
ManifestTestAgent
{
private
static
Instrumentation
instrumentation
;
private
ManifestTestAgent
()
{
}
public
static
void
premain
(
String
agentArgs
,
Instrumentation
inst
)
{
System
.
out
.
println
(
"Hello from ManifestTestAgent!"
);
System
.
out
.
println
(
"isNativeMethodPrefixSupported()="
+
inst
.
isNativeMethodPrefixSupported
());
System
.
out
.
println
(
"isRedefineClassesSupported()="
+
inst
.
isRedefineClassesSupported
());
System
.
out
.
println
(
"isRetransformClassesSupported()="
+
inst
.
isRetransformClassesSupported
());
}
}
test/java/lang/instrument/ManifestTestApp.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
public
class
ManifestTestApp
{
public
static
void
main
(
String
args
[])
{
System
.
out
.
println
(
"Hello from ManifestTestApp!"
);
new
ManifestTestApp
().
doTest
();
System
.
exit
(
0
);
}
private
void
doTest
()
{
try
{
// load the class only found via the Boot-Class-Path attribute
Object
instance
=
loadExampleClass
();
if
(
instance
.
getClass
().
getClassLoader
()
==
null
)
{
System
.
out
.
println
(
"PASS: ExampleForBootClassPath was loaded"
+
" by the boot class path loader."
);
}
else
{
System
.
out
.
println
(
"FAIL: ExampleForBootClassPath was loaded"
+
" by a non-boot class path loader."
);
System
.
exit
(
1
);
}
}
catch
(
NoClassDefFoundError
ncdfe
)
{
// This message just lets ManifestTest.sh know whether or
// not ExampleForBootClassPath was loaded. Depending on
// the current test case, that will be either a PASSing
// condition or a FAILing condition as determined by
// ManifestTest.sh.
System
.
out
.
println
(
"ExampleForBootClassPath was not loaded."
);
}
}
Object
loadExampleClass
()
{
ExampleForBootClassPath
instance
=
new
ExampleForBootClassPath
();
System
.
out
.
println
(
"ExampleForBootClassPath was loaded."
);
if
(
instance
.
fifteen
()
==
15
)
{
System
.
out
.
println
(
"PASS: the correct"
+
" ExampleForBootClassPath was loaded."
);
}
else
{
System
.
out
.
println
(
"FAIL: the wrong ExampleForBootClassPath"
+
" was loaded."
);
System
.
out
.
println
(
"FAIL: instance.fifteen()="
+
instance
.
fifteen
());
System
.
exit
(
1
);
}
return
instance
;
}
}
test/java/lang/instrument/NativeMethodPrefixAgent.java
浏览文件 @
1cb28fec
...
...
@@ -27,7 +27,7 @@
* @summary test setNativeMethodPrefix
* @author Robert Field, Sun Microsystems
*
* @run shell MakeJAR2.sh NativeMethodPrefixAgent NativeMethodPrefixApp 'Can-Retransform-Classes: true' 'Can-Set-Native-Method-Prefix: true'
* @run shell
/timeout=240
MakeJAR2.sh NativeMethodPrefixAgent NativeMethodPrefixApp 'Can-Retransform-Classes: true' 'Can-Set-Native-Method-Prefix: true'
* @run main/othervm -javaagent:NativeMethodPrefixAgent.jar NativeMethodPrefixApp
*/
...
...
test/java/lang/instrument/ParallelTransformerLoader.sh
0 → 100644
浏览文件 @
1cb28fec
#
# Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#
# @test
# @bug 5088398
# @summary Test parallel class loading by parallel transformers.
# @author Daniel D. Daugherty as modified from the code of Daryl Puryear @ Wily
#
# @run shell MakeJAR3.sh ParallelTransformerLoaderAgent
# @run build ParallelTransformerLoaderApp
# @run shell/timeout=240 ParallelTransformerLoader.sh
#
if
[
"
${
TESTJAVA
}
"
=
""
]
then
echo
"TESTJAVA not set. Test cannot execute. Failed."
exit
1
fi
if
[
"
${
TESTSRC
}
"
=
""
]
then
echo
"TESTSRC not set. Test cannot execute. Failed."
exit
1
fi
if
[
"
${
TESTCLASSES
}
"
=
""
]
then
echo
"TESTCLASSES not set. Test cannot execute. Failed."
exit
1
fi
JAR
=
"
${
TESTJAVA
}
"
/bin/jar
JAVAC
=
"
${
TESTJAVA
}
"
/bin/javac
JAVA
=
"
${
TESTJAVA
}
"
/bin/java
"
${
JAVAC
}
"
-d
.
\
"
${
TESTSRC
}
"
/TestClass1.java
\
"
${
TESTSRC
}
"
/TestClass2.java
\
"
${
TESTSRC
}
"
/TestClass3.java
"
${
JAR
}
"
cvf Test.jar Test
*
.class
# Removing the test class files is important. If these
# .class files are available on the classpath other
# than via Test.jar, then the deadlock will not reproduce.
rm
-f
Test
*
.class
"
${
JAVA
}
"
${
TESTVMOPTS
}
-javaagent
:ParallelTransformerLoaderAgent.jar
=
Test.jar
\
-classpath
"
${
TESTCLASSES
}
"
ParallelTransformerLoaderApp
result
=
$?
echo
"result=
$result
"
exit
$result
test/java/lang/instrument/ParallelTransformerLoaderAgent.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
import
java.lang.instrument.*
;
import
java.net.*
;
import
java.io.*
;
import
java.security.*
;
/**
* Test Java Agent
*
* @author Daryl Puryear
* @copyright 1999-2004 Wily Technology, Inc. All rights reserved.
*/
public
class
ParallelTransformerLoaderAgent
{
private
static
URL
sURL
;
private
static
ClassLoader
sClassLoader
;
public
static
synchronized
ClassLoader
getClassLoader
()
{
return
sClassLoader
;
}
public
static
synchronized
void
generateNewClassLoader
()
{
sClassLoader
=
new
URLClassLoader
(
new
URL
[]
{
sURL
});
}
public
static
void
premain
(
String
agentArgs
,
Instrumentation
instrumentation
)
throws
Exception
{
if
(
agentArgs
==
null
||
agentArgs
==
""
)
{
System
.
err
.
println
(
"Error: No jar file name provided, test will not run."
);
return
;
}
sURL
=
(
new
File
(
agentArgs
)).
toURL
();
System
.
out
.
println
(
"Using jar file: "
+
sURL
);
generateNewClassLoader
();
instrumentation
.
addTransformer
(
new
TestTransformer
());
}
private
static
class
TestTransformer
implements
ClassFileTransformer
{
public
byte
[]
transform
(
ClassLoader
loader
,
String
className
,
Class
classBeingRedefined
,
ProtectionDomain
protectionDomain
,
byte
[]
classfileBuffer
)
throws
IllegalClassFormatException
{
String
tName
=
Thread
.
currentThread
().
getName
();
// In 160_03 and older, transform() is called
// with the "system_loader_lock" held and that
// prevents the bootstrap class loaded from
// running in parallel. If we add a slight sleep
// delay here when the transform() call is not
// main or TestThread, then the deadlock in
// 160_03 and older is much more reproducible.
if
(!
tName
.
equals
(
"main"
)
&&
!
tName
.
equals
(
"TestThread"
))
{
System
.
out
.
println
(
"Thread '"
+
tName
+
"' has called transform()"
);
try
{
Thread
.
sleep
(
500
);
}
catch
(
InterruptedException
ie
)
{
}
}
// load additional classes when called from other threads
if
(!
tName
.
equals
(
"main"
))
{
loadClasses
(
3
);
}
return
null
;
}
public
static
void
loadClasses
(
int
index
)
{
ClassLoader
loader
=
ParallelTransformerLoaderAgent
.
getClassLoader
();
try
{
Class
.
forName
(
"TestClass"
+
index
,
true
,
loader
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
}
test/java/lang/instrument/ParallelTransformerLoaderApp.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* Test Java Program
*
* @author Daryl Puryear
* @copyright 1999-2004 Wily Technology, Inc. All rights reserved.
*/
public
class
ParallelTransformerLoaderApp
{
private
static
final
int
kNumIterations
=
1000
;
public
static
void
main
(
String
[]
args
)
throws
Exception
{
System
.
out
.
println
();
System
.
out
.
print
(
"Starting test with "
+
kNumIterations
+
" iterations"
);
for
(
int
i
=
0
;
i
<
kNumIterations
;
i
++)
{
// load some classes from multiple threads (this thread and one other)
Thread
testThread
=
new
TestThread
(
2
);
testThread
.
start
();
loadClasses
(
1
);
// log that it completed and reset for the next iteration
testThread
.
join
();
System
.
out
.
print
(
"."
);
ParallelTransformerLoaderAgent
.
generateNewClassLoader
();
}
System
.
out
.
println
();
System
.
out
.
println
(
"Test completed successfully"
);
}
private
static
class
TestThread
extends
Thread
{
private
final
int
fIndex
;
public
TestThread
(
int
index
)
{
super
(
"TestThread"
);
fIndex
=
index
;
}
public
void
run
()
{
loadClasses
(
fIndex
);
}
}
public
static
void
loadClasses
(
int
index
)
{
ClassLoader
loader
=
ParallelTransformerLoaderAgent
.
getClassLoader
();
try
{
Class
.
forName
(
"TestClass"
+
index
,
true
,
loader
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
test/java/lang/instrument/PremainClass/DummyMain.java
浏览文件 @
1cb28fec
...
...
@@ -22,11 +22,10 @@
*/
/*
*
*
* Used by PremainClassTest.sh - dummy "main application" which doesn't do anything
* dummy "Hello World"ish application for "premain" tests
*/
public
class
DummyMain
{
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
"Hello from DummyMain!"
);
}
}
test/java/lang/instrument/PremainClass/InheritAgent0001.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* @test
* @bug 6289149
* @summary test config (0,0,0,1): declared 1-arg in agent class
* @author Daniel D. Daugherty, Sun Microsystems
*
* @run shell ../MakeJAR3.sh InheritAgent0001
* @run main/othervm -javaagent:InheritAgent0001.jar DummyMain
*/
import
java.lang.instrument.*
;
class
InheritAgent0001
extends
InheritAgent0001Super
{
//
// This agent has a single argument premain() method which
// is the one that should be called.
//
public
static
void
premain
(
String
agentArgs
)
{
System
.
out
.
println
(
"Hello from Single-Arg InheritAgent0001!"
);
}
// This agent does NOT have a double argument premain() method.
}
class
InheritAgent0001Super
{
// This agent does NOT have a single argument premain() method.
// This agent does NOT have a double argument premain() method.
}
test/java/lang/instrument/PremainClass/InheritAgent0010.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* @test
* @bug 6289149
* @summary test config (0,0,1,0): declared 2-arg in agent class
* @author Daniel D. Daugherty, Sun Microsystems
*
* @run shell ../MakeJAR3.sh InheritAgent0010
* @run main/othervm -javaagent:InheritAgent0010.jar DummyMain
*/
import
java.lang.instrument.*
;
class
InheritAgent0010
extends
InheritAgent0010Super
{
// This agent does NOT have a single argument premain() method.
//
// This agent has a double argument premain() method which
// is the one that should be called.
//
public
static
void
premain
(
String
agentArgs
,
Instrumentation
instArg
)
{
System
.
out
.
println
(
"Hello from Double-Arg InheritAgent0010!"
);
}
}
class
InheritAgent0010Super
{
// This agent does NOT have a single argument premain() method.
// This agent does NOT have a double argument premain() method.
}
test/java/lang/instrument/PremainClass/InheritAgent0011.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* @test
* @bug 6289149
* @summary test config (0,0,1,1): declared 2-arg and declared 1-arg in agent class
* @author Daniel D. Daugherty, Sun Microsystems
*
* @run shell ../MakeJAR3.sh InheritAgent0011
* @run main/othervm -javaagent:InheritAgent0011.jar DummyMain
*/
import
java.lang.instrument.*
;
class
InheritAgent0011
extends
InheritAgent0011Super
{
//
// This agent has a single argument premain() method which
// is NOT the one that should be called.
//
public
static
void
premain
(
String
agentArgs
)
{
System
.
out
.
println
(
"Hello from Single-Arg InheritAgent0011!"
);
throw
new
Error
(
"ERROR: THIS AGENT SHOULD NOT HAVE BEEN CALLED."
);
}
//
// This agent has a double argument premain() method which
// is the one that should be called.
//
public
static
void
premain
(
String
agentArgs
,
Instrumentation
instArg
)
{
System
.
out
.
println
(
"Hello from Double-Arg InheritAgent0011!"
);
}
}
class
InheritAgent0011Super
{
// This agent does NOT have a single argument premain() method.
// This agent does NOT have a double argument premain() method.
}
test/java/lang/instrument/PremainClass/InheritAgent0100.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* @test
* @bug 6289149
* @summary test config (0,1,0,0): inherited 1-arg in agent class
* @author Daniel D. Daugherty, Sun Microsystems
*
* @run shell ../MakeJAR3.sh InheritAgent0100
* @run main/othervm -javaagent:InheritAgent0100.jar DummyMain
*/
import
java.lang.instrument.*
;
class
InheritAgent0100
extends
InheritAgent0100Super
{
// This agent does NOT have a single argument premain() method.
// This agent does NOT have a double argument premain() method.
}
class
InheritAgent0100Super
{
//
// This agent has a single argument premain() method which
// is the one that should be called.
//
public
static
void
premain
(
String
agentArgs
)
{
System
.
out
.
println
(
"Hello from Single-Arg InheritAgent0100Super!"
);
}
// This agent does NOT have a double argument premain() method.
}
test/java/lang/instrument/PremainClass/InheritAgent0101.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* @test
* @bug 6289149
* @summary test config (0,1,0,1): inherited 1-arg and declared 1-arg in agent class
* @author Daniel D. Daugherty, Sun Microsystems
*
* @run shell ../MakeJAR3.sh InheritAgent0101
* @run main/othervm -javaagent:InheritAgent0101.jar DummyMain
*/
import
java.lang.instrument.*
;
class
InheritAgent0101
extends
InheritAgent0101Super
{
//
// This agent has a single argument premain() method which
// is the one that should be called.
//
public
static
void
premain
(
String
agentArgs
)
{
System
.
out
.
println
(
"Hello from Single-Arg InheritAgent0101!"
);
}
// This agent does NOT have a double argument premain() method.
}
class
InheritAgent0101Super
{
//
// This agent has a single argument premain() method which
// is NOT the one that should be called.
//
public
static
void
premain
(
String
agentArgs
)
{
System
.
out
.
println
(
"Hello from Single-Arg InheritAgent0101Super!"
);
throw
new
Error
(
"ERROR: THIS AGENT SHOULD NOT HAVE BEEN CALLED."
);
}
// This agent does NOT have a double argument premain() method.
}
test/java/lang/instrument/PremainClass/InheritAgent0110.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* @test
* @bug 6289149
* @summary test config (0,1,1,0): inherited 1-arg and declared 2-arg in agent class
* @author Daniel D. Daugherty, Sun Microsystems
*
* @run shell ../MakeJAR3.sh InheritAgent0110
* @run main/othervm -javaagent:InheritAgent0110.jar DummyMain
*/
import
java.lang.instrument.*
;
class
InheritAgent0110
extends
InheritAgent0110Super
{
// This agent does NOT have a one argument premain() method.
//
// This agent has a double argument premain() method which
// is the one that should be called.
//
public
static
void
premain
(
String
agentArgs
,
Instrumentation
instArg
)
{
System
.
out
.
println
(
"Hello from Double-Arg InheritAgent0110!"
);
}
}
class
InheritAgent0110Super
{
//
// This agent has a single argument premain() method which
// is NOT the one that should be called.
//
public
static
void
premain
(
String
agentArgs
)
{
System
.
out
.
println
(
"Hello from Single-Arg InheritAgent0110Super!"
);
throw
new
Error
(
"ERROR: THIS AGENT SHOULD NOT HAVE BEEN CALLED."
);
}
// This agent does NOT have a double argument premain() method.
}
test/java/lang/instrument/PremainClass/InheritAgent0111.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* @test
* @bug 6289149
* @summary test config (0,1,1,1): inherited 1-arg, declared 2-arg and declared 1-arg in agent class
* @author Daniel D. Daugherty, Sun Microsystems
*
* @run shell ../MakeJAR3.sh InheritAgent0111
* @run main/othervm -javaagent:InheritAgent0111.jar DummyMain
*/
import
java.lang.instrument.*
;
class
InheritAgent0111
extends
InheritAgent0111Super
{
//
// This agent has a single argument premain() method which
// is NOT the one that should be called.
//
public
static
void
premain
(
String
agentArgs
)
{
System
.
out
.
println
(
"Hello from Single-Arg InheritAgent0111!"
);
throw
new
Error
(
"ERROR: THIS AGENT SHOULD NOT HAVE BEEN CALLED."
);
}
//
// This agent has a double argument premain() method which
// is the one that should be called.
//
public
static
void
premain
(
String
agentArgs
,
Instrumentation
instArg
)
{
System
.
out
.
println
(
"Hello from Double-Arg InheritAgent0111!"
);
}
}
class
InheritAgent0111Super
{
//
// This agent has a single argument premain() method which
// is NOT the one that should be called.
//
public
static
void
premain
(
String
agentArgs
)
{
System
.
out
.
println
(
"Hello from Single-Arg InheritAgent0111Super!"
);
throw
new
Error
(
"ERROR: THIS AGENT SHOULD NOT HAVE BEEN CALLED."
);
}
// This agent does NOT have a double argument premain() method.
}
test/java/lang/instrument/PremainClass/InheritAgent1000.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* @test
* @bug 6289149
* @summary test config (1,0,0,0): inherited 2-arg in agent class
* @author Daniel D. Daugherty, Sun Microsystems
*
* @run shell ../MakeJAR3.sh InheritAgent1000
* @run main/othervm -javaagent:InheritAgent1000.jar DummyMain
*/
import
java.lang.instrument.*
;
class
InheritAgent1000
extends
InheritAgent1000Super
{
// This agent does NOT have a single argument premain() method.
// This agent does NOT have a double argument premain() method.
}
class
InheritAgent1000Super
{
// This agent does NOT have a single argument premain() method.
//
// This agent has a double argument premain() method which
// is the one that should be called.
//
public
static
void
premain
(
String
agentArgs
,
Instrumentation
instArg
)
{
System
.
out
.
println
(
"Hello from Double-Arg InheritAgent1000Super!"
);
}
}
test/java/lang/instrument/PremainClass/InheritAgent1001.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* @test
* @bug 6289149
* @summary test config (1,0,0,1): inherited 2-arg, and declared 1-arg in agent class
* @author Daniel D. Daugherty, Sun Microsystems
*
* @run shell ../MakeJAR3.sh InheritAgent1001
* @run main/othervm -javaagent:InheritAgent1001.jar DummyMain
*/
import
java.lang.instrument.*
;
class
InheritAgent1001
extends
InheritAgent1001Super
{
//
// This agent has a single argument premain() method which
// is the one that should be called.
//
public
static
void
premain
(
String
agentArgs
)
{
System
.
out
.
println
(
"Hello from Single-Arg InheritAgent1001!"
);
}
// This agent does NOT have a double argument premain() method.
}
class
InheritAgent1001Super
{
// This agent does NOT have a single argument premain() method.
//
// This agent has a double argument premain() method which
// is NOT the one that should be called.
//
public
static
void
premain
(
String
agentArgs
,
Instrumentation
instArg
)
{
System
.
out
.
println
(
"Hello from Double-Arg InheritAgent1001Super!"
);
throw
new
Error
(
"ERROR: THIS AGENT SHOULD NOT HAVE BEEN CALLED."
);
}
}
test/java/lang/instrument/PremainClass/InheritAgent1010.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* @test
* @bug 6289149
* @summary test config (1,0,1,0): inherited 2-arg, and declared 2-arg in agent class
* @author Daniel D. Daugherty, Sun Microsystems
*
* @run shell ../MakeJAR3.sh InheritAgent1010
* @run main/othervm -javaagent:InheritAgent1010.jar DummyMain
*/
import
java.lang.instrument.*
;
class
InheritAgent1010
extends
InheritAgent1010Super
{
// This agent does NOT have a single argument premain() method.
//
// This agent has a double argument premain() method which
// is the one that should be called.
//
public
static
void
premain
(
String
agentArgs
,
Instrumentation
instArg
)
{
System
.
out
.
println
(
"Hello from Double-Arg InheritAgent1010!"
);
}
}
class
InheritAgent1010Super
{
// This agent does NOT have a single argument premain() method.
//
// This agent has a double argument premain() method which
// is NOT the one that should be called.
//
public
static
void
premain
(
String
agentArgs
,
Instrumentation
instArg
)
{
System
.
out
.
println
(
"Hello from Double-Arg InheritAgent1010Super!"
);
throw
new
Error
(
"ERROR: THIS AGENT SHOULD NOT HAVE BEEN CALLED."
);
}
}
test/java/lang/instrument/PremainClass/InheritAgent1011.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* @test
* @bug 6289149
* @summary test config (1,0,1,1): inherited 2-arg, declared 2-arg and declared 1-arg in agent class
* @author Daniel D. Daugherty, Sun Microsystems
*
* @run shell ../MakeJAR3.sh InheritAgent1011
* @run main/othervm -javaagent:InheritAgent1011.jar DummyMain
*/
import
java.lang.instrument.*
;
class
InheritAgent1011
extends
InheritAgent1011Super
{
//
// This agent has a single argument premain() method which
// is NOT the one that should be called.
//
public
static
void
premain
(
String
agentArgs
)
{
System
.
out
.
println
(
"Hello from Single-Arg InheritAgent1011!"
);
throw
new
Error
(
"ERROR: THIS AGENT SHOULD NOT HAVE BEEN CALLED."
);
}
//
// This agent has a double argument premain() method which
// is the one that should be called.
//
public
static
void
premain
(
String
agentArgs
,
Instrumentation
instArg
)
{
System
.
out
.
println
(
"Hello from Double-Arg InheritAgent1011!"
);
}
}
class
InheritAgent1011Super
{
// This agent does NOT have a single argument premain() method.
//
// This agent has a double argument premain() method which
// is NOT the one that should be called.
//
public
static
void
premain
(
String
agentArgs
,
Instrumentation
instArg
)
{
System
.
out
.
println
(
"Hello from Double-Arg InheritAgent1011Super!"
);
throw
new
Error
(
"ERROR: THIS AGENT SHOULD NOT HAVE BEEN CALLED."
);
}
}
test/java/lang/instrument/PremainClass/InheritAgent1100.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* @test
* @bug 6289149
* @summary test config (1,1,0,0): inherited 2-arg and inherited 1-arg in agent class
* @author Daniel D. Daugherty, Sun Microsystems
*
* @run shell ../MakeJAR3.sh InheritAgent1100
* @run main/othervm -javaagent:InheritAgent1100.jar DummyMain
*/
import
java.lang.instrument.*
;
class
InheritAgent1100
extends
InheritAgent1100Super
{
// This agent does NOT have a single argument premain() method.
// This agent does NOT have a double argument premain() method.
}
class
InheritAgent1100Super
{
//
// This agent has a single argument premain() method which
// is NOT the one that should be called.
//
public
static
void
premain
(
String
agentArgs
)
{
System
.
out
.
println
(
"Hello from Single-Arg InheritAgent1100Super!"
);
throw
new
Error
(
"ERROR: THIS AGENT SHOULD NOT HAVE BEEN CALLED."
);
}
//
// This agent has a double argument premain() method which
// is the one that should be called.
//
public
static
void
premain
(
String
agentArgs
,
Instrumentation
instArg
)
{
System
.
out
.
println
(
"Hello from Double-Arg InheritAgent1100Super!"
);
}
}
test/java/lang/instrument/PremainClass/InheritAgent1101.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* @test
* @bug 6289149
* @summary test config (1,1,0,1): inherited 2-arg, inherited 1-arg, and declared 1-arg in agent class
* @author Daniel D. Daugherty, Sun Microsystems
*
* @run shell ../MakeJAR3.sh InheritAgent1101
* @run main/othervm -javaagent:InheritAgent1101.jar DummyMain
*/
import
java.lang.instrument.*
;
class
InheritAgent1101
extends
InheritAgent1101Super
{
//
// This agent has a single argument premain() method which
// is the one that should be called.
//
public
static
void
premain
(
String
agentArgs
)
{
System
.
out
.
println
(
"Hello from Single-Arg InheritAgent1101!"
);
}
// This agent does NOT have a double argument premain() method.
}
class
InheritAgent1101Super
{
//
// This agent has a single argument premain() method which
// is NOT the one that should be called.
//
public
static
void
premain
(
String
agentArgs
)
{
System
.
out
.
println
(
"Hello from Single-Arg InheritAgent1101Super!"
);
throw
new
Error
(
"ERROR: THIS AGENT SHOULD NOT HAVE BEEN CALLED."
);
}
//
// This agent has a double argument premain() method which
// is NOT the one that should be called.
//
public
static
void
premain
(
String
agentArgs
,
Instrumentation
instArg
)
{
System
.
out
.
println
(
"Hello from Double-Arg InheritAgent1101Super!"
);
throw
new
Error
(
"ERROR: THIS AGENT SHOULD NOT HAVE BEEN CALLED."
);
}
}
test/java/lang/instrument/PremainClass/InheritAgent1110.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* @test
* @bug 6289149
* @summary test config (1,1,1,0): inherited 2-arg, inherited 1-arg, and declared 2-arg in agent class
* @author Daniel D. Daugherty, Sun Microsystems
*
* @run shell ../MakeJAR3.sh InheritAgent1110
* @run main/othervm -javaagent:InheritAgent1110.jar DummyMain
*/
import
java.lang.instrument.*
;
class
InheritAgent1110
extends
InheritAgent1110Super
{
// This agent does NOT have a single argument premain() method.
//
// This agent has a double argument premain() method which
// is the one that should be called.
//
public
static
void
premain
(
String
agentArgs
,
Instrumentation
instArg
)
{
System
.
out
.
println
(
"Hello from Double-Arg InheritAgent1110!"
);
}
}
class
InheritAgent1110Super
{
//
// This agent has a single argument premain() method which
// is NOT the one that should be called.
//
public
static
void
premain
(
String
agentArgs
)
{
System
.
out
.
println
(
"Hello from Single-Arg InheritAgent1110Super!"
);
throw
new
Error
(
"ERROR: THIS AGENT SHOULD NOT HAVE BEEN CALLED."
);
}
//
// This agent has a double argument premain() method which
// is NOT the one that should be called.
//
public
static
void
premain
(
String
agentArgs
,
Instrumentation
instArg
)
{
System
.
out
.
println
(
"Hello from Double-Arg InheritAgent1110Super!"
);
throw
new
Error
(
"ERROR: THIS AGENT SHOULD NOT HAVE BEEN CALLED."
);
}
}
test/java/lang/instrument/PremainClass/InheritAgent1111.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* @test
* @bug 6289149
* @summary test config (1,1,1,1): inherited 2-arg, inherited 1-arg, declared 2-arg and declared 1-arg in agent class
* @author Daniel D. Daugherty, Sun Microsystems
*
* @run shell ../MakeJAR3.sh InheritAgent1111
* @run main/othervm -javaagent:InheritAgent1111.jar DummyMain
*/
import
java.lang.instrument.*
;
class
InheritAgent1111
extends
InheritAgent1111Super
{
//
// This agent has a single argument premain() method which
// is NOT the one that should be called.
//
public
static
void
premain
(
String
agentArgs
)
{
System
.
out
.
println
(
"Hello from Single-Arg InheritAgent1111!"
);
throw
new
Error
(
"ERROR: THIS AGENT SHOULD NOT HAVE BEEN CALLED."
);
}
//
// This agent has a double argument premain() method which
// is the one that should be called.
//
public
static
void
premain
(
String
agentArgs
,
Instrumentation
instArg
)
{
System
.
out
.
println
(
"Hello from Double-Arg InheritAgent1111!"
);
}
}
class
InheritAgent1111Super
{
//
// This agent has a single argument premain() method which
// is NOT the one that should be called.
//
public
static
void
premain
(
String
agentArgs
)
{
System
.
out
.
println
(
"Hello from Single-Arg InheritAgent1111Super!"
);
throw
new
Error
(
"ERROR: THIS AGENT SHOULD NOT HAVE BEEN CALLED."
);
}
//
// This agent has a double argument premain() method which
// is NOT the one that should be called.
//
public
static
void
premain
(
String
agentArgs
,
Instrumentation
instArg
)
{
System
.
out
.
println
(
"Hello from Double-Arg InheritAgent1111Super!"
);
throw
new
Error
(
"ERROR: THIS AGENT SHOULD NOT HAVE BEEN CALLED."
);
}
}
test/java/lang/instrument/PremainClass/NoPremainAgent.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
import
java.lang.instrument.*
;
class
NoPremainAgent
{
// This agent is missing the premain() function.
}
test/java/lang/instrument/PremainClass/NoPremainAgent.sh
0 → 100644
浏览文件 @
1cb28fec
#
# Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#
# @test
# @bug 6289149
# @summary test when the agent's class is missing the premain() function.
# @author Daniel D. Daugherty, Sun Microsystems
#
# @run build DummyMain
# @run shell ../MakeJAR3.sh NoPremainAgent
# @run shell NoPremainAgent.sh
#
if
[
"
${
TESTJAVA
}
"
=
""
]
then
echo
"TESTJAVA not set. Test cannot execute. Failed."
exit
1
fi
if
[
"
${
TESTSRC
}
"
=
""
]
then
echo
"TESTSRC not set. Test cannot execute. Failed."
exit
1
fi
if
[
"
${
TESTCLASSES
}
"
=
""
]
then
echo
"TESTCLASSES not set. Test cannot execute. Failed."
exit
1
fi
JAVAC
=
"
${
TESTJAVA
}
"
/bin/javac
JAVA
=
"
${
TESTJAVA
}
"
/bin/java
"
${
JAVA
}
"
${
TESTVMOPTS
}
-javaagent
:NoPremainAgent.jar
\
-classpath
"
${
TESTCLASSES
}
"
DummyMain
>
output.log 2>&1
cat
output.log
MESG
=
"java.lang.NoSuchMethodException"
grep
"
$MESG
"
output.log
result
=
$?
if
[
"
$result
"
=
0
]
;
then
echo
"PASS: found '
$MESG
' in the test output"
else
echo
"FAIL: did NOT find '
$MESG
' in the test output"
fi
exit
$result
test/java/lang/instrument/PremainClass/PremainClassTest.sh
浏览文件 @
1cb28fec
...
...
@@ -49,7 +49,7 @@ JAVA="${TESTJAVA}"/bin/java
"
$JAVAC
"
-d
"
${
TESTCLASSES
}
"
"
${
TESTSRC
}
"
/DummyMain.java
"
${
JAVA
}
"
-javaagent
:
"
${
TESTSRC
}
"
/Agent.jar
-classpath
"
${
TESTCLASSES
}
"
DummyMain
"
${
JAVA
}
"
${
TESTVMOPTS
}
-javaagent
:
"
${
TESTSRC
}
"
/Agent.jar
-classpath
"
${
TESTCLASSES
}
"
DummyMain
result
=
$?
exit
$result
test/java/lang/instrument/PremainClass/ZeroArgPremainAgent.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
import
java.lang.instrument.*
;
class
ZeroArgPremainAgent
{
// This agent has a zero arg premain() function.
public
static
void
premain
()
{
System
.
out
.
println
(
"Hello from ZeroArgInheritAgent!"
);
}
}
test/java/lang/instrument/PremainClass/ZeroArgPremainAgent.sh
0 → 100644
浏览文件 @
1cb28fec
#
# Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#
# @test
# @bug 6289149
# @summary test when the agent's class has a zero arg premain() function.
# @author Daniel D. Daugherty, Sun Microsystems
#
# @run build DummyMain
# @run shell ../MakeJAR3.sh ZeroArgPremainAgent
# @run shell ZeroArgPremainAgent.sh
#
if
[
"
${
TESTJAVA
}
"
=
""
]
then
echo
"TESTJAVA not set. Test cannot execute. Failed."
exit
1
fi
if
[
"
${
TESTSRC
}
"
=
""
]
then
echo
"TESTSRC not set. Test cannot execute. Failed."
exit
1
fi
if
[
"
${
TESTCLASSES
}
"
=
""
]
then
echo
"TESTCLASSES not set. Test cannot execute. Failed."
exit
1
fi
JAVAC
=
"
${
TESTJAVA
}
"
/bin/javac
JAVA
=
"
${
TESTJAVA
}
"
/bin/java
"
${
JAVA
}
"
${
TESTVMOPTS
}
-javaagent
:ZeroArgPremainAgent.jar
\
-classpath
"
${
TESTCLASSES
}
"
DummyMain
>
output.log 2>&1
cat
output.log
MESG
=
"java.lang.NoSuchMethodException"
grep
"
$MESG
"
output.log
result
=
$?
if
[
"
$result
"
=
0
]
;
then
echo
"PASS: found '
$MESG
' in the test output"
else
echo
"FAIL: did NOT find '
$MESG
' in the test output"
fi
exit
$result
test/java/lang/instrument/RedefineClassWithNativeMethod.sh
0 → 100644
浏览文件 @
1cb28fec
#
# Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#
# @test
# @bug 5003341 4917140 6545149
# @summary Redefine a class with a native method.
# @author Daniel D. Daugherty as modified from the test submitted by clovis@par.univie.ac.at
#
# @run shell MakeJAR3.sh RedefineClassWithNativeMethodAgent 'Can-Redefine-Classes: true'
# @run build RedefineClassWithNativeMethodApp
# @run shell RedefineClassWithNativeMethod.sh
#
if
[
"
${
TESTJAVA
}
"
=
""
]
then
echo
"TESTJAVA not set. Test cannot execute. Failed."
exit
1
fi
if
[
"
${
TESTSRC
}
"
=
""
]
then
echo
"TESTSRC not set. Test cannot execute. Failed."
exit
1
fi
if
[
"
${
TESTCLASSES
}
"
=
""
]
then
echo
"TESTCLASSES not set. Test cannot execute. Failed."
exit
1
fi
JAVAC
=
"
${
TESTJAVA
}
"
/bin/javac
JAVA
=
"
${
TESTJAVA
}
"
/bin/java
"
${
JAVA
}
"
${
TESTVMOPTS
}
\
-javaagent
:RedefineClassWithNativeMethodAgent.jar
=
java/lang/Thread.class
\
-classpath
"
${
TESTCLASSES
}
"
RedefineClassWithNativeMethodApp
\
>
output.log 2>&1
result
=
$?
cat
output.log
if
[
"
$result
"
=
0
]
;
then
echo
"PASS: RedefineClassWithNativeMethodApp exited with status of 0."
else
echo
"FAIL: RedefineClassWithNativeMethodApp exited with status of
$result
"
exit
"
$result
"
fi
MESG
=
"Exception"
grep
"
$MESG
"
output.log
result
=
$?
if
[
"
$result
"
=
0
]
;
then
echo
"FAIL: found '
$MESG
' in the test output"
result
=
1
else
echo
"PASS: did NOT find '
$MESG
' in the test output"
result
=
0
fi
exit
$result
test/java/lang/instrument/RedefineClassWithNativeMethodAgent.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
import
java.lang.instrument.*
;
import
java.net.*
;
import
java.util.*
;
import
java.io.*
;
public
class
RedefineClassWithNativeMethodAgent
{
static
Class
clz
;
// just read the original class and redefine it via a Timer
public
static
void
premain
(
String
agentArgs
,
final
Instrumentation
inst
)
throws
Exception
{
String
s
=
agentArgs
.
substring
(
0
,
agentArgs
.
indexOf
(
".class"
));
clz
=
Class
.
forName
(
s
.
replace
(
'/'
,
'.'
));
ClassLoader
loader
=
RedefineClassWithNativeMethodAgent
.
class
.
getClassLoader
();
URL
classURL
=
loader
.
getResource
(
agentArgs
);
if
(
classURL
==
null
)
{
throw
new
Exception
(
"Cannot find class: "
+
agentArgs
);
}
int
redefineLength
;
InputStream
redefineStream
;
System
.
out
.
println
(
"Reading test class from "
+
classURL
);
if
(
classURL
.
getProtocol
().
equals
(
"file"
))
{
File
f
=
new
File
(
classURL
.
getFile
());
redefineStream
=
new
FileInputStream
(
f
);
redefineLength
=
(
int
)
f
.
length
();
}
else
{
URLConnection
conn
=
classURL
.
openConnection
();
redefineStream
=
conn
.
getInputStream
();
redefineLength
=
conn
.
getContentLength
();
}
final
byte
[]
buffer
=
new
byte
[
redefineLength
];
new
BufferedInputStream
(
redefineStream
).
read
(
buffer
);
new
Timer
(
true
).
schedule
(
new
TimerTask
()
{
public
void
run
()
{
try
{
System
.
out
.
println
(
"Instrumenting"
);
ClassDefinition
cld
=
new
ClassDefinition
(
clz
,
buffer
);
inst
.
redefineClasses
(
new
ClassDefinition
[]
{
cld
});
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
},
500
);
}
}
test/java/lang/instrument/RedefineClassWithNativeMethodApp.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
public
class
RedefineClassWithNativeMethodApp
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
try
{
// give the agent a chance to redefine the target class
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
ie
)
{
}
System
.
out
.
println
(
"Creating instance of "
+
RedefineClassWithNativeMethodAgent
.
clz
);
RedefineClassWithNativeMethodAgent
.
clz
.
newInstance
();
System
.
exit
(
0
);
}
}
test/java/lang/instrument/RedefineMethodAddInvoke.sh
0 → 100644
浏览文件 @
1cb28fec
#
# Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#
# @test
# @bug 6667089
# @summary Reflexive invocation of newly added methods broken.
# @author Daniel D. Daugherty
#
# @run shell MakeJAR3.sh RedefineMethodAddInvokeAgent 'Can-Redefine-Classes: true'
# @run build RedefineMethodAddInvokeApp
# @run shell RedefineMethodAddInvoke.sh
#
if
[
"
${
TESTJAVA
}
"
=
""
]
then
echo
"TESTJAVA not set. Test cannot execute. Failed."
exit
1
fi
if
[
"
${
TESTSRC
}
"
=
""
]
then
echo
"TESTSRC not set. Test cannot execute. Failed."
exit
1
fi
if
[
"
${
TESTCLASSES
}
"
=
""
]
then
echo
"TESTCLASSES not set. Test cannot execute. Failed."
exit
1
fi
JAVAC
=
"
${
TESTJAVA
}
"
/bin/javac
JAVA
=
"
${
TESTJAVA
}
"
/bin/java
cp
"
${
TESTSRC
}
"
/RedefineMethodAddInvokeTarget_1.java
\
RedefineMethodAddInvokeTarget.java
"
${
JAVAC
}
"
-d
.
RedefineMethodAddInvokeTarget.java
mv
RedefineMethodAddInvokeTarget.java RedefineMethodAddInvokeTarget_1.java
mv
RedefineMethodAddInvokeTarget.class RedefineMethodAddInvokeTarget_1.class
cp
"
${
TESTSRC
}
"
/RedefineMethodAddInvokeTarget_2.java
\
RedefineMethodAddInvokeTarget.java
"
${
JAVAC
}
"
-d
.
RedefineMethodAddInvokeTarget.java
mv
RedefineMethodAddInvokeTarget.java RedefineMethodAddInvokeTarget_2.java
mv
RedefineMethodAddInvokeTarget.class RedefineMethodAddInvokeTarget_2.class
"
${
JAVA
}
"
${
TESTVMOPTS
}
-javaagent
:RedefineMethodAddInvokeAgent.jar
\
-classpath
"
${
TESTCLASSES
}
"
RedefineMethodAddInvokeApp
>
output.log 2>&1
cat
output.log
MESG
=
"Exception"
grep
"
$MESG
"
output.log
result
=
$?
if
[
"
$result
"
=
0
]
;
then
echo
"FAIL: found '
$MESG
' in the test output"
result
=
1
else
echo
"PASS: did NOT find '
$MESG
' in the test output"
result
=
0
fi
exit
$result
test/java/lang/instrument/RedefineMethodAddInvokeAgent.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
import
java.lang.instrument.Instrumentation
;
public
class
RedefineMethodAddInvokeAgent
{
private
static
Instrumentation
instrumentation
;
private
RedefineMethodAddInvokeAgent
()
{
}
public
static
void
premain
(
String
agentArgs
,
Instrumentation
inst
)
{
System
.
out
.
println
(
"Hello from RedefineMethodAddInvokeAgent!"
);
System
.
out
.
println
(
"isRedefineClassesSupported()="
+
inst
.
isRedefineClassesSupported
());
instrumentation
=
inst
;
}
public
static
Instrumentation
getInstrumentation
()
{
return
instrumentation
;
}
}
test/java/lang/instrument/RedefineMethodAddInvokeApp.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
import
java.io.*
;
import
java.lang.instrument.*
;
public
class
RedefineMethodAddInvokeApp
{
public
static
void
main
(
String
args
[])
throws
Exception
{
System
.
out
.
println
(
"Hello from RedefineMethodAddInvokeApp!"
);
new
RedefineMethodAddInvokeApp
().
doTest
();
System
.
exit
(
0
);
}
private
void
doTest
()
throws
Exception
{
RedefineMethodAddInvokeTarget
target
=
new
RedefineMethodAddInvokeTarget
();
System
.
out
.
println
(
"RedefineMethodAddInvokeApp: invoking myMethod()"
);
target
.
test
(
0
);
// invoke the original myMethod()
// add myMethod1()
do_redefine
(
1
);
System
.
out
.
println
(
"RedefineMethodAddInvokeApp: invoking myMethod1()"
);
target
.
test
(
1
);
// invoke myMethod1()
// add myMethod2()
do_redefine
(
2
);
System
.
out
.
println
(
"RedefineMethodAddInvokeApp: invoking myMethod2()"
);
target
.
test
(
2
);
// invoke myMethod2()
}
private
static
void
do_redefine
(
int
counter
)
throws
Exception
{
File
f
=
new
File
(
"RedefineMethodAddInvokeTarget_"
+
counter
+
".class"
);
System
.
out
.
println
(
"Reading test class from "
+
f
);
InputStream
redefineStream
=
new
FileInputStream
(
f
);
byte
[]
redefineBuffer
=
NamedBuffer
.
loadBufferFromStream
(
redefineStream
);
ClassDefinition
redefineParamBlock
=
new
ClassDefinition
(
RedefineMethodAddInvokeTarget
.
class
,
redefineBuffer
);
RedefineMethodAddInvokeAgent
.
getInstrumentation
().
redefineClasses
(
new
ClassDefinition
[]
{
redefineParamBlock
});
}
}
test/java/lang/instrument/RedefineMethodAddInvokeTarget.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
import
java.lang.reflect.Method
;
public
class
RedefineMethodAddInvokeTarget
{
public
void
test
(
int
counter
)
throws
Exception
{
Method
method
=
getClass
().
getDeclaredMethod
(
"myMethod"
+
(
counter
==
0
?
""
:
counter
));
method
.
setAccessible
(
true
);
method
.
invoke
(
this
);
}
public
void
myMethod
()
{
System
.
out
.
println
(
"Hello from the original myMethod()!"
);
}
}
test/java/lang/instrument/RedefineMethodAddInvokeTarget_1.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
import
java.lang.reflect.Method
;
public
class
RedefineMethodAddInvokeTarget
{
public
void
test
(
int
counter
)
throws
Exception
{
Method
method
=
getClass
().
getDeclaredMethod
(
"myMethod"
+
(
counter
==
0
?
""
:
counter
));
method
.
setAccessible
(
true
);
method
.
invoke
(
this
);
}
public
void
myMethod
()
{
System
.
out
.
println
(
"Hello from the non-EMCP myMethod()!"
);
}
private
final
void
myMethod1
()
{
System
.
out
.
println
(
"Hello from myMethod1()!"
);
System
.
out
.
println
(
"Calling myMethod() from myMethod1():"
);
myMethod
();
}
}
test/java/lang/instrument/RedefineMethodAddInvokeTarget_2.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
import
java.lang.reflect.Method
;
public
class
RedefineMethodAddInvokeTarget
{
public
void
test
(
int
counter
)
throws
Exception
{
Method
method
=
getClass
().
getDeclaredMethod
(
"myMethod"
+
(
counter
==
0
?
""
:
counter
));
method
.
setAccessible
(
true
);
method
.
invoke
(
this
);
}
public
void
myMethod
()
{
System
.
out
.
println
(
"Hello from the non-EMCP again myMethod()!"
);
}
private
final
void
myMethod1
()
{
System
.
out
.
println
(
"Hello from myMethod1()!"
);
System
.
out
.
println
(
"Calling myMethod() from myMethod1():"
);
myMethod
();
}
private
final
void
myMethod2
()
{
System
.
out
.
println
(
"Hello from myMethod2()!"
);
System
.
out
.
println
(
"Calling myMethod1() from myMethod2():"
);
myMethod1
();
}
}
test/java/lang/instrument/RetransformAgent.java
浏览文件 @
1cb28fec
...
...
@@ -27,7 +27,7 @@
* @summary test retransformClasses
* @author Robert Field, Sun Microsystems
*
* @run shell MakeJAR2.sh RetransformAgent RetransformApp 'Can-Retransform-Classes: true'
* @run shell
/timeout=240
MakeJAR2.sh RetransformAgent RetransformApp 'Can-Retransform-Classes: true'
* @run main/othervm -javaagent:RetransformAgent.jar RetransformApp
*/
...
...
test/java/lang/instrument/StressGetObjectSizeApp.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
import
java.lang.instrument.Instrumentation
;
public
class
StressGetObjectSizeApp
extends
ASimpleInstrumentationTestCase
{
/**
* Constructor for StressGetObjectSizeApp.
* @param name
*/
public
StressGetObjectSizeApp
(
String
name
)
{
super
(
name
);
}
public
static
void
main
(
String
[]
args
)
throws
Throwable
{
ATestCaseScaffold
test
=
new
StressGetObjectSizeApp
(
args
[
0
]);
test
.
runTest
();
}
protected
final
void
doRunTest
()
throws
Throwable
{
stressGetObjectSize
();
}
public
void
stressGetObjectSize
()
{
System
.
out
.
println
(
"main: an object size="
+
fInst
.
getObjectSize
(
new
Object
()));
RoundAndRound
[]
threads
=
new
RoundAndRound
[
10
];
for
(
int
i
=
0
;
i
<
threads
.
length
;
++
i
)
{
threads
[
i
]
=
new
RoundAndRound
(
fInst
);
threads
[
i
].
start
();
}
try
{
Thread
.
sleep
(
500
);
// let all threads get going in their loops
}
catch
(
InterruptedException
ie
)
{
}
System
.
out
.
println
(
"stressGetObjectSize: returning"
);
return
;
}
private
static
class
RoundAndRound
extends
Thread
{
private
final
Instrumentation
inst
;
private
final
Object
anObject
;
public
RoundAndRound
(
Instrumentation
inst
)
{
this
.
inst
=
inst
;
this
.
anObject
=
new
Object
();
setDaemon
(
true
);
}
public
void
run
()
{
long
sum
=
0
;
while
(
true
)
{
sum
+=
inst
.
getObjectSize
(
anObject
);
}
}
}
}
test/java/lang/instrument/StressGetObjectSizeTest.sh
0 → 100644
浏览文件 @
1cb28fec
#
# Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#
# @test
# @bug 6572160
# @summary stress getObjectSize() API
# @author Daniel D. Daugherty as modified from the code of fischman@google.com
#
# @run build StressGetObjectSizeApp
# @run shell MakeJAR.sh basicAgent
# @run shell StressGetObjectSizeTest.sh
#
if
[
"
${
TESTJAVA
}
"
=
""
]
then
echo
"TESTJAVA not set. Test cannot execute. Failed."
exit
1
fi
if
[
"
${
TESTSRC
}
"
=
""
]
then
echo
"TESTSRC not set. Test cannot execute. Failed."
exit
1
fi
if
[
"
${
TESTCLASSES
}
"
=
""
]
then
echo
"TESTCLASSES not set. Test cannot execute. Failed."
exit
1
fi
JAVA
=
"
${
TESTJAVA
}
"
/bin/java
"
${
JAVA
}
"
${
TESTVMOPTS
}
-javaagent
:basicAgent.jar
\
-classpath
"
${
TESTCLASSES
}
"
StressGetObjectSizeApp StressGetObjectSizeApp
\
>
output.log 2>&1
cat
output.log
MESG
=
"ASSERTION FAILED"
grep
"
$MESG
"
output.log
result
=
$?
if
[
"
$result
"
=
0
]
;
then
echo
"FAIL: found '
$MESG
' in the test output"
result
=
1
else
echo
"PASS: did NOT find '
$MESG
' in the test output"
result
=
0
fi
exit
$result
test/java/lang/instrument/TestClass1.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* Test Java Program
*
* @author Daryl Puryear
* @copyright 1999-2004 Wily Technology, Inc. All rights reserved.
*/
public
class
TestClass1
{
public
TestClass1
()
{
}
}
test/java/lang/instrument/TestClass2.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* Test Java Program
*
* @author Daryl Puryear
* @copyright 1999-2004 Wily Technology, Inc. All rights reserved.
*/
public
class
TestClass2
{
public
TestClass2
()
{
}
}
test/java/lang/instrument/TestClass3.java
0 → 100644
浏览文件 @
1cb28fec
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* Test Java Program
*
* @author Daryl Puryear
* @copyright 1999-2004 Wily Technology, Inc. All rights reserved.
*/
public
class
TestClass3
{
public
TestClass3
()
{
}
}
test/java/lang/instrument/TransformerManagementThreadAddTests.java
浏览文件 @
1cb28fec
...
...
@@ -79,6 +79,12 @@ public class TransformerManagementThreadAddTests extends ATestCaseScaffold
protected
static
final
int
TOTAL_THREADS
=
MAX_TRANS
-
MIN_TRANS
+
1
;
private
byte
[]
fDummyClassBytes
;
// fCheckedTransformers is a Vector that is used to verify
// that the transform() function is called in the same
// order in which the transformers were added to the
// TransformerManager. The test currently verifies that all
// transformers for a specific worker thread are in
// increasing order by index value.
private
Vector
fCheckedTransformers
;
private
Instrumentation
fInstrumentation
;
private
int
fFinished
;
...
...
@@ -131,9 +137,16 @@ public class TransformerManagementThreadAddTests extends ATestCaseScaffold
threads
[
i
].
start
();
}
while
(!
exec
.
fDone
)
// Effective Java - Item 48: Synchronize access to shared mutable data
// Don't use a direct field getter.
while
(!
exec
.
isDone
())
{
Thread
.
currentThread
().
yield
();
// Effective Java - Item 51: Don't depend on the thread scheduler
// Use sleep() instead of yield().
try
{
Thread
.
sleep
(
500
);
}
catch
(
InterruptedException
ie
)
{
}
}
assertTrue
(
finalCheck
());
...
...
@@ -169,13 +182,17 @@ public class TransformerManagementThreadAddTests extends ATestCaseScaffold
this
.
fExec
=
exec
;
}
// Effective Java - Item 48: Synchronize access to shared mutable data
// Document a synchronized setter.
protected
synchronized
void
threadFinished
(
Thread
t
)
{
fFinished
++;
}
protected
boolean
// Effective Java - Item 48: Synchronize access to shared mutable data
// Provide synchronized getter.
protected
synchronized
boolean
threadsDone
()
{
return
fFinished
==
TOTAL_THREADS
;
...
...
@@ -188,7 +205,9 @@ public class TransformerManagementThreadAddTests extends ATestCaseScaffold
protected
boolean
testCompleted
()
{
return
getExecThread
().
fDone
;
// Effective Java - Item 48: Synchronize access to shared mutable data
// Don't use direct field getter.
return
getExecThread
().
isDone
();
}
/**
...
...
@@ -264,11 +283,19 @@ public class TransformerManagementThreadAddTests extends ATestCaseScaffold
private
void
executeTransform
()
{
fCheckedTransformers
.
clear
();
try
{
ClassDefinition
cd
=
new
ClassDefinition
(
DummyClass
.
class
,
fDummyClassBytes
);
// When the ClassDefinition above is created for the first
// time and every time redefineClasses() below is called,
// the transform() function is called for each registered
// transformer. We only want one complete set of calls to
// be logged in the fCheckedTransformers Vector so we clear
// any calls logged for ClassDefinition above and just use
// the ones logged for redefineClasses() below.
fCheckedTransformers
.
clear
();
getInstrumentation
().
redefineClasses
(
new
ClassDefinition
[]{
cd
});
}
catch
(
ClassNotFoundException
e
)
...
...
@@ -325,6 +352,18 @@ public class TransformerManagementThreadAddTests extends ATestCaseScaffold
{
private
boolean
fDone
=
false
;
// Effective Java - Item 48: Synchronize access to shared mutable data
// Provide a synchronized getter.
private
synchronized
boolean
isDone
()
{
return
fDone
;
}
// Effective Java - Item 48: Synchronize access to shared mutable data
// Provide a synchronized setter.
private
synchronized
void
setIsDone
()
{
fDone
=
true
;
}
public
void
run
()
{
...
...
@@ -335,7 +374,9 @@ public class TransformerManagementThreadAddTests extends ATestCaseScaffold
// Do a final check for good measure
executeTransform
();
fDone
=
true
;
// Effective Java - Item 48: Synchronize access to shared mutable data
// Don't use direct field setter.
setIsDone
();
}
}
...
...
test/java/lang/instrument/TransformerManagementThreadRemoveTests.java
浏览文件 @
1cb28fec
...
...
@@ -27,10 +27,9 @@
* @summary multi-thread test to exercise sync and contention for removes to transformer registry
* @author Gabriel Adauto, Wily Technology
*
* @ignore Disabled until race condition which hangs test can be fixed.
* @run build TransformerManagementThreadRemoveTests
* @run shell MakeJAR.sh
basic
Agent
* @run main/othervm -javaagent:
basic
Agent.jar TransformerManagementThreadRemoveTests TransformerManagementThreadRemoveTests
* @run shell MakeJAR.sh
redefine
Agent
* @run main/othervm -javaagent:
redefine
Agent.jar TransformerManagementThreadRemoveTests TransformerManagementThreadRemoveTests
*/
import
java.util.*
;
...
...
@@ -87,7 +86,12 @@ public class TransformerManagementThreadRemoveTests
while
(!
testCompleted
())
{
Thread
.
currentThread
().
yield
();
// Effective Java - Item 51: Don't depend on the thread scheduler
// Use sleep() instead of yield().
try
{
Thread
.
sleep
(
500
);
}
catch
(
InterruptedException
ie
)
{
}
}
assertTrue
(
finalCheck
());
...
...
test/java/lang/instrument/appendToClassLoaderSearch/CircularityErrorTest.sh
浏览文件 @
1cb28fec
...
...
@@ -26,14 +26,14 @@
# @summary Unit tests for appendToBootstrapClassLoaderSearch and
# appendToSystemClasLoaderSearch methods.
#
# @run shell CircularityErrorTest.sh
# @run shell
/timeout=240
CircularityErrorTest.sh
if
[
"
${
TESTSRC
}
"
=
""
]
then
echo
"TESTSRC not set. Test cannot execute. Failed."
exit
1
fi
.
${
TESTSRC
}
/CommonSetup.sh
# Setup to create circularity condition
...
...
@@ -71,5 +71,5 @@ $JAR -cfm "${TESTCLASSES}"/CircularityErrorTest.jar "${MANIFEST}" \
-C
"
${
TESTCLASSES
}
"
CircularityErrorTest.class
# Finally we run the test
(
cd
"
${
TESTCLASSES
}
"
;
$JAVA
-javaagent
:CircularityErrorTest.jar CircularityErrorTest
)
(
cd
"
${
TESTCLASSES
}
"
;
$JAVA
${
TESTVMOPTS
}
-javaagent
:CircularityErrorTest.jar CircularityErrorTest
)
test/java/lang/instrument/appendToClassLoaderSearch/ClassUnloadTest.sh
浏览文件 @
1cb28fec
...
...
@@ -34,11 +34,11 @@ then
echo
"TESTSRC not set. Test cannot execute. Failed."
exit
1
fi
.
${
TESTSRC
}
/CommonSetup.sh
# Create Foo and Bar
# Foo has a reference to Bar but we deleted Bar so that
# Foo has a reference to Bar but we deleted Bar so that
# a NoClassDefFoundError will be thrown when Foo tries to
# resolve the reference to Bar
...
...
@@ -53,11 +53,11 @@ cat << EOF > "${FOO}"
public class Foo {
public static boolean doSomething() {
try {
Bar b = new Bar();
return true;
} catch (NoClassDefFoundError x) {
return false;
}
Bar b = new Bar();
return true;
} catch (NoClassDefFoundError x) {
return false;
}
}
}
EOF
...
...
@@ -79,5 +79,5 @@ $JAR -cfm "${TESTCLASSES}"/ClassUnloadTest.jar "${MANIFEST}" \
# Finally we run the test
(
cd
"
${
TESTCLASSES
}
"
;
\
$JAVA
-Xverify
:none
-XX
:+TraceClassUnloading
-javaagent
:ClassUnloadTest.jar
\
ClassUnloadTest
"
${
OTHERDIR
}
"
Bar.jar
)
$JAVA
${
TESTVMOPTS
}
-Xverify
:none
-XX
:+TraceClassUnloading
\
-javaagent
:ClassUnloadTest.jar
ClassUnloadTest
"
${
OTHERDIR
}
"
Bar.jar
)
test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh
浏览文件 @
1cb28fec
...
...
@@ -24,7 +24,6 @@
#
#%E
#
# Common setup for unit tests. Setups up the following variables:
#
...
...
@@ -66,7 +65,7 @@ then
echo
"TESTSRC not set. Test cannot execute. Failed."
exit
1
fi
if
[
"
${
TESTCLASSES
}
"
=
""
]
then
echo
"TESTCLASSES not set. Test cannot execute. Failed."
...
...
test/java/lang/instrument/appendToClassLoaderSearch/run_tests.sh
浏览文件 @
1cb28fec
...
...
@@ -23,24 +23,24 @@
# have any questions.
#
# @test
# @bug 6173575 6388987
# @summary Unit tests for appendToBootstrapClassLoaderSearch and
# @summary Unit tests for appendToBootstrapClassLoaderSearch and
# appendToSystemClasLoaderSearch methods.
#
# @build Agent AgentSupport BootSupport BasicTest PrematureLoadTest DynamicTest
# @run shell run_tests.sh
# @run shell
/timeout=240
run_tests.sh
if
[
"
${
TESTSRC
}
"
=
""
]
then
echo
"TESTSRC not set. Test cannot execute. Failed."
exit
1
fi
.
${
TESTSRC
}
/CommonSetup.sh
# Simple tests
echo
"Creating jar files for simple tests..."
...
...
@@ -50,13 +50,13 @@ cd ${TESTCLASSES}
"
$JAR
"
-cfm
Agent.jar
"
${
TESTSRC
}
"
/manifest.mf Agent.class
"
$JAR
"
-cf
AgentSupport.jar AgentSupport.class
"
$JAR
"
-cf
BootSupport.jar BootSupport.class
"
$JAR
"
-cf
SimpleTests.jar BasicTest.class PrematureLoadTest.class
"
$JAR
"
-cf
SimpleTests.jar BasicTest.class PrematureLoadTest.class
failures
=
0
go
()
{
echo
''
sh
-xc
"
$JAVA
-javaagent:Agent.jar -classpath SimpleTests.jar
$1
$2
$3
"
2>&1
sh
-xc
"
$JAVA
${
TESTVMOPTS
}
-javaagent:Agent.jar -classpath SimpleTests.jar
$1
$2
$3
"
2>&1
if
[
$?
!=
0
]
;
then
failures
=
`
expr
$failures
+ 1
`
;
fi
}
...
...
@@ -75,7 +75,7 @@ mkdir tmp
"
${
JAVAC
}
"
-d
tmp
"
${
TESTSRC
}
"
/Tracer.java
(
cd
tmp
;
"
${
JAR
}
"
cf ../Tracer.jar org/tools/Tracer.class
)
# InstrumentedApplication is Application+instrmentation - don't copy as
# InstrumentedApplication is Application+instrmentation - don't copy as
# we don't want the original file permission
cat
"
${
TESTSRC
}
"
/InstrumentedApplication.java
>
./Application.java
...
...
@@ -85,11 +85,11 @@ mv Application.class InstrumentedApplication.bytes
cp
"
${
TESTSRC
}
"
/Application.java
.
"
${
JAVAC
}
"
-d
.
Application.java
sh
-xc
"
$JAVA
-classpath . -javaagent:Agent.jar DynamicTest"
2>&1
sh
-xc
"
$JAVA
${
TESTVMOPTS
}
-classpath . -javaagent:Agent.jar DynamicTest"
2>&1
if
[
$?
!=
0
]
;
then
failures
=
`
expr
$failures
+ 1
`
;
fi
# Repeat test with security manager
sh
-xc
"
$JAVA
-classpath . -javaagent:Agent.jar -Djava.security.manager DynamicTest"
2>&1
sh
-xc
"
$JAVA
${
TESTVMOPTS
}
-classpath . -javaagent:Agent.jar -Djava.security.manager DynamicTest"
2>&1
if
[
$?
!=
0
]
;
then
failures
=
`
expr
$failures
+ 1
`
;
fi
#
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录