mirror of
https://github.com/openjdk/jdk.git
synced 2026-01-31 13:38:47 +00:00
8257220: [JVMCI] option validation should not result in a heavy-weight VM crash
Reviewed-by: kvn
This commit is contained in:
parent
c2af27beb0
commit
c5d95071df
@ -379,8 +379,10 @@ public final class HotSpotJVMCIRuntime implements JVMCIRuntime {
|
||||
/**
|
||||
* Parses all system properties starting with {@value #JVMCI_OPTION_PROPERTY_PREFIX} and
|
||||
* initializes the options based on their values.
|
||||
*
|
||||
* @param compilerToVm
|
||||
*/
|
||||
static void parse() {
|
||||
static void parse(CompilerToVM compilerToVm) {
|
||||
Map<String, String> savedProps = jdk.vm.ci.services.Services.getSavedProperties();
|
||||
for (Map.Entry<String, String> e : savedProps.entrySet()) {
|
||||
String name = e.getKey();
|
||||
@ -395,14 +397,17 @@ public final class HotSpotJVMCIRuntime implements JVMCIRuntime {
|
||||
}
|
||||
}
|
||||
Formatter msg = new Formatter();
|
||||
msg.format("Could not find option %s", name);
|
||||
msg.format("Error parsing JVMCI options: Could not find option %s", name);
|
||||
if (!matches.isEmpty()) {
|
||||
msg.format("%nDid you mean one of the following?");
|
||||
for (String match : matches) {
|
||||
msg.format("%n %s=<value>", match);
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException(msg.toString());
|
||||
msg.format("%nError: A fatal exception has occurred. Program will exit.%n");
|
||||
byte[] msgBytes = msg.toString().getBytes();
|
||||
compilerToVm.writeDebugOutput(msgBytes, 0, msgBytes.length, true, true);
|
||||
compilerToVm.callSystemExit(1);
|
||||
} else if (value instanceof Option) {
|
||||
Option option = (Option) value;
|
||||
option.init(e.getValue());
|
||||
@ -531,7 +536,7 @@ public final class HotSpotJVMCIRuntime implements JVMCIRuntime {
|
||||
}
|
||||
|
||||
// Initialize the Option values.
|
||||
Option.parse();
|
||||
Option.parse(compilerToVm);
|
||||
|
||||
String hostArchitecture = config.getHostArchitectureName();
|
||||
|
||||
|
||||
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test TestInvalidJVMCIOption
|
||||
* @bug 8257220
|
||||
* @summary Ensures invalid JVMCI options do not crash the VM with a hs-err log.
|
||||
* @requires vm.jvmci & vm.compMode == "Xmixed"
|
||||
* @library /test/lib
|
||||
* @run driver TestInvalidJVMCIOption
|
||||
*/
|
||||
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
|
||||
public class TestInvalidJVMCIOption {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockExperimentalVMOptions",
|
||||
"-XX:+EagerJVMCI",
|
||||
"-XX:+UseJVMCICompiler",
|
||||
"-Djvmci.XXXXXXXXX=true");
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
String expectStdout = String.format(
|
||||
"Error parsing JVMCI options: Could not find option jvmci.XXXXXXXXX%n" +
|
||||
"Error: A fatal exception has occurred. Program will exit.%n");
|
||||
String actualStdout = output.getStdout();
|
||||
if (!actualStdout.equals(expectStdout)) {
|
||||
throw new RuntimeException(String.format("Invalid STDOUT:%nExpect:%n%s%nActual:%n%s", expectStdout, actualStdout));
|
||||
}
|
||||
if (!output.getStderr().isEmpty()) {
|
||||
throw new RuntimeException("STDERR was not empty: " + output.getStderr());
|
||||
}
|
||||
output.shouldHaveExitValue(1);
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user