1#!/bin/sh 2 3# 4# Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. 5# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 6# 7# This code is free software; you can redistribute it and/or modify it 8# under the terms of the GNU General Public License version 2 only, as 9# published by the Free Software Foundation. 10# 11# This code is distributed in the hope that it will be useful, but WITHOUT 12# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14# version 2 for more details (a copy is included in the LICENSE file that 15# accompanied this code). 16# 17# You should have received a copy of the GNU General Public License version 18# 2 along with this work; if not, write to the Free Software Foundation, 19# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20# 21# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22# or visit www.oracle.com if you need additional information or have any 23# questions. 24# 25 26# @test 27# @bug 4628760 28# @summary RedefineClasses gets assertion: "Should be a method entry in cpcache!" 29# @author jjh 30# 31# @run shell/timeout=180 RedefineClasses.sh 32 33# On windows, with b90, this gets this: 34# assert(u2_at_bcp >= 0 && u2_at_bcp < old_cache->length(), "Bad cpcache index!") 35# 36# Error happened during: VM_RedefineClasses 37# 38# Error ID: D:/jdk1.4/hotspot\src\share\vm\prims\jvmdi_hotswap.cpp, 331 39 40# On solaris, and on windows with 4559100 fixed, this test fails with: 41# 42# HotSpot Virtual Machine Error, assertion failure 43# Please report this error at 44# http://java.sun.com/cgi-bin/bugreport.cgi 45# 46# Java VM: Java HotSpot(TM) Client VM (1.4-internal-debug mixed mode) 47# 48# assert(old_cache->entry_at(u2_at_bcp)->is_method_entry(), "Should be a method entry in cpcache!") 49# 50# Error happened during: VM_RedefineClasses 51# 52# Error ID: M:\ws\m\b2\service_hs_baseline\src\share\vm\prims\jvmdi_hotswap.cpp, 335 53 54 55# With -Xcomp on solaris this passes, but takes 2 minutes, thus the /timeout above. 56 57# These are variables that can be set to control execution 58 59java=java 60 61createJavaFile() 62{ 63 cat <<EOF > $1.java.1 64 65 66import java.lang.Thread; 67import java.util.HashMap; 68import javax.swing.*; 69import java.util.*; 70 71 72public class $1 { 73 int xxx = 20; 74 //ThreadGroup k = new ThreadGroup("group"); 75 int i; 76 77 public $1() { 78 } 79 80 public void a1() { 81 a2(); 82 } 83 84 public void a2() { 85 a3(); 86 } 87 88 public void a3() { 89 System.out.println("out from a3"); // @1 breakpoint 90 //System.out.println("hello world"); // @ 1 delete this isn't even necesary 91 } 92 public void a4() { 93 System.out.println("in a4"); 94 int i = 2; 95 int j = 3333; 96 System.out.println("i + j = " + (i + j)); 97 System.out.println("out from a4"); 98 System.out.println("def"); 99 a1(); 100 } 101 102 public void aa() { 103 a4(); 104 System.out.println("out from aa"); 105 } 106 107 108 public static void main(String[] args) { 109 byte xyz[] = new byte[] { 'a', 'b', 'c' }; 110 111 int x1 = 100; 112 x1 = 101; 113 x1 = 102; 114 x1 = 103; 115 String m1 = "def"; 116 String m2 = "abc"; 117 String m3 = "def"; 118 119 int[] m = new int[] { 100, 200, 300 }; 120 121 $1 untitled31 = new $1(); 122 untitled31.aa(); 123 } 124} 125 126EOF 127} 128 129# This is called to feed cmds to jdb. 130dojdbCmds() 131{ 132 setBkpts @1 133 runToBkpt 134 cmd redefine $classname $tmpFileDir/$classname.class 135 cmd redefine $classname $tmpFileDir/$classname.class 136 cmd redefine $classname $tmpFileDir/$classname.class 137} 138 139 140mysetup() 141{ 142 if [ -z "$TESTSRC" ] ; then 143 TESTSRC=. 144 fi 145 146 for ii in . $TESTSRC $TESTSRC/.. ; do 147 if [ -r "$ii/ShellScaffold.sh" ] ; then 148 . $ii/ShellScaffold.sh 149 break 150 fi 151 done 152} 153 154# You could replace this next line with the contents 155# of ShellScaffold.sh and this script will run just the same. 156mysetup 157 158runit 159pass 160