annotate test/compiler/6880034/Test6880034.java @ 1314:3f0549ed0c98

6921710: G1: assert(new_finger >= _finger && new_finger < _region_limit,"invariant") Summary: If CM task was aborted while scanning the last object of the specified region and the size of that object is equal to bitmap's granularity then the next offset would be equal or over the region limit which is exactly what the assertion states. Reviewed-by: ysr, tonyp, jmasa
author apetrusenko
date Thu, 18 Mar 2010 01:48:28 -0700
parents 1ce3281a8e93
children c18cbe5936b8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1007
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
1 /*
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
2 * Copyright 2009 SAP AG. All Rights Reserved.
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
4 *
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
7 * published by the Free Software Foundation.
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
8 *
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
13 * accompanied this code).
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
14 *
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
18 *
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
20 * CA 95054 USA or visit www.sun.com if you need additional information or
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
21 * have any questions.
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
22 */
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
23
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
24 /**
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
25 * @test
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
26 * @bug 6880034
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
27 * @summary SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
28 *
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
29 * @run main/othervm -Xcomp -Xbatch -XX:CompileCommand=compileonly,Test6880034,deopt_compiledframe_at_safepoint -XX:+PrintCompilation Test6880034
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
30 */
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
31
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
32
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
33
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
34 // This test provokes a deoptimisation at a safepoint.
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
35 //
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
36 // It achieves this by compiling the method 'deopt_compiledframe_at_safepoint'
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
37 // before its first usage at a point in time when a call to the virtual method
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
38 // A::doSomething() from within 'deopt_compiledframe_at_safepoint' can be
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
39 // optimised to a static call because class A has no descendants.
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
40 //
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
41 // Later, when deopt_compiledframe_at_safepoint() is running, class B which
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
42 // extends A and overrides the virtual method "doSomething()", is loaded
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
43 // asynchronously in another thread. This makes the compiled code of
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
44 // 'deopt_compiledframe_at_safepoint' invalid and triggers a deoptimisation of
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
45 // the frame where 'deopt_compiledframe_at_safepoint' is running in a
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
46 // loop.
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
47 //
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
48 // The deoptimisation leads to a SIGBUS on 64-bit server VMs on SPARC and to
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
49 // an incorrect result on 32-bit server VMs on SPARC due to a regression
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
50 // introduced by the change: "6420645: Create a vm that uses compressed oops
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
51 // for up to 32gb heapsizes"
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
52 // (http://hg.openjdk.java.net/jdk7/jdk7/hotspot/rev/ba764ed4b6f2). Further
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
53 // investigation showed that change 6420645 is not really the root cause of
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
54 // this error but only reveals a problem with the float register encodings in
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
55 // sparc.ad which was hidden until now.
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
56 //
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
57 // Notice that for this test to fail in jtreg it is crucial that
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
58 // deopt_compiledframe_at_safepoint() runs in the main thread. Otherwise a
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
59 // crash in deopt_compiledframe_at_safepoint() will not be detected as a test
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
60 // failure by jtreg.
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
61 //
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
62 // Author: Volker H. Simonis
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
63
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
64 class A {
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
65 public int doSomething() {
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
66 return 0;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
67 }
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
68 }
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
69
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
70 class B extends A {
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
71 public B() {}
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
72 // override 'A::doSomething()'
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
73 public int doSomething() {
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
74 return 1;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
75 }
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
76 }
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
77
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
78 class G {
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
79 public static volatile A a = new A();
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
80
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
81 // Change 'a' to point to a 'B' object
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
82 public static void setAtoB() {
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
83 try {
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
84 a = (A) ClassLoader.
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
85 getSystemClassLoader().
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
86 loadClass("B").
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
87 getConstructor(new Class[] {}).
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
88 newInstance(new Object[] {});
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
89 }
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
90 catch (Exception e) {
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
91 System.out.println(e);
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
92 }
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
93 }
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
94 }
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
95
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
96 public class Test6880034 {
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
97
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
98 public static volatile boolean is_in_loop = false;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
99 public static volatile boolean stop_while_loop = false;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
100
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
101 public static double deopt_compiledframe_at_safepoint() {
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
102 // This will be an optimised static call to A::doSomething() until we load "B"
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
103 int i = G.a.doSomething();
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
104
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
105 // Need more than 16 'double' locals in this frame
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
106 double local1 = 1;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
107 double local2 = 2;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
108 double local3 = 3;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
109 double local4 = 4;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
110 double local5 = 5;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
111 double local6 = 6;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
112 double local7 = 7;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
113 double local8 = 8;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
114
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
115 long k = 0;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
116 // Once we load "B", this method will be made 'not entrant' and deoptimised
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
117 // at the safepoint which is at the end of this loop.
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
118 while (!stop_while_loop) {
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
119 if (k == 1) local1 += i;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
120 if (k == 2) local2 += i;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
121 if (k == 3) local3 += i;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
122 if (k == 4) local4 += i;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
123 if (k == 5) local5 += i;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
124 if (k == 6) local6 += i;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
125 if (k == 7) local7 += i;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
126 if (k == 8) local8 += i;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
127
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
128 // Tell the world that we're now running wild in the loop
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
129 if (k++ == 20000) is_in_loop = true;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
130 }
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
131
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
132 return
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
133 local1 + local2 + local3 + local4 +
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
134 local5 + local6 + local7 + local8 + i;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
135 }
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
136
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
137 public static void main(String[] args) {
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
138
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
139 // Just to resolve G before we compile deopt_compiledframe_at_safepoint()
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
140 G g = new G();
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
141
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
142 // Asynchronous thread which will eventually invalidate the code for
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
143 // deopt_compiledframe_at_safepoint() and therefore triggering a
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
144 // deoptimisation of that method.
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
145 new Thread() {
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
146 public void run() {
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
147 while (!is_in_loop) {
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
148 // Wait until the loop is running
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
149 }
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
150 // Load class 'B' asynchronously..
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
151 G.setAtoB();
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
152 // ..and stop the loop
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
153 stop_while_loop = true;
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
154 }
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
155 }.start();
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
156
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
157 // Run the loop in deopt_compiledframe_at_safepoint()
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
158 double retVal = deopt_compiledframe_at_safepoint();
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
159
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
160 System.out.println(retVal == 36 ? "OK" : "ERROR : " + retVal);
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
161 if (retVal != 36) throw new RuntimeException();
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
162 }
1ce3281a8e93 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
163 }