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 -Xss392K -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 }