diff -r a2f1923b3e16 -r e409244ce72e test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetLocalVariableTable/localtab004/localtab004.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetLocalVariableTable/localtab004/localtab004.cpp Tue Aug 28 14:37:34 2018 -0700 @@ -0,0 +1,226 @@ +/* + * Copyright (c) 2003, 2018, 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. + * + * 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. + */ + +#include +#include +#include +#include "agent_common.h" + +#include "nsk_tools.h" +#include "JVMTITools.h" +#include "jvmti_tools.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define METH_NUM 3 /* overall number of methods */ + +#define STATUS_FAILED 2 +#define PASSED 0 + +typedef struct { /* local variable info */ + char *v_name; /* a variable name */ + char *v_sign; /* JVM type signature */ +} localVar; + +/* expected local variable info are below */ +static localVar constr_lv[] = { /* constructor's local variables */ + {(char*) "this", (char*) "Lnsk/jvmti/GetLocalVariableTable/localtab004a;"}, + {(char*) "constr_i", (char*) "I"}, + {(char*) "constr_l", (char*) "J"}, + {(char*) "constr_d", (char*) "D"}, + {(char*) "constr_f", (char*) "F"}, + {(char*) "constr_c", (char*) "C"} +}; + +static localVar finMeth_lv[] = { /* finMethod()'s local variables */ + {(char*) "this", (char*) "Lnsk/jvmti/GetLocalVariableTable/localtab004a;"}, + {(char*) "fin_c", (char*) "C"}, + {(char*) "fin_i", (char*) "J"}, + {(char*) "fin_j", (char*) "I"}, + {(char*) "fin_k", (char*) "J"}, + {(char*) "fin_l", (char*) "J"}, + {(char*) "fin_f", (char*) "F"} +}; + +static localVar statMeth_lv[] = { /* statMethod()'s local variables */ + {(char*) "stat_x", (char*) "I"}, + {(char*) "stat_y", (char*) "I"}, + {(char*) "stat_z", (char*) "I"}, + {(char*) "stat_j", (char*) "D"}, + {(char*) "stat_i", (char*) "I"} +}; + +typedef struct { /* local variables of a method */ + int inst; /* type of a method: 0- static; 1- instance */ + char *m_name; /* a method name */ + char *m_sign; /* JVM signature of a method */ + int vcount; /* overall number of local variables */ + localVar *vars; + jmethodID mid; /* JNI's method ID */ +} methodInfo; + +/* list of tested methods */ +static methodInfo methInfo[] = { + {1, (char*) "", (char*) "()V", 6, constr_lv, NULL}, + {1, (char*) "finMethod", (char*) "(CJIJ)V", 7, finMeth_lv, NULL}, + {0, (char*) "statMethod", (char*) "(III)D", 5, statMeth_lv, NULL} +}; + +static jvmtiEnv *jvmti = NULL; +static jvmtiCapabilities caps; + +static int checkAttr(JNIEnv *jni_env, jclass testedCls) { + int i, j, k; + int totRes = PASSED; + jint count = -1; + jvmtiLocalVariableEntry *lv_table; + + for (i=0; i