hotspot/test/runtime/memory/ReserveMemory.java
author minqi
Wed, 15 Apr 2015 17:34:28 -0700
changeset 30240 a7ba42fa1df6
parent 29678 dd2f3932c21e
child 30604 b8d532cb6420
permissions -rw-r--r--
8074354: Make CreateMinidumpOnCrash a new name and available on all platforms Summary: Rename CreateMinidumpOnCrash which is used only for Windows as CreateCoredumpOnCrash and make it available for all platforms. Changed order for dumping core on Windows to be similar on other platforms. Also reviewed by thomas.stuefe@gmail.com Reviewed-by: dcubed Contributed-by: yumin.qi@oracle.com, thomas.stuefe@gmail.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17083
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
     1
/*
29678
dd2f3932c21e 8075586: Add @modules as needed to the open hotspot tests
ykantser
parents: 28190
diff changeset
     2
 * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
17083
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
     4
 *
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
     7
 * published by the Free Software Foundation.
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
     8
 *
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    13
 * accompanied this code).
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    14
 *
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    18
 *
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    21
 * questions.
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    22
 */
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    23
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    24
/*
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    25
 * @test
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    26
 * @key regression
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    27
 * @bug 8012015
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    28
 * @summary Make sure reserved (but uncommitted) memory is not accessible
28190
5a6b07edeb21 8066433: Move Whitebox test library to top level repository
thartmann
parents: 25958
diff changeset
    29
 * @library /testlibrary /../../test/lib
29678
dd2f3932c21e 8075586: Add @modules as needed to the open hotspot tests
ykantser
parents: 28190
diff changeset
    30
 * @modules java.base/sun.misc
dd2f3932c21e 8075586: Add @modules as needed to the open hotspot tests
ykantser
parents: 28190
diff changeset
    31
 *          java.management
17083
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    32
 * @build ReserveMemory
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    33
 * @run main ClassFileInstaller sun.hotspot.WhiteBox
25958
8dc85547d6d6 8011397: JTREG needs to copy additional WhiteBox class file to JTwork/scratch/sun/hotspot
mgerdin
parents: 25334
diff changeset
    34
 *                              sun.hotspot.WhiteBox$WhiteBoxPermission
17083
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    35
 * @run main ReserveMemory
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    36
 */
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    37
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    38
import com.oracle.java.testlibrary.*;
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    39
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    40
import sun.hotspot.WhiteBox;
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    41
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    42
public class ReserveMemory {
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    43
  private static boolean isWindows() {
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    44
    return System.getProperty("os.name").toLowerCase().startsWith("win");
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    45
  }
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    46
17824
24dc83d7c1d7 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 17083
diff changeset
    47
  private static boolean isOsx() {
24dc83d7c1d7 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 17083
diff changeset
    48
    return System.getProperty("os.name").toLowerCase().startsWith("mac");
24dc83d7c1d7 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 17083
diff changeset
    49
  }
24dc83d7c1d7 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 17083
diff changeset
    50
17083
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    51
  public static void main(String args[]) throws Exception {
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    52
    if (args.length > 0) {
17824
24dc83d7c1d7 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 17083
diff changeset
    53
      WhiteBox.getWhiteBox().readReservedMemory();
17083
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    54
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    55
      throw new Exception("Read of reserved/uncommitted memory unexpectedly succeeded, expected crash!");
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    56
    }
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    57
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    58
    ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    59
          "-Xbootclasspath/a:.",
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    60
          "-XX:+UnlockDiagnosticVMOptions",
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    61
          "-XX:+WhiteBoxAPI",
20390
a86c9ed78205 8023796: [TESTBUG] Add -XX:-TransmitErrorReport to runtime/6888954/vmerrors.sh
mseledtsov
parents: 17824
diff changeset
    62
          "-XX:-TransmitErrorReport",
25334
aadafa984752 8047878: [TESTBUG] runtime/memory/ReadFromNoaccessArea.java and runtime/memory/ReserveMemory.java time out on Solaris
ctornqvi
parents: 20390
diff changeset
    63
          "-Xmx32m",
17083
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    64
          "ReserveMemory",
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    65
          "test");
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    66
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    67
    OutputAnalyzer output = new OutputAnalyzer(pb.start());
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    68
    if (isWindows()) {
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    69
      output.shouldContain("EXCEPTION_ACCESS_VIOLATION");
17824
24dc83d7c1d7 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 17083
diff changeset
    70
    } else if (isOsx()) {
24dc83d7c1d7 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 17083
diff changeset
    71
      output.shouldContain("SIGBUS");
17083
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    72
    } else {
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    73
      output.shouldContain("SIGSEGV");
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    74
    }
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    75
  }
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents:
diff changeset
    76
}