comparison test/compiler/uncommontrap/TestStackBangRbp.java @ 13384:fca8f4799229

8028308: nsk regression, assert(obj->is_oop()) failed: not an oop Summary: rbp not restored when stack overflow is thrown from deopt/uncommon trap blobs Reviewed-by: kvn, iveresov
author roland
date Wed, 20 Nov 2013 12:46:08 +0100
parents
children
comparison
equal deleted inserted replaced
13383:938e1e64e28f 13384:fca8f4799229
1 /*
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test
26 * @bug 8028308
27 * @summary rbp not restored when stack overflow is thrown from deopt/uncommon trap blobs
28 * @run main/othervm -XX:-BackgroundCompilation -XX:CompileCommand=dontinline,TestStackBangRbp::m1 -XX:CompileCommand=exclude,TestStackBangRbp::m2 -Xss256K -XX:-UseOnStackReplacement TestStackBangRbp
29 *
30 */
31 public class TestStackBangRbp {
32
33 static class UnloadedClass1 {
34 }
35
36 static class UnloadedClass2 {
37 }
38
39 static Object m1(boolean deopt) {
40 long l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12,
41 l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24,
42 l25, l26, l27, l28, l29, l30, l31, l32, l33, l34, l35, l36,
43 l37, l38, l39, l40, l41, l42, l43, l44, l45, l46, l47, l48,
44 l49, l50, l51, l52, l53, l54, l55, l56, l57, l58, l59, l60,
45 l61, l62, l63, l64, l65, l66, l67, l68, l69, l70, l71, l72,
46 l73, l74, l75, l76, l77, l78, l79, l80, l81, l82, l83, l84,
47 l85, l86, l87, l88, l89, l90, l91, l92, l93, l94, l95, l96,
48 l97, l98, l99, l100, l101, l102, l103, l104, l105, l106, l107,
49 l108, l109, l110, l111, l112, l113, l114, l115, l116, l117,
50 l118, l119, l120, l121, l122, l123, l124, l125, l126, l127,
51 l128, l129, l130, l131, l132, l133, l134, l135, l136, l137,
52 l138, l139, l140, l141, l142, l143, l144, l145, l146, l147,
53 l148, l149, l150, l151, l152, l153, l154, l155, l156, l157,
54 l158, l159, l160, l161, l162, l163, l164, l165, l166, l167,
55 l168, l169, l170, l171, l172, l173, l174, l175, l176, l177,
56 l178, l179, l180, l181, l182, l183, l184, l185, l186, l187,
57 l188, l189, l190, l191, l192, l193, l194, l195, l196, l197,
58 l198, l199, l200, l201, l202, l203, l204, l205, l206, l207,
59 l208, l209, l210, l211, l212, l213, l214, l215, l216, l217,
60 l218, l219, l220, l221, l222, l223, l224, l225, l226, l227,
61 l228, l229, l230, l231, l232, l233, l234, l235, l236, l237,
62 l238, l239, l240, l241, l242, l243, l244, l245, l246, l247,
63 l248, l249, l250, l251, l252, l253, l254, l255, l256, l257,
64 l258, l259, l260, l261, l262, l263, l264, l265, l266, l267,
65 l268, l269, l270, l271, l272, l273, l274, l275, l276, l277,
66 l278, l279, l280, l281, l282, l283, l284, l285, l286, l287,
67 l288, l289, l290, l291, l292, l293, l294, l295, l296, l297,
68 l298, l299, l300, l301, l302, l303, l304, l305, l306, l307,
69 l308, l309, l310, l311, l312, l313, l314, l315, l316, l317,
70 l318, l319, l320, l321, l322, l323, l324, l325, l326, l327,
71 l328, l329, l330, l331, l332, l333, l334, l335, l336, l337,
72 l338, l339, l340, l341, l342, l343, l344, l345, l346, l347,
73 l348, l349, l350, l351, l352, l353, l354, l355, l356, l357,
74 l358, l359, l360, l361, l362, l363, l364, l365, l366, l367,
75 l368, l369, l370, l371, l372, l373, l374, l375, l376, l377,
76 l378, l379, l380, l381, l382, l383, l384, l385, l386, l387,
77 l388, l389, l390, l391, l392, l393, l394, l395, l396, l397,
78 l398, l399, l400, l401, l402, l403, l404, l405, l406, l407,
79 l408, l409, l410, l411, l412, l413, l414, l415, l416, l417,
80 l418, l419, l420, l421, l422, l423, l424, l425, l426, l427,
81 l428, l429, l430, l431, l432, l433, l434, l435, l436, l437,
82 l438, l439, l440, l441, l442, l443, l444, l445, l446, l447,
83 l448, l449, l450, l451, l452, l453, l454, l455, l456, l457,
84 l458, l459, l460, l461, l462, l463, l464, l465, l466, l467,
85 l468, l469, l470, l471, l472, l473, l474, l475, l476, l477,
86 l478, l479, l480, l481, l482, l483, l484, l485, l486, l487,
87 l488, l489, l490, l491, l492, l493, l494, l495, l496, l497,
88 l498, l499, l500, l501, l502, l503, l504, l505, l506, l507,
89 l508, l509, l510, l511;
90
91 long ll0, ll1, ll2, ll3, ll4, ll5, ll6, ll7, ll8, ll9, ll10, ll11, ll12,
92 ll13, ll14, ll15, ll16, ll17, ll18, ll19, ll20, ll21, ll22, ll23, ll24,
93 ll25, ll26, ll27, ll28, ll29, ll30, ll31, ll32, ll33, ll34, ll35, ll36,
94 ll37, ll38, ll39, ll40, ll41, ll42, ll43, ll44, ll45, ll46, ll47, ll48,
95 ll49, ll50, ll51, ll52, ll53, ll54, ll55, ll56, ll57, ll58, ll59, ll60,
96 ll61, ll62, ll63, ll64, ll65, ll66, ll67, ll68, ll69, ll70, ll71, ll72,
97 ll73, ll74, ll75, ll76, ll77, ll78, ll79, ll80, ll81, ll82, ll83, ll84,
98 ll85, ll86, ll87, ll88, ll89, ll90, ll91, ll92, ll93, ll94, ll95, ll96,
99 ll97, ll98, ll99, ll100, ll101, ll102, ll103, ll104, ll105, ll106, ll107,
100 ll108, ll109, ll110, ll111, ll112, ll113, ll114, ll115, ll116, ll117,
101 ll118, ll119, ll120, ll121, ll122, ll123, ll124, ll125, ll126, ll127,
102 ll128, ll129, ll130, ll131, ll132, ll133, ll134, ll135, ll136, ll137,
103 ll138, ll139, ll140, ll141, ll142, ll143, ll144, ll145, ll146, ll147,
104 ll148, ll149, ll150, ll151, ll152, ll153, ll154, ll155, ll156, ll157,
105 ll158, ll159, ll160, ll161, ll162, ll163, ll164, ll165, ll166, ll167,
106 ll168, ll169, ll170, ll171, ll172, ll173, ll174, ll175, ll176, ll177,
107 ll178, ll179, ll180, ll181, ll182, ll183, ll184, ll185, ll186, ll187,
108 ll188, ll189, ll190, ll191, ll192, ll193, ll194, ll195, ll196, ll197,
109 ll198, ll199, ll200, ll201, ll202, ll203, ll204, ll205, ll206, ll207,
110 ll208, ll209, ll210, ll211, ll212, ll213, ll214, ll215, ll216, ll217,
111 ll218, ll219, ll220, ll221, ll222, ll223, ll224, ll225, ll226, ll227,
112 ll228, ll229, ll230, ll231, ll232, ll233, ll234, ll235, ll236, ll237,
113 ll238, ll239, ll240, ll241, ll242, ll243, ll244, ll245, ll246, ll247,
114 ll248, ll249, ll250, ll251, ll252, ll253, ll254, ll255, ll256, ll257,
115 ll258, ll259, ll260, ll261, ll262, ll263, ll264, ll265, ll266, ll267,
116 ll268, ll269, ll270, ll271, ll272, ll273, ll274, ll275, ll276, ll277,
117 ll278, ll279, ll280, ll281, ll282, ll283, ll284, ll285, ll286, ll287,
118 ll288, ll289, ll290, ll291, ll292, ll293, ll294, ll295, ll296, ll297,
119 ll298, ll299, ll300, ll301, ll302, ll303, ll304, ll305, ll306, ll307,
120 ll308, ll309, ll310, ll311, ll312, ll313, ll314, ll315, ll316, ll317,
121 ll318, ll319, ll320, ll321, ll322, ll323, ll324, ll325, ll326, ll327,
122 ll328, ll329, ll330, ll331, ll332, ll333, ll334, ll335, ll336, ll337,
123 ll338, ll339, ll340, ll341, ll342, ll343, ll344, ll345, ll346, ll347,
124 ll348, ll349, ll350, ll351, ll352, ll353, ll354, ll355, ll356, ll357,
125 ll358, ll359, ll360, ll361, ll362, ll363, ll364, ll365, ll366, ll367,
126 ll368, ll369, ll370, ll371, ll372, ll373, ll374, ll375, ll376, ll377,
127 ll378, ll379, ll380, ll381, ll382, ll383, ll384, ll385, ll386, ll387,
128 ll388, ll389, ll390, ll391, ll392, ll393, ll394, ll395, ll396, ll397,
129 ll398, ll399, ll400, ll401, ll402, ll403, ll404, ll405, ll406, ll407,
130 ll408, ll409, ll410, ll411, ll412, ll413, ll414, ll415, ll416, ll417,
131 ll418, ll419, ll420, ll421, ll422, ll423, ll424, ll425, ll426, ll427,
132 ll428, ll429, ll430, ll431, ll432, ll433, ll434, ll435, ll436, ll437,
133 ll438, ll439, ll440, ll441, ll442, ll443, ll444, ll445, ll446, ll447,
134 ll448, ll449, ll450, ll451, ll452, ll453, ll454, ll455, ll456, ll457,
135 ll458, ll459, ll460, ll461, ll462, ll463, ll464, ll465, ll466, ll467,
136 ll468, ll469, ll470, ll471, ll472, ll473, ll474, ll475, ll476, ll477,
137 ll478, ll479, ll480, ll481, ll482, ll483, ll484, ll485, ll486, ll487,
138 ll488, ll489, ll490, ll491, ll492, ll493, ll494, ll495, ll496, ll497,
139 ll498, ll499, ll500, ll501, ll502, ll503, ll504, ll505, ll506, ll507,
140 ll508, ll509, ll510, ll511;
141
142 int i1 = TestStackBangRbp.i1;
143 int i2 = TestStackBangRbp.i2;
144 int i3 = TestStackBangRbp.i3;
145 int i4 = TestStackBangRbp.i4;
146 int i5 = TestStackBangRbp.i5;
147 int i6 = TestStackBangRbp.i6;
148 int i7 = TestStackBangRbp.i7;
149 int i8 = TestStackBangRbp.i8;
150 int i9 = TestStackBangRbp.i9;
151 int i10 = TestStackBangRbp.i10;
152 int i11 = TestStackBangRbp.i11;
153 int i12 = TestStackBangRbp.i12;
154 int i13 = TestStackBangRbp.i13;
155 int i14 = TestStackBangRbp.i14;
156 int i15 = TestStackBangRbp.i15;
157 int i16 = TestStackBangRbp.i16;
158
159 TestStackBangRbp.i1 = i1;
160 TestStackBangRbp.i2 = i2;
161 TestStackBangRbp.i3 = i3;
162 TestStackBangRbp.i4 = i4;
163 TestStackBangRbp.i5 = i5;
164 TestStackBangRbp.i6 = i6;
165 TestStackBangRbp.i7 = i7;
166 TestStackBangRbp.i8 = i8;
167 TestStackBangRbp.i9 = i9;
168 TestStackBangRbp.i10 = i10;
169 TestStackBangRbp.i11 = i11;
170 TestStackBangRbp.i12 = i12;
171 TestStackBangRbp.i13 = i13;
172 TestStackBangRbp.i14 = i14;
173 TestStackBangRbp.i15 = i15;
174 TestStackBangRbp.i16 = i16;
175
176 if (deopt) {
177 // deoptimize with integer in rbp
178 UnloadedClass1 res = new UnloadedClass1(); // forces deopt with c2
179 return res;
180 }
181 return null;
182 }
183
184 static boolean m2(boolean deopt) {
185 // call m2 recursively until stack overflow. Then call m3 that
186 // will call m1 and trigger and deopt in m1 while keeping a
187 // lot of objects live in registers at the call to m1
188
189 long l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12,
190 l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24,
191 l25, l26, l27, l28, l29, l30, l31, l32, l33, l34, l35, l36,
192 l37, l38, l39, l40, l41, l42, l43, l44, l45, l46, l47, l48,
193 l49, l50, l51, l52, l53, l54, l55, l56, l57, l58, l59, l60,
194 l61, l62, l63, l64, l65, l66, l67, l68, l69, l70, l71, l72,
195 l73, l74, l75, l76, l77, l78, l79, l80, l81, l82, l83, l84,
196 l85, l86, l87, l88, l89, l90, l91, l92, l93, l94, l95, l96,
197 l97, l98, l99, l100, l101, l102, l103, l104, l105, l106, l107,
198 l108, l109, l110, l111, l112, l113, l114, l115, l116, l117,
199 l118, l119, l120, l121, l122, l123, l124, l125, l126, l127,
200 l128, l129, l130, l131, l132, l133, l134, l135, l136, l137,
201 l138, l139, l140, l141, l142, l143, l144, l145, l146, l147,
202 l148, l149, l150, l151, l152, l153, l154, l155, l156, l157,
203 l158, l159, l160, l161, l162, l163, l164, l165, l166, l167,
204 l168, l169, l170, l171, l172, l173, l174, l175, l176, l177,
205 l178, l179, l180, l181, l182, l183, l184, l185, l186, l187,
206 l188, l189, l190, l191, l192, l193, l194, l195, l196, l197,
207 l198, l199, l200, l201, l202, l203, l204, l205, l206, l207,
208 l208, l209, l210, l211, l212, l213, l214, l215, l216, l217,
209 l218, l219, l220, l221, l222, l223, l224, l225, l226, l227,
210 l228, l229, l230, l231, l232, l233, l234, l235, l236, l237,
211 l238, l239, l240, l241, l242, l243, l244, l245, l246, l247,
212 l248, l249, l250, l251, l252, l253, l254, l255, l256, l257,
213 l258, l259, l260, l261, l262, l263, l264, l265, l266, l267,
214 l268, l269, l270, l271, l272, l273, l274, l275, l276, l277,
215 l278, l279, l280, l281, l282, l283, l284, l285, l286, l287,
216 l288, l289, l290, l291, l292, l293, l294, l295, l296, l297,
217 l298, l299, l300, l301, l302, l303, l304, l305, l306, l307,
218 l308, l309, l310, l311, l312, l313, l314, l315, l316, l317,
219 l318, l319, l320, l321, l322, l323, l324, l325, l326, l327,
220 l328, l329, l330, l331, l332, l333, l334, l335, l336, l337,
221 l338, l339, l340, l341, l342, l343, l344, l345, l346, l347,
222 l348, l349, l350, l351, l352, l353, l354, l355, l356, l357,
223 l358, l359, l360, l361, l362, l363, l364, l365, l366, l367,
224 l368, l369, l370, l371, l372, l373, l374, l375, l376, l377,
225 l378, l379, l380, l381, l382, l383, l384, l385, l386, l387,
226 l388, l389, l390, l391, l392, l393, l394, l395, l396, l397,
227 l398, l399, l400, l401, l402, l403, l404, l405, l406, l407,
228 l408, l409, l410, l411, l412, l413, l414, l415, l416, l417,
229 l418, l419, l420, l421, l422, l423, l424, l425, l426, l427,
230 l428, l429, l430, l431, l432, l433, l434, l435, l436, l437,
231 l438, l439, l440, l441, l442, l443, l444, l445, l446, l447,
232 l448, l449, l450, l451, l452, l453, l454, l455, l456, l457,
233 l458, l459, l460, l461, l462, l463, l464, l465, l466, l467,
234 l468, l469, l470, l471, l472, l473, l474, l475, l476, l477,
235 l478, l479, l480, l481, l482, l483, l484, l485, l486, l487,
236 l488, l489, l490, l491, l492, l493, l494, l495, l496, l497,
237 l498, l499, l500, l501, l502, l503, l504, l505, l506, l507,
238 l508, l509, l510, l511;
239
240 boolean do_m3 = false;
241 try {
242 do_m3 = m2(deopt);
243 } catch (StackOverflowError e) {
244 return true;
245 }
246 if (do_m3) {
247 m3(deopt);
248 }
249 return false;
250 }
251
252 static volatile Object o1 = new Object();
253
254 static volatile int i1 = 1;
255 static volatile int i2 = 2;
256 static volatile int i3 = 3;
257 static volatile int i4 = 4;
258 static volatile int i5 = 5;
259 static volatile int i6 = 6;
260 static volatile int i7 = 7;
261 static volatile int i8 = 8;
262 static volatile int i9 = 9;
263 static volatile int i10 = 10;
264 static volatile int i11 = 11;
265 static volatile int i12 = 12;
266 static volatile int i13 = 13;
267 static volatile int i14 = 14;
268 static volatile int i15 = 15;
269 static volatile int i16 = 16;
270
271 static void m3(boolean deopt) {
272 Object o1 = TestStackBangRbp.o1;
273 TestStackBangRbp.o1 = o1;
274
275 try {
276 m1(deopt);
277 } catch (StackOverflowError e) {
278 // deoptimize again. rbp holds an integer. It should have an object.
279 UnloadedClass2 res = new UnloadedClass2(); // forces deopt with c2
280 }
281 TestStackBangRbp.o1 = o1;
282 }
283
284 static public void main(String[] args) {
285 // get m1 & m3 compiled
286 for (int i = 0; i < 20000; i++) {
287 m1(false);
288 m3(false);
289 }
290 m2(true);
291
292 System.out.println("TEST PASSED");
293 }
294 }