TestStackBangRbp.java revision 11486:3950d1713ffa
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 -Xss512K -XX:-UseOnStackReplacement TestStackBangRbp
29 *
30 */
31public 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}
295