mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2025-12-06 09:29:38 +01:00
8300829: Make CtwRunner available as an independent tool
Reviewed-by: xliu, phh
This commit is contained in:
committed by
Paul Hohensee
parent
0a34018797
commit
314e9b3dcc
1
test/hotspot/jtreg/testlibrary/ctw/.gitignore
vendored
Normal file
1
test/hotspot/jtreg/testlibrary/ctw/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
dist/
|
||||
@@ -48,6 +48,8 @@ LIB_FILES = $(shell find $(TESTLIBRARY_DIR)/jdk/test/lib/ \
|
||||
$(TESTLIBRARY_DIR)/jtreg \
|
||||
-maxdepth 1 -name '*.java')
|
||||
WB_SRC_FILES = $(shell find $(TESTLIBRARY_DIR)/jdk/test/lib/compiler $(TESTLIBRARY_DIR)/jdk/test/whitebox -name '*.java')
|
||||
WB_CLASS_FILES := $(subst $(TESTLIBRARY_DIR)/,,$(WB_SRC_FILES))
|
||||
WB_CLASS_FILES := $(patsubst %.java,%.class,$(WB_CLASS_FILES))
|
||||
EXPORTS=--add-exports java.base/jdk.internal.jimage=ALL-UNNAMED \
|
||||
--add-exports java.base/jdk.internal.misc=ALL-UNNAMED \
|
||||
--add-exports java.base/jdk.internal.module=ALL-UNNAMED \
|
||||
@@ -58,7 +60,8 @@ EXPORTS=--add-exports java.base/jdk.internal.jimage=ALL-UNNAMED \
|
||||
--add-exports java.base/jdk.internal.classfile.java.lang.constant=ALL-UNNAMED \
|
||||
--add-exports java.base/jdk.internal.access=ALL-UNNAMED
|
||||
|
||||
MAIN_CLASS = sun.hotspot.tools.ctw.CompileTheWorld
|
||||
CTW_MAIN_CLASS = sun.hotspot.tools.ctw.CompileTheWorld
|
||||
CTWRUNNER_MAIN_CLASS = sun.hotspot.tools.ctw.CtwRunner
|
||||
|
||||
.PHONY: clean cleantmp
|
||||
|
||||
@@ -78,22 +81,24 @@ $(DST_DIR)/ctw.sh: $(DST_DIR)
|
||||
echo '$${JAVA_HOME}/bin/java $${JAVA_OPTIONS} $(EXPORTS) -XX:-UseCounterDecay -Xbatch "-XX:CompileCommand=exclude,java/lang/invoke/MethodHandle.*" -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:wb.jar -jar ctw.jar $$@' > $@
|
||||
chmod a+x $@
|
||||
|
||||
$(DST_DIR)/ctwrunner.sh: $(DST_DIR)
|
||||
echo '$${JAVA_HOME}/bin/java $${JAVA_OPTIONS} -Dtest.jdk=$${JAVA_HOME} -cp ctw.jar $(CTWRUNNER_MAIN_CLASS) $$@' > $@
|
||||
chmod a+x $@
|
||||
|
||||
$(DST_DIR)/ctw.jar: filelist $(DST_DIR)/wb.jar
|
||||
@mkdir -p $(OUTPUT_DIR)
|
||||
$(JAVAC) $(EXPORTS) -sourcepath $(SRC_DIR) -d $(OUTPUT_DIR) -cp $(DST_DIR)/wb.jar @filelist
|
||||
$(JAR) --create --file=$@ --main-class $(MAIN_CLASS) -C $(OUTPUT_DIR) .
|
||||
$(JAR) --create --file=$@ --main-class $(CTW_MAIN_CLASS) -C $(OUTPUT_DIR) .
|
||||
@rm -rf $(OUTPUT_DIR)
|
||||
|
||||
$(DST_DIR)/wb.jar: wb_filelist $(DST_DIR)
|
||||
@mkdir -p $(OUTPUT_DIR)
|
||||
$(JAVAC) -sourcepath $(TESTLIBRARY_DIR) \
|
||||
-d $(OUTPUT_DIR) \
|
||||
-d $(DST_DIR) \
|
||||
-cp $(OUTPUT_DIR) \
|
||||
@wb_filelist
|
||||
$(JAR) --create --file=$@ -C $(OUTPUT_DIR) .
|
||||
@rm -rf $(OUTPUT_DIR)
|
||||
cd $(DST_DIR); $(JAR) --create --file=wb.jar $(WB_CLASS_FILES)
|
||||
|
||||
$(DST_DIR)/ctw.zip: $(DST_DIR)/ctw.sh $(DST_DIR)/wb.jar $(DST_DIR)/ctw.jar
|
||||
$(DST_DIR)/ctw.zip: $(DST_DIR)/ctw.sh $(DST_DIR)/ctwrunner.sh $(DST_DIR)/wb.jar $(DST_DIR)/ctw.jar $(DST_DIR)/ctwrunner.sh
|
||||
zip -j $@ $?
|
||||
|
||||
wb_filelist: $(WB_SRC_FILES)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2017, 2023, 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
|
||||
@@ -34,6 +34,7 @@ import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Predicate;
|
||||
@@ -52,6 +53,14 @@ public class CtwRunner {
|
||||
private static final Predicate<String> IS_CLASS_LINE = Pattern.compile(
|
||||
"^\\[\\d+\\]\\s*\\S+\\s*$").asPredicate();
|
||||
|
||||
/**
|
||||
* Value of {@code -Dsun.hotspot.tools.ctwrunner.ctw_extra_args}. Extra
|
||||
* comma-separated arguments to pass to CTW subprocesses.
|
||||
*/
|
||||
private static final String CTW_EXTRA_ARGS
|
||||
= System.getProperty("sun.hotspot.tools.ctwrunner.ctw_extra_args", "");
|
||||
|
||||
|
||||
private static final String USAGE = "Usage: CtwRunner <artifact to compile> [start[%] stop[%]]";
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
@@ -258,43 +267,51 @@ public class CtwRunner {
|
||||
String phase = phaseName(classStart);
|
||||
Path file = Paths.get(phase + ".cmd");
|
||||
var rng = Utils.getRandomInstance();
|
||||
|
||||
ArrayList<String> Args = new ArrayList<String>(Arrays.asList(
|
||||
"-Xbatch",
|
||||
"-XX:-UseCounterDecay",
|
||||
"-XX:-ShowMessageBoxOnError",
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
// redirect VM output to cerr so it won't collide w/ ctw output
|
||||
"-XX:+DisplayVMOutputToStderr",
|
||||
// define phase start
|
||||
"-DCompileTheWorldStartAt=" + classStart,
|
||||
"-DCompileTheWorldStopAt=" + classStop,
|
||||
// CTW library uses WhiteBox API
|
||||
"-XX:+WhiteBoxAPI", "-Xbootclasspath/a:.",
|
||||
// export jdk.internal packages used by CTW library
|
||||
"--add-exports", "java.base/jdk.internal.jimage=ALL-UNNAMED",
|
||||
"--add-exports", "java.base/jdk.internal.misc=ALL-UNNAMED",
|
||||
"--add-exports", "java.base/jdk.internal.reflect=ALL-UNNAMED",
|
||||
"--add-exports", "java.base/jdk.internal.access=ALL-UNNAMED",
|
||||
// enable diagnostic logging
|
||||
"-XX:+LogCompilation",
|
||||
// use phase specific log, hs_err and ciReplay files
|
||||
String.format("-XX:LogFile=hotspot_%s_%%p.log", phase),
|
||||
String.format("-XX:ErrorFile=hs_err_%s_%%p.log", phase),
|
||||
String.format("-XX:ReplayDataFile=replay_%s_%%p.log", phase),
|
||||
// MethodHandle MUST NOT be compiled
|
||||
"-XX:CompileCommand=exclude,java/lang/invoke/MethodHandle.*",
|
||||
// Stress* are c2-specific stress flags, so IgnoreUnrecognizedVMOptions is needed
|
||||
"-XX:+IgnoreUnrecognizedVMOptions",
|
||||
"-XX:+StressLCM",
|
||||
"-XX:+StressGCM",
|
||||
"-XX:+StressIGVN",
|
||||
"-XX:+StressCCP",
|
||||
// StressSeed is uint
|
||||
"-XX:StressSeed=" + Math.abs(rng.nextInt())));
|
||||
|
||||
for (String arg : CTW_EXTRA_ARGS.split(",")) {
|
||||
Args.add(arg);
|
||||
}
|
||||
|
||||
// CTW entry point
|
||||
Args.add(CompileTheWorld.class.getName());
|
||||
Args.add(target);
|
||||
|
||||
try {
|
||||
Files.write(file, List.of(
|
||||
"-Xbatch",
|
||||
"-XX:-UseCounterDecay",
|
||||
"-XX:-ShowMessageBoxOnError",
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
// redirect VM output to cerr so it won't collide w/ ctw output
|
||||
"-XX:+DisplayVMOutputToStderr",
|
||||
// define phase start
|
||||
"-DCompileTheWorldStartAt=" + classStart,
|
||||
"-DCompileTheWorldStopAt=" + classStop,
|
||||
// CTW library uses WhiteBox API
|
||||
"-XX:+WhiteBoxAPI", "-Xbootclasspath/a:.",
|
||||
// export jdk.internal packages used by CTW library
|
||||
"--add-exports", "java.base/jdk.internal.jimage=ALL-UNNAMED",
|
||||
"--add-exports", "java.base/jdk.internal.misc=ALL-UNNAMED",
|
||||
"--add-exports", "java.base/jdk.internal.reflect=ALL-UNNAMED",
|
||||
"--add-exports", "java.base/jdk.internal.access=ALL-UNNAMED",
|
||||
// enable diagnostic logging
|
||||
"-XX:+LogCompilation",
|
||||
// use phase specific log, hs_err and ciReplay files
|
||||
String.format("-XX:LogFile=hotspot_%s_%%p.log", phase),
|
||||
String.format("-XX:ErrorFile=hs_err_%s_%%p.log", phase),
|
||||
String.format("-XX:ReplayDataFile=replay_%s_%%p.log", phase),
|
||||
// MethodHandle MUST NOT be compiled
|
||||
"-XX:CompileCommand=exclude,java/lang/invoke/MethodHandle.*",
|
||||
// Stress* are c2-specific stress flags, so IgnoreUnrecognizedVMOptions is needed
|
||||
"-XX:+IgnoreUnrecognizedVMOptions",
|
||||
"-XX:+StressLCM",
|
||||
"-XX:+StressGCM",
|
||||
"-XX:+StressIGVN",
|
||||
"-XX:+StressCCP",
|
||||
// StressSeed is uint
|
||||
"-XX:StressSeed=" + Math.abs(rng.nextInt()),
|
||||
// CTW entry point
|
||||
CompileTheWorld.class.getName(),
|
||||
target));
|
||||
Files.write(file, Args);
|
||||
} catch (IOException e) {
|
||||
throw new Error("can't create " + file, e);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user