test/compiler/uncommontrap/TestStackBangMonitorOwned.java

Tue, 01 Apr 2014 09:36:49 +0200

author
roland
date
Tue, 01 Apr 2014 09:36:49 +0200
changeset 6723
0bf37f737702
parent 0
f90c822e73f8
permissions
-rw-r--r--

8032410: compiler/uncommontrap/TestStackBangRbp.java times out on Solaris-Sparc V9
Summary: make compiled code bang the stack by the worst case size of the interpreter frame at deoptimization points.
Reviewed-by: twisti, kvn

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

mercurial