Path: blob/master/test/hotspot/jtreg/vmTestbase/nsk/jdi/Field/isVolatile/isvol001.java
41160 views
/*1* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/222324package nsk.jdi.Field.isVolatile;2526import nsk.share.*;27import nsk.share.jpda.*;28import nsk.share.jdi.*;2930import com.sun.jdi.*;31import java.util.*;32import java.io.*;3334public class isvol001 {35final static String IS_VOL = "volatile";36final static String NOT_VOL = "";37final static int TOTAL_FIELDS = 207;38final static String FIELDS_TYPE_NAME[][] = {39{"z0", NOT_VOL},40{"z1", NOT_VOL},41{"z2", NOT_VOL},42{"b0", NOT_VOL},43{"b1", NOT_VOL},44{"b2", NOT_VOL},45{"c0", NOT_VOL},46{"c1", NOT_VOL},47{"c2", NOT_VOL},48{"d0", NOT_VOL},49{"d1", NOT_VOL},50{"d2", NOT_VOL},51{"f0", NOT_VOL},52{"f1", NOT_VOL},53{"f2", NOT_VOL},54{"i0", NOT_VOL},55{"i1", NOT_VOL},56{"i2", NOT_VOL},57{"l0", NOT_VOL},58{"l1", NOT_VOL},59{"l2", NOT_VOL},6061{"z0V", IS_VOL},62{"z1V", IS_VOL},63{"z2V", IS_VOL},64{"b0V", IS_VOL},65{"b1V", IS_VOL},66{"b2V", IS_VOL},67{"c0V", IS_VOL},68{"c1V", IS_VOL},69{"c2V", IS_VOL},70{"d0V", IS_VOL},71{"d1V", IS_VOL},72{"d2V", IS_VOL},73{"f0V", IS_VOL},74{"f1V", IS_VOL},75{"f2V", IS_VOL},76{"i0V", IS_VOL},77{"i1V", IS_VOL},78{"i2V", IS_VOL},79{"l0V", IS_VOL},80{"l1V", IS_VOL},81{"l2V", IS_VOL},8283{"lS0", NOT_VOL},84{"lS1", NOT_VOL},85{"lS2", NOT_VOL},86{"lP0", NOT_VOL},87{"lP1", NOT_VOL},88{"lP2", NOT_VOL},89{"lU0", NOT_VOL},90{"lU1", NOT_VOL},91{"lU2", NOT_VOL},92{"lR0", NOT_VOL},93{"lR1", NOT_VOL},94{"lR2", NOT_VOL},95{"lT0", NOT_VOL},96{"lT1", NOT_VOL},97{"lT2", NOT_VOL},98{"lF0", NOT_VOL},99{"lF1", NOT_VOL},100{"lF2", NOT_VOL},101102{"lS0V", IS_VOL},103{"lS1V", IS_VOL},104{"lS2V", IS_VOL},105{"lP0V", IS_VOL},106{"lP1V", IS_VOL},107{"lP2V", IS_VOL},108{"lU0V", IS_VOL},109{"lU1V", IS_VOL},110{"lU2V", IS_VOL},111{"lR0V", IS_VOL},112{"lR1V", IS_VOL},113{"lR2V", IS_VOL},114{"lT0V", IS_VOL},115{"lT1V", IS_VOL},116{"lT2V", IS_VOL},117118{"X0", NOT_VOL},119{"X1", NOT_VOL},120{"X2", NOT_VOL},121{"Z0", NOT_VOL},122{"Z1", NOT_VOL},123{"Z2", NOT_VOL},124{"B0", NOT_VOL},125{"B1", NOT_VOL},126{"B2", NOT_VOL},127{"C0", NOT_VOL},128{"C1", NOT_VOL},129{"C2", NOT_VOL},130{"D0", NOT_VOL},131{"D1", NOT_VOL},132{"D2", NOT_VOL},133{"F0", NOT_VOL},134{"F1", NOT_VOL},135{"F2", NOT_VOL},136{"I0", NOT_VOL},137{"I1", NOT_VOL},138{"I2", NOT_VOL},139{"L0", NOT_VOL},140{"L1", NOT_VOL},141{"L2", NOT_VOL},142{"S0", NOT_VOL},143{"S1", NOT_VOL},144{"S2", NOT_VOL},145{"O0", NOT_VOL},146{"O1", NOT_VOL},147{"O2", NOT_VOL},148149{"X0V", IS_VOL},150{"X1V", IS_VOL},151{"X2V", IS_VOL},152{"Z0V", IS_VOL},153{"Z1V", IS_VOL},154{"Z2V", IS_VOL},155{"B0V", IS_VOL},156{"B1V", IS_VOL},157{"B2V", IS_VOL},158{"C0V", IS_VOL},159{"C1V", IS_VOL},160{"C2V", IS_VOL},161{"D0V", IS_VOL},162{"D1V", IS_VOL},163{"D2V", IS_VOL},164{"F0V", IS_VOL},165{"F1V", IS_VOL},166{"F2V", IS_VOL},167{"I0V", IS_VOL},168{"I1V", IS_VOL},169{"I2V", IS_VOL},170{"L0V", IS_VOL},171{"L1V", IS_VOL},172{"L2V", IS_VOL},173{"S0V", IS_VOL},174{"S1V", IS_VOL},175{"S2V", IS_VOL},176{"O0V", IS_VOL},177{"O1V", IS_VOL},178{"O2V", IS_VOL},179180{"LS0", NOT_VOL},181{"LS1", NOT_VOL},182{"LS2", NOT_VOL},183{"LP0", NOT_VOL},184{"LP1", NOT_VOL},185{"LP2", NOT_VOL},186{"LU0", NOT_VOL},187{"LU1", NOT_VOL},188{"LU2", NOT_VOL},189{"LR0", NOT_VOL},190{"LR1", NOT_VOL},191{"LR2", NOT_VOL},192{"LT0", NOT_VOL},193{"LT1", NOT_VOL},194{"LT2", NOT_VOL},195{"LF0", NOT_VOL},196{"LF1", NOT_VOL},197{"LF2", NOT_VOL},198199{"LS0V", IS_VOL},200{"LS1V", IS_VOL},201{"LS2V", IS_VOL},202{"LP0V", IS_VOL},203{"LP1V", IS_VOL},204{"LP2V", IS_VOL},205{"LU0V", IS_VOL},206{"LU1V", IS_VOL},207{"LU2V", IS_VOL},208{"LR0V", IS_VOL},209{"LR1V", IS_VOL},210{"LR2V", IS_VOL},211{"LT0V", IS_VOL},212{"LT1V", IS_VOL},213{"LT2V", IS_VOL},214215{"E0", NOT_VOL},216{"E1", NOT_VOL},217{"E2", NOT_VOL},218219{"E0V", IS_VOL},220{"E1V", IS_VOL},221{"E2V", IS_VOL},222223{"ES0", NOT_VOL},224{"ES1", NOT_VOL},225{"ES2", NOT_VOL},226{"EP0", NOT_VOL},227{"EP1", NOT_VOL},228{"EP2", NOT_VOL},229{"EU0", NOT_VOL},230{"EU1", NOT_VOL},231{"EU2", NOT_VOL},232{"ER0", NOT_VOL},233{"ER1", NOT_VOL},234{"ER2", NOT_VOL},235{"ET0", NOT_VOL},236{"ET1", NOT_VOL},237{"ET2", NOT_VOL},238{"EF0", NOT_VOL},239{"EF1", NOT_VOL},240{"EF2", NOT_VOL},241242{"ES0V", IS_VOL},243{"ES1V", IS_VOL},244{"ES2V", IS_VOL},245{"EP0V", IS_VOL},246{"EP1V", IS_VOL},247{"EP2V", IS_VOL},248{"EU0V", IS_VOL},249{"EU1V", IS_VOL},250{"EU2V", IS_VOL},251{"ER0V", IS_VOL},252{"ER1V", IS_VOL},253{"ER2V", IS_VOL},254{"ET0V", IS_VOL},255{"ET1V", IS_VOL},256{"ET2V", IS_VOL}257};258private static Log log;259private final static String prefix = "nsk.jdi.Field.isVolatile.";260private final static String className = "isvol001";261private final static String debugerName = prefix + className;262private final static String debugeeName = debugerName + "a";263264public static void main(String argv[]) {265System.exit(95 + run(argv, System.out));266}267268public static int run(String argv[], PrintStream out) {269ArgumentHandler argHandler = new ArgumentHandler(argv);270log = new Log(out, argHandler);271Binder binder = new Binder(argHandler, log);272Debugee debugee = binder.bindToDebugee(debugeeName273+ (argHandler.verbose() ? " -verbose" : ""));274IOPipe pipe = new IOPipe(debugee);275boolean testFailed = false;276List fields;277278// Connect with debugee and resume it279debugee.redirectStderr(out);280debugee.resume();281String line = pipe.readln();282if (line == null) {283log.complain("debuger FAILURE> UNEXPECTED debugee's signal - null");284return 2;285}286if (!line.equals("ready")) {287log.complain("debuger FAILURE> UNEXPECTED debugee's signal - "288+ line);289return 2;290}291else {292log.display("debuger> debugee's \"ready\" signal recieved.");293}294295// Get all fields from debugee296ReferenceType refType = debugee.classByName(debugeeName);297if (refType == null) {298log.complain("debuger FAILURE> Class " + debugeeName299+ " not found.");300return 2;301}302try {303fields = refType.allFields();304} catch (Exception e) {305log.complain("debuger FAILURE> Can't get fields from class");306log.complain("debuger FAILURE> Exception: " + e);307return 2;308}309int totalFields = fields.size();310if (totalFields < 1) {311log.complain("debuger FAILURE> Total number of fields read "312+ totalFields + ", should be " + TOTAL_FIELDS);313return 2;314}315log.display("debuger> Total fields found: " + totalFields);316Iterator fieldsIterator = fields.iterator();317for (int i = 0; fieldsIterator.hasNext(); i++) {318Field field = (Field)fieldsIterator.next();319boolean isVol = field.isVolatile();320String name = field.name();321String realIsVol;322323if (name == null) {324log.complain("debuger FAILURE 1> Name is null for " + i325+ " field");326testFailed = true;327continue;328}329log.display("debuger> " + i + " field (" + name + "), "330+ "isVolatile = " + isVol + " read.");331try {332realIsVol = getVolByName(name);333} catch (Error e) {334log.complain("debuger FAILURE 2> Unexpected Error " + e);335return 2;336}337// isVolatile() returns true if the field is volatile,338// returns false if the field is not volatile339if ((isVol && !realIsVol.equals(IS_VOL)) ||340(!isVol && realIsVol.equals(IS_VOL))341) {342log.complain("debuger FAILURE> " + i + " field " + name343+ ": read field.isVolatile() = " + isVol344+ " real isVolatile should be " + realIsVol);345testFailed = true;346}347}348pipe.println("quit");349debugee.waitFor();350int status = debugee.getStatus();351if (testFailed) {352log.complain("debuger FAILURE> TEST FAILED");353return 2;354} else {355if (status == 95) {356log.display("debuger> expected Debugee's exit "357+ "status - " + status);358return 0;359} else {360log.complain("debuger FAILURE> UNEXPECTED Debugee's exit "361+ "status (not 95) - " + status);362return 2;363}364}365}366367private static String getVolByName(String name)368throws Error369{370for (int i = 0; i < TOTAL_FIELDS; i++) {371String fieldName = FIELDS_TYPE_NAME[i][0];372if (fieldName.equals(name)) {373return FIELDS_TYPE_NAME[i][1];374}375}376throw new Error("Error in test. Unknown field " + name);377}378}379380381