/* * Copyright (c) 2009, 2016, Oracle and/or its affiliates. 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. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.btrace.runtime; import com.sun.btrace.instr.RandomIntProvider; import java.lang.reflect.Field; import org.junit.BeforeClass; import org.junit.Test; /** * * @author Jaroslav Bachorik */ public class InstrumentorTest extends InstrumentorTestBase { @BeforeClass public static void classSetup() throws Exception { try { Field f = RandomIntProvider.class.getDeclaredField("useBtraceEnter"); f.setAccessible(true); f.setBoolean(null, false); } catch (Exception e) { e.printStackTrace(); } } @Test public void matchDerivedClass() throws Exception { loadTargetClass("DerivedClass"); transform("onmethod/MatchDerived"); checkTransformation("ALOAD 0\nALOAD 1\nALOAD 2\n" + "INVOKESTATIC resources/DerivedClass.$btrace$traces$onmethod$MatchDerived$args (Lresources/AbstractClass;Ljava/lang/String;Ljava/util/Map;)V"); } @Test public void methodEntryCheckcastBefore() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/CheckcastBefore"); checkTransformation( "DUP\n" + "ASTORE 2\n" + "ALOAD 0\n" + "LDC \"resources.OnMethodTest\"\n" + "LDC \"java.util.HashMap\"\n" + "ALOAD 2\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$CheckcastBefore$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V\n" + "ASTORE 3\n" + "LOCALVARIABLE d Ljava/util/HashMap; L2 L5 3\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 4" ); resetClassLoader(); transform("onmethod/leveled/CheckcastBefore"); checkTransformation( "GETSTATIC traces/onmethod/leveled/CheckcastBefore.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L2\n" + "DUP\n" + "ALOAD 0\n" + "LDC \"resources.OnMethodTest\"\n" + "LDC \"java.util.HashMap\"\n" + "ALOAD 2\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$CheckcastBefore$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V\n" + "CHECKCAST java/util/HashMap\n" + "ASTORE 3\n" + "L3\n" + "LINENUMBER 102 L3\n" + "IFEQ L4\n" + "L5\n" + "LINENUMBER 103 L5\n" + "L4\n" + "LINENUMBER 105 L4\n" + "L6\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L6 0\n" + "LOCALVARIABLE c Ljava/util/Map; L1 L6 1\n" + "LOCALVARIABLE d Ljava/util/HashMap; L3 L6 3\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 4" ); } @Test public void methodEntryCheckcastAfter() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/CheckcastAfter"); checkTransformation( "DUP\n" + "ALOAD 0\n" + "LDC \"casts\"\n" + "ALOAD 2\n" + "LDC \"java.util.HashMap\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$CheckcastAfter$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/String;)V\n" + "ASTORE 3\n" + "LOCALVARIABLE d Ljava/util/HashMap; L2 L5 3\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 4" ); resetClassLoader(); transform("onmethod/leveled/CheckcastAfter"); checkTransformation( "GETSTATIC traces/onmethod/leveled/CheckcastAfter.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L2\n" + "DUP\n" + "ALOAD 0\n" + "LDC \"casts\"\n" + "LDC \"java.util.HashMap\"\n" + "ALOAD 2\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$CheckcastAfter$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V\n" + "ASTORE 3\n" + "L3\n" + "LINENUMBER 102 L3\n" + "IFEQ L4\n" + "L5\n" + "LINENUMBER 103 L5\n" + "L4\n" + "LINENUMBER 105 L4\n" + "L6\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L6 0\n" + "LOCALVARIABLE c Ljava/util/Map; L1 L6 1\n" + "LOCALVARIABLE d Ljava/util/HashMap; L3 L6 3\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 4" ); } @Test public void methodEntryInstanceofBefore() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/InstanceofBefore"); checkTransformation( "DUP\n" + "ASTORE 3\n" + "ALOAD 0\n" + "LDC \"resources.OnMethodTest\"\n" + "LDC \"java.util.HashMap\"\n" + "ALOAD 3\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$InstanceofBefore$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 4" ); resetClassLoader(); transform("onmethod/leveled/InstanceofBefore"); checkTransformation( "DUP\n" + "ASTORE 3\n" + "GETSTATIC traces/onmethod/leveled/InstanceofBefore.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L3\n" + "ALOAD 0\n" + "LDC \"resources.OnMethodTest\"\n" + "LDC \"java.util.HashMap\"\n" + "ALOAD 3\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$InstanceofBefore$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V\n" + "L3\n" + "IFEQ L4\n" + "L5\n" + "LINENUMBER 103 L5\n" + "L4\n" + "LINENUMBER 105 L4\n" + "L6\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L6 0\n" + "LOCALVARIABLE c Ljava/util/Map; L1 L6 1\n" + "LOCALVARIABLE d Ljava/util/HashMap; L2 L6 2\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 4" ); } @Test public void methodEntryInstanceofAfter() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/InstanceofAfter"); checkTransformation( "DUP\n" + "ASTORE 3\n" + "ALOAD 0\n" + "LDC \"casts\"\n" + "LDC \"java.util.HashMap\"\n" + "ALOAD 3\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$InstanceofAfter$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 4" ); resetClassLoader(); transform("onmethod/leveled/InstanceofAfter"); checkTransformation( "DUP\n" + "ASTORE 3\n" + "GETSTATIC traces/onmethod/leveled/InstanceofAfter.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L3\n" + "ALOAD 0\n" + "LDC \"casts\"\n" + "LDC \"java.util.HashMap\"\n" + "ALOAD 3\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$InstanceofAfter$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V\n" + "L3\n" + "IFEQ L4\n" + "L5\n" + "LINENUMBER 103 L5\n" + "L4\n" + "LINENUMBER 105 L4\n" + "L6\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L6 0\n" + "LOCALVARIABLE c Ljava/util/Map; L1 L6 1\n" + "LOCALVARIABLE d Ljava/util/HashMap; L2 L6 2\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 4" ); } @Test public void methodEntryCatch() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/Catch"); checkTransformation("DUP\nALOAD 0\nALOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$Catch$args (Ljava/lang/Object;Ljava/io/IOException;)V\n" + "ASTORE 2"); resetClassLoader(); transform("onmethod/leveled/Catch"); checkTransformation( "GETSTATIC traces/onmethod/leveled/Catch.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L2\n" + "DUP\n" + "ALOAD 0\n" + "ALOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$Catch$args (Ljava/lang/Object;Ljava/io/IOException;)V\n" + "ASTORE 2\n" + "L3\n" + "LINENUMBER 68 L3\n" + "ALOAD 2\n" + "L4\n" + "LINENUMBER 70 L4\n" + "L5\n" + "LOCALVARIABLE e Ljava/io/IOException; L3 L4 2\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L5 0\n" + "MAXLOCALS = 3" ); } @Test public void methodEntryThrow() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/Throw"); checkTransformation("DUP\nASTORE 1\nALOAD 0\nLDC \"resources.OnMethodTest\"\nLDC \"exception\"\nALOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$Throw$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"); resetClassLoader(); transform("onmethod/leveled/Throw"); checkTransformation( "GETSTATIC traces/onmethod/leveled/Throw.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L2\n" + "DUP\n" + "ASTORE 1\n" + "ALOAD 0\n" + "LDC \"resources.OnMethodTest\"\n" + "LDC \"exception\"\n" + "ALOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$Throw$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V\n" + "L2\n" + "ASTORE 2\n" + "L3\n" + "LINENUMBER 68 L3\n" + "ALOAD 2\n" + "L4\n" + "LINENUMBER 70 L4\n" + "L5\n" + "LOCALVARIABLE e Ljava/io/IOException; L3 L4 2\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L5 0\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 3" ); } @Test public void methodEntryError() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/Error"); checkTransformation("TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "DUP\nASTORE 1\nALOAD 0\nLDC \"uncaught\"\nALOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$Error$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Throwable;)V"); resetClassLoader(); transform("onmethod/leveled/Error"); checkTransformation( "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "DUP\n" + "ASTORE 1\n" + "GETSTATIC traces/onmethod/leveled/Error.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L2\n" + "ALOAD 0\n" + "LDC \"uncaught\"\n" + "ALOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$Error$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Throwable;)V\n" + "L2\n" + "ATHROW\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 2" ); } @Test public void methodEntryErrorDuration() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ErrorDuration"); checkTransformation( "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "LCONST_0\n" + "LSTORE 1\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LSTORE 3\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 3\n" + "LSUB\n" + "LSTORE 1\n" + "DUP\n" + "ASTORE 5\n" + "ALOAD 0\n" + "LDC \"uncaught\"\n" + "LLOAD 1\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ErrorDuration$args (Ljava/lang/Object;Ljava/lang/String;JLjava/lang/Throwable;)V\n" + "ATHROW\n" + "MAXSTACK = 6\n" + "MAXLOCALS = 6"); resetClassLoader(); transform("onmethod/leveled/ErrorDuration"); checkTransformation( "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "LCONST_0\n" + "LSTORE 1\n" + "LCONST_0\n" + "LSTORE 3\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 5\n" + "IFLE L0\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LSTORE 3\n" + "ILOAD 5\n" + "IFLE L2\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 3\n" + "LSUB\n" + "LSTORE 1\n" + "L2\n" + "DUP\n" + "ASTORE 6\n" + "GETSTATIC traces/onmethod/leveled/ErrorDuration.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L3\n" + "ALOAD 0\n" + "LDC \"uncaught\"\n" + "LLOAD 1\n" + "ALOAD 6\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ErrorDuration$args (Ljava/lang/Object;Ljava/lang/String;JLjava/lang/Throwable;)V\n" + "L3\n" + "ATHROW\n" + "MAXSTACK = 6\n" + "MAXLOCALS = 7" ); } @Test public void methodEntryLine() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/Line"); checkTransformation("LDC \"field\"\nLDC 84\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$Line$args (Ljava/lang/Object;Ljava/lang/String;I)V\n" + "ALOAD 0"); resetClassLoader(); transform("onmethod/leveled/Line"); checkTransformation( "GETSTATIC traces/onmethod/leveled/Line.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "LDC \"field\"\n" + "LDC 84\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$Line$args (Ljava/lang/Object;Ljava/lang/String;I)V\n" + "L1\n" + "ALOAD 0\n" + "L2\n" + "LINENUMBER 85 L2\n" + "L3\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L3 0" ); } @Test public void methodEntryNewBefore() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/NewBefore"); checkTransformation("ALOAD 0\nLDC \"java.util.HashMap\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$NewBefore$args (Ljava/lang/Object;Ljava/lang/String;)V"); resetClassLoader(); transform("onmethod/leveled/NewBefore"); checkTransformation( "GETSTATIC traces/onmethod/leveled/NewBefore.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "ALOAD 0\n" + "LDC \"java.util.HashMap\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$NewBefore$args (Ljava/lang/Object;Ljava/lang/String;)V\n" + "L1\n" + "L2\n" + "LINENUMBER 89 L2\n" + "L3\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L3 0\n" + "LOCALVARIABLE m Ljava/util/Map; L2 L3 1" ); } @Test public void methodEntryNewAfter() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/NewAfter"); checkTransformation( "DUP\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LDC \"java.util.HashMap\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$NewAfter$args (Ljava/lang/Object;Ljava/util/Map;Ljava/lang/String;)V\n" + "ASTORE 2\n" + "LOCALVARIABLE m Ljava/util/Map; L1 L2 2\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 3" ); resetClassLoader(); transform("onmethod/leveled/NewAfter"); checkTransformation( "GETSTATIC traces/onmethod/leveled/NewAfter.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "DUP\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LDC \"java.util.HashMap\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$NewAfter$args (Ljava/lang/Object;Ljava/util/Map;Ljava/lang/String;)V\n" + "ASTORE 2\n" + "L2\n" + "LINENUMBER 89 L2\n" + "L3\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L3 0\n" + "LOCALVARIABLE m Ljava/util/Map; L2 L3 2\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 3" ); } @Test public void methodEntrySyncEntry() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/SyncEntry"); checkTransformation( "TRYCATCHBLOCK L4 L5 L5 java/lang/Throwable\n" + "DUP\n" + "ASTORE 2\n" + "ALOAD 0\n" + "LDC \"sync\"\n" + "ALOAD 2\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$SyncEntry$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V\n" + "L6\n" + "LINENUMBER 110 L6\n" + "GOTO L7\n" + "ASTORE 3\n" + "ALOAD 3\n" + "L7\n" + "LINENUMBER 111 L7\n" + "L5\n" + "ATHROW\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L4 L5 0\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 4" ); resetClassLoader(); transform("onmethod/leveled/SyncEntry"); checkTransformation( "TRYCATCHBLOCK L4 L5 L5 java/lang/Throwable\n" + "GETSTATIC traces/onmethod/leveled/SyncEntry.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L6\n" + "DUP\n" + "ASTORE 2\n" + "ALOAD 0\n" + "LDC \"sync\"\n" + "ALOAD 2\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$SyncEntry$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V\n" + "L6\n" + "L7\n" + "LINENUMBER 110 L7\n" + "GOTO L8\n" + "ASTORE 3\n" + "ALOAD 3\n" + "L8\n" + "LINENUMBER 111 L8\n" + "L5\n" + "ATHROW\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L4 L5 0\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 4" ); } @Test public void methodEntrySyncMEntry() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/SyncMEntry"); checkTransformation( "TRYCATCHBLOCK L4 L5 L5 java/lang/Throwable\n" + "DUP\n" + "ASTORE 2\n" + "ALOAD 0\n" + "LDC \"syncM\"\n" + "ALOAD 2\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$SyncMEntry$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V\n" + "L6\n" + "LINENUMBER 149 L6\n" + "GOTO L7\n" + "ASTORE 3\n" + "ALOAD 3\n" + "ATHROW\n" + "L7\n" + "LINENUMBER 150 L7\n" + "RETURN\n" + "L5\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L4 L5 0\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 4\n" ); resetClassLoader(); transform("onmethod/leveled/SyncMEntry"); checkTransformation( "TRYCATCHBLOCK L4 L5 L5 java/lang/Throwable\n" + "GETSTATIC traces/onmethod/leveled/SyncMEntry.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L6\n" + "DUP\n" + "ASTORE 2\n" + "ALOAD 0\n" + "LDC \"syncM\"\n" + "ALOAD 2\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$SyncMEntry$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V\n" + "L6\n" + "L7\n" + "LINENUMBER 149 L7\n" + "GOTO L8\n" + "ASTORE 3\n" + "ALOAD 3\n" + "ATHROW\n" + "L8\n" + "LINENUMBER 150 L8\n" + "RETURN\n" + "L5\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L4 L5 0\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 4" ); } @Test public void methodEntrySyncExit() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/SyncExit"); checkTransformation( "TRYCATCHBLOCK L4 L5 L5 java/lang/Throwable\n" + "L6\n" + "LINENUMBER 110 L6\n" + "DUP\n" + "ASTORE 2\n" + "ALOAD 0\n" + "LDC \"resources.OnMethodTest\"\n" + "ALOAD 2\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$SyncExit$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V\n" + "GOTO L7\n" + "ASTORE 3\n" + "DUP\n" + "ASTORE 4\n" + "ALOAD 0\n" + "LDC \"resources.OnMethodTest\"\n" + "ALOAD 4\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$SyncExit$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V\n" + "ALOAD 3\n" + "L7\n" + "LINENUMBER 111 L7\n" + "L5\n" + "ATHROW\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L4 L5 0\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 5" ); resetClassLoader(); transform("onmethod/leveled/SyncExit"); checkTransformation( "TRYCATCHBLOCK L4 L5 L5 java/lang/Throwable\n" + "L6\n" + "LINENUMBER 110 L6\n" + "GETSTATIC traces/onmethod/leveled/SyncExit.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L7\n" + "DUP\n" + "ASTORE 2\n" + "ALOAD 0\n" + "LDC \"resources.OnMethodTest\"\n" + "ALOAD 2\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$SyncExit$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V\n" + "L7\n" + "GOTO L8\n" + "ASTORE 3\n" + "GETSTATIC traces/onmethod/leveled/SyncExit.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L9\n" + "DUP\n" + "ASTORE 4\n" + "ALOAD 0\n" + "LDC \"resources.OnMethodTest\"\n" + "ALOAD 4\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$SyncExit$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V\n" + "L9\n" + "ALOAD 3\n" + "L8\n" + "LINENUMBER 111 L8\n" + "L5\n" + "ATHROW\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L4 L5 0\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 5" ); } @Test public void methodEntrySyncMExit() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/SyncMExit"); checkTransformation( "TRYCATCHBLOCK L4 L5 L5 java/lang/Throwable\n" + "L6\n" + "LINENUMBER 149 L6\n" + "DUP\n" + "ASTORE 2\n" + "ALOAD 0\n" + "LDC \"resources.OnMethodTest\"\n" + "ALOAD 2\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$SyncMExit$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V\n" + "GOTO L7\n" + "ASTORE 3\n" + "DUP\n" + "ASTORE 4\n" + "ALOAD 0\n" + "LDC \"resources.OnMethodTest\"\n" + "ALOAD 4\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$SyncMExit$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V\n" + "ALOAD 3\n" + "ATHROW\n" + "L7\n" + "LINENUMBER 150 L7\n" + "RETURN\n" + "L5\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L4 L5 0\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 5" ); resetClassLoader(); transform("onmethod/leveled/SyncMExit"); checkTransformation( "TRYCATCHBLOCK L4 L5 L5 java/lang/Throwable\n" + "L6\n" + "LINENUMBER 149 L6\n" + "GETSTATIC traces/onmethod/leveled/SyncMExit.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L7\n" + "DUP\n" + "ASTORE 2\n" + "ALOAD 0\n" + "LDC \"resources.OnMethodTest\"\n" + "ALOAD 2\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$SyncMExit$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V\n" + "L7\n" + "GOTO L8\n" + "ASTORE 3\n" + "GETSTATIC traces/onmethod/leveled/SyncMExit.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L9\n" + "DUP\n" + "ASTORE 4\n" + "ALOAD 0\n" + "LDC \"resources.OnMethodTest\"\n" + "ALOAD 4\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$SyncMExit$args (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V\n" + "L9\n" + "ALOAD 3\n" + "ATHROW\n" + "L8\n" + "LINENUMBER 150 L8\n" + "RETURN\n" + "L5\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L4 L5 0\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 5" ); } @Test public void methodEntryNewArrayIntBefore() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/NewArrayIntBefore"); checkTransformation("ALOAD 0\nLDC \"int\"\nICONST_1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$NewArrayIntBefore$args (Ljava/lang/Object;Ljava/lang/String;I)V"); resetClassLoader(); transform("onmethod/leveled/NewArrayIntBefore"); checkTransformation( "GETSTATIC traces/onmethod/leveled/NewArrayIntBefore.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "ALOAD 0\n" + "LDC \"int\"\n" + "ICONST_1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$NewArrayIntBefore$args (Ljava/lang/Object;Ljava/lang/String;I)V\n" + "L1\n" + "L2\n" + "LINENUMBER 93 L2\n" + "ICONST_1\n" + "GETSTATIC traces/onmethod/leveled/NewArrayIntBefore.$btrace$$level : I\n" + "IF_ICMPLT L3\n" + "ALOAD 0\n" + "LDC \"int\"\n" + "ICONST_2\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$NewArrayIntBefore$args (Ljava/lang/Object;Ljava/lang/String;I)V\n" + "L3\n" + "L4\n" + "LINENUMBER 94 L4\n" + "L5\n" + "LINENUMBER 95 L5\n" + "L6\n" + "LINENUMBER 96 L6\n" + "L7\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L7 0\n" + "LOCALVARIABLE a [I L2 L7 1\n" + "LOCALVARIABLE b [[I L4 L7 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L5 L7 3\n" + "LOCALVARIABLE d [[Ljava/lang/String; L6 L7 4\n" + "MAXSTACK = 5" ); } @Test public void methodEntryNewArrayStringBefore() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/NewArrayStringBefore"); checkTransformation("ALOAD 0\nLDC \"java.lang.String\"\nICONST_1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$NewArrayStringBefore$args (Ljava/lang/Object;Ljava/lang/String;I)V"); resetClassLoader(); transform("onmethod/leveled/NewArrayStringBefore"); checkTransformation( "GETSTATIC traces/onmethod/leveled/NewArrayStringBefore.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L3\n" + "ALOAD 0\n" + "LDC \"java.lang.String\"\n" + "ICONST_1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$NewArrayStringBefore$args (Ljava/lang/Object;Ljava/lang/String;I)V\n" + "L3\n" + "L4\n" + "LINENUMBER 95 L4\n" + "ICONST_1\n" + "GETSTATIC traces/onmethod/leveled/NewArrayStringBefore.$btrace$$level : I\n" + "IF_ICMPLT L5\n" + "ALOAD 0\n" + "LDC \"java.lang.String\"\n" + "ICONST_2\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$NewArrayStringBefore$args (Ljava/lang/Object;Ljava/lang/String;I)V\n" + "L5\n" + "L6\n" + "LINENUMBER 96 L6\n" + "L7\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L7 0\n" + "LOCALVARIABLE a [I L1 L7 1\n" + "LOCALVARIABLE b [[I L2 L7 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L4 L7 3\n" + "LOCALVARIABLE d [[Ljava/lang/String; L6 L7 4\n" + "MAXSTACK = 5" ); } @Test public void methodEntryNewArrayIntAfter() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/NewArrayIntAfter"); checkTransformation("DUP\nALOAD 0\nALOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$NewArrayIntAfter$args (Ljava/lang/Object;[I)V"); resetClassLoader(); transform("onmethod/leveled/NewArrayIntAfter"); checkTransformation( "GETSTATIC traces/onmethod/leveled/NewArrayIntAfter.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "DUP\n" + "ALOAD 0\n" + "ALOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$NewArrayIntAfter$args (Ljava/lang/Object;[I)V\n" + "ASTORE 2\n" + "L2\n" + "LINENUMBER 93 L2\n" + "ASTORE 3\n" + "L3\n" + "LINENUMBER 94 L3\n" + "ASTORE 4\n" + "L4\n" + "LINENUMBER 95 L4\n" + "ASTORE 5\n" + "L5\n" + "LINENUMBER 96 L5\n" + "L6\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L6 0\n" + "LOCALVARIABLE a [I L2 L6 2\n" + "LOCALVARIABLE b [[I L3 L6 3\n" + "LOCALVARIABLE c [Ljava/lang/String; L4 L6 4\n" + "LOCALVARIABLE d [[Ljava/lang/String; L5 L6 5\n" + "MAXSTACK = 3\n" + "MAXLOCALS = 6" ); } @Test public void methodEntryNewArrayStringAfter() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/NewArrayStringAfter"); checkTransformation("DUP\nALOAD 0\nALOAD 3\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$NewArrayStringAfter$args (Ljava/lang/Object;[Ljava/lang/String;)V"); resetClassLoader(); transform("onmethod/leveled/NewArrayStringAfter"); checkTransformation( "GETSTATIC traces/onmethod/leveled/NewArrayStringAfter.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L3\n" + "DUP\n" + "ALOAD 0\n" + "ALOAD 3\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$NewArrayStringAfter$args (Ljava/lang/Object;[Ljava/lang/String;)V\n" + "ASTORE 4\n" + "L4\n" + "LINENUMBER 95 L4\n" + "ASTORE 5\n" + "L5\n" + "LINENUMBER 96 L5\n" + "L6\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L6 0\n" + "LOCALVARIABLE a [I L1 L6 1\n" + "LOCALVARIABLE b [[I L2 L6 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L4 L6 4\n" + "LOCALVARIABLE d [[Ljava/lang/String; L5 L6 5\n" + "MAXSTACK = 3\n" + "MAXLOCALS = 6" ); } @Test public void methodEntryArrayGetBefore() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArrayGetBefore"); checkTransformation( "DUP2\n" + "ISTORE 3\n" + "ASTORE 4\n" + "ALOAD 0\n" + "ALOAD 4\n" + "ILOAD 3\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArrayGetBefore$args (Ljava/lang/Object;[II)V\n" + "ISTORE 5\n" + "LOCALVARIABLE b I L2 L4 5\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 6" ); resetClassLoader(); transform("onmethod/leveled/ArrayGetBefore"); checkTransformation( "DUP2\n" + "ASTORE 4\n" + "GETSTATIC traces/onmethod/leveled/ArrayGetBefore.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L2\n" + "ALOAD 0\n" + "ALOAD 4\n" + "ILOAD 3\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArrayGetBefore$args (Ljava/lang/Object;[II)V\n" + "IALOAD\n" + "ISTORE 5\n" + "L3\n" + "LINENUMBER 80 L3\n" + "L4\n" + "LINENUMBER 81 L4\n" + "L5\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L5 0\n" + "LOCALVARIABLE a I L0 L5 1\n" + "LOCALVARIABLE arr [I L1 L5 2\n" + "LOCALVARIABLE b I L3 L5 5\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 6" ); } @Test public void methodEntryArrayGetAfter() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArrayGetAfter"); checkTransformation( "DUP2\n" + "ISTORE 3\n" + "ASTORE 4\n" + "DUP\n" + "ISTORE 5\n" + "ALOAD 0\n" + "ILOAD 5\n" + "ALOAD 4\n" + "ILOAD 3\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArrayGetAfter$args (Ljava/lang/Object;I[II)V\n" + "ISTORE 6\n" + "LOCALVARIABLE b I L2 L4 6\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 7" ); resetClassLoader(); transform("onmethod/leveled/ArrayGetAfter"); checkTransformation( "DUP2\n" + "ASTORE 4\n" + "GETSTATIC traces/onmethod/leveled/ArrayGetAfter.$btrace$$level : I\n" + "ICONST_1\n" + "ISUB\n" + "DUP\n" + "ISTORE 5\n" + "IFLT L2\n" + "IALOAD\n" + "ILOAD 5\n" + "IFLT L3\n" + "DUP\n" + "ISTORE 6\n" + "ALOAD 0\n" + "ILOAD 6\n" + "ALOAD 4\n" + "ILOAD 3\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArrayGetAfter$args (Ljava/lang/Object;I[II)V\n" + "L3\n" + "ISTORE 7\n" + "L4\n" + "LINENUMBER 80 L4\n" + "L5\n" + "LINENUMBER 81 L5\n" + "L6\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L6 0\n" + "LOCALVARIABLE a I L0 L6 1\n" + "LOCALVARIABLE arr [I L1 L6 2\n" + "LOCALVARIABLE b I L4 L6 7\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 8" ); } @Test public void methodEntryArraySetBefore() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArraySetBefore"); checkTransformation( "ISTORE 4\n" + "DUP2\n" + "ISTORE 5\n" + "ASTORE 6\n" + "ILOAD 4\n" + "ALOAD 0\n" + "ALOAD 6\n" + "ILOAD 5\n" + "ILOAD 4\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArraySetBefore$args (Ljava/lang/Object;[III)V\n" + "MAXSTACK = 7\n" + "MAXLOCALS = 7" ); resetClassLoader(); transform("onmethod/leveled/ArraySetBefore"); checkTransformation( "ISTORE 4\n" + "DUP2\n" + "ISTORE 5\n" + "ASTORE 6\n" + "ILOAD 4\n" + "GETSTATIC traces/onmethod/leveled/ArraySetBefore.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L3\n" + "ALOAD 0\n" + "ALOAD 6\n" + "ILOAD 5\n" + "ILOAD 4\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArraySetBefore$args (Ljava/lang/Object;[III)V\n" + "L3\n" + "L4\n" + "LINENUMBER 81 L4\n" + "L5\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L5 0\n" + "LOCALVARIABLE a I L0 L5 1\n" + "LOCALVARIABLE arr [I L1 L5 2\n" + "LOCALVARIABLE b I L2 L5 3\n" + "MAXSTACK = 7\n" + "MAXLOCALS = 7" ); } @Test public void methodEntryArraySetAfter() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArraySetAfter"); checkTransformation( "ISTORE 4\n" + "DUP2\n" + "ISTORE 5\n" + "ASTORE 6\n" + "ILOAD 4\n" + "ALOAD 0\n" + "ALOAD 6\n" + "ILOAD 5\n" + "ILOAD 4\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArraySetAfter$args (Ljava/lang/Object;[III)V\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 7" ); resetClassLoader(); transform("onmethod/leveled/ArraySetAfter"); checkTransformation( "ISTORE 4\n" + "DUP2\n" + "ISTORE 5\n" + "ASTORE 6\n" + "ILOAD 4\n" + "GETSTATIC traces/onmethod/leveled/ArraySetAfter.$btrace$$level : I\n" + "ICONST_1\n" + "ISUB\n" + "DUP\n" + "ISTORE 7\n" + "IFLT L3\n" + "L3\n" + "ILOAD 7\n" + "IFLT L4\n" + "ALOAD 0\n" + "ALOAD 6\n" + "ILOAD 5\n" + "ILOAD 4\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArraySetAfter$args (Ljava/lang/Object;[III)V\n" + "L4\n" + "LINENUMBER 81 L4\n" + "L5\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L5 0\n" + "LOCALVARIABLE a I L0 L5 1\n" + "LOCALVARIABLE arr [I L1 L5 2\n" + "LOCALVARIABLE b I L2 L5 3\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 8" ); } @Test public void methodEntryArrayGetBeforeAny() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArrayGetBeforeAny"); checkTransformation( "DUP2\n" + "ISTORE 3\n" + "ASTORE 4\n" + "ALOAD 0\n" + "ALOAD 4\n" + "ILOAD 3\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArrayGetBeforeAny$args (Ljava/lang/Object;Ljava/lang/Object;I)V\n" + "ISTORE 5\n" + "LOCALVARIABLE b I L2 L4 5\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 6" ); resetClassLoader(); transform("onmethod/leveled/ArrayGetBeforeAny"); checkTransformation( "DUP2\n" + "ASTORE 4\n" + "GETSTATIC traces/onmethod/leveled/ArrayGetBeforeAny.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L2\n" + "ALOAD 0\n" + "ALOAD 4\n" + "ILOAD 3\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArrayGetBeforeAny$args (Ljava/lang/Object;Ljava/lang/Object;I)V\n" + "IALOAD\n" + "ISTORE 5\n" + "L3\n" + "LINENUMBER 80 L3\n" + "L4\n" + "LINENUMBER 81 L4\n" + "L5\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L5 0\n" + "LOCALVARIABLE a I L0 L5 1\n" + "LOCALVARIABLE arr [I L1 L5 2\n" + "LOCALVARIABLE b I L3 L5 5\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 6" ); } @Test public void methodEntryArrayGetAfterAny() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArrayGetAfterAny"); checkTransformation( "DUP2\n" + "ISTORE 3\n" + "ASTORE 4\n" + "DUP\n" + "ISTORE 5\n" + "ALOAD 0\n" + "ILOAD 5\n" + "INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;\n" + "ALOAD 4\n" + "ILOAD 3\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArrayGetAfterAny$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V\n" + "ISTORE 6\n" + "LOCALVARIABLE b I L2 L4 6\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 7" ); resetClassLoader(); transform("onmethod/leveled/ArrayGetAfterAny"); checkTransformation( "DUP2\n" + "ASTORE 4\n" + "GETSTATIC traces/onmethod/leveled/ArrayGetAfterAny.$btrace$$level : I\n" + "ICONST_1\n" + "ISUB\n" + "DUP\n" + "ISTORE 5\n" + "IFLT L2\n" + "IALOAD\n" + "ILOAD 5\n" + "IFLT L3\n" + "DUP\n" + "ISTORE 6\n" + "ALOAD 0\n" + "ILOAD 6\n" + "INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;\n" + "ALOAD 4\n" + "ILOAD 3\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArrayGetAfterAny$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V\n" + "L3\n" + "ISTORE 7\n" + "L4\n" + "LINENUMBER 80 L4\n" + "L5\n" + "LINENUMBER 81 L5\n" + "L6\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L6 0\n" + "LOCALVARIABLE a I L0 L6 1\n" + "LOCALVARIABLE arr [I L1 L6 2\n" + "LOCALVARIABLE b I L4 L6 7\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 8" ); } @Test public void methodEntryArraySetBeforeAny() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArraySetBeforeAny"); checkTransformation( "ISTORE 4\n" + "DUP2\n" + "ISTORE 5\n" + "ASTORE 6\n" + "ILOAD 4\n" + "ALOAD 0\n" + "ALOAD 6\n" + "ILOAD 5\n" + "ILOAD 4\n" + "INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArraySetBeforeAny$args (Ljava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;)V\n" + "MAXSTACK = 7\n" + "MAXLOCALS = 7" ); resetClassLoader(); transform("onmethod/leveled/ArraySetBeforeAny"); checkTransformation( "ISTORE 4\n" + "DUP2\n" + "ISTORE 5\n" + "ASTORE 6\n" + "ILOAD 4\n" + "GETSTATIC traces/onmethod/leveled/ArraySetBeforeAny.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L3\n" + "ALOAD 0\n" + "ALOAD 6\n" + "ILOAD 5\n" + "ILOAD 4\n" + "INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArraySetBeforeAny$args (Ljava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;)V\n" + "L3\n" + "L4\n" + "LINENUMBER 81 L4\n" + "L5\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L5 0\n" + "LOCALVARIABLE a I L0 L5 1\n" + "LOCALVARIABLE arr [I L1 L5 2\n" + "LOCALVARIABLE b I L2 L5 3\n" + "MAXSTACK = 7\n" + "MAXLOCALS = 7" ); } @Test public void methodEntryArraySetAfterAny() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArraySetAfterAny"); checkTransformation( "ISTORE 4\n" + "DUP2\n" + "ISTORE 5\n" + "ASTORE 6\n" + "ILOAD 4\n" + "ALOAD 0\n" + "ALOAD 6\n" + "ILOAD 5\n" + "ILOAD 4\n" + "INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArraySetAfterAny$args (Ljava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;)V\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 7" ); resetClassLoader(); transform("onmethod/leveled/ArraySetAfterAny"); checkTransformation( "ISTORE 4\n" + "DUP2\n" + "ISTORE 5\n" + "ASTORE 6\n" + "ILOAD 4\n" + "GETSTATIC traces/onmethod/leveled/ArraySetAfterAny.$btrace$$level : I\n" + "ICONST_1\n" + "ISUB\n" + "DUP\n" + "ISTORE 7\n" + "IFLT L3\n" + "L3\n" + "ILOAD 7\n" + "IFLT L4\n" + "ALOAD 0\n" + "ALOAD 6\n" + "ILOAD 5\n" + "ILOAD 4\n" + "INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArraySetAfterAny$args (Ljava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;)V\n" + "L4\n" + "LINENUMBER 81 L4\n" + "L5\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L5 0\n" + "LOCALVARIABLE a I L0 L5 1\n" + "LOCALVARIABLE arr [I L1 L5 2\n" + "LOCALVARIABLE b I L2 L5 3\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 8" ); } @Test public void methodEntryFieldStaticGetBefore() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/FieldGetBeforeStatic"); checkTransformation( "ALOAD 0\n" + "ACONST_NULL\n" + "LDC \"sField\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$FieldGetBeforeStatic$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;)V" ); resetClassLoader(); transform("onmethod/leveled/FieldGetBeforeStatic"); checkTransformation( "GETSTATIC traces/onmethod/leveled/FieldGetBeforeStatic.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "ALOAD 0\n" + "ACONST_NULL\n" + "LDC \"sField\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$FieldGetBeforeStatic$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;)V\n" + "L1\n" + "L2\n" + "LINENUMBER 144 L2\n" + "L3\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L3 0" ); } @Test public void methodEntryFieldGetBefore() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/FieldGetBefore"); checkTransformation("DUP\nASTORE 1\nALOAD 0\nALOAD 1\nLDC \"field\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$FieldGetBefore$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;)V"); resetClassLoader(); transform("onmethod/leveled/FieldGetBefore"); checkTransformation( "DUP\n" + "ASTORE 1\n" + "GETSTATIC traces/onmethod/leveled/FieldGetBefore.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LDC \"field\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$FieldGetBefore$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;)V\n" + "L1\n" + "L2\n" + "LINENUMBER 85 L2\n" + "L3\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L3 0\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 2" ); } @Test public void methodEntryFieldStaticGetAfter() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/FieldGetAfterStatic"); checkTransformation( "DUP2\n" + "LSTORE 1\n" + "ALOAD 0\n" + "ACONST_NULL\n" + "LDC \"static field long resources.OnMethodTest#sField\"\n" + "LLOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$FieldGetAfterStatic$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;J)V\n" + "MAXSTACK = 7\n" + "MAXLOCALS = 3" ); resetClassLoader(); transform("onmethod/leveled/FieldGetAfterStatic"); checkTransformation( "GETSTATIC traces/onmethod/leveled/FieldGetAfterStatic.$btrace$$level : I\n" + "ICONST_1\n" + "ISUB\n" + "DUP\n" + "ISTORE 1\n" + "IFLT L1\n" + "L1\n" + "ILOAD 1\n" + "IFLT L2\n" + "DUP2\n" + "LSTORE 2\n" + "ALOAD 0\n" + "ACONST_NULL\n" + "LDC \"static field long resources.OnMethodTest#sField\"\n" + "LLOAD 2\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$FieldGetAfterStatic$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;J)V\n" + "L2\n" + "L3\n" + "LINENUMBER 144 L3\n" + "L4\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L4 0\n" + "MAXSTACK = 7\n" + "MAXLOCALS = 4" ); } @Test public void methodEntryFieldGetAfter() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/FieldGetAfter"); checkTransformation( "DUP\n" + "ASTORE 1\n" + "DUP\n" + "ISTORE 2\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LDC \"field int resources.OnMethodTest#field\"\n" + "ILOAD 2\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$FieldGetAfter$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;I)V\n" + "MAXSTACK = 6\n" + "MAXLOCALS = 3" ); resetClassLoader(); transform("onmethod/leveled/FieldGetAfter"); checkTransformation( "DUP\n" + "ASTORE 1\n" + "GETSTATIC traces/onmethod/leveled/FieldGetAfter.$btrace$$level : I\n" + "ICONST_1\n" + "ISUB\n" + "DUP\n" + "ISTORE 2\n" + "IFLT L1\n" + "L1\n" + "ILOAD 2\n" + "IFLT L2\n" + "DUP\n" + "ISTORE 3\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LDC \"field int resources.OnMethodTest#field\"\n" + "ILOAD 3\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$FieldGetAfter$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;I)V\n" + "L2\n" + "L3\n" + "LINENUMBER 85 L3\n" + "L4\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L4 0\n" + "MAXSTACK = 6\n" + "MAXLOCALS = 4" ); } @Test public void methodEntryFieldStaticSetBefore() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/FieldSetBeforeStatic"); checkTransformation( "LSTORE 1\n" + "LLOAD 1\n" + "ALOAD 0\n" + "ACONST_NULL\n" + "LDC \"sField\"\n" + "LLOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$FieldSetBeforeStatic$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;J)V\n" + "MAXSTACK = 7\n" + "MAXLOCALS = 3" ); resetClassLoader(); transform("onmethod/leveled/FieldSetBeforeStatic"); checkTransformation( "LSTORE 1\n" + "LLOAD 1\n" + "GETSTATIC traces/onmethod/leveled/FieldSetBeforeStatic.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "ALOAD 0\n" + "ACONST_NULL\n" + "LDC \"sField\"\n" + "LLOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$FieldSetBeforeStatic$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;J)V\n" + "L1\n" + "L2\n" + "LINENUMBER 144 L2\n" + "L3\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L3 0\n" + "MAXSTACK = 7\n" + "MAXLOCALS = 3" ); } @Test public void methodEntryFieldSetBefore() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/FieldSetBefore"); checkTransformation( "ISTORE 1\n" + "DUP\n" + "ASTORE 2\n" + "ILOAD 1\n" + "ALOAD 0\n" + "ALOAD 2\n" + "LDC \"field\"\n" + "ILOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$FieldSetBefore$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;I)V\n" + "MAXSTACK = 6\n" + "MAXLOCALS = 3" ); resetClassLoader(); transform("onmethod/leveled/FieldSetBefore"); checkTransformation( "ISTORE 1\n" + "DUP\n" + "ASTORE 2\n" + "ILOAD 1\n" + "GETSTATIC traces/onmethod/leveled/FieldSetBefore.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "ALOAD 0\n" + "ALOAD 2\n" + "LDC \"field\"\n" + "ILOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$FieldSetBefore$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;I)V\n" + "L1\n" + "L2\n" + "LINENUMBER 85 L2\n" + "L3\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L3 0\n" + "MAXSTACK = 6\n" + "MAXLOCALS = 3" ); } @Test public void methodEntryFieldStaticSetAfter() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/FieldSetAfterStatic"); checkTransformation( "LSTORE 1\n" + "LLOAD 1\n" + "ALOAD 0\n" + "ACONST_NULL\n" + "LDC \"sField\"\n" + "LLOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$FieldSetAfterStatic$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;J)V\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 3" ); resetClassLoader(); transform("onmethod/leveled/FieldSetAfterStatic"); checkTransformation( "LSTORE 1\n" + "LLOAD 1\n" + "GETSTATIC traces/onmethod/leveled/FieldSetAfterStatic.$btrace$$level : I\n" + "ICONST_1\n" + "ISUB\n" + "DUP\n" + "ISTORE 3\n" + "IFLT L1\n" + "L1\n" + "ILOAD 3\n" + "IFLT L2\n" + "ALOAD 0\n" + "ACONST_NULL\n" + "LDC \"sField\"\n" + "LLOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$FieldSetAfterStatic$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;J)V\n" + "L2\n" + "LINENUMBER 144 L2\n" + "L3\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L3 0\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 4" ); } @Test public void methodEntryFieldSetAfter() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/FieldSetAfter"); checkTransformation("ISTORE 1\nDUP\nASTORE 2\nILOAD 1\nALOAD 0\nALOAD 2\nLDC \"field\"\nILOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$FieldSetAfter$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;I)V"); resetClassLoader(); transform("onmethod/leveled/FieldSetAfter"); checkTransformation("ISTORE 1\n" + "DUP\n" + "ASTORE 2\n" + "ILOAD 1\n" + "GETSTATIC traces/onmethod/leveled/FieldSetAfter.$btrace$$level : I\n" + "ICONST_1\n" + "ISUB\n" + "DUP\n" + "ISTORE 3\n" + "IFLT L1\n" + "L1\n" + "ILOAD 3\n" + "IFLT L2\n" + "ALOAD 0\n" + "ALOAD 2\n" + "LDC \"field\"\n" + "ILOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$FieldSetAfter$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;I)V\n" + "L2\n" + "LINENUMBER 85 L2\n" + "L3\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L3 0\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 4" ); } @Test public void methodEntryArgsNoSelf() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsNoSelf"); checkTransformation( "LDC \"public long resources.OnMethodTest#args(java.lang.String, long, java.lang.String[], int[])\"\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsNoSelf$argsNoSelf (Ljava/lang/String;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 6\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$onmethod$ArgsNoSelf$argsNoSelf(Ljava/lang/String;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "@Lcom/sun/btrace/annotations/OnMethod;(clazz=\"/.*\\\\.OnMethodTest/\", method=\"args\")\n" + "@Lcom/sun/btrace/annotations/ProbeMethodName;(fqn=true) // parameter 0\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "GETSTATIC traces/onmethod/ArgsNoSelf.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L0\n" + "RETURN\n" + "L0\n" + "LDC \"args no self\"\n" + "INVOKESTATIC com/sun/btrace/BTraceUtils.println (Ljava/lang/Object;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "MAXSTACK = 1\n" + "MAXLOCALS = 6" ); resetClassLoader(); transform("onmethod/leveled/ArgsNoSelf"); checkTransformation( "GETSTATIC traces/onmethod/leveled/ArgsNoSelf.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L0\n" + "LDC \"public long resources.OnMethodTest#args(java.lang.String, long, java.lang.String[], int[])\"\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsNoSelf$argsNoSelf (Ljava/lang/String;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 6\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$onmethod$leveled$ArgsNoSelf$argsNoSelf(Ljava/lang/String;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "@Lcom/sun/btrace/annotations/OnMethod;(clazz=\"/.*\\\\.OnMethodTest/\", method=\"args\", enableAt=@Lcom/sun/btrace/annotations/Level;(value=\">=1\"))\n" + "@Lcom/sun/btrace/annotations/ProbeMethodName;(fqn=true) // parameter 0\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "GETSTATIC traces/onmethod/leveled/ArgsNoSelf.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L0\n" + "RETURN\n" + "L0\n" + "LDC \"args no self\"\n" + "INVOKESTATIC com/sun/btrace/BTraceUtils.println (Ljava/lang/Object;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "MAXSTACK = 1\n" + "MAXLOCALS = 6" ); } @Test public void methodEntryNoArgs() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/NoArgs"); checkTransformation("ALOAD 0\nINVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$NoArgs$argsEmpty (Ljava/lang/Object;)V"); resetClassLoader(); transform("onmethod/leveled/NoArgs"); checkTransformation( "GETSTATIC traces/onmethod/leveled/NoArgs.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L0\n" + "ALOAD 0\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$NoArgs$argsEmpty (Ljava/lang/Object;)V" ); } @Test public void methodEntryArgs() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/Args"); checkTransformation( "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$Args$args (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 6" ); resetClassLoader(); transform("onmethod/leveled/Args"); checkTransformation("GETSTATIC traces/onmethod/leveled/Args.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L0\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$Args$args (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 6" ); } @Test public void methodEntryArgsReload() throws Exception { enableUniqueClientClassNameCheck(); loadTargetClass("OnMethodTest"); loadTrace("onmethod/Args"); transform("onmethod/Args"); checkTransformation( "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$Args$1$args (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 6" ); resetClassLoader(); loadTrace("onmethod/leveled/Args"); transform("onmethod/leveled/Args"); checkTransformation("GETSTATIC traces/onmethod/leveled/Args$1.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L0\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$Args$1$args (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 6" ); } @Test public void methodEntryArgsShared() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsShared"); checkTransformation("ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsShared$args (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 6\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$onmethod$ArgsShared$args(Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "@Lcom/sun/btrace/annotations/OnMethod;(clazz=\"/.*\\\\.OnMethodTest/\", method=\"args\")\n" + "@Lcom/sun/btrace/annotations/Self;() // parameter 0\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "GETSTATIC traces/onmethod/ArgsShared.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L0\n" + "RETURN\n" + "L0\n" + "NEW java/lang/StringBuilder\n" + "DUP\n" + "INVOKESPECIAL java/lang/StringBuilder.<init> ()V\n" + "LDC \"this = \"\n" + "INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;\n" + "ALOAD 0\n" + "INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/Object;)Ljava/lang/StringBuilder;\n" + "INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String;\n" + "INVOKESTATIC com/sun/btrace/BTraceUtils.println (Ljava/lang/Object;)V\n" + "LDC \"args\"\n" + "INVOKESTATIC com/sun/btrace/BTraceUtils.println (Ljava/lang/Object;)V\n" + "GETSTATIC traces/onmethod/ArgsShared.cntr : Ljava/lang/ThreadLocal;\n" + "INVOKEVIRTUAL java/lang/ThreadLocal.get ()Ljava/lang/Object;\n" + "CHECKCAST java/lang/Integer\n" + "INVOKEVIRTUAL java/lang/Integer.intValue ()I\n" + "INVOKESTATIC com/sun/btrace/BTraceUtils.str (I)Ljava/lang/String;\n" + "INVOKESTATIC com/sun/btrace/BTraceUtils.println (Ljava/lang/Object;)V\n" + "GETSTATIC traces/onmethod/ArgsShared.cntr : Ljava/lang/ThreadLocal;\n" + "INVOKEVIRTUAL java/lang/ThreadLocal.get ()Ljava/lang/Object;\n" + "CHECKCAST java/lang/Integer\n" + "INVOKEVIRTUAL java/lang/Integer.intValue ()I\n" + "ICONST_1\n" + "IADD\n" + "INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;\n" + "GETSTATIC traces/onmethod/ArgsShared.cntr : Ljava/lang/ThreadLocal;\n" + "SWAP\n" + "INVOKEVIRTUAL java/lang/ThreadLocal.set (Ljava/lang/Object;)V\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsShared$dumpExported ()V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "MAXSTACK = 2\n" + "MAXLOCALS = 6\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$onmethod$ArgsShared$dumpExported()V\n" + "LDC \"btrace.traces/onmethod/ArgsShared.exported\"\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.getPerfLong (Ljava/lang/String;)J\n" + "INVOKESTATIC com/sun/btrace/BTraceUtils.str (J)Ljava/lang/String;\n" + "INVOKESTATIC com/sun/btrace/BTraceUtils.println (Ljava/lang/Object;)V\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsShared$incExported ()V\n" + "RETURN\n" + "MAXSTACK = 2\n" + "MAXLOCALS = 0\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$onmethod$ArgsShared$incExported()V\n" + "LDC \"btrace.traces/onmethod/ArgsShared.exported\"\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.getPerfLong (Ljava/lang/String;)J\n" + "LCONST_1\n" + "LADD\n" + "LDC \"btrace.traces/onmethod/ArgsShared.exported\"\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.putPerfLong (JLjava/lang/String;)V\n" + "RETURN\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 0" ); resetClassLoader(); transform("onmethod/leveled/ArgsShared"); checkTransformation( "GETSTATIC traces/onmethod/leveled/ArgsShared.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L0\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsShared$args (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 6\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$onmethod$leveled$ArgsShared$args(Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "@Lcom/sun/btrace/annotations/OnMethod;(clazz=\"/.*\\\\.OnMethodTest/\", method=\"args\", enableAt=@Lcom/sun/btrace/annotations/Level;(value=\">=1\"))\n" + "@Lcom/sun/btrace/annotations/Self;() // parameter 0\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "GETSTATIC traces/onmethod/leveled/ArgsShared.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L0\n" + "RETURN\n" + "L0\n" + "NEW java/lang/StringBuilder\n" + "DUP\n" + "INVOKESPECIAL java/lang/StringBuilder.<init> ()V\n" + "LDC \"this = \"\n" + "INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;\n" + "ALOAD 0\n" + "INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/Object;)Ljava/lang/StringBuilder;\n" + "INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String;\n" + "INVOKESTATIC com/sun/btrace/BTraceUtils.println (Ljava/lang/Object;)V\n" + "LDC \"args\"\n" + "INVOKESTATIC com/sun/btrace/BTraceUtils.println (Ljava/lang/Object;)V\n" + "GETSTATIC traces/onmethod/leveled/ArgsShared.cntr : Ljava/lang/ThreadLocal;\n" + "INVOKEVIRTUAL java/lang/ThreadLocal.get ()Ljava/lang/Object;\n" + "CHECKCAST java/lang/Integer\n" + "INVOKEVIRTUAL java/lang/Integer.intValue ()I\n" + "INVOKESTATIC com/sun/btrace/BTraceUtils.str (I)Ljava/lang/String;\n" + "INVOKESTATIC com/sun/btrace/BTraceUtils.println (Ljava/lang/Object;)V\n" + "GETSTATIC traces/onmethod/leveled/ArgsShared.cntr : Ljava/lang/ThreadLocal;\n" + "INVOKEVIRTUAL java/lang/ThreadLocal.get ()Ljava/lang/Object;\n" + "CHECKCAST java/lang/Integer\n" + "INVOKEVIRTUAL java/lang/Integer.intValue ()I\n" + "ICONST_1\n" + "IADD\n" + "INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;\n" + "GETSTATIC traces/onmethod/leveled/ArgsShared.cntr : Ljava/lang/ThreadLocal;\n" + "SWAP\n" + "INVOKEVIRTUAL java/lang/ThreadLocal.set (Ljava/lang/Object;)V\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsShared$dumpExported ()V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "MAXSTACK = 2\n" + "MAXLOCALS = 6\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$onmethod$leveled$ArgsShared$dumpExported()V\n" + "LDC \"btrace.traces/onmethod/leveled/ArgsShared.exported\"\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.getPerfLong (Ljava/lang/String;)J\n" + "INVOKESTATIC com/sun/btrace/BTraceUtils.str (J)Ljava/lang/String;\n" + "INVOKESTATIC com/sun/btrace/BTraceUtils.println (Ljava/lang/Object;)V\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsShared$incExported ()V\n" + "RETURN\n" + "MAXSTACK = 2\n" + "MAXLOCALS = 0\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$onmethod$leveled$ArgsShared$incExported()V\n" + "LDC \"btrace.traces/onmethod/leveled/ArgsShared.exported\"\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.getPerfLong (Ljava/lang/String;)J\n" + "LCONST_1\n" + "LADD\n" + "LDC \"btrace.traces/onmethod/leveled/ArgsShared.exported\"\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.putPerfLong (JLjava/lang/String;)V\n" + "RETURN\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 0" ); } @Test public void methodEntryArgsSampledNoSampling() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsSampledNoSampling"); checkTransformation( "ICONST_1\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hit (I)Z\n" + "ISTORE 6\n" + "ILOAD 6\n" + "IFEQ L0\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsSampledNoSampling$argsSampled (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsSampledNoSampling$argsNoSampling (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "L1\n" + "LINENUMBER 44 L1\n" + "L2\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L1 L2 0\n" + "LOCALVARIABLE a Ljava/lang/String; L1 L2 1\n" + "LOCALVARIABLE b J L1 L2 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L1 L2 4\n" + "LOCALVARIABLE d [I L1 L2 5\n" + "MAXSTACK = 6\n" + "MAXLOCALS = 7" ); resetClassLoader(); transform("onmethod/leveled/ArgsSampledNoSampling"); checkTransformation( "ICONST_0\n" + "ISTORE 6\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 7\n" + "IFLE L0\n" + "ICONST_1\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hit (I)Z\n" + "ISTORE 6\n" + "ILOAD 7\n" + "IFLE L1\n" + "ILOAD 6\n" + "IFEQ L2\n" + "L1\n" + "GETSTATIC traces/onmethod/leveled/ArgsSampledNoSampling.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L2\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsSampledNoSampling$argsSampled (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "L2\n" + "GETSTATIC traces/onmethod/leveled/ArgsSampledNoSampling.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L3\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsSampledNoSampling$argsNoSampling (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "L3\n" + "LINENUMBER 44 L3\n" + "L4\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L3 L4 0\n" + "LOCALVARIABLE a Ljava/lang/String; L3 L4 1\n" + "LOCALVARIABLE b J L3 L4 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L3 L4 4\n" + "LOCALVARIABLE d [I L3 L4 5\n" + "MAXSTACK = 6\n" + "MAXLOCALS = 8" ); } @Test public void methodEntryArgsSampled() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsSampled"); checkTransformation("ICONST_1\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hit (I)Z\n" + "ISTORE 6\n" + "ILOAD 6\n" + "IFEQ L0\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsSampled$args (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 6\n" + "MAXLOCALS = 7" ); } @Test public void methodEntryArgsSampledLevel() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/leveled/ArgsSampled"); checkTransformation( "ICONST_0\n" + "ISTORE 6\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 7\n" + "IFLE L0\n" + "ICONST_1\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hit (I)Z\n" + "ISTORE 6\n" + "ILOAD 7\n" + "IFLE L1\n" + "ILOAD 6\n" + "IFEQ L2\n" + "L1\n" + "GETSTATIC traces/onmethod/leveled/ArgsSampled.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L2\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsSampled$args (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "L2\n" + "LINENUMBER 44 L2\n" + "L3\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L2 L3 0\n" + "LOCALVARIABLE a Ljava/lang/String; L2 L3 1\n" + "LOCALVARIABLE b J L2 L3 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L2 L3 4\n" + "LOCALVARIABLE d [I L2 L3 5\n" + "MAXSTACK = 6\n" + "MAXLOCALS = 8" ); } @Test public void methodEntryArgs2Sampled() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/Args2Sampled"); checkTransformation( "ICONST_1\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hit (I)Z\n" + "ISTORE 6\n" + "ILOAD 6\n" + "IFEQ L0\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$Args2Sampled$args2 (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "ILOAD 6\n" + "IFEQ L1\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$Args2Sampled$args (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "L1\n" + "LINENUMBER 44 L1\n" + "L2\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L1 L2 0\n" + "LOCALVARIABLE a Ljava/lang/String; L1 L2 1\n" + "LOCALVARIABLE b J L1 L2 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L1 L2 4\n" + "LOCALVARIABLE d [I L1 L2 5\n" + "MAXSTACK = 6\n" + "MAXLOCALS = 7" ); } @Test public void methodEntryArgs2SampledLevel() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/leveled/Args2Sampled"); checkTransformation( "ICONST_0\n" + "ISTORE 6\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 7\n" + "IFLE L0\n" + "ICONST_1\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hit (I)Z\n" + "ISTORE 6\n" + "ILOAD 7\n" + "IFLE L1\n" + "ILOAD 6\n" + "IFEQ L2\n" + "L1\n" + "GETSTATIC traces/onmethod/leveled/Args2Sampled.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L2\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$Args2Sampled$args2 (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "L2\n" + "ILOAD 7\n" + "IFLE L3\n" + "ILOAD 6\n" + "IFEQ L4\n" + "L3\n" + "GETSTATIC traces/onmethod/leveled/Args2Sampled.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L4\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$Args2Sampled$args (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "L4\n" + "LINENUMBER 44 L4\n" + "L5\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L4 L5 0\n" + "LOCALVARIABLE a Ljava/lang/String; L4 L5 1\n" + "LOCALVARIABLE b J L4 L5 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L4 L5 4\n" + "LOCALVARIABLE d [I L4 L5 5\n" + "MAXSTACK = 6\n" + "MAXLOCALS = 8" ); } @Test public void methodEntryArgsSampledAdaptive() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsSampledAdaptive"); checkTransformation("ICONST_1\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hitAdaptive (I)Z\n" + "ISTORE 6\n" + "ILOAD 6\n" + "IFEQ L0\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsSampledAdaptive$args (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "ILOAD 6\n" + "IFEQ L1\n" + "ICONST_1\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.updateEndTs (I)V\n" + "L1\n" + "L2" ); } @Test public void methodEntryArgsSampledAdaptiveLevel() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/leveled/ArgsSampledAdaptive"); checkTransformation( "ICONST_0\n" + "ISTORE 6\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 7\n" + "IFLE L0\n" + "ICONST_1\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hitAdaptive (I)Z\n" + "ISTORE 6\n" + "ILOAD 7\n" + "IFLE L1\n" + "ILOAD 6\n" + "IFEQ L2\n" + "L1\n" + "GETSTATIC traces/onmethod/leveled/ArgsSampledAdaptive.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L2\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsSampledAdaptive$args (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "L2\n" + "LINENUMBER 44 L2\n" + "ILOAD 6\n" + "IFEQ L3\n" + "ICONST_1\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.updateEndTs (I)V\n" + "L3\n" + "L4\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L2 L4 0\n" + "LOCALVARIABLE a Ljava/lang/String; L2 L4 1\n" + "LOCALVARIABLE b J L2 L4 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L2 L4 4\n" + "LOCALVARIABLE d [I L2 L4 5\n" + "MAXSTACK = 6\n" + "MAXLOCALS = 8" ); } @Test public void methodEntryArgsReturn() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsReturn"); checkTransformation("DUP2\nLSTORE 6\nALOAD 0\nLLOAD 6\nALOAD 1\nLLOAD 2\nALOAD 4\nALOAD 5\nINVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsReturn$args (Ljava/lang/Object;JLjava/lang/String;J[Ljava/lang/String;[I)V"); } @Test public void methodEntryArgsReturnVoid() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsReturnVoid"); checkTransformation( "ACONST_NULL\n" + "ASTORE 1\n" + "ALOAD 0\n" + "ALOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsReturnVoid$args (Ljava/lang/Object;Ljava/lang/Void;)V\n" + "MAXSTACK = 2\n" + "MAXLOCALS = 2\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$onmethod$ArgsReturnVoid$args(Ljava/lang/Object;Ljava/lang/Void;)V\n" + "@Lcom/sun/btrace/annotations/OnMethod;(clazz=\"/.*\\\\.OnMethodTest/\", method=\"noargs\", location=@Lcom/sun/btrace/annotations/Location;(value=Lcom/sun/btrace/annotations/Kind;.RETURN))\n" + "@Lcom/sun/btrace/annotations/Self;() // parameter 0\n" + "@Lcom/sun/btrace/annotations/Return;() // parameter 1\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "GETSTATIC traces/onmethod/ArgsReturnVoid.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L0\n" + "RETURN\n" + "L0\n" + "LDC \"args\"\n" + "INVOKESTATIC com/sun/btrace/BTraceUtils.println (Ljava/lang/Object;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "MAXSTACK = 1\n" + "MAXLOCALS = 2" ); } @Test public void methodEntryArgsReturnLevel() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/leveled/ArgsReturn"); checkTransformation( "GETSTATIC traces/onmethod/leveled/ArgsReturn.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "DUP2\n" + "LSTORE 6\n" + "ALOAD 0\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsReturn$args (Ljava/lang/Object;JLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "L1\n" + "L2\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L2 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L2 1\n" + "LOCALVARIABLE b J L0 L2 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L0 L2 4\n" + "LOCALVARIABLE d [I L0 L2 5\n" + "MAXSTACK = 10\n" + "MAXLOCALS = 8" ); } @Test public void methodEntryArgsReturnBoxed() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsReturnBoxed"); checkTransformation( "DUP2\n" + "LSTORE 6\n" + "ALOAD 0\n" + "LLOAD 6\n" + "INVOKESTATIC java/lang/Long.valueOf (J)Ljava/lang/Long;\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsReturnBoxed$args (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 9\n" + "MAXLOCALS = 8" ); } @Test public void methodEntryArgsReturnAugmented() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsReturnAugmented", true); checkTransformation("LSTORE 6\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "LLOAD 6\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsReturnAugmented$args (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[IJ)J\n" + "MAXSTACK = 8\n" + "MAXLOCALS = 8" ); } @Test public void methodEntryArgsReturnAugmentedLevel() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/leveled/ArgsReturnAugmented", true); checkTransformation( "GETSTATIC traces/onmethod/leveled/ArgsReturnAugmented.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "LSTORE 6\n" + "ALOAD 0\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "LLOAD 6\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsReturnAugmented$args (Ljava/lang/Object;Ljava/lang/String;J[Ljava/lang/String;[IJ)J\n" + "L1\n" + "L2\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L2 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L2 1\n" + "LOCALVARIABLE b J L0 L2 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L0 L2 4\n" + "LOCALVARIABLE d [I L0 L2 5\n" + "MAXSTACK = 8\n" + "MAXLOCALS = 8" ); } @Test public void methodEntryArgsReturnAugmented1() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsReturnAugmented1", true); checkTransformation("LSTORE 6\n" + "ALOAD 0\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsReturnAugmented1$args (Ljava/lang/Object;JLjava/lang/String;J[Ljava/lang/String;[I)J\n" + "MAXSTACK = 8\n" + "MAXLOCALS = 8" ); } @Test public void methodEntryArgsReturnAugmented1Level() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/leveled/ArgsReturnAugmented1", true); checkTransformation( "GETSTATIC traces/onmethod/leveled/ArgsReturnAugmented1.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "LSTORE 6\n" + "ALOAD 0\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsReturnAugmented1$args (Ljava/lang/Object;JLjava/lang/String;J[Ljava/lang/String;[I)J\n" + "L1\n" + "L2\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L2 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L2 1\n" + "LOCALVARIABLE b J L0 L2 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L0 L2 4\n" + "LOCALVARIABLE d [I L0 L2 5\n" + "MAXSTACK = 8\n" + "MAXLOCALS = 8" ); } @Test public void methodEntryArgsReturnSampled() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsReturnSampled"); checkTransformation( "ICONST_1\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hit (I)Z\n" + "ISTORE 6\n" + "ILOAD 6\n" + "IFEQ L1\n" + "DUP2\n" + "LSTORE 7\n" + "ALOAD 0\n" + "LLOAD 7\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsReturnSampled$args (Ljava/lang/Object;JLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "L1\n" + "L2" ); resetClassLoader(); transform("onmethod/leveled/ArgsReturnSampled"); checkTransformation( "ICONST_0\n" + "ISTORE 6\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 7\n" + "IFLE L0\n" + "ICONST_1\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hit (I)Z\n" + "ISTORE 6\n" + "ILOAD 7\n" + "IFLE L1\n" + "ILOAD 6\n" + "IFEQ L2\n" + "L1\n" + "GETSTATIC traces/onmethod/leveled/ArgsReturnSampled.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L2\n" + "DUP2\n" + "LSTORE 8\n" + "ALOAD 0\n" + "LLOAD 8\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsReturnSampled$args (Ljava/lang/Object;JLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "L2\n" + "L3\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L3 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L3 1\n" + "LOCALVARIABLE b J L0 L3 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L0 L3 4\n" + "LOCALVARIABLE d [I L0 L3 5\n" + "MAXSTACK = 10\n" + "MAXLOCALS = 10" ); } @Test public void methodEntryArgsDuration() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsDuration"); checkTransformation("LCONST_0\nLSTORE 6\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\nLSTORE 8\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\nLLOAD 8\n" + "LSUB\nLSTORE 6\nDUP2\nLSTORE 10\nALOAD 0\nLLOAD 10\nLLOAD 6\n" + "ALOAD 1\nLLOAD 2\nALOAD 4\nALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsDuration$args (Ljava/lang/Object;JJLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK"); } @Test public void methodEntryArgsDurationLevel() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/leveled/ArgsDuration"); checkTransformation( "LCONST_0\n" + "LSTORE 6\n" + "LCONST_0\n" + "LSTORE 8\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 10\n" + "IFLE L0\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LSTORE 8\n" + "ILOAD 10\n" + "IFLE L1\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 8\n" + "LSUB\n" + "LSTORE 6\n" + "L1\n" + "GETSTATIC traces/onmethod/leveled/ArgsDuration.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L2\n" + "DUP2\n" + "LSTORE 11\n" + "ALOAD 0\n" + "LLOAD 11\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsDuration$args (Ljava/lang/Object;JJLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "L2\n" + "L3\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L3 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L3 1\n" + "LOCALVARIABLE b J L0 L3 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L0 L3 4\n" + "LOCALVARIABLE d [I L0 L3 5\n" + "MAXSTACK = 12\n" + "MAXLOCALS = 13" ); } @Test public void methodEntryArgsDurationMultiReturn() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsDurationMultiReturn"); checkTransformation( "LCONST_0\n" + "LSTORE 6\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LSTORE 8\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 8\n" + "LSUB\n" + "LSTORE 6\n" + "DUP2\n" + "LSTORE 10\n" + "ALOAD 0\n" + "LLOAD 10\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsDurationMultiReturn$args (Ljava/lang/Object;JJLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 8\n" + "LSUB\n" + "LSTORE 6\n" + "DUP2\n" + "LSTORE 12\n" + "ALOAD 0\n" + "LLOAD 12\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsDurationMultiReturn$args (Ljava/lang/Object;JJLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 8\n" + "LSUB\n" + "LSTORE 6\n" + "DUP2\n" + "LSTORE 14\n" + "ALOAD 0\n" + "LLOAD 14\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsDurationMultiReturn$args (Ljava/lang/Object;JJLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 12\n" + "MAXLOCALS = 16"); } @Test public void methodEntryArgsDurationMultiReturnLevel() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/leveled/ArgsDurationMultiReturn"); checkTransformation( "LCONST_0\n" + "LSTORE 6\n" + "LCONST_0\n" + "LSTORE 8\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 10\n" + "IFLE L0\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LSTORE 8\n" + "ILOAD 10\n" + "IFLE L3\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 8\n" + "LSUB\n" + "LSTORE 6\n" + "L3\n" + "GETSTATIC traces/onmethod/leveled/ArgsDurationMultiReturn.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L4\n" + "DUP2\n" + "LSTORE 11\n" + "ALOAD 0\n" + "LLOAD 11\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsDurationMultiReturn$args (Ljava/lang/Object;JJLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "L4\n" + "IFLE L5\n" + "L6\n" + "LINENUMBER 128 L6\n" + "ILOAD 10\n" + "IFLE L7\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 8\n" + "LSUB\n" + "LSTORE 6\n" + "L7\n" + "GETSTATIC traces/onmethod/leveled/ArgsDurationMultiReturn.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L8\n" + "DUP2\n" + "LSTORE 13\n" + "ALOAD 0\n" + "LLOAD 13\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsDurationMultiReturn$args (Ljava/lang/Object;JJLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "L8\n" + "L5\n" + "LINENUMBER 132 L5\n" + "L9\n" + "LINENUMBER 133 L9\n" + "ILOAD 10\n" + "IFLE L10\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 8\n" + "LSUB\n" + "LSTORE 6\n" + "L10\n" + "GETSTATIC traces/onmethod/leveled/ArgsDurationMultiReturn.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L11\n" + "DUP2\n" + "LSTORE 15\n" + "ALOAD 0\n" + "LLOAD 15\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsDurationMultiReturn$args (Ljava/lang/Object;JJLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "L11\n" + "L12\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L12 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L12 1\n" + "LOCALVARIABLE b J L0 L12 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L0 L12 4\n" + "LOCALVARIABLE d [I L0 L12 5\n" + "MAXSTACK = 12\n" + "MAXLOCALS = 17" ); } @Test public void methodEntryArgsDurationSampled() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsDurationSampled"); checkTransformation( "LCONST_0\nLSTORE 6\nICONST_1\nINVOKESTATIC com/sun/btrace/instr/MethodTracker.hitTimed (I)J\n" + "DUP2\nLSTORE 8\nL2I\nISTORE 10\nILOAD 10\nIFEQ L1\n" + "ICONST_1\nINVOKESTATIC com/sun/btrace/instr/MethodTracker.getEndTs (I)J\n" + "LLOAD 8\nLSUB\nLSTORE 6\nDUP2\nLSTORE 11\n" + "ALOAD 0\nLLOAD 11\nLLOAD 6\nALOAD 1\nLLOAD 2\nALOAD 4\nALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsDurationSampled$args (Ljava/lang/Object;JJLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "L1\nL2\n" ); } @Test public void methodEntryArgsDurationSampledLevel() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/leveled/ArgsDurationSampled"); checkTransformation( "LCONST_0\n" + "LSTORE 6\n" + "LCONST_0\n" + "LSTORE 8\n" + "ICONST_0\n" + "ISTORE 10\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 11\n" + "IFLE L0\n" + "ICONST_1\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hitTimed (I)J\n" + "DUP2\n" + "LSTORE 8\n" + "L2I\n" + "ISTORE 10\n" + "ILOAD 11\n" + "IFLE L1\n" + "ILOAD 10\n" + "IFEQ L2\n" + "ICONST_1\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.getEndTs (I)J\n" + "LLOAD 8\n" + "LSUB\n" + "LSTORE 6\n" + "L1\n" + "GETSTATIC traces/onmethod/leveled/ArgsDurationSampled.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L2\n" + "DUP2\n" + "LSTORE 12\n" + "ALOAD 0\n" + "LLOAD 12\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsDurationSampled$args (Ljava/lang/Object;JJLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "L2\n" + "L3\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L3 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L3 1\n" + "LOCALVARIABLE b J L0 L3 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L0 L3 4\n" + "LOCALVARIABLE d [I L0 L3 5\n" + "MAXSTACK = 12\n" + "MAXLOCALS = 14" ); } @Test public void methodEntryArgsDurationBoxed() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsDurationBoxed"); checkTransformation(""); } @Test public void methodEntryArgsDurationConstructor() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsDurationConstructor"); checkTransformation("LCONST_0\nLSTORE 2\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\nLSTORE 4\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 4\nLSUB\nLSTORE 2\n" + "ALOAD 0\nLLOAD 2\nALOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsDurationConstructor$args (Ljava/lang/Object;JLjava/lang/String;)V\n" + "MAXSTACK"); } @Test public void methodEntryArgsDurationConstructorLevel() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/leveled/ArgsDurationConstructor"); checkTransformation( "LCONST_0\n" + "LSTORE 2\n" + "LCONST_0\n" + "LSTORE 4\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 6\n" + "IFLE L1\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LSTORE 4\n" + "L1\n" + "ILOAD 6\n" + "IFLE L2\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 4\n" + "LSUB\n" + "LSTORE 2\n" + "L2\n" + "GETSTATIC traces/onmethod/leveled/ArgsDurationConstructor.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L3\n" + "ALOAD 0\n" + "LLOAD 2\n" + "ALOAD 1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsDurationConstructor$args (Ljava/lang/Object;JLjava/lang/String;)V\n" + "L3\n" + "L4\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L4 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L4 1\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 7" ); } @Test // check for multiple timestamps public void methodEntryArgsDuration2() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsDuration2"); checkTransformation( "LCONST_0\n" + "LSTORE 6\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LSTORE 8\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 8\n" + "LSUB\n" + "LSTORE 6\n" + "DUP2\n" + "LSTORE 10\n" + "ALOAD 0\n" + "LLOAD 10\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsDuration2$args2 (Ljava/lang/Object;JJLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "DUP2\n" + "LSTORE 12\n" + "ALOAD 0\n" + "LLOAD 12\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsDuration2$args (Ljava/lang/Object;JJLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 12\n" + "MAXLOCALS = 14" ); resetClassLoader(); transform("onmethod/leveled/ArgsDuration2"); checkTransformation( "LCONST_0\n" + "LSTORE 6\n" + "LCONST_0\n" + "LSTORE 8\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 10\n" + "IFLE L0\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LSTORE 8\n" + "ILOAD 10\n" + "IFLE L1\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 8\n" + "LSUB\n" + "LSTORE 6\n" + "L1\n" + "GETSTATIC traces/onmethod/leveled/ArgsDuration2.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L2\n" + "DUP2\n" + "LSTORE 11\n" + "ALOAD 0\n" + "LLOAD 11\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsDuration2$args2 (Ljava/lang/Object;JJLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "L2\n" + "GETSTATIC traces/onmethod/leveled/ArgsDuration2.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L3\n" + "DUP2\n" + "LSTORE 13\n" + "ALOAD 0\n" + "LLOAD 13\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsDuration2$args (Ljava/lang/Object;JJLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "L3\n" + "L4\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L4 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L4 1\n" + "LOCALVARIABLE b J L0 L4 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L0 L4 4\n" + "LOCALVARIABLE d [I L0 L4 5\n" + "MAXSTACK = 12\n" + "MAXLOCALS = 15" ); } @Test // check for multiple timestamps public void methodEntryArgsDuration2Sampled() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsDuration2Sampled"); checkTransformation("LCONST_0\n" + "LSTORE 6\n" + "ICONST_1\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hitTimed (I)J\n" + "DUP2\n" + "LSTORE 8\n" + "L2I\n" + "ISTORE 10\n" + "ILOAD 10\n" + "IFEQ L1\n" + "ICONST_1\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.getEndTs (I)J\n" + "LLOAD 8\n" + "LSUB\n" + "LSTORE 6\n" + "DUP2\n" + "LSTORE 11\n" + "ALOAD 0\n" + "LLOAD 11\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsDuration2Sampled$args2 (Ljava/lang/Object;JJLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "L1\n" + "ILOAD 10\n" + "IFEQ L2\n" + "DUP2\n" + "LSTORE 13\n" + "ALOAD 0\n" + "LLOAD 13\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsDuration2Sampled$args (Ljava/lang/Object;JJLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "L2\n" + "L3\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L3 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L3 1\n" + "LOCALVARIABLE b J L0 L3 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L0 L3 4\n" + "LOCALVARIABLE d [I L0 L3 5\n" + "MAXSTACK = 12\n" + "MAXLOCALS = 15" ); resetClassLoader(); transform("onmethod/leveled/ArgsDuration2Sampled"); checkTransformation( "LCONST_0\n" + "LSTORE 6\n" + "ICONST_1\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hitTimed (I)J\n" + "DUP2\n" + "LSTORE 8\n" + "L2I\n" + "ISTORE 10\n" + "ILOAD 10\n" + "IFEQ L1\n" + "ICONST_1\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.getEndTs (I)J\n" + "LLOAD 8\n" + "LSUB\n" + "LSTORE 6\n" + "GETSTATIC traces/onmethod/leveled/ArgsDuration2Sampled.$btrace$$level : I\n" + "ICONST_5\n" + "IF_ICMPGT L1\n" + "DUP2\n" + "LSTORE 11\n" + "ALOAD 0\n" + "LLOAD 11\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsDuration2Sampled$args2 (Ljava/lang/Object;JJLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "L1\n" + "ILOAD 10\n" + "IFEQ L2\n" + "GETSTATIC traces/onmethod/leveled/ArgsDuration2Sampled.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L2\n" + "DUP2\n" + "LSTORE 13\n" + "ALOAD 0\n" + "LLOAD 13\n" + "LLOAD 6\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsDuration2Sampled$args (Ljava/lang/Object;JJLjava/lang/String;J[Ljava/lang/String;[I)V\n" + "L2\n" + "L3\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L3 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L3 1\n" + "LOCALVARIABLE b J L0 L3 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L0 L3 4\n" + "LOCALVARIABLE d [I L0 L3 5\n" + "MAXSTACK = 12\n" + "MAXLOCALS = 15" ); } @Test public void methodEntryArgsDurationErr() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsDurationErr"); checkTransformation("TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "LCONST_0\n" + "LSTORE 6\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LSTORE 8\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 8\n" + "LSUB\n" + "LSTORE 6\n" + "DUP\n" + "ASTORE 10\n" + "ALOAD 0\n" + "LLOAD 6\n" + "ALOAD 10\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsDurationErr$args (Ljava/lang/Object;JLjava/lang/Throwable;)V\n" + "ATHROW\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 11" ); resetClassLoader(); transform("onmethod/leveled/ArgsDurationErr"); checkTransformation( "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "LCONST_0\n" + "LSTORE 6\n" + "LCONST_0\n" + "LSTORE 8\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 10\n" + "IFLE L0\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LSTORE 8\n" + "ILOAD 10\n" + "IFLE L2\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 8\n" + "LSUB\n" + "LSTORE 6\n" + "L2\n" + "DUP\n" + "ASTORE 11\n" + "GETSTATIC traces/onmethod/leveled/ArgsDurationErr.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L3\n" + "ALOAD 0\n" + "LLOAD 6\n" + "ALOAD 11\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsDurationErr$args (Ljava/lang/Object;JLjava/lang/Throwable;)V\n" + "L3\n" + "ATHROW\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 12" ); } @Test public void methodEntryArgsDurationBoxedErr() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsDurationBoxedErr"); checkTransformation(""); } @Test public void methodEntryArgsDurationConstructorErr() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsDurationConstructorErr"); checkTransformation("TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "L2\n" + "LINENUMBER 39 L2\n" + "LCONST_0\n" + "LSTORE 1\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LSTORE 3\n" + "L0\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 3\n" + "LSUB\n" + "LSTORE 1\n" + "DUP\n" + "ASTORE 5\n" + "ALOAD 0\n" + "LLOAD 1\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsDurationConstructorErr$args (Ljava/lang/Object;JLjava/lang/Throwable;)V\n" + "ATHROW\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L2 L1 0\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 6\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "L2\n" + "LINENUMBER 40 L2\n" + "LCONST_0\n" + "LSTORE 2\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LSTORE 4\n" + "L0\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 4\n" + "LSUB\n" + "LSTORE 2\n" + "DUP\n" + "ASTORE 6\n" + "ALOAD 0\n" + "LLOAD 2\n" + "ALOAD 6\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsDurationConstructorErr$args (Ljava/lang/Object;JLjava/lang/Throwable;)V\n" + "ATHROW\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L2 L1 0\n" + "LOCALVARIABLE a Ljava/lang/String; L2 L1 1\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 7" ); resetClassLoader(); transform("onmethod/leveled/ArgsDurationConstructorErr"); checkTransformation( "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "L2\n" + "LINENUMBER 39 L2\n" + "LCONST_0\n" + "LSTORE 1\n" + "LCONST_0\n" + "LSTORE 3\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 5\n" + "IFLE L0\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LSTORE 3\n" + "L0\n" + "ILOAD 5\n" + "IFLE L3\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 3\n" + "LSUB\n" + "LSTORE 1\n" + "L3\n" + "DUP\n" + "ASTORE 6\n" + "GETSTATIC traces/onmethod/leveled/ArgsDurationConstructorErr.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L4\n" + "ALOAD 0\n" + "LLOAD 1\n" + "ALOAD 6\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsDurationConstructorErr$args (Ljava/lang/Object;JLjava/lang/Throwable;)V\n" + "L4\n" + "ATHROW\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L2 L1 0\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 7\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "L2\n" + "LINENUMBER 40 L2\n" + "LCONST_0\n" + "LSTORE 2\n" + "LCONST_0\n" + "LSTORE 4\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 6\n" + "IFLE L0\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LSTORE 4\n" + "L0\n" + "ILOAD 6\n" + "IFLE L3\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 4\n" + "LSUB\n" + "LSTORE 2\n" + "L3\n" + "DUP\n" + "ASTORE 7\n" + "GETSTATIC traces/onmethod/leveled/ArgsDurationConstructorErr.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L4\n" + "ALOAD 0\n" + "LLOAD 2\n" + "ALOAD 7\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsDurationConstructorErr$args (Ljava/lang/Object;JLjava/lang/Throwable;)V\n" + "L4\n" + "ATHROW\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L2 L1 0\n" + "LOCALVARIABLE a Ljava/lang/String; L2 L1 1\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 8" ); } @Test // check for multiple timestamps public void methodEntryArgsDuration2Err() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/ArgsDuration2Err"); checkTransformation( "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "TRYCATCHBLOCK L0 L2 L2 java/lang/Throwable\n" + "LCONST_0\n" + "LSTORE 6\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LSTORE 8\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 8\n" + "LSUB\n" + "LSTORE 6\n" + "DUP\n" + "ASTORE 10\n" + "ALOAD 0\n" + "LLOAD 6\n" + "ALOAD 10\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsDuration2Err$args2 (Ljava/lang/Object;JLjava/lang/Throwable;)V\n" + "ATHROW\n" + "L2\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 8\n" + "LSUB\n" + "LSTORE 6\n" + "DUP\n" + "ASTORE 11\n" + "ALOAD 0\n" + "LLOAD 6\n" + "ALOAD 11\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$ArgsDuration2Err$args (Ljava/lang/Object;JLjava/lang/Throwable;)V\n" + "ATHROW\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 12" ); resetClassLoader(); transform("onmethod/leveled/ArgsDuration2Err"); checkTransformation( "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "TRYCATCHBLOCK L0 L2 L2 java/lang/Throwable\n" + "LCONST_0\n" + "LSTORE 6\n" + "LCONST_0\n" + "LSTORE 8\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 10\n" + "IFLE L0\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LSTORE 8\n" + "ILOAD 10\n" + "IFLE L3\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 8\n" + "LSUB\n" + "LSTORE 6\n" + "L3\n" + "DUP\n" + "ASTORE 11\n" + "GETSTATIC traces/onmethod/leveled/ArgsDuration2Err.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L4\n" + "ALOAD 0\n" + "LLOAD 6\n" + "ALOAD 11\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsDuration2Err$args2 (Ljava/lang/Object;JLjava/lang/Throwable;)V\n" + "L4\n" + "ATHROW\n" + "L2\n" + "ILOAD 10\n" + "IFLE L5\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 8\n" + "LSUB\n" + "LSTORE 6\n" + "L5\n" + "DUP\n" + "ASTORE 12\n" + "GETSTATIC traces/onmethod/leveled/ArgsDuration2Err.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L6\n" + "ALOAD 0\n" + "LLOAD 6\n" + "ALOAD 12\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$ArgsDuration2Err$args (Ljava/lang/Object;JLjava/lang/Throwable;)V\n" + "L6\n" + "ATHROW\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 13" ); } @Test public void methodEntryAnytypeArgs() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/AnytypeArgs"); checkTransformation("ALOAD 0\nICONST_4\nANEWARRAY java/lang/Object\nDUP\n" + "ICONST_0\nALOAD 1\nAASTORE\nDUP\n" + "ICONST_1\nLLOAD 2\nINVOKESTATIC java/lang/Long.valueOf (J)Ljava/lang/Long;\nAASTORE\nDUP\n" + "ICONST_2\nALOAD 4\nAASTORE\nDUP\n" + "ICONST_3\nALOAD 5\nAASTORE\nINVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$AnytypeArgs$args (Ljava/lang/Object;[Ljava/lang/Object;)V"); resetClassLoader(); transform("onmethod/leveled/AnytypeArgs"); checkTransformation( "GETSTATIC traces/onmethod/leveled/AnytypeArgs.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L0\n" + "ALOAD 0\n" + "ICONST_4\n" + "ANEWARRAY java/lang/Object\n" + "DUP\n" + "ICONST_0\n" + "ALOAD 1\n" + "AASTORE\n" + "DUP\n" + "ICONST_1\n" + "LLOAD 2\n" + "INVOKESTATIC java/lang/Long.valueOf (J)Ljava/lang/Long;\n" + "AASTORE\n" + "DUP\n" + "ICONST_2\n" + "ALOAD 4\n" + "AASTORE\n" + "DUP\n" + "ICONST_3\n" + "ALOAD 5\n" + "AASTORE\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$AnytypeArgs$args (Ljava/lang/Object;[Ljava/lang/Object;)V\n" + "MAXSTACK = 6" ); } @Test public void methodEntryAnytypeArgsNoSelf() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/AnytypeArgsNoSelf"); checkTransformation("ICONST_4\nANEWARRAY java/lang/Object\nDUP\nICONST_0\nALOAD 1\nAASTORE\n" + "DUP\nICONST_1\nLLOAD 2\nINVOKESTATIC java/lang/Long.valueOf (J)Ljava/lang/Long;\nAASTORE\n" + "DUP\nICONST_2\nALOAD 4\nAASTORE\nDUP\nICONST_3\nALOAD 5\nAASTORE\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$AnytypeArgsNoSelf$argsNoSelf ([Ljava/lang/Object;)V"); resetClassLoader(); transform("onmethod/leveled/AnytypeArgsNoSelf"); checkTransformation( "GETSTATIC traces/onmethod/leveled/AnytypeArgsNoSelf.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L0\n" + "ICONST_4\n" + "ANEWARRAY java/lang/Object\n" + "DUP\n" + "ICONST_0\n" + "ALOAD 1\n" + "AASTORE\n" + "DUP\n" + "ICONST_1\n" + "LLOAD 2\n" + "INVOKESTATIC java/lang/Long.valueOf (J)Ljava/lang/Long;\n" + "AASTORE\n" + "DUP\n" + "ICONST_2\n" + "ALOAD 4\n" + "AASTORE\n" + "DUP\n" + "ICONST_3\n" + "ALOAD 5\n" + "AASTORE\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$AnytypeArgsNoSelf$argsNoSelf ([Ljava/lang/Object;)V\n" + "MAXSTACK = 5" ); } @Test public void methodEntryStaticArgs() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/StaticArgs"); checkTransformation("ALOAD 0\nLLOAD 1\nALOAD 3\nALOAD 4\nINVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$StaticArgs$args (Ljava/lang/String;J[Ljava/lang/String;[I)V"); resetClassLoader(); transform("onmethod/leveled/StaticArgs"); checkTransformation( "GETSTATIC traces/onmethod/leveled/StaticArgs.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L0\n" + "ALOAD 0\n" + "LLOAD 1\n" + "ALOAD 3\n" + "ALOAD 4\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$StaticArgs$args (Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 5" ); } @Test public void methodEntryStaticArgsReturn() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/StaticArgsReturn"); checkTransformation("DUP2\nLSTORE 5\nALOAD 0\nLLOAD 5\nLLOAD 1\nALOAD 3\nALOAD 4\nINVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$StaticArgsReturn$args (Ljava/lang/String;JJ[Ljava/lang/String;[I)V"); resetClassLoader(); transform("onmethod/leveled/StaticArgsReturn"); checkTransformation( "GETSTATIC traces/onmethod/leveled/StaticArgsReturn.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "DUP2\n" + "LSTORE 5\n" + "ALOAD 0\n" + "LLOAD 5\n" + "LLOAD 1\n" + "ALOAD 3\n" + "ALOAD 4\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$StaticArgsReturn$args (Ljava/lang/String;JJ[Ljava/lang/String;[I)V\n" + "L1\n" + "L2\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L2 0\n" + "LOCALVARIABLE b J L0 L2 1\n" + "LOCALVARIABLE c [Ljava/lang/String; L0 L2 3\n" + "LOCALVARIABLE d [I L0 L2 4\n" + "MAXSTACK = 9\n" + "MAXLOCALS = 7" ); } @Test public void methodEntryStaticArgsSelf() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/StaticArgsSelf"); checkTransformation(""); } @Test public void methodEntryStaticNoArgs() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/StaticNoArgs"); checkTransformation("INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$StaticNoArgs$argsEmpty ()V"); resetClassLoader(); transform("onmethod/leveled/StaticNoArgs"); checkTransformation( "GETSTATIC traces/onmethod/leveled/StaticNoArgs.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L0\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$StaticNoArgs$argsEmpty ()V\n" + "MAXSTACK = 2" ); } @Test public void methodEntryStaticNoArgsSelf() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/StaticNoArgsSelf"); checkTransformation( "ACONST_NULL\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$StaticNoArgsSelf$argsEmpty (Ljava/lang/Object;)V\n" + "MAXSTACK = 1" ); } @Test public void methodCall() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/MethodCall"); checkTransformation("LSTORE 4\n" + "ASTORE 6\n" + "ASTORE 7\n" + "ALOAD 0\n" + "ALOAD 6\n" + "LLOAD 4\n" + "ALOAD 7\n" + "LDC \"special long resources.OnMethodTest#callTarget(java.lang.String, long)\"\n" + "LDC \"resources.OnMethodTest\"\n" + "LDC \"callTopLevel\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$MethodCall$args (Ljava/lang/Object;Ljava/lang/String;JLjava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\n" + "ALOAD 7\n" + "ALOAD 6\n" + "LLOAD 4\n" + "MAXSTACK = 8\n" + "MAXLOCALS = 8" ); resetClassLoader(); transform("onmethod/leveled/MethodCall"); checkTransformation( "LSTORE 4\n" + "ASTORE 6\n" + "ASTORE 7\n" + "GETSTATIC traces/onmethod/leveled/MethodCall.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "ALOAD 0\n" + "ALOAD 6\n" + "LLOAD 4\n" + "ALOAD 7\n" + "LDC \"special long resources.OnMethodTest#callTarget(java.lang.String, long)\"\n" + "LDC \"resources.OnMethodTest\"\n" + "LDC \"callTopLevel\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$MethodCall$args (Ljava/lang/Object;Ljava/lang/String;JLjava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\n" + "L1\n" + "ALOAD 7\n" + "ALOAD 6\n" + "LLOAD 4\n" + "L2\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L2 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L2 1\n" + "LOCALVARIABLE b J L0 L2 2\n" + "MAXSTACK = 8\n" + "MAXLOCALS = 8" ); } @Test public void methodCallSampled() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/MethodCallSampled"); checkTransformation( "ICONST_2\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hit (I)Z\n" + "ISTORE 4\n" + "LSTORE 5\n" + "ASTORE 7\n" + "ASTORE 8\n" + "ILOAD 4\n" + "IFEQ L1\n" + "ALOAD 0\n" + "ALOAD 7\n" + "LLOAD 5\n" + "ALOAD 8\n" + "LDC \"special long resources.OnMethodTest#callTarget(java.lang.String, long)\"\n" + "LDC \"resources.OnMethodTest\"\n" + "LDC \"callTopLevel\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$MethodCallSampled$args (Ljava/lang/Object;Ljava/lang/String;JLjava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\n" + "L1\n" + "ALOAD 8\n" + "ALOAD 7\n" + "LLOAD 5\n" + "L2\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L2 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L2 1\n" + "LOCALVARIABLE b J L0 L2 2\n" + "MAXSTACK = 8\n" + "MAXLOCALS = 9" ); resetClassLoader(); transform("onmethod/leveled/MethodCallSampled"); checkTransformation( "ICONST_0\n" + "ISTORE 4\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 5\n" + "IFLE L1\n" + "ICONST_2\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hit (I)Z\n" + "ISTORE 4\n" + "L1\n" + "LSTORE 6\n" + "ASTORE 8\n" + "ASTORE 9\n" + "ILOAD 5\n" + "IFLE L2\n" + "ILOAD 4\n" + "IFEQ L3\n" + "L2\n" + "GETSTATIC traces/onmethod/leveled/MethodCallSampled.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L3\n" + "ALOAD 0\n" + "ALOAD 8\n" + "LLOAD 6\n" + "ALOAD 9\n" + "LDC \"special long resources.OnMethodTest#callTarget(java.lang.String, long)\"\n" + "LDC \"resources.OnMethodTest\"\n" + "LDC \"callTopLevel\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$MethodCallSampled$args (Ljava/lang/Object;Ljava/lang/String;JLjava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\n" + "L3\n" + "ALOAD 9\n" + "ALOAD 8\n" + "LLOAD 6\n" + "L4\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L4 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L4 1\n" + "LOCALVARIABLE b J L0 L4 2\n" + "MAXSTACK = 8\n" + "MAXLOCALS = 10" ); } @Test public void methodCallSampledAdaptive() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/MethodCallSampledAdaptive"); checkTransformation( "ICONST_2\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hitAdaptive (I)Z\n" + "ISTORE 4\n" + "LSTORE 5\n" + "ASTORE 7\n" + "ASTORE 8\n" + "ILOAD 4\n" + "IFEQ L1\n" + "ALOAD 0\n" + "ALOAD 7\n" + "LLOAD 5\n" + "ALOAD 8\n" + "LDC \"special long resources.OnMethodTest#callTarget(java.lang.String, long)\"\n" + "LDC \"resources.OnMethodTest\"\n" + "LDC \"callTopLevel\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$MethodCallSampledAdaptive$args (Ljava/lang/Object;Ljava/lang/String;JLjava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\n" + "L1\n" + "ALOAD 8\n" + "ALOAD 7\n" + "LLOAD 5\n" + "ILOAD 4\n" + "IFEQ L2\n" + "ICONST_2\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.updateEndTs (I)V\n" + "L2\n" + "L3\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L3 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L3 1\n" + "LOCALVARIABLE b J L0 L3 2\n" + "MAXSTACK = 8\n" + "MAXLOCALS = 9" ); resetClassLoader(); transform("onmethod/leveled/MethodCallSampledAdaptive"); checkTransformation( "ICONST_0\n" + "ISTORE 4\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 5\n" + "IFLE L1\n" + "ICONST_2\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hitAdaptive (I)Z\n" + "ISTORE 4\n" + "L1\n" + "LSTORE 6\n" + "ASTORE 8\n" + "ASTORE 9\n" + "ILOAD 5\n" + "IFLE L2\n" + "ILOAD 4\n" + "IFEQ L3\n" + "L2\n" + "GETSTATIC traces/onmethod/leveled/MethodCallSampledAdaptive.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L3\n" + "ALOAD 0\n" + "ALOAD 8\n" + "LLOAD 6\n" + "ALOAD 9\n" + "LDC \"special long resources.OnMethodTest#callTarget(java.lang.String, long)\"\n" + "LDC \"resources.OnMethodTest\"\n" + "LDC \"callTopLevel\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$MethodCallSampledAdaptive$args (Ljava/lang/Object;Ljava/lang/String;JLjava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\n" + "L3\n" + "ALOAD 9\n" + "ALOAD 8\n" + "LLOAD 6\n" + "ILOAD 4\n" + "IFEQ L4\n" + "ICONST_2\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.updateEndTs (I)V\n" + "L4\n" + "L5\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L5 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L5 1\n" + "LOCALVARIABLE b J L0 L5 2\n" + "MAXSTACK = 8\n" + "MAXLOCALS = 10" ); } @Test public void methodCallNoArgs() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/MethodCallNoArgs"); checkTransformation("INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$MethodCallNoArgs$args ()V"); resetClassLoader(); transform("onmethod/leveled/MethodCallNoArgs"); checkTransformation( "GETSTATIC traces/onmethod/leveled/MethodCallNoArgs.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$MethodCallNoArgs$args ()V\n" + "L1\n" + "L2\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L2 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L2 1\n" + "LOCALVARIABLE b J L0 L2 2\n" + "MAXSTACK = 6" ); } @Test public void methodCallReturn() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/MethodCallReturn"); checkTransformation("LSTORE 4\nASTORE 6\nASTORE 7\nALOAD 7\nALOAD 6\nLLOAD 4\n" + "LSTORE 8\nLLOAD 8\nALOAD 6\nLLOAD 4\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$MethodCallReturn$args (JLjava/lang/String;J)V\n" + "LLOAD 8"); resetClassLoader(); transform("onmethod/leveled/MethodCallReturn"); checkTransformation( "LSTORE 4\n" + "ASTORE 6\n" + "ASTORE 7\n" + "ALOAD 7\n" + "ALOAD 6\n" + "LLOAD 4\n" + "GETSTATIC traces/onmethod/leveled/MethodCallReturn.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "LSTORE 8\n" + "LLOAD 8\n" + "ALOAD 6\n" + "LLOAD 4\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$MethodCallReturn$args (JLjava/lang/String;J)V\n" + "LLOAD 8\n" + "L1\n" + "L2\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L2 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L2 1\n" + "LOCALVARIABLE b J L0 L2 2\n" + "MAXLOCALS = 10" ); } @Test public void methodCallReturnAugmented() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/MethodCallReturnAugmented", true); checkTransformation("LSTORE 4\n" + "ASTORE 6\n" + "ASTORE 7\n" + "ALOAD 7\n" + "ALOAD 6\n" + "LLOAD 4\n" + "LSTORE 8\n" + "ALOAD 6\n" + "LLOAD 4\n" + "LLOAD 8\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$MethodCallReturnAugmented$args (Ljava/lang/String;JJ)J\n" + "MAXLOCALS = 10" ); resetClassLoader(); transform("onmethod/leveled/MethodCallReturnAugmented", true); checkTransformation( "LSTORE 4\n" + "ASTORE 6\n" + "ASTORE 7\n" + "ALOAD 7\n" + "ALOAD 6\n" + "LLOAD 4\n" + "GETSTATIC traces/onmethod/leveled/MethodCallReturnAugmented.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "LSTORE 8\n" + "ALOAD 6\n" + "LLOAD 4\n" + "LLOAD 8\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$MethodCallReturnAugmented$args (Ljava/lang/String;JJ)J\n" + "L1\n" + "L2\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L2 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L2 1\n" + "LOCALVARIABLE b J L0 L2 2\n" + "MAXLOCALS = 10" ); } @Test public void methodCallReturnAugmented1() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/MethodCallReturnAugmented1", true); checkTransformation("LSTORE 4\n" + "ASTORE 6\n" + "ASTORE 7\n" + "ALOAD 7\n" + "ALOAD 6\n" + "LLOAD 4\n" + "LSTORE 8\n" + "LLOAD 8\n" + "ALOAD 6\n" + "LLOAD 4\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$MethodCallReturnAugmented1$args (JLjava/lang/String;J)J\n" + "MAXLOCALS = 10" ); resetClassLoader(); transform("onmethod/leveled/MethodCallReturnAugmented1", true); checkTransformation( "LSTORE 4\n" + "ASTORE 6\n" + "ASTORE 7\n" + "ALOAD 7\n" + "ALOAD 6\n" + "LLOAD 4\n" + "GETSTATIC traces/onmethod/leveled/MethodCallReturnAugmented1.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "LSTORE 8\n" + "LLOAD 8\n" + "ALOAD 6\n" + "LLOAD 4\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$MethodCallReturnAugmented1$args (JLjava/lang/String;J)J\n" + "L1\n" + "L2\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L2 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L2 1\n" + "LOCALVARIABLE b J L0 L2 2\n" + "MAXLOCALS = 10" ); } @Test public void methodCallDuration() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/MethodCallDuration"); checkTransformation( "LCONST_0\n" + "LSTORE 4\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LSTORE 6\n" + "LSTORE 8\n" + "ASTORE 10\n" + "ASTORE 11\n" + "ALOAD 11\n" + "ALOAD 10\n" + "LLOAD 8\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 6\n" + "LSUB\n" + "LSTORE 4\n" + "LSTORE 12\n" + "LLOAD 12\n" + "LLOAD 4\n" + "ALOAD 10\n" + "LLOAD 8\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$MethodCallDuration$args (JJLjava/lang/String;J)V\n" + "LLOAD 12\n" + "MAXSTACK = 7\n" + "MAXLOCALS = 14" ); resetClassLoader(); transform("onmethod/leveled/MethodCallDuration"); checkTransformation( "LCONST_0\n" + "LSTORE 4\n" + "LCONST_0\n" + "LSTORE 6\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 8\n" + "IFLE L1\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LSTORE 6\n" + "L1\n" + "LSTORE 9\n" + "ASTORE 11\n" + "ASTORE 12\n" + "ALOAD 12\n" + "ALOAD 11\n" + "LLOAD 9\n" + "ILOAD 8\n" + "IFLE L2\n" + "INVOKESTATIC java/lang/System.nanoTime ()J\n" + "LLOAD 6\n" + "LSUB\n" + "LSTORE 4\n" + "L2\n" + "GETSTATIC traces/onmethod/leveled/MethodCallDuration.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L3\n" + "LSTORE 13\n" + "LLOAD 13\n" + "LLOAD 4\n" + "ALOAD 11\n" + "LLOAD 9\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$MethodCallDuration$args (JJLjava/lang/String;J)V\n" + "LLOAD 13\n" + "L3\n" + "L4\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L4 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L4 1\n" + "LOCALVARIABLE b J L0 L4 2\n" + "MAXSTACK = 7\n" + "MAXLOCALS = 15" ); } @Test public void methodCallDurationSampled() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/MethodCallDurationSampled"); checkTransformation("LCONST_0\n" + "LSTORE 4\n" + "ICONST_2\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hitTimed (I)J\n" + "DUP2\n" + "LSTORE 6\n" + "L2I\n" + "ISTORE 8\n" + "LSTORE 9\n" + "ASTORE 11\n" + "ASTORE 12\n" + "ALOAD 12\n" + "ALOAD 11\n" + "LLOAD 9\n" + "ILOAD 8\n" + "IFEQ L1\n" + "ICONST_2\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.getEndTs (I)J\n" + "LLOAD 6\n" + "LSUB\n" + "LSTORE 4\n" + "LSTORE 13\n" + "LLOAD 13\n" + "LLOAD 4\n" + "ALOAD 11\n" + "LLOAD 9\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$MethodCallDurationSampled$args (JJLjava/lang/String;J)V\n" + "LLOAD 13\n" + "L1\n" + "L2"); resetClassLoader(); transform("onmethod/leveled/MethodCallDurationSampled"); checkTransformation( "LCONST_0\n" + "LSTORE 4\n" + "LCONST_0\n" + "LSTORE 6\n" + "ICONST_0\n" + "ISTORE 8\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 9\n" + "IFLE L1\n" + "ICONST_2\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hitTimed (I)J\n" + "DUP2\n" + "LSTORE 6\n" + "L2I\n" + "ISTORE 8\n" + "L1\n" + "LSTORE 10\n" + "ASTORE 12\n" + "ASTORE 13\n" + "ALOAD 13\n" + "ALOAD 12\n" + "LLOAD 10\n" + "ILOAD 9\n" + "IFLE L2\n" + "ILOAD 8\n" + "IFEQ L3\n" + "ICONST_2\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.getEndTs (I)J\n" + "LLOAD 6\n" + "LSUB\n" + "LSTORE 4\n" + "L2\n" + "GETSTATIC traces/onmethod/leveled/MethodCallDurationSampled.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L3\n" + "LSTORE 14\n" + "LLOAD 14\n" + "LLOAD 4\n" + "ALOAD 12\n" + "LLOAD 10\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$MethodCallDurationSampled$args (JJLjava/lang/String;J)V\n" + "LLOAD 14\n" + "L3\n" + "L4\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L4 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L4 1\n" + "LOCALVARIABLE b J L0 L4 2\n" + "MAXSTACK = 8\n" + "MAXLOCALS = 16" ); } @Test public void methodCallDurationSampledMulti() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/MethodCallDurationSampledMulti"); checkTransformation("LCONST_0\n" + "LSTORE 4\n" + "ICONST_2\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hitTimed (I)J\n" + "DUP2\n" + "LSTORE 6\n" + "L2I\n" + "ISTORE 8\n" + "LSTORE 9\n" + "ASTORE 11\n" + "ASTORE 12\n" + "ALOAD 12\n" + "ALOAD 11\n" + "LLOAD 9\n" + "ILOAD 8\n" + "IFEQ L1\n" + "ICONST_2\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.getEndTs (I)J\n" + "LLOAD 6\n" + "LSUB\n" + "LSTORE 4\n" + "LSTORE 13\n" + "LLOAD 13\n" + "LLOAD 4\n" + "ALOAD 11\n" + "LLOAD 9\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$MethodCallDurationSampledMulti$args (JJLjava/lang/String;J)V\n" + "LLOAD 13\n" + "L1\n" + "ICONST_3\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hitTimed (I)J\n" + "DUP2\n" + "LSTORE 15\n" + "L2I\n" + "ISTORE 17\n" + "LSTORE 18\n" + "ASTORE 20\n" + "ALOAD 20\n" + "LLOAD 18\n" + "ILOAD 17\n" + "IFEQ L2\n" + "ICONST_3\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.getEndTs (I)J\n" + "LLOAD 15\n" + "LSUB\n" + "LSTORE 21\n" + "LLOAD 21\n" + "ALOAD 20\n" + "LLOAD 18\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$MethodCallDurationSampledMulti$args (JJLjava/lang/String;J)V\n" + "LLOAD 21\n" + "L2\n" + "LADD\n" + "LSTORE 23\n" + "L3\n" + "LINENUMBER 115 L3\n" + "LLOAD 23\n" + "L4"); resetClassLoader(); transform("onmethod/leveled/MethodCallDurationSampledMulti"); checkTransformation( "LCONST_0\n" + "LSTORE 4\n" + "LCONST_0\n" + "LSTORE 6\n" + "ICONST_0\n" + "ISTORE 8\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 9\n" + "IFLE L1\n" + "ICONST_2\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hitTimed (I)J\n" + "DUP2\n" + "LSTORE 6\n" + "L2I\n" + "ISTORE 8\n" + "L1\n" + "LSTORE 10\n" + "ASTORE 12\n" + "ASTORE 13\n" + "ALOAD 13\n" + "ALOAD 12\n" + "LLOAD 10\n" + "ILOAD 9\n" + "IFLE L2\n" + "ILOAD 8\n" + "IFEQ L3\n" + "ICONST_2\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.getEndTs (I)J\n" + "LLOAD 6\n" + "LSUB\n" + "LSTORE 4\n" + "L2\n" + "GETSTATIC traces/onmethod/leveled/MethodCallDurationSampledMulti.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L3\n" + "LSTORE 14\n" + "LLOAD 14\n" + "LLOAD 4\n" + "ALOAD 12\n" + "LLOAD 10\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$MethodCallDurationSampledMulti$args (JJLjava/lang/String;J)V\n" + "LLOAD 14\n" + "L3\n" + "LCONST_0\n" + "LSTORE 16\n" + "ICONST_0\n" + "ISTORE 18\n" + "GETSTATIC resources/OnMethodTest.$btrace$$level : I\n" + "DUP\n" + "ISTORE 19\n" + "IFLE L4\n" + "ICONST_3\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.hitTimed (I)J\n" + "DUP2\n" + "LSTORE 16\n" + "L2I\n" + "ISTORE 18\n" + "L4\n" + "LSTORE 20\n" + "ASTORE 22\n" + "ALOAD 22\n" + "LLOAD 20\n" + "ILOAD 19\n" + "IFLE L5\n" + "ILOAD 18\n" + "IFEQ L6\n" + "ICONST_3\n" + "INVOKESTATIC com/sun/btrace/instr/MethodTracker.getEndTs (I)J\n" + "LLOAD 16\n" + "LSUB\n" + "L5\n" + "GETSTATIC traces/onmethod/leveled/MethodCallDurationSampledMulti.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L6\n" + "LSTORE 23\n" + "LLOAD 23\n" + "ALOAD 22\n" + "LLOAD 20\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$MethodCallDurationSampledMulti$args (JJLjava/lang/String;J)V\n" + "LLOAD 23\n" + "L6\n" + "LADD\n" + "LSTORE 25\n" + "L7\n" + "LINENUMBER 115 L7\n" + "LLOAD 25\n" + "L8\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L8 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L8 1\n" + "LOCALVARIABLE b J L0 L8 2\n" + "LOCALVARIABLE i J L7 L8 25\n" + "MAXSTACK = 9\n" + "MAXLOCALS = 27" ); } // multiple instrumentation of a call site is not handled well // @Test // public void methodCallDuration2() throws Exception { // loadTargetClass("OnMethodTest"); // transform("onmethod/MethodCallDuration2"); // // checkTransformation("LSTORE 4\nASTORE 6\nASTORE 7\n" // + "INVOKESTATIC java/lang/System.nanoTime ()J\n" // + "LSTORE 8\nALOAD 7\nALOAD 6\nLLOAD 4\nLSTORE 10\n" // + "INVOKESTATIC java/lang/System.nanoTime ()J\n" // + "LSTORE 12\nLLOAD 10\nLLOAD 12\nLLOAD 8\nLSUB\n" // + "ALOAD 6\nLLOAD 4\n" // + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$MethodCallDuration$args (JJLjava/lang/String;J)V\n" // + "LLOAD 10\nMAXSTACK = 7\nMAXLOCALS = 14\n"); // } @Test public void methodCallStatic() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/MethodCallStatic"); checkTransformation( "LSTORE 4\n" + "ASTORE 6\n" + "ALOAD 0\n" + "ALOAD 6\n" + "LLOAD 4\n" + "ACONST_NULL\n" + "LDC \"static long resources.OnMethodTest#callTargetStatic(java.lang.String, long)\"\n" + "LDC \"resources.OnMethodTest\"\n" + "LDC \"callTopLevel\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$MethodCallStatic$args (Ljava/lang/Object;Ljava/lang/String;JLjava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\n" + "ALOAD 6\n" + "LLOAD 4\n" + "MAXSTACK = 10\n" + "MAXLOCALS = 7" ); resetClassLoader(); transform("onmethod/leveled/MethodCallStatic"); checkTransformation( "LSTORE 4\n" + "ASTORE 6\n" + "GETSTATIC traces/onmethod/leveled/MethodCallStatic.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "ALOAD 0\n" + "ALOAD 6\n" + "LLOAD 4\n" + "LDC \"static long resources.OnMethodTest#callTargetStatic(java.lang.String, long)\"\n" + "LDC \"resources.OnMethodTest\"\n" + "LDC \"callTopLevel\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$MethodCallStatic$args (Ljava/lang/Object;Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\n" + "L1\n" + "ALOAD 6\n" + "LLOAD 4\n" + "L2\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L2 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L2 1\n" + "LOCALVARIABLE b J L0 L2 2\n" + "MAXSTACK = 9\n" + "MAXLOCALS = 7" ); } @Test public void staticMethodCall() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/StaticMethodCall"); checkTransformation( "LSTORE 4\n" + "ASTORE 6\n" + "ASTORE 7\n" + "ALOAD 6\n" + "LLOAD 4\n" + "ALOAD 7\n" + "LDC \"special long resources.OnMethodTest#callTarget(java.lang.String, long)\"\n" + "LDC \"resources.OnMethodTest\"\n" + "LDC \"callTopLevelStatic\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$StaticMethodCall$args (Ljava/lang/String;JLjava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\n" + "ALOAD 7\n" + "ALOAD 6\n" + "LLOAD 4\n" + "MAXSTACK = 9\n" + "MAXLOCALS = 8" ); resetClassLoader(); transform("onmethod/leveled/StaticMethodCall"); checkTransformation( "LSTORE 4\n" + "ASTORE 6\n" + "ASTORE 7\n" + "GETSTATIC traces/onmethod/leveled/StaticMethodCall.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L2\n" + "ALOAD 6\n" + "LLOAD 4\n" + "ALOAD 7\n" + "LDC \"special long resources.OnMethodTest#callTarget(java.lang.String, long)\"\n" + "LDC \"resources.OnMethodTest\"\n" + "LDC \"callTopLevelStatic\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$StaticMethodCall$args (Ljava/lang/String;JLjava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\n" + "L2\n" + "ALOAD 7\n" + "ALOAD 6\n" + "LLOAD 4\n" + "L3\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L3 0\n" + "LOCALVARIABLE b J L0 L3 1\n" + "LOCALVARIABLE instance Lresources/OnMethodTest; L1 L3 3\n" + "MAXSTACK = 9\n" + "MAXLOCALS = 8" ); } @Test public void staticMethodCallStatic() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/StaticMethodCallStatic"); checkTransformation( "LSTORE 4\n" + "ASTORE 6\n" + "ALOAD 6\n" + "LLOAD 4\n" + "LDC \"static long resources.OnMethodTest#callTargetStatic(java.lang.String, long)\"\n" + "LDC \"resources.OnMethodTest\"\n" + "LDC \"callTopLevelStatic\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$StaticMethodCallStatic$args (Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\n" + "ALOAD 6\n" + "LLOAD 4\n" + "MAXLOCALS = 7" ); resetClassLoader(); transform("onmethod/leveled/StaticMethodCallStatic"); checkTransformation( "LSTORE 4\n" + "ASTORE 6\n" + "GETSTATIC traces/onmethod/leveled/StaticMethodCallStatic.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L2\n" + "ALOAD 6\n" + "LLOAD 4\n" + "LDC \"static long resources.OnMethodTest#callTargetStatic(java.lang.String, long)\"\n" + "LDC \"resources.OnMethodTest\"\n" + "LDC \"callTopLevelStatic\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$StaticMethodCallStatic$args (Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\n" + "L2\n" + "ALOAD 6\n" + "LLOAD 4\n" + "L3\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L3 0\n" + "LOCALVARIABLE b J L0 L3 1\n" + "LOCALVARIABLE instance Lresources/OnMethodTest; L1 L3 3\n" + "MAXLOCALS = 7" ); } @Test public void methodEntryNoArgsEntryReturn() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/NoArgsEntryReturn"); checkTransformation( "ALOAD 0\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$NoArgsEntryReturn$argsEmptyEntry (Ljava/lang/Object;)V\n" + "DUP2\n" + "LSTORE 6\n" + "ALOAD 0\n" + "LLOAD 6\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$NoArgsEntryReturn$argsEmptyReturn (Ljava/lang/Object;J)V\n" + "MAXSTACK = 5\n" + "MAXLOCALS = 8" ); resetClassLoader(); transform("onmethod/leveled/NoArgsEntryReturn"); checkTransformation( "GETSTATIC traces/onmethod/leveled/NoArgsEntryReturn.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L0\n" + "ALOAD 0\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$NoArgsEntryReturn$argsEmptyEntry (Ljava/lang/Object;)V\n" + "GETSTATIC traces/onmethod/leveled/NoArgsEntryReturn.$btrace$$level : I\n" + "ICONST_1\n" + "IF_ICMPLT L1\n" + "ALOAD 0\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$leveled$NoArgsEntryReturn$argsEmptyReturn (Ljava/lang/Object;)V\n" + "L1\n" + "L2\n" + "LOCALVARIABLE this Lresources/OnMethodTest; L0 L2 0\n" + "LOCALVARIABLE a Ljava/lang/String; L0 L2 1\n" + "LOCALVARIABLE b J L0 L2 2\n" + "LOCALVARIABLE c [Ljava/lang/String; L0 L2 4\n" + "LOCALVARIABLE d [I L0 L2 5\n" + "MAXSTACK = 4" ); } @Test public void methodEntryNoArgsEntryReturnNoCapture() throws Exception { loadTargetClass("OnMethodTest"); transform("onmethod/NoArgsEntryReturnNoCapture"); checkTransformation( "ALOAD 0\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$NoArgsEntryReturnNoCapture$argsEmptyEntry (Ljava/lang/Object;)V\n" + "ALOAD 0\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$onmethod$NoArgsEntryReturnNoCapture$argsEmptyReturn (Ljava/lang/Object;)V" ); } @Test public void servicesTest() throws Exception { // a sanity test for the runtime verifier accepting the services method calls loadTargetClass("OnMethodTest"); transform("ServicesTest"); checkTransformation( "INVOKESTATIC resources/OnMethodTest.$btrace$traces$ServicesTest$testSimpleService ()V\n" + "LDC \"resources.OnMethodTest\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$ServicesTest$testFieldInjection (Ljava/lang/String;)V\n" + "MAXSTACK = 1\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$ServicesTest$testRuntimeService (Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 5\n" + "ALOAD 0\n" + "LLOAD 1\n" + "ALOAD 3\n" + "ALOAD 4\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$ServicesTest$testSingletonService (Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 5\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$ServicesTest$testFieldInjection(Ljava/lang/String;)V\n" + "@Lcom/sun/btrace/annotations/OnMethod;(clazz=\"resources.OnMethodTest\", method=\"noargs$static\")\n" + "@Lcom/sun/btrace/annotations/ProbeClassName;() // parameter 0\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "GETSTATIC traces/ServicesTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L0\n" + "RETURN\n" + "L0\n" + "NEW resources/services/DummyRuntimService\n" + "DUP\n" + "DUP\n" + "GETSTATIC traces/ServicesTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESPECIAL resources/services/DummyRuntimService.<init> (Lcom/sun/btrace/BTraceRuntime;)V\n" + "ASTORE 1\n" + "BIPUSH 10\n" + "LDC \"hey\"\n" + "INVOKEVIRTUAL resources/services/DummyRuntimService.doit (ILjava/lang/String;)V\n" + "ALOAD 1\n" + "BIPUSH 20\n" + "LDC \"ho\"\n" + "INVOKEVIRTUAL resources/services/DummyRuntimService.doit (ILjava/lang/String;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 2\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$ServicesTest$testRuntimeService(Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "@Lcom/sun/btrace/annotations/OnMethod;(clazz=\"resources.OnMethodTest\", method=\"args\")\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "GETSTATIC traces/ServicesTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L0\n" + "RETURN\n" + "L0\n" + "NEW resources/services/DummyRuntimService\n" + "DUP\n" + "GETSTATIC traces/ServicesTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESPECIAL resources/services/DummyRuntimService.<init> (Lcom/sun/btrace/BTraceRuntime;)V\n" + "ASTORE 5\n" + "ALOAD 5\n" + "BIPUSH 10\n" + "LDC \"hello\"\n" + "INVOKEVIRTUAL resources/services/DummyRuntimService.doit (ILjava/lang/String;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "MAXSTACK = 3\n" + "MAXLOCALS = 6\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$ServicesTest$testSimpleService()V\n" + "@Lcom/sun/btrace/annotations/OnMethod;(clazz=\"resources.OnMethodTest\", method=\"noargs\")\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "GETSTATIC traces/ServicesTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L0\n" + "RETURN\n" + "L0\n" + "NEW resources/services/DummySimpleService\n" + "DUP\n" + "INVOKESPECIAL resources/services/DummySimpleService.<init> ()V\n" + "ASTORE 0\n" + "ALOAD 0\n" + "LDC \"hello\"\n" + "BIPUSH 10\n" + "INVOKEVIRTUAL resources/services/DummySimpleService.doit (Ljava/lang/String;I)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "MAXSTACK = 3\n" + "MAXLOCALS = 1\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$ServicesTest$testSingletonService(Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "@Lcom/sun/btrace/annotations/OnMethod;(clazz=\"resources.OnMethodTest\", method=\"args$static\")\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "GETSTATIC traces/ServicesTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L0\n" + "RETURN\n" + "L0\n" + "NEW resources/services/DummySimpleService\n" + "DUP\n" + "LDC \"getInstance\"\n" + "INVOKESPECIAL resources/services/DummySimpleService.<init> (Ljava/lang/String;)V\n" + "ASTORE 5\n" + "ALOAD 5\n" + "LDC \"hello\"\n" + "BIPUSH 10\n" + "INVOKEVIRTUAL resources/services/DummySimpleService.doit (Ljava/lang/String;I)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "MAXSTACK = 3\n" + "MAXLOCALS = 6" ); } @Test public void statsdServiceTest() throws Exception { // a sanity test for the runtime verifier accepting the services method calls loadTargetClass("OnMethodTest"); transform("ServicesTest"); checkTransformation( "INVOKESTATIC resources/OnMethodTest.$btrace$traces$ServicesTest$testSimpleService ()V\n" + "LDC \"resources.OnMethodTest\"\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$ServicesTest$testFieldInjection (Ljava/lang/String;)V\n" + "MAXSTACK = 1\n" + "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$ServicesTest$testRuntimeService (Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 5\n" + "ALOAD 0\n" + "LLOAD 1\n" + "ALOAD 3\n" + "ALOAD 4\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$ServicesTest$testSingletonService (Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 5\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$ServicesTest$testFieldInjection(Ljava/lang/String;)V\n" + "@Lcom/sun/btrace/annotations/OnMethod;(clazz=\"resources.OnMethodTest\", method=\"noargs$static\")\n" + "@Lcom/sun/btrace/annotations/ProbeClassName;() // parameter 0\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "GETSTATIC traces/ServicesTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L0\n" + "RETURN\n" + "L0\n" + "NEW resources/services/DummyRuntimService\n" + "DUP\n" + "DUP\n" + "GETSTATIC traces/ServicesTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESPECIAL resources/services/DummyRuntimService.<init> (Lcom/sun/btrace/BTraceRuntime;)V\n" + "ASTORE 1\n" + "BIPUSH 10\n" + "LDC \"hey\"\n" + "INVOKEVIRTUAL resources/services/DummyRuntimService.doit (ILjava/lang/String;)V\n" + "ALOAD 1\n" + "BIPUSH 20\n" + "LDC \"ho\"\n" + "INVOKEVIRTUAL resources/services/DummyRuntimService.doit (ILjava/lang/String;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "MAXSTACK = 4\n" + "MAXLOCALS = 2\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$ServicesTest$testRuntimeService(Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "@Lcom/sun/btrace/annotations/OnMethod;(clazz=\"resources.OnMethodTest\", method=\"args\")\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "GETSTATIC traces/ServicesTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L0\n" + "RETURN\n" + "L0\n" + "NEW resources/services/DummyRuntimService\n" + "DUP\n" + "GETSTATIC traces/ServicesTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESPECIAL resources/services/DummyRuntimService.<init> (Lcom/sun/btrace/BTraceRuntime;)V\n" + "ASTORE 5\n" + "ALOAD 5\n" + "BIPUSH 10\n" + "LDC \"hello\"\n" + "INVOKEVIRTUAL resources/services/DummyRuntimService.doit (ILjava/lang/String;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "MAXSTACK = 3\n" + "MAXLOCALS = 6\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$ServicesTest$testSimpleService()V\n" + "@Lcom/sun/btrace/annotations/OnMethod;(clazz=\"resources.OnMethodTest\", method=\"noargs\")\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "GETSTATIC traces/ServicesTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L0\n" + "RETURN\n" + "L0\n" + "NEW resources/services/DummySimpleService\n" + "DUP\n" + "INVOKESPECIAL resources/services/DummySimpleService.<init> ()V\n" + "ASTORE 0\n" + "ALOAD 0\n" + "LDC \"hello\"\n" + "BIPUSH 10\n" + "INVOKEVIRTUAL resources/services/DummySimpleService.doit (Ljava/lang/String;I)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "MAXSTACK = 3\n" + "MAXLOCALS = 1\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$ServicesTest$testSingletonService(Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "@Lcom/sun/btrace/annotations/OnMethod;(clazz=\"resources.OnMethodTest\", method=\"args$static\")\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "GETSTATIC traces/ServicesTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L0\n" + "RETURN\n" + "L0\n" + "NEW resources/services/DummySimpleService\n" + "DUP\n" + "LDC \"getInstance\"\n" + "INVOKESPECIAL resources/services/DummySimpleService.<init> (Ljava/lang/String;)V\n" + "ASTORE 5\n" + "ALOAD 5\n" + "LDC \"hello\"\n" + "BIPUSH 10\n" + "INVOKEVIRTUAL resources/services/DummySimpleService.doit (Ljava/lang/String;I)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "MAXSTACK = 3\n" + "MAXLOCALS = 6" ); } @Test public void unsafeTest() throws Exception { loadTargetClass("OnMethodTest"); System.err.println(asmify(originalBC)); transform("onmethod/ArgsUnsafe", true); System.err.println("\n" + asmify(transformedBC)); } @Test public void tlsTest() throws Exception { loadTargetClass("OnMethodTest"); transform("TLSTest"); checkTrace( "public static Lcom/sun/btrace/BTraceRuntime; runtime\n" + "// access flags 0x19\n" + "// signature Ljava/lang/ThreadLocal<Ljava/util/Deque;>;\n" + "// declaration: java.lang.ThreadLocal<java.util.Deque>\n" + "public final static Ljava/lang/ThreadLocal; entryTimes\n" + "// access flags 0x19\n" + "// signature Ljava/lang/ThreadLocal<Ljava/lang/String;>;\n" + "// declaration: java.lang.ThreadLocal<java.lang.String>\n" + "public final static Ljava/lang/ThreadLocal; name\n" + "// access flags 0x19\n" + "// signature Ljava/lang/ThreadLocal<Ljava/lang/Integer;>;\n" + "// declaration: java.lang.ThreadLocal<java.lang.Integer>\n" + "public final static Ljava/lang/ThreadLocal; x\n" + "// access flags 0x19\n" + "// signature Ljava/lang/ThreadLocal<Ljava/lang/Double;>;\n" + "// declaration: java.lang.ThreadLocal<java.lang.Double>\n" + "public final static Ljava/lang/ThreadLocal; y\n" + "// signature Ljava/lang/ThreadLocal<Ljava/lang/Long;>;\n" + "// declaration: java.lang.ThreadLocal<java.lang.Long>\n" + "public final static Ljava/lang/ThreadLocal; z\n" + "\n" + "// access flags 0x49\n" + "public static volatile I $btrace$$level = 0\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "GETSTATIC traces/TLSTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L0\n" + "RETURN\n" + "L0\n" + "GETSTATIC traces/TLSTest.entryTimes : Ljava/lang/ThreadLocal;\n" + "INVOKEVIRTUAL java/lang/ThreadLocal.get ()Ljava/lang/Object;\n" + "CHECKCAST java/util/Deque\n" + "GETSTATIC traces/TLSTest.name : Ljava/lang/ThreadLocal;\n" + "SWAP\n" + "INVOKEVIRTUAL java/lang/ThreadLocal.set (Ljava/lang/Object;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "L0\n" + "LDC Ltraces/TLSTest;.class\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.forClass (Ljava/lang/Class;)Lcom/sun/btrace/BTraceRuntime;\n" + "PUTSTATIC traces/TLSTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "GETSTATIC traces/TLSTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L2\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L2\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.newThreadLocal (Ljava/lang/Object;)Ljava/lang/ThreadLocal;\n" + "PUTSTATIC traces/TLSTest.entryTimes : Ljava/lang/ThreadLocal;\n" + "INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.newThreadLocal (Ljava/lang/Object;)Ljava/lang/ThreadLocal;\n" + "PUTSTATIC traces/TLSTest.x : Ljava/lang/ThreadLocal;\n" + "ACONST_NULL\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.newThreadLocal (Ljava/lang/Object;)Ljava/lang/ThreadLocal;\n" + "PUTSTATIC traces/TLSTest.name : Ljava/lang/ThreadLocal;\n" + "DCONST_0\n" + "INVOKESTATIC java/lang/Double.valueOf (D)Ljava/lang/Double;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.newThreadLocal (Ljava/lang/Object;)Ljava/lang/ThreadLocal;\n" + "PUTSTATIC traces/TLSTest.y : Ljava/lang/ThreadLocal;\n" + "LDC 10\n" + "INVOKESTATIC java/lang/Long.valueOf (J)Ljava/lang/Long;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.newThreadLocal (Ljava/lang/Object;)Ljava/lang/ThreadLocal;\n" + "PUTSTATIC traces/TLSTest.z : Ljava/lang/ThreadLocal;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.start ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "MAXSTACK = 2" ); checkTransformation( "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$TLSTest$testArgs (Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 5\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$TLSTest$testArgs(Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "@Lcom/sun/btrace/annotations/OnMethod;(clazz=\"resources.OnMethodTest\", method=\"args\")\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "GETSTATIC traces/TLSTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L0\n" + "RETURN\n" + "L0\n" + "GETSTATIC traces/TLSTest.entryTimes : Ljava/lang/ThreadLocal;\n" + "INVOKEVIRTUAL java/lang/ThreadLocal.get ()Ljava/lang/Object;\n" + "CHECKCAST java/util/Deque\n" + "LLOAD 1\n" + "INVOKESTATIC java/lang/Long.valueOf (J)Ljava/lang/Long;\n" + "INVOKESTATIC com/sun/btrace/BTraceUtils.push (Ljava/util/Deque;Ljava/lang/Object;)V\n" + "ALOAD 0\n" + "GETSTATIC traces/TLSTest.name : Ljava/lang/ThreadLocal;\n" + "SWAP\n" + "INVOKEVIRTUAL java/lang/ThreadLocal.set (Ljava/lang/Object;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "MAXSTACK = 3\n" + "MAXLOCALS = 5" ); } @Test public void exportTest() throws Exception { loadTargetClass("OnMethodTest"); transform("ExportTest"); checkTrace( "public static Lcom/sun/btrace/BTraceRuntime; runtime\n" + "// access flags 0x19\n" + "public final static Ljava/util/Deque; entryTimes\n" + "// access flags 0x19\n" + "public final static Ljava/lang/String; name\n" + "// access flags 0x19\n" + "public final static I x\n" + "// access flags 0x19\n" + "public final static D y\n" + "public final static J z\n" + "\n" + "// access flags 0x49\n" + "public static volatile I $btrace$$level = 0\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "GETSTATIC traces/ExportTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L0\n" + "RETURN\n" + "L0\n" + "ACONST_NULL\n" + "LDC \"btrace.traces/ExportTest.name\"\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.putPerfString (Ljava/lang/String;Ljava/lang/String;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "L0\n" + "LDC Ltraces/ExportTest;.class\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.forClass (Ljava/lang/Class;)Lcom/sun/btrace/BTraceRuntime;\n" + "PUTSTATIC traces/ExportTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "GETSTATIC traces/ExportTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L2\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L2\n" + "LDC \"btrace.traces/ExportTest.entryTimes\"\n" + "LDC \"Ljava/util/Deque;\"\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.newPerfCounter (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;)V\n" + "INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;\n" + "LDC \"btrace.traces/ExportTest.x\"\n" + "LDC \"I\"\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.newPerfCounter (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;)V\n" + "ACONST_NULL\n" + "LDC \"btrace.traces/ExportTest.name\"\n" + "LDC \"Ljava/lang/String;\"\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.newPerfCounter (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;)V\n" + "DCONST_0\n" + "INVOKESTATIC java/lang/Double.valueOf (D)Ljava/lang/Double;\n" + "LDC \"btrace.traces/ExportTest.y\"\n" + "LDC \"D\"\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.newPerfCounter (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;)V\n" + "LDC 10\n" + "INVOKESTATIC java/lang/Long.valueOf (J)Ljava/lang/Long;\n" + "LDC \"btrace.traces/ExportTest.z\"\n" + "LDC \"J\"\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.newPerfCounter (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.start ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "MAXSTACK = 3" ); checkTransformation( "ALOAD 1\n" + "LLOAD 2\n" + "ALOAD 4\n" + "ALOAD 5\n" + "INVOKESTATIC resources/OnMethodTest.$btrace$traces$ExportTest$testArgs (Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "MAXSTACK = 5\n" + "\n" + "// access flags 0xA\n" + "private static $btrace$traces$ExportTest$testArgs(Ljava/lang/String;J[Ljava/lang/String;[I)V\n" + "@Lcom/sun/btrace/annotations/OnMethod;(clazz=\"resources.OnMethodTest\", method=\"args\")\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "GETSTATIC traces/ExportTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L0\n" + "RETURN\n" + "L0\n" + "ACONST_NULL\n" + "LLOAD 1\n" + "INVOKESTATIC java/lang/Long.valueOf (J)Ljava/lang/Long;\n" + "INVOKESTATIC com/sun/btrace/BTraceUtils.push (Ljava/util/Deque;Ljava/lang/Object;)V\n" + "ALOAD 0\n" + "LDC \"btrace.traces/ExportTest.name\"\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.putPerfString (Ljava/lang/String;Ljava/lang/String;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "MAXSTACK = 3\n" + "MAXLOCALS = 5" ); } @Test public void onprobeTest() throws Exception { loadTargetClass("OnMethodTest"); System.err.println(asmify(originalBC)); transform("OnProbeTest", false); System.err.println("\n" + asmify(transformedBC)); } @Test public void onTimerTest() throws Exception { loadTargetClass("OnMethodTest"); transform("OnTimerTest", false); checkTrace( "public static Lcom/sun/btrace/BTraceRuntime; runtime\n" + "\n" + "// access flags 0x49\n" + "public static volatile I $btrace$$level = 0\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "GETSTATIC traces/OnTimerTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L0\n" + "RETURN\n" + "L0\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "// access flags 0x9\n" + "public static dump(Ljava/lang/String;)V\n" + "TRYCATCHBLOCK L0 L1 L1 java/lang/Throwable\n" + "L0\n" + "LDC Ltraces/OnTimerTest;.class\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.forClass (Ljava/lang/Class;)Lcom/sun/btrace/BTraceRuntime;\n" + "PUTSTATIC traces/OnTimerTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "GETSTATIC traces/OnTimerTest.runtime : Lcom/sun/btrace/BTraceRuntime;\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.enter (Lcom/sun/btrace/BTraceRuntime;)Z\n" + "IFNE L2\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN\n" + "L2\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.start ()V\n" + "L1\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.handleException (Ljava/lang/Throwable;)V\n" + "INVOKESTATIC com/sun/btrace/BTraceRuntime.leave ()V\n" + "RETURN" ); } }