Skip to content

Commit 592d027

Browse files
committed
Use class-file API instead of ASM
1 parent 7e87af1 commit 592d027

File tree

3 files changed

+26
-41
lines changed

3 files changed

+26
-41
lines changed

substratevm/mx.substratevm/mx_substratevm.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1823,11 +1823,10 @@ def build_and_run(args, binary_path, native_image, agents, agents_arg):
18231823
mx.log('Run agent with JVM as baseline')
18241824
test_cp = os.pathsep.join([classpath('com.oracle.svm.test')])
18251825
java_run_cp = os.pathsep.join([test_cp, mx.dependency('org.graalvm.nativeimage').classpath_repr()])
1826-
mx.run_java( agents_arg + ['--add-exports=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED',
1827-
'-cp', java_run_cp, 'com.oracle.svm.test.javaagent.AgentTest'])
1826+
mx.run_java( agents_arg + ['-cp', java_run_cp, 'com.oracle.svm.test.javaagent.AgentTest'])
18281827
test_cp = os.pathsep.join([test_cp] + agents)
18291828
native_agent_premain_options = ['-XXpremain:com.oracle.svm.test.javaagent.agent1.TestJavaAgent1:test.agent1=true', '-XXpremain:com.oracle.svm.test.javaagent.agent2.TestJavaAgent2:test.agent2=true']
1830-
image_args = ['-cp', test_cp, '-J-ea', '-J-esa', '-H:+ReportExceptionStackTraces', '-J--add-exports=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED', '-H:Class=com.oracle.svm.test.javaagent.AgentTest']
1829+
image_args = ['-cp', test_cp, '-J-ea', '-J-esa', '-H:+ReportExceptionStackTraces', '-H:Class=com.oracle.svm.test.javaagent.AgentTest']
18311830
native_image(image_args + svm_experimental_options(agents_arg) + ['-o', binary_path] + args)
18321831
mx.run([binary_path] + native_agent_premain_options)
18331832

substratevm/mx.substratevm/suite.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1076,7 +1076,6 @@
10761076
"java.base" : [
10771077
"jdk.internal.misc",
10781078
"sun.security.jca",
1079-
"jdk.internal.org.objectweb.asm"
10801079
],
10811080
},
10821081
"checkstyle": "com.oracle.svm.test",

substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/javaagent/agent1/TestJavaAgent1.java

Lines changed: 24 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,19 @@
2929
import org.graalvm.nativeimage.ImageInfo;
3030
import org.junit.Assert;
3131

32+
import java.lang.classfile.ClassFile;
33+
import java.lang.classfile.ClassModel;
34+
import java.lang.classfile.MethodModel;
3235
import java.lang.instrument.ClassFileTransformer;
3336
import java.lang.instrument.Instrumentation;
3437
import java.security.ProtectionDomain;
3538
import java.util.Collections;
3639
import java.util.Set;
37-
import jdk.internal.org.objectweb.asm.ClassReader;
38-
import jdk.internal.org.objectweb.asm.ClassWriter;
39-
import jdk.internal.org.objectweb.asm.ClassVisitor;
40-
import jdk.internal.org.objectweb.asm.MethodVisitor;
41-
import jdk.internal.org.objectweb.asm.Opcodes;
4240

4341
public class TestJavaAgent1 {
4442

4543
public static void premain(
46-
String agentArgs, Instrumentation inst) {
44+
String agentArgs, Instrumentation inst) {
4745
AgentPremainHelper.parseOptions(agentArgs);
4846
System.setProperty("instrument.enable", "true");
4947
AgentPremainHelper.load(TestJavaAgent1.class);
@@ -146,40 +144,29 @@ static class DemoTransformer implements ClassFileTransformer {
146144

147145
@Override
148146
public byte[] transform(
149-
ClassLoader loader,
150-
String className,
151-
Class<?> classBeingRedefined,
152-
ProtectionDomain protectionDomain,
153-
byte[] classfileBuffer) {
147+
ClassLoader loader,
148+
String className,
149+
Class<?> classBeingRedefined,
150+
ProtectionDomain protectionDomain,
151+
byte[] classfileBuffer) {
154152
if (internalClassName.equals(className)) {
155-
ClassReader cr = new ClassReader(classfileBuffer);
156-
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
157-
158-
ClassVisitor cv = new ClassVisitor(Opcodes.ASM9, cw) {
159-
@Override
160-
public MethodVisitor visitMethod(int access, String name, String descriptor,
161-
String signature, String[] exceptions) {
162-
MethodVisitor mv = super.visitMethod(access, name, descriptor, signature, exceptions);
163-
if ("getCounter".equals(name) && "()I".equals(descriptor)) {
164-
return new MethodVisitor(api, mv) {
165-
@Override
166-
public void visitInsn(int opcode) {
167-
if (opcode == Opcodes.IRETURN) {
168-
super.visitLdcInsn(11);
169-
}
170-
super.visitInsn(opcode);
171-
}
172-
};
173-
}
174-
return mv;
153+
ClassFile classFile = ClassFile.of();
154+
ClassModel classModel = classFile.parse(classfileBuffer);
155+
156+
return classFile.transformClass(classModel, (classbuilder, ce) -> {
157+
if (ce instanceof MethodModel mm && mm.methodName().equalsString("getCounter")
158+
&& mm.methodType().equalsString("()I")) {
159+
classbuilder.transformMethod(mm, (mb, me) -> {
160+
mb.withCode(cb -> {
161+
cb.loadConstant(11);
162+
cb.ireturn();
163+
});
164+
});
165+
} else {
166+
classbuilder.with(ce);
175167
}
176-
};
177-
178-
cr.accept(cv, 0);
179-
180-
return cw.toByteArray();
168+
});
181169
}
182-
183170
return null;
184171
}
185172
}

0 commit comments

Comments
 (0)