To separate multiple keyword=value pairs, use ; (semicolon). Since the shell normally eats ;, the recommended usage is to write the assignment inside qoutes, e.g. JTREG="...;...". This will also make sure spaces are preserved, as in JTREG="VM_OPTIONS=-XshowSettings -Xlog:gc+ref=debug".
(Other ways are possible, e.g. using backslash: JTREG=JOBS=1\;TIMEOUT=8. Also, as a special technique, the string %20 will be replaced with space for certain options, e.g. JTREG=VM_OPTIONS=-XshowSettings%20-Xlog:gc+ref=debug. This can be useful if you have layers of scripts and have trouble getting proper quoting of command line arguments through.)
As far as possible, the names of the keywords have been standardized between test suites.
+
General keywords (TEST_OPTS)
+
Some keywords are valid across different test suites. If you want to run tests from multiple test suites, or just don't want to care which test suite specific control variable to use, then you can use the general TEST_OPTS control variable.
+
There are also some keywords that applies globally to the test runner system, not to any specific test suites. These are also available as TEST_OPTS keywords.
+
JOBS
+
Currently only applies to JTReg.
+
TIMEOUT_FACTOR
+
Currently only applies to JTReg.
+
VM_OPTIONS
+
Applies to JTReg, GTest and Micro.
+
JAVA_OPTIONS
+
Applies to JTReg, GTest and Micro.
+
AOT_MODULES
+
Applies to JTReg and GTest.
+
JCOV
+
This keywords applies globally to the test runner system. If set to true, it enables JCov coverage reporting for all tests run. To be useful, the JDK under test must be run with a JDK built with JCov instrumentation (configure --with-jcov=<path to directory containing lib/jcov.jar>, make jcov-image).
+
The simplest way to run tests with JCov coverage report is to use the special target jcov-test instead of test, e.g. make jcov-test TEST=jdk_lang. This will make sure the JCov image is built, and that JCov reporting is enabled.
+
The JCov report is stored in build/$BUILD/test-results/jcov-output.
+
Please note that running with JCov reporting can be very memory intensive.
JTReg keywords
-
JOBS
+
JOBS
The test concurrency (-concurrency).
Defaults to TEST_JOBS (if set by --with-test-jobs=), otherwise it defaults to JOBS, except for Hotspot, where the default is number of CPU cores/2, but never more than 12.
-
TIMEOUT
+
TIMEOUT_FACTOR
The timeout factor (-timeoutFactor).
Defaults to 4.
TEST_MODE
@@ -125,13 +144,21 @@
Limit memory consumption (-Xmx and -vmoption:-Xmx, or none).
Limit memory consumption for JTReg test framework and VM under test. Set to 0 to disable the limits.
Defaults to 512m, except for hotspot, where it defaults to 0 (no limit).
+
KEYWORDS
+
JTReg kewords sent to JTReg using -k. Please be careful in making sure that spaces and special characters (like !) are properly quoted. To avoid some issues, the special value %20 can be used instead of space.
+
EXTRA_PROBLEM_LISTS
+
Use additional problem lists file or files, in addition to the default ProblemList.txt located at the JTReg test roots.
+
If multiple file names are specified, they should be separated by space (or, to help avoid quoting issues, the special value %20).
+
The file names should be either absolute, or relative to the JTReg test root of the tests to be run.
OPTIONS
Additional options to the JTReg test framework.
Use JTREG="OPTIONS=--help all" to see all available JTReg options.
-
JAVA_OPTIONS
+
JAVA_OPTIONS
Additional Java options to JTReg (-javaoption).
-
VM_OPTIONS
+
VM_OPTIONS
Additional VM options to JTReg (-vmoption).
+
AOT_MODULES
+
Generate AOT modules before testing for the specified module, or set of modules. If multiple modules are specified, they should be separated by space (or, to help avoid quoting issues, the special value %20).
Gtest keywords
REPEAT
The number of times to repeat the tests (--gtest_repeat).
@@ -139,6 +166,8 @@
OPTIONS
Additional options to the Gtest test framework.
Use GTEST="OPTIONS=--help" to see all available Gtest options.
+
AOT_MODULES
+
Generate AOT modules before testing for the specified module, or set of modules. If multiple modules are specified, they should be separated by space (or, to help avoid quoting issues, the special value %20).
Microbenchmark keywords
FORK
Override the number of benchmark forks to spawn. Same as specifying -f <num>.
@@ -152,7 +181,7 @@
Amount of time to spend in each warmup iteration. Same as specifying -w <num>.
RESULTS_FORMAT
Specify to have the test run save a log of the values. Accepts the same values as -rff, i.e., text, csv, scsv, json, or latex.
-
VM_OPTIONS
+
VM_OPTIONS
Additional VM arguments to provide to forked off VMs. Same as -jvmArgs <args>
OPTIONS
Additional arguments to send to JMH.
diff -r b50715adf242 -r cf2b4754174d doc/testing.md
--- a/doc/testing.md Tue Jan 22 09:43:38 2019 -0500
+++ b/doc/testing.md Tue Jan 29 09:38:31 2019 -0500
@@ -40,8 +40,8 @@
To be able to run microbenchmarks, `configure` needs to know where to find
the JMH dependency. Use `--with-jmh=` to point to a directory
-containing the core JMH and transitive dependencies. The recommended dependencies
-can be retrieved by running `sh make/devkit/createJMHBundle.sh`, after which
+containing the core JMH and transitive dependencies. The recommended dependencies
+can be retrieved by running `sh make/devkit/createJMHBundle.sh`, after which
`--with-jmh=build/jmh/jars` should work.
## Test selection
@@ -202,6 +202,50 @@
As far as possible, the names of the keywords have been standardized between
test suites.
+### General keywords (TEST_OPTS)
+
+Some keywords are valid across different test suites. If you want to run
+tests from multiple test suites, or just don't want to care which test suite specific
+control variable to use, then you can use the general TEST_OPTS control variable.
+
+There are also some keywords that applies globally to the test runner system,
+not to any specific test suites. These are also available as TEST_OPTS keywords.
+
+#### JOBS
+
+Currently only applies to JTReg.
+
+#### TIMEOUT_FACTOR
+
+Currently only applies to JTReg.
+
+#### VM_OPTIONS
+
+Applies to JTReg, GTest and Micro.
+
+#### JAVA_OPTIONS
+
+Applies to JTReg, GTest and Micro.
+
+#### AOT_MODULES
+
+Applies to JTReg and GTest.
+
+#### JCOV
+
+This keywords applies globally to the test runner system. If set to `true`, it
+enables JCov coverage reporting for all tests run. To be useful, the JDK under
+test must be run with a JDK built with JCov instrumentation (`configure
+--with-jcov=`, `make jcov-image`).
+
+The simplest way to run tests with JCov coverage report is to use the special
+target `jcov-test` instead of `test`, e.g. `make jcov-test TEST=jdk_lang`. This
+will make sure the JCov image is built, and that JCov reporting is enabled.
+
+The JCov report is stored in `build/$BUILD/test-results/jcov-output`.
+
+Please note that running with JCov reporting can be very memory intensive.
+
### JTReg keywords
#### JOBS
@@ -211,7 +255,7 @@
JOBS, except for Hotspot, where the default is *number of CPU cores/2*, but
never more than 12.
-#### TIMEOUT
+#### TIMEOUT_FACTOR
The timeout factor (`-timeoutFactor`).
Defaults to 4.
@@ -245,6 +289,24 @@
Defaults to 512m, except for hotspot, where it defaults to 0 (no limit).
+#### KEYWORDS
+
+JTReg kewords sent to JTReg using `-k`. Please be careful in making sure that
+spaces and special characters (like `!`) are properly quoted. To avoid some
+issues, the special value `%20` can be used instead of space.
+
+#### EXTRA_PROBLEM_LISTS
+
+Use additional problem lists file or files, in addition to the default
+ProblemList.txt located at the JTReg test roots.
+
+If multiple file names are specified, they should be separated by space (or, to
+help avoid quoting issues, the special value `%20`).
+
+The file names should be either absolute, or relative to the JTReg test root of
+the tests to be run.
+
+
#### OPTIONS
Additional options to the JTReg test framework.
@@ -256,6 +318,12 @@
#### VM_OPTIONS
Additional VM options to JTReg (`-vmoption`).
+#### AOT_MODULES
+
+Generate AOT modules before testing for the specified module, or set of
+modules. If multiple modules are specified, they should be separated by space
+(or, to help avoid quoting issues, the special value `%20`).
+
### Gtest keywords
#### REPEAT
@@ -270,6 +338,12 @@
Use `GTEST="OPTIONS=--help"` to see all available Gtest options.
+#### AOT_MODULES
+
+Generate AOT modules before testing for the specified module, or set of
+modules. If multiple modules are specified, they should be separated by space
+(or, to help avoid quoting issues, the special value `%20`).
+
### Microbenchmark keywords
#### FORK
diff -r b50715adf242 -r cf2b4754174d make/CompileToolsJdk.gmk
--- a/make/CompileToolsJdk.gmk Tue Jan 22 09:43:38 2019 -0500
+++ b/make/CompileToolsJdk.gmk Tue Jan 29 09:38:31 2019 -0500
@@ -90,7 +90,7 @@
# To be able to call the javascript filter when generating man pages using
# pandoc, we need to create this executable wrapper script.
-ifneq ($(PANDOC), )
+ifeq ($(ENABLE_PANDOC), true)
# PANDOC_TROFF_MANPAGE_FILTER is duplicated for export in ToolsJdk.gmk.
PANDOC_TROFF_MANPAGE_FILTER := \
$(BUILDTOOLS_OUTPUTDIR)/manpages/pandoc-troff-manpage-filter
diff -r b50715adf242 -r cf2b4754174d make/Main.gmk
--- a/make/Main.gmk Tue Jan 22 09:43:38 2019 -0500
+++ b/make/Main.gmk Tue Jan 29 09:38:31 2019 -0500
@@ -479,10 +479,11 @@
define DeclareRunTestRecipe
test-$1:
- +($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk run-test TEST="$1")
+ +($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk \
+ TEST="$1")
exploded-test-$1:
- +($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk run-test \
+ +($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk \
TEST="$1" JDK_IMAGE_DIR=$(JDK_OUTPUTDIR))
endef
@@ -490,21 +491,11 @@
$(foreach t, $(ALL_NAMED_TESTS), $(eval $(call DeclareRunTestRecipe,$t)))
ALL_TEST_TARGETS := $(addprefix test-, $(ALL_NAMED_TESTS))
-define DeclareRunJCovTestRecipe
- jcov-test-$1:
- +($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk \
- TEST="$1" TEST_OPTS_JCOV=true)
-endef
-
-# jcov-test only makes sense for some of the tests
-$(foreach t, $(JCOV_NAMED_TESTS), $(eval $(call DeclareRunJCovTestRecipe,$t)))
-ALL_JCOV_TEST_TARGETS := $(addprefix jcov-test-, $(JCOV_NAMED_TESTS))
-
# We only support the "exploded-test-gtest" shortcut
ALL_EXPLODED_TESTS := gtest
ALL_EXPLODED_TEST_TARGETS := $(addprefix exploded-test-, $(ALL_EXPLODED_TESTS))
-ALL_TARGETS += $(ALL_TEST_TARGETS) $(ALL_EXPLODED_TEST_TARGETS) $(ALL_JCOV_TEST_TARGETS)
+ALL_TARGETS += $(ALL_TEST_TARGETS) $(ALL_EXPLODED_TEST_TARGETS)
################################################################################
# Build tests and microbenchmarks
@@ -571,10 +562,11 @@
# Run tests
test:
- +($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk run-test TEST="$(TEST)")
+ +($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk \
+ TEST="$(TEST)")
exploded-test:
- +($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk run-test \
+ +($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk \
TEST="$(TEST)" JDK_IMAGE_DIR=$(JDK_OUTPUTDIR))
jcov-test:
@@ -891,7 +883,6 @@
# Declare dependency for all generated test targets
$(foreach t, $(filter-out test-make%, $(ALL_TEST_TARGETS)), $(eval $t: jdk-image test-image))
$(foreach t, $(ALL_EXPLODED_TEST_TARGETS), $(eval $t: exploded-image test-image))
- $(ALL_JCOV_TEST_TARGETS): jcov-image test-image
create-buildjdk-copy: jdk.jlink-java java.base-gendata \
$(addsuffix -java, $(INTERIM_IMAGE_MODULES))
diff -r b50715adf242 -r cf2b4754174d make/RunTests.gmk
--- a/make/RunTests.gmk Tue Jan 22 09:43:38 2019 -0500
+++ b/make/RunTests.gmk Tue Jan 29 09:38:31 2019 -0500
@@ -45,8 +45,8 @@
endif
$(eval $(call ParseKeywordVariable, TEST_OPTS, \
- SINGLE_KEYWORDS := JOBS TIMEOUT_FACTOR AOT_MODULES JCOV, \
- STRING_KEYWORDS := VM_OPTIONS JAVA_OPTIONS, \
+ SINGLE_KEYWORDS := JOBS TIMEOUT_FACTOR JCOV, \
+ STRING_KEYWORDS := VM_OPTIONS JAVA_OPTIONS AOT_MODULES, \
))
# Helper function to propagate TEST_OPTS values.
@@ -72,7 +72,7 @@
) \
))
export _NT_SYMBOL_PATH
- $(info _NT_SYMBOL_PATH=$(_NT_SYMBOL_PATH))
+ $(call LogDebug, Rewriting _NT_SYMBOL_PATH to $(_NT_SYMBOL_PATH))
endif
endif
@@ -81,6 +81,9 @@
$(eval $(call IncludeCustomExtension, RunTests.gmk))
################################################################################
+# This is the JDK that we will test
+JDK_UNDER_TEST := $(JDK_IMAGE_DIR)
+
TEST_RESULTS_DIR := $(OUTPUTDIR)/test-results
TEST_SUPPORT_DIR := $(OUTPUTDIR)/test-support
TEST_SUMMARY := $(TEST_RESULTS_DIR)/test-summary.txt
@@ -104,8 +107,26 @@
-timeoutHandlerTimeout:0
endif
-GTEST_LAUNCHER_DIRS := $(patsubst %/gtestLauncher, %, $(wildcard $(TEST_IMAGE_DIR)/hotspot/gtest/*/gtestLauncher))
-GTEST_VARIANTS := $(strip $(patsubst $(TEST_IMAGE_DIR)/hotspot/gtest/%, %, $(GTEST_LAUNCHER_DIRS)))
+GTEST_LAUNCHER_DIRS := $(patsubst %/gtestLauncher, %, \
+ $(wildcard $(TEST_IMAGE_DIR)/hotspot/gtest/*/gtestLauncher))
+GTEST_VARIANTS := $(strip $(patsubst $(TEST_IMAGE_DIR)/hotspot/gtest/%, %, \
+ $(GTEST_LAUNCHER_DIRS)))
+
+ifeq ($(TEST_OPTS_JCOV), true)
+ JCOV_OUTPUT_DIR := $(TEST_RESULTS_DIR)/jcov-output
+ JCOV_GRABBER_LOG := $(JCOV_OUTPUT_DIR)/grabber.log
+ JCOV_RESULT_FILE := $(JCOV_OUTPUT_DIR)/result.xml
+ JCOV_REPORT := $(JCOV_OUTPUT_DIR)/report
+ JCOV_MEM_OPTIONS := -Xms64m -Xmx4g
+
+ # Replace our normal test JDK with the JCov image.
+ JDK_UNDER_TEST := $(JCOV_IMAGE_DIR)
+
+ JCOV_ENVIRONMENT := JAVA_TOOL_OPTIONS="$(JCOV_MEM_OPTIONS)" \
+ _JAVA_OPTIONS="$(JCOV_MEM_OPTIONS)"
+ JTREG_JCOV_OPTIONS := -e:JAVA_TOOL_OPTIONS='$(JCOV_MEM_OPTIONS)' \
+ -e:_JAVA_OPTIONS='$(JCOV_MEM_OPTIONS)'
+endif
################################################################################
# Optionally create AOT libraries for specified modules before running tests.
@@ -129,38 +150,35 @@
$1_AOT_LIB := $$($1_BIN)/$$(call SHARED_LIBRARY,$$($1_MODULE))
$1_AOT_CCLIST := $$(wildcard $$(TOPDIR)/test/hotspot/jtreg/compiler/aot/scripts/$$($1_MODULE)-list.txt)
- ifeq ($(OPENJDK_TARGET_OS), windows)
- $1_LD := $$(addsuffix $$(EXE_SUFFIX), $$(filter-out $$(FIXPATH), $$(LD)))
- else
- $1_LD := $$(LD)
- endif
-
# Create jaotc flags.
- # VM flags which don't affect AOT code generation are filtered out: -Xcomp, -XX:+-TieredCompilation
+ # VM flags which don't affect AOT code generation are filtered out:
+ # -Xcomp, -XX:+-TieredCompilation
$1_JAOTC_OPTS := \
-J-Xmx4g --info \
$$(addprefix -J, $$(filter-out -Xcomp %TieredCompilation, $$($1_VM_OPTIONS))) \
$$(addprefix --compile-commands$(SPACE), $$($1_AOT_CCLIST)) \
- --linker-path $$($1_LD) \
+ --linker-path $$(LD_JAOTC) \
#
ifneq ($$(filter -ea, $$($1_VM_OPTIONS)), )
$1_JAOTC_OPTS += --compile-with-assertions
endif
- $$($1_AOT_LIB): $$(JDK_IMAGE_DIR)/release \
+ $$($1_AOT_LIB): $$(JDK_UNDER_TEST)/release \
$$(call DependOnVariable, $1_JAOTC_OPTS) \
- $$(call DependOnVariable, JDK_IMAGE_DIR)
+ $$(call DependOnVariable, JDK_UNDER_TEST)
$$(call LogWarn, Generating $$(patsubst $$(OUTPUTDIR)/%, %, $$@))
$$(call MakeTargetDir)
$$(call ExecuteWithLog, $$@, \
- $$(FIXPATH) $$(JDK_IMAGE_DIR)/bin/jaotc \
- $$($1_JAOTC_OPTS) --output $$@ --module $$($1_MODULE) \
+ $$(FIXPATH) $$(JDK_UNDER_TEST)/bin/jaotc \
+ $$($1_JAOTC_OPTS) --output $$@ --module $$($1_MODULE) \
)
$$(call ExecuteWithLog, $$@.check, \
- $$(FIXPATH) $$(JDK_IMAGE_DIR)/bin/java \
- $$($1_VM_OPTIONS) -XX:+PrintAOT -XX:+UseAOTStrictLoading -XX:AOTLibrary=$$@ -version \
- > $$@.verify-aot \
+ $$(FIXPATH) $$(JDK_UNDER_TEST)/bin/java \
+ $$($1_VM_OPTIONS) -XX:+UnlockDiagnosticVMOptions \
+ -XX:+PrintAOT -XX:+UseAOTStrictLoading \
+ -XX:AOTLibrary=$$@ -version \
+ > $$@.verify-aot \
)
$1_AOT_OPTIONS += -XX:AOTLibrary=$$($1_AOT_LIB)
@@ -249,9 +267,10 @@
$(eval $(call SetTestOpt,TIMEOUT_FACTOR,JTREG))
$(eval $(call ParseKeywordVariable, JTREG, \
- SINGLE_KEYWORDS := JOBS TIMEOUT_FACTOR TEST_MODE ASSERT VERBOSE RETAIN MAX_MEM \
- EXTRA_PROBLEM_LISTS KEYWORDS AOT_MODULES, \
- STRING_KEYWORDS := OPTIONS JAVA_OPTIONS VM_OPTIONS, \
+ SINGLE_KEYWORDS := JOBS TIMEOUT_FACTOR TEST_MODE ASSERT VERBOSE RETAIN \
+ MAX_MEM, \
+ STRING_KEYWORDS := OPTIONS JAVA_OPTIONS VM_OPTIONS KEYWORDS \
+ EXTRA_PROBLEM_LISTS AOT_MODULES, \
))
ifneq ($(JTREG), )
@@ -266,8 +285,8 @@
$(eval $(call SetTestOpt,AOT_MODULES,GTEST))
$(eval $(call ParseKeywordVariable, GTEST, \
- SINGLE_KEYWORDS := REPEAT AOT_MODULES, \
- STRING_KEYWORDS := OPTIONS VM_OPTIONS JAVA_OPTIONS, \
+ SINGLE_KEYWORDS := REPEAT, \
+ STRING_KEYWORDS := OPTIONS VM_OPTIONS JAVA_OPTIONS AOT_MODULES, \
))
ifneq ($(GTEST), )
@@ -282,7 +301,8 @@
$(eval $(call ParseKeywordVariable, MICRO, \
SINGLE_KEYWORDS := ITER FORK TIME WARMUP_ITER WARMUP_TIME, \
- STRING_KEYWORDS := OPTIONS JAVA_OPTIONS VM_OPTIONS RESULTS_FORMAT TEST_JDK BENCHMARKS_JAR, \
+ STRING_KEYWORDS := OPTIONS JAVA_OPTIONS VM_OPTIONS RESULTS_FORMAT TEST_JDK \
+ BENCHMARKS_JAR, \
))
ifneq ($(MICRO), )
@@ -348,8 +368,8 @@
# Helper function to determine if a test specification is a microbenchmark test
#
-# It is a microbenchmark test if it is either "micro", or "micro:" followed by an optional
-# test filter string.
+# It is a microbenchmark test if it is either "micro", or "micro:" followed by
+# an optional test filter string.
define ParseMicroTestSelection
$(if $(filter micro%, $1), \
$(if $(filter micro, $1), \
@@ -439,8 +459,8 @@
# Helper function to determine if a test specification is a special test
#
# It is a special test if it is "special:" followed by a test name,
-# if it is "make:" or "make-" followed by a make test, or any of the special test names
-# as a single word.
+# if it is "make:" or "make-" followed by a make test, or any of the special
+# test names as a single word.
define ParseSpecialTestSelection
$(if $(filter special:%, $1), \
$1 \
@@ -555,13 +575,13 @@
))
endif
- run-test-$1: $$($1_AOT_TARGETS)
+ run-test-$1: pre-run-test $$($1_AOT_TARGETS)
$$(call LogWarn)
$$(call LogWarn, Running test '$$($1_TEST)')
$$(call MakeDir, $$($1_TEST_RESULTS_DIR) $$($1_TEST_SUPPORT_DIR))
$$(call ExecuteWithLog, $$($1_TEST_SUPPORT_DIR)/gtest, \
$$(FIXPATH) $$(TEST_IMAGE_DIR)/hotspot/gtest/$$($1_VARIANT)/gtestLauncher \
- -jdk $(JDK_IMAGE_DIR) $$($1_GTEST_FILTER) \
+ -jdk $(JDK_UNDER_TEST) $$($1_GTEST_FILTER) \
--gtest_output=xml:$$($1_TEST_RESULTS_DIR)/gtest.xml \
$$($1_GTEST_REPEAT) $$(GTEST_OPTIONS) $$(GTEST_VM_OPTIONS) \
$$(GTEST_JAVA_OPTIONS) $$($1_AOT_OPTIONS) \
@@ -595,7 +615,11 @@
$$(eval $1_TOTAL := 1) \
)
- TARGETS += run-test-$1 parse-test-$1
+ $1: run-test-$1 parse-test-$1
+
+ TARGETS += $1 run-test-$1 parse-test-$1
+ TEST_TARGETS += parse-test-$1
+
endef
################################################################################
@@ -629,7 +653,7 @@
$1_TEST_NAME := $$(strip $$(patsubst micro:%, %, $$($1_TEST)))
$$(eval $$(call SetMicroValue,$1,MICRO_BENCHMARKS_JAR,$$(TEST_IMAGE_DIR)/micro/benchmarks.jar))
- $$(eval $$(call SetMicroValue,$1,MICRO_TEST_JDK,$$(JDK_IMAGE_DIR)))
+ $$(eval $$(call SetMicroValue,$1,MICRO_TEST_JDK,$$(JDK_UNDER_TEST)))
$$(eval $$(call SetMicroValue,$1,MICRO_JAVA_OPTIONS))
# Current tests needs to open java.io
@@ -637,7 +661,8 @@
# Save output as JSON or CSV file
ifneq ($$(MICRO_RESULTS_FORMAT), )
- $1_MICRO_BASIC_OPTIONS += -rf $$(MICRO_RESULTS_FORMAT) -rff $$($1_TEST_RESULTS_DIR)/jmh-result.$(MICRO_RESULTS_FORMAT)
+ $1_MICRO_BASIC_OPTIONS += -rf $$(MICRO_RESULTS_FORMAT)
+ $1_MICRO_BASIC_OPTIONS += -rff $$($1_TEST_RESULTS_DIR)/jmh-result.$(MICRO_RESULTS_FORMAT)
endif
ifneq ($$(MICRO_VM_OPTIONS)$$(MICRO_JAVA_OPTIONS), )
@@ -660,7 +685,7 @@
$1_MICRO_WARMUP_TIME := -w $$(MICRO_WARMUP_TIME)
endif
- run-test-$1:
+ run-test-$1: pre-run-test
$$(call LogWarn)
$$(call LogWarn, Running test '$$($1_TEST)')
$$(call MakeDir, $$($1_TEST_RESULTS_DIR) $$($1_TEST_SUPPORT_DIR))
@@ -668,7 +693,7 @@
$$($1_MICRO_TEST_JDK)/bin/java $$($1_MICRO_JAVA_OPTIONS) -jar $$($1_MICRO_BENCHMARKS_JAR) \
$$($1_MICRO_ITER) $$($1_MICRO_FORK) $$($1_MICRO_TIME) \
$$($1_MICRO_WARMUP_ITER) $$($1_MICRO_WARMUP_TIME) \
- $$($1_MICRO_VM_OPTIONS) $$($1_MICRO_BASIC_OPTIONS) $$(MICRO_OPTIONS) \
+ $$($1_MICRO_VM_OPTIONS) $$($1_MICRO_BASIC_OPTIONS) $$(MICRO_OPTIONS) \
$$($1_TEST_NAME) \
> >($(TEE) $$($1_TEST_RESULTS_DIR)/micro.txt) \
&& $$(ECHO) $$$$? > $$($1_EXITCODE) \
@@ -700,7 +725,11 @@
$$(eval $1_TOTAL := 1) \
)
- TARGETS += run-test-$1 parse-test-$1
+ $1: run-test-$1 parse-test-$1
+
+ TARGETS += $1 run-test-$1 parse-test-$1
+ TEST_TARGETS += parse-test-$1
+
endef
################################################################################
@@ -870,7 +899,7 @@
clean-workdir-$1:
$$(RM) -r $$($1_TEST_SUPPORT_DIR)
- run-test-$1: clean-workdir-$1 $$($1_AOT_TARGETS)
+ run-test-$1: pre-run-test clean-workdir-$1 $$($1_AOT_TARGETS)
$$(call LogWarn)
$$(call LogWarn, Running test '$$($1_TEST)')
$$(call MakeDir, $$($1_TEST_RESULTS_DIR) $$($1_TEST_SUPPORT_DIR))
@@ -879,7 +908,7 @@
$$(JAVA) $$($1_JTREG_LAUNCHER_OPTIONS) \
-Dprogram=jtreg -jar $$(JT_HOME)/lib/jtreg.jar \
$$($1_JTREG_BASIC_OPTIONS) \
- -testjdk:$$(JDK_IMAGE_DIR) \
+ -testjdk:$$(JDK_UNDER_TEST) \
-dir:$$(JTREG_TOPDIR) \
-reportDir:$$($1_TEST_RESULTS_DIR) \
-workDir:$$($1_TEST_SUPPORT_DIR) \
@@ -919,7 +948,11 @@
$$(eval $1_TOTAL := 1) \
)
- TARGETS += run-test-$1 parse-test-$1
+ $1: run-test-$1 parse-test-$1 clean-workdir-$1
+
+ TARGETS += $1 run-test-$1 parse-test-$1 clean-workdir-$1
+ TEST_TARGETS += parse-test-$1
+
endef
################################################################################
@@ -957,7 +990,7 @@
$$(error Invalid special test specification: $$($1_TEST_NAME))
endif
- run-test-$1: $(TEST_PREREQS)
+ run-test-$1: pre-run-test
$$(call LogWarn)
$$(call LogWarn, Running test '$$($1_TEST)')
$$(call MakeDir, $$($1_TEST_RESULTS_DIR) $$($1_TEST_SUPPORT_DIR))
@@ -981,7 +1014,11 @@
$$(eval $1_ERROR := 0)
$$(eval $1_TOTAL := 0)
- TARGETS += run-test-$1 parse-test-$1
+ $1: run-test-$1 parse-test-$1
+
+ TARGETS += $1 run-test-$1 parse-test-$1
+ TEST_TARGETS += parse-test-$1
+
endef
################################################################################
@@ -1043,12 +1080,36 @@
# The main target for RunTests.gmk
################################################################################
-# The SetupRun*Test functions have populated TARGETS.
+#
+# Provide hooks for adding functionality before and after all tests are run.
+#
+
+$(call LogInfo, RunTest setup starting)
+
+# This target depends on all actual test having been run (TEST_TARGETS has beeen
+# populated by the SetupRun*Test functions). If you need to provide a teardown
+# hook, you must let it depend on this target.
+run-all-tests: $(TEST_TARGETS)
+ $(call LogInfo, RunTest teardown starting)
+# This is an abstract target that will be run before any actual tests. Add your
+# target as a dependency to thisif you need "setup" type functionality executed
+# before all tests.
+pre-run-test:
+ $(call LogInfo, RunTest setup done)
+
+# This is an abstract target that will be run after all actual tests, but before
+# the test summary. If you need "teardown" type functionality, add your target
+# as a dependency on this, and let the teardown target depend on run-all-tests.
+post-run-test: run-all-tests
+ $(call LogInfo, RunTest teardown done)
+
+#
+# Create and print a table of the result of all tests run
+#
TEST_FAILURE := false
-run-test: $(TARGETS)
- # Create and print a table of the result of all tests run
+run-test-report: post-run-test
$(RM) $(TEST_SUMMARY).old 2> /dev/null
$(MV) $(TEST_SUMMARY) $(TEST_SUMMARY).old 2> /dev/null || true
$(RM) $(TEST_LAST_IDS).old 2> /dev/null
@@ -1092,27 +1153,17 @@
$(CAT) $(TEST_SUMMARY)
$(ECHO)
+# The main run-test target
+run-test: run-test-report
+
+TARGETS += run-all-tests pre-run-test post-run-test run-test-report run-test
+
################################################################################
# Setup JCov
################################################################################
ifeq ($(TEST_OPTS_JCOV), true)
- JCOV_OUTPUT_DIR := $(TEST_RESULTS_DIR)/jcov-output
- JCOV_GRABBER_LOG := $(JCOV_OUTPUT_DIR)/grabber.log
- JCOV_RESULT_FILE := $(JCOV_OUTPUT_DIR)/result.xml
- JCOV_REPORT := $(JCOV_OUTPUT_DIR)/report
- JCOV_MEM_OPTIONS := -Xms64m -Xmx4g
-
- ifneq ($(JCOV_IMAGE_DIR), )
- JDK_IMAGE_DIR := $(JCOV_IMAGE_DIR)
- endif
-
- JCOV_ENVIRONMENT := JAVA_TOOL_OPTIONS="$(JCOV_MEM_OPTIONS)" \
- _JAVA_OPTIONS="$(JCOV_MEM_OPTIONS)"
- JTREG_JCOV_OPTIONS := -e:JAVA_TOOL_OPTIONS='$(JCOV_MEM_OPTIONS)' \
- -e:_JAVA_OPTIONS='$(JCOV_MEM_OPTIONS)'
-
jcov-do-start-grabber:
$(call MakeDir, $(JCOV_OUTPUT_DIR))
if $(JAVA) -jar $(JCOV_HOME)/lib/jcov.jar GrabberManager -status 1>/dev/null 2>&1 ; then \
@@ -1130,14 +1181,21 @@
$(call LogWarn, Stopping JCov Grabber...)
$(JAVA) -jar $(JCOV_HOME)/lib/jcov.jar GrabberManager -stop -stoptimeout 3600
- jcov-gen-report: run-test jcov-stop-grabber
+ jcov-gen-report: jcov-stop-grabber
$(call LogWarn, Generating JCov report ...)
$(JAVA) -Xmx4g -jar $(JCOV_HOME)/lib/jcov.jar RepGen -sourcepath \
`$(ECHO) $(TOPDIR)/src/*/share/classes/ | $(TR) ' ' ':'` -fmt html \
-o $(JCOV_REPORT) $(JCOV_RESULT_FILE)
- $(TARGETS): jcov-start-grabber
- all: jcov-gen-report
+ TARGETS += jcov-do-start-grabber jcov-start-grabber jcov-stop-grabber \
+ jcov-gen-report
+
+ # Hook this into the framework at appropriate places
+ pre-run-test: jcov-start-grabber
+
+ post-run-test: jcov-gen-report
+
+ jcov-gen-report: run-all-tests
endif
@@ -1145,4 +1203,4 @@
all: run-test
-.PHONY: default all run-test $(TARGETS)
+.PHONY: default all $(TARGETS)
diff -r b50715adf242 -r cf2b4754174d make/RunTestsPrebuilt.gmk
--- a/make/RunTestsPrebuilt.gmk Tue Jan 22 09:43:38 2019 -0500
+++ b/make/RunTestsPrebuilt.gmk Tue Jan 29 09:38:31 2019 -0500
@@ -95,12 +95,12 @@
# $1: The output file name
# $2..$N: The lines to output to the file
define CreateNewSpec
- $(if $(strip $(31)), \
+ $(if $(strip $(33)), \
$(error Internal makefile error: \
Too many arguments to macro, please update CreateNewSpec in RunTestsPrebuilt.gmk) \
) \
$(shell $(RM) $1) \
- $(foreach i, $(call sequence, 2, 30), \
+ $(foreach i, $(call sequence, 2, 32), \
$(if $(strip $($i)), \
$(call AppendFile, $(strip $($i)), $1) \
) \
@@ -254,31 +254,35 @@
# Setup LD for AOT support
ifneq ($(DEVKIT_HOME), )
ifeq ($(OPENJDK_TARGET_OS), windows)
- LD := $(DEVKIT_HOME)/VC/bin/x64/link
+ LD_JAOTC := $(DEVKIT_HOME)/VC/bin/x64/link.exe
LIBRARY_PREFIX :=
SHARED_LIBRARY_SUFFIX := .dll
- EXE_SUFFIX := .exe
else ifeq ($(OPENJDK_TARGET_OS), linux)
- LD := $(DEVKIT_HOME)/bin/ld
+ LD_JAOTC := $(DEVKIT_HOME)/bin/ld
LIBRARY_PREFIX := lib
SHARED_LIBRARY_SUFFIX := .so
- EXE_SUFFIX :=
else ifeq ($(OPENJDK_TARGET_OS), macosx)
- LD := $(DEVKIT_HOME)/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld
+ LD_JAOTC := $(DEVKIT_HOME)/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld
LIBRARY_PREFIX := lib
SHARED_LIBRARY_SUFFIX := .dylib
- EXE_SUFFIX :=
else ifeq ($(OPENJDK_TARGET_OS), solaris)
# Prefer system linker for AOT on Solaris.
- LD := ld
+ LD_JAOTC := ld
LIBRARY_PREFIX := lib
SHARED_LIBRARY_SUFFIX := .so
- EXE_SUFFIX :=
endif
else
LD := ld
endif
+ifneq ($(wildcard $(JDK_IMAGE_DIR)/template.xml), )
+ TEST_OPTS_JCOV := true
+ JCOV_IMAGE_DIR := $(JDK_IMAGE_DIR)
+else
+ TEST_OPTS_JCOV := false
+ JCOV_IMAGE_DIR :=
+endif
+
################################################################################
# Generate the ephemeral spec file
################################################################################
@@ -299,6 +303,7 @@
BOOT_JDK := $(BOOT_JDK), \
JT_HOME := $(JT_HOME), \
JDK_IMAGE_DIR := $(JDK_IMAGE_DIR), \
+ JCOV_IMAGE_DIR := $(JCOV_IMAGE_DIR), \
TEST_IMAGE_DIR := $(TEST_IMAGE_DIR), \
SYMBOLS_IMAGE_DIR := $(SYMBOLS_IMAGE_DIR), \
MAKE := $(MAKE), \
@@ -315,11 +320,11 @@
OPENJDK_TARGET_CPU_ENDIAN := $(OPENJDK_TARGET_CPU_ENDIAN), \
NUM_CORES := $(NUM_CORES), \
MEMORY_SIZE := $(MEMORY_SIZE), \
- LD := $(LD), \
+ LD_JAOTC := $(LD_JAOTC), \
LIBRARY_PREFIX := $(LIBRARY_PREFIX), \
SHARED_LIBRARY_SUFFIX := $(SHARED_LIBRARY_SUFFIX), \
- EXE_SUFFIX := $(EXE_SUFFIX), \
include $(TOPDIR)/make/RunTestsPrebuiltSpec.gmk, \
+ TEST_OPTS_JCOV := $(TEST_OPTS_JCOV), \
$(CUSTOM_NEW_SPEC_LINE), \
)
diff -r b50715adf242 -r cf2b4754174d make/UpdateBuildDocs.gmk
--- a/make/UpdateBuildDocs.gmk Tue Jan 22 09:43:38 2019 -0500
+++ b/make/UpdateBuildDocs.gmk Tue Jan 29 09:38:31 2019 -0500
@@ -34,7 +34,7 @@
#
################################################################################
-ifeq ($(PANDOC), )
+ifeq ($(ENABLE_PANDOC), false)
$(info No pandoc executable was detected by configure)
$(error Cannot continue)
endif
diff -r b50715adf242 -r cf2b4754174d make/autoconf/hotspot.m4
--- a/make/autoconf/hotspot.m4 Tue Jan 22 09:43:38 2019 -0500
+++ b/make/autoconf/hotspot.m4 Tue Jan 29 09:38:31 2019 -0500
@@ -47,8 +47,8 @@
[ [ [[ " $JVM_VARIANTS " =~ " $1 " ]] ] ])
###############################################################################
-# Check if the specified JVM features are explicitly enabled. To be used in
-# shell if constructs, like this:
+# Check if the specified JVM feature is enabled. To be used in shell if
+# constructs, like this:
# if HOTSPOT_CHECK_JVM_FEATURE(jvmti); then
#
# Only valid to use after HOTSPOT_SETUP_JVM_FEATURES has setup features.
@@ -59,6 +59,20 @@
[ [ [[ " $JVM_FEATURES " =~ " $1 " ]] ] ])
###############################################################################
+# Check if the specified JVM feature is explicitly disabled. To be used in
+# shell if constructs, like this:
+# if HOTSPOT_IS_JVM_FEATURE_DISABLED(jvmci); then
+#
+# This function is internal to hotspot.m4, and is only used when constructing
+# the valid set of enabled JVM features. Users outside of hotspot.m4 should just
+# use HOTSPOT_CHECK_JVM_FEATURE to check if a feature is enabled or not.
+
+# Definition kept in one line to allow inlining in if statements.
+# Additional [] needed to keep m4 from mangling shell constructs.
+AC_DEFUN([HOTSPOT_IS_JVM_FEATURE_DISABLED],
+[ [ [[ " $DISABLED_JVM_FEATURES " =~ " $1 " ]] ] ])
+
+###############################################################################
# Check which variants of the JVM that we want to build. Available variants are:
# server: normal interpreter, and a tiered C1/C2 compiler
# client: normal interpreter, and C1 (no C2 compiler)
@@ -373,8 +387,7 @@
AC_MSG_CHECKING([if jvmci module jdk.internal.vm.ci should be built])
# Check if jvmci is diabled
- DISABLE_JVMCI=`$ECHO $DISABLED_JVM_FEATURES | $GREP jvmci`
- if test "x$DISABLE_JVMCI" = "xjvmci"; then
+ if HOTSPOT_IS_JVM_FEATURE_DISABLED(jvmci); then
AC_MSG_RESULT([no, forced])
JVM_FEATURES_jvmci=""
INCLUDE_JVMCI="false"
@@ -400,8 +413,7 @@
AC_MSG_CHECKING([if graal module jdk.internal.vm.compiler should be built])
# Check if graal is diabled
- DISABLE_GRAAL=`$ECHO $DISABLED_JVM_FEATURES | $GREP graal`
- if test "x$DISABLE_GRAAL" = "xgraal"; then
+ if HOTSPOT_IS_JVM_FEATURE_DISABLED(graal); then
AC_MSG_RESULT([no, forced])
JVM_FEATURES_graal=""
INCLUDE_GRAAL="false"
@@ -433,8 +445,7 @@
AC_SUBST(INCLUDE_GRAAL)
# Disable aot with '--with-jvm-features=-aot'
- DISABLE_AOT=`$ECHO $DISABLED_JVM_FEATURES | $GREP aot`
- if test "x$DISABLE_AOT" = "xaot"; then
+ if HOTSPOT_IS_JVM_FEATURE_DISABLED(aot); then
ENABLE_AOT="false"
fi
@@ -458,7 +469,7 @@
JVM_FEATURES_aot="aot"
fi
else
- if test "x$enable_aot" = "xno" || test "x$DISABLE_AOT" = "xaot"; then
+ if test "x$enable_aot" = "xno" || HOTSPOT_IS_JVM_FEATURE_DISABLED(aot); then
AC_MSG_RESULT([no, forced])
else
AC_MSG_RESULT([no])
@@ -490,8 +501,7 @@
fi
# Disable CDS if user requested it with --with-jvm-features=-cds.
- DISABLE_CDS=`$ECHO $DISABLED_JVM_FEATURES | $GREP cds`
- if test "x$DISABLE_CDS" = "xcds"; then
+ if HOTSPOT_IS_JVM_FEATURE_DISABLED(cds); then
ENABLE_CDS="false"
if test "x$enable_cds" = "xyes"; then
AC_MSG_ERROR([CDS was disabled by --with-jvm-features=-cds. Remove --enable-cds.])
diff -r b50715adf242 -r cf2b4754174d make/autoconf/spec.gmk.in
--- a/make/autoconf/spec.gmk.in Tue Jan 22 09:43:38 2019 -0500
+++ b/make/autoconf/spec.gmk.in Tue Jan 29 09:38:31 2019 -0500
@@ -487,6 +487,9 @@
# The linker can be gcc or ld on unix systems, or link.exe on windows systems.
LD:=@FIXPATH@ @LD@
+# Linker used by the jaotc tool for AOT compilation.
+LD_JAOTC:=@LD_JAOTC@
+
# Xcode SDK path
SDKROOT:=@SDKROOT@
diff -r b50715adf242 -r cf2b4754174d make/autoconf/toolchain.m4
--- a/make/autoconf/toolchain.m4 Tue Jan 22 09:43:38 2019 -0500
+++ b/make/autoconf/toolchain.m4 Tue Jan 29 09:38:31 2019 -0500
@@ -715,12 +715,18 @@
AC_MSG_RESULT([yes])
fi
LDCXX="$LD"
+ # jaotc being a windows program expects the linker to be supplied with exe suffix.
+ LD_JAOTC="$LD$EXE_SUFFIX"
else
# All other toolchains use the compiler to link.
LD="$CC"
LDCXX="$CXX"
+ # jaotc expects 'ld' as the linker rather than the compiler.
+ BASIC_CHECK_TOOLS([LD_JAOTC], ld)
+ BASIC_FIXUP_EXECUTABLE(LD_JAOTC)
fi
AC_SUBST(LD)
+ AC_SUBST(LD_JAOTC)
# FIXME: it should be CXXLD, according to standard (cf CXXCPP)
AC_SUBST(LDCXX)
diff -r b50715adf242 -r cf2b4754174d make/common/CopyFiles.gmk
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/common/CopyFiles.gmk Tue Jan 29 09:38:31 2019 -0500
@@ -0,0 +1,112 @@
+#
+# Copyright (c) 2011, 2019, 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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# 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.
+#
+
+ifeq (,$(_MAKEBASE_GMK))
+ $(error You must include MakeBase.gmk prior to including CopyFiles.gmk)
+endif
+
+################################################################################
+#
+# Code for handling the SetupCopyFiles macro.
+#
+################################################################################
+
+define AddFileToCopy
+ # Helper macro for SetupCopyFiles
+ # 1 : Source file
+ # 2 : Dest file
+ # 3 : Variable to add targets to
+ # 4 : Macro to call for copy operation
+ # 5 : Action text to log
+ $2: $1
+ $$(call LogInfo, $(strip $5) $$(patsubst $(OUTPUTDIR)/%,%,$$(call DecodeSpace, $$@)))
+ $$($$(strip $4))
+
+ $3 += $2
+ $3_SOURCES += $1
+endef
+
+# Returns the value of the first argument
+identity = \
+ $(strip $1)
+
+# Setup make rules for copying files, with an option to do more complex
+# processing instead of copying.
+#
+# Parameter 1 is the name of the rule. This name is used as variable prefix,
+# and the targets generated are listed in a variable by that name.
+#
+# The list of all source files is returned in $1_SOURCES.
+#
+# Remaining parameters are named arguments. These include:
+# SRC : Source root dir (defaults to dir of first file)
+# DEST : Dest root dir
+# FILES : List of files to copy with absolute paths, or path relative to SRC.
+# Must be in SRC.
+# FLATTEN : Set to flatten the directory structure in the DEST dir.
+# MACRO : Optionally override the default macro used for making the copy.
+# Default is 'install-file'
+# NAME_MACRO : Optionally supply a macro that rewrites the target file name
+# based on the source file name
+# LOG_ACTION : Optionally specify a different action text for log messages
+SetupCopyFiles = $(NamedParamsMacroTemplate)
+define SetupCopyFilesBody
+
+ ifeq ($$($1_MACRO), )
+ $1_MACRO := install-file
+ endif
+
+ # Default SRC to the dir of the first file.
+ ifeq ($$($1_SRC), )
+ $1_SRC := $$(dir $$(firstword $$($1_FILES)))
+ endif
+
+ ifeq ($$($1_NAME_MACRO), )
+ $1_NAME_MACRO := identity
+ endif
+
+ ifeq ($$($1_LOG_ACTION), )
+ $1_LOG_ACTION := Copying
+ endif
+
+ # Remove any trailing slash from SRC and DEST
+ $1_SRC := $$(patsubst %/,%,$$($1_SRC))
+ $1_DEST := $$(patsubst %/,%,$$($1_DEST))
+
+ # Need to wrap arguments in DoubleDollar because of the eval nested inside an
+ # eval macro body.
+ $$(foreach f, $$(patsubst $$($1_SRC)/%,%,$$($1_FILES)), \
+ $$(eval $$(call AddFileToCopy, \
+ $$(call DoubleDollar, $$($1_SRC)/$$f), \
+ $$(call DoubleDollar, \
+ $$($1_DEST)/$$(call $$(strip $$($1_NAME_MACRO)),$$(if $$($1_FLATTEN),$$(notdir $$f),$$f)) \
+ ), \
+ $1, \
+ $$($1_MACRO), \
+ $$($1_LOG_ACTION) \
+ )) \
+ )
+
+endef
diff -r b50715adf242 -r cf2b4754174d make/common/FindTests.gmk
--- a/make/common/FindTests.gmk Tue Jan 22 09:43:38 2019 -0500
+++ b/make/common/FindTests.gmk Tue Jan 29 09:38:31 2019 -0500
@@ -68,7 +68,6 @@
# Add Jtreg test groups to list of named tests (test groups, test list, etc)
# ALL_NAMED_TESTS might have been set by a custom extension
ALL_NAMED_TESTS += $(JTREG_TEST_GROUPS)
-JCOV_NAMED_TESTS += $(JTREG_TEST_GROUPS)
# Add Gtest
ALL_NAMED_TESTS += gtest
diff -r b50715adf242 -r cf2b4754174d make/common/MakeBase.gmk
--- a/make/common/MakeBase.gmk Tue Jan 22 09:43:38 2019 -0500
+++ b/make/common/MakeBase.gmk Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2019, 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
@@ -70,17 +70,17 @@
CORRECT_FUNCTION_IN_RECIPE_EVALUATION := true
endif
-##############################
-# Functions
-##############################
-### Debug functions
+# For convenience, MakeBase.gmk continues to include these separate files, at
+# least for now.
-# Prints the name and value of a variable
-PrintVar = \
- $(info $(strip $1) >$($(strip $1))<)
+include $(TOPDIR)/make/common/Utils.gmk
+include $(TOPDIR)/make/common/MakeIO.gmk
+include $(TOPDIR)/make/common/CopyFiles.gmk
-### Functions for timers
+################################################################################
+# Functions for timers
+################################################################################
# Store the build times in this directory.
BUILDTIMESDIR=$(OUTPUTDIR)/make-support/build-times
@@ -117,227 +117,6 @@
endef
################################################################################
-# This macro translates $ into \$ to protect the $ from expansion in the shell.
-# To make this macro resilient against already escaped strings, first remove
-# any present escapes before escaping so that no double escapes are added.
-EscapeDollar = $(subst $$,\$$,$(subst \$$,$$,$(strip $1)))
-
-################################################################################
-# This macro works just like EscapeDollar above, but for #.
-EscapeHash = $(subst \#,\\\#,$(subst \\\#,\#,$(strip $1)))
-
-################################################################################
-# This macro translates $ into $$ to protect the string from make itself.
-DoubleDollar = $(subst $$,$$$$,$(strip $1))
-
-################################################################################
-# ListPathsSafely can be used to print command parameters to a file. This is
-# typically done if the command line lenght risk being too long for the
-# OS/shell. In later make versions, the file function can be used for this
-# purpose. For earlier versions, a more complex implementation is provided.
-#
-# The function ListPathsSafely can be called either directly or, more commonly
-# from a recipe line. If called from a recipe, it will be executed in the
-# evaluation phase of that recipe, which means that it will write to the file
-# before any other line in the recipe has been run.
-ifeq ($(HAS_FILE_FUNCTION), true)
- # Param 1 - Name of variable containing paths/arguments to output
- # Param 2 - File to print to
- # Param 3 - Set to true to append to file instead of overwriting
- define ListPathsSafely
- $$(call MakeDir, $$(dir $$(strip $2)))
- $$(file $$(if $$(filter true, $$(strip $3)),>>,>) \
- $$(strip $2),$$(subst $$(SPACE),$$(NEWLINE),$$(strip $$($$(strip $1)))))
- endef
-
-else # HAS_FILE_FUNCTION = false
-
- $(eval compress_paths = \
- $(strip $(shell $(CAT) $(TOPDIR)/make/common/support/ListPathsSafely-pre-compress.incl)))
- compress_paths += \
- $(subst $(TOPDIR),X97, \
- $(subst $(OUTPUTDIR),X98, \
- $(subst X,X00, \
- $(subst $(SPACE),\n,$(strip $1)))))
- $(eval compress_paths += \
- $(strip $(shell $(CAT) $(TOPDIR)/make/common/support/ListPathsSafely-post-compress.incl)))
-
- decompress_paths=$(SED) -f $(TOPDIR)/make/common/support/ListPathsSafely-uncompress.sed \
- -e 's|X99|\\n|g' \
- -e 's|X98|$(OUTPUTDIR)|g' -e 's|X97|$(TOPDIR)|g' \
- -e 's|X00|X|g'
-
- ListPathsSafely_IfPrintf = \
- $(if $(word $3,$($(strip $1))), \
- $(shell $(PRINTF) -- "$(strip $(call EscapeDollar, \
- $(call compress_paths, $(wordlist $3,$4,$($(strip $1))))))\n" \
- | $(decompress_paths) >> $2))
-
- # Param 1 - Name of variable containing paths/arguments to output
- # Param 2 - File to print to
- # Param 3 - Set to true to append to file instead of overwriting
- define ListPathsSafely
- ifneq (,$$(word 30001,$$($$(strip $1))))
- $$(error Cannot list safely more than 30000 paths. $1 has $$(words $$($$(strip $1))) paths!)
- endif
- $$(call MakeDir, $$(dir $2))
- ifneq ($$(strip $3), true)
- $$(shell $(RM) $$(strip $2))
- endif
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,1,250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,251,500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,501,750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,751,1000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,1001,1250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,1251,1500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,1501,1750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,1751,2000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,2001,2250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,2251,2500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,2501,2750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,2751,3000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,3001,3250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,3251,3500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,3501,3750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,3751,4000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,4001,4250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,4251,4500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,4501,4750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,4751,5000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,5001,5250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,5251,5500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,5501,5750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,5751,6000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,6001,6250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,6251,6500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,6501,6750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,6751,7000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,7001,7250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,7251,7500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,7501,7750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,7751,8000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,8001,8250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,8251,8500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,8501,8750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,8751,9000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,9001,9250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,9251,9500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,9501,9750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,9751,10000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,10001,10250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,10251,10500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,10501,10750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,10751,11000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,11001,11250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,11251,11500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,11501,11750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,11751,12000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,12001,12250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,12251,12500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,12501,12750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,12751,13000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,13001,13250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,13251,13500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,13501,13750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,13751,14000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,14001,14250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,14251,14500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,14501,14750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,14751,15000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,15001,15250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,15251,15500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,15501,15750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,15751,16000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,16001,16250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,16251,16500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,16501,16750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,16751,17000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,17001,17250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,17251,17500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,17501,17750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,17751,18000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,18001,18250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,18251,18500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,18501,18750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,18751,19000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,19001,19250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,19251,19500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,19501,19750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,19751,20000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,20001,20250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,20251,20500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,20501,20750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,20751,21000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,21001,21250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,21251,21500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,21501,21750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,21751,22000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,22001,22250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,22251,22500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,22501,22750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,22751,23000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,23001,23250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,23251,23500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,23501,23750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,23751,24000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,24001,24250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,24251,24500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,24501,24750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,24751,25000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,25001,25250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,25251,25500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,25501,25750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,25751,26000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,26001,26250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,26251,26500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,26501,26750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,26751,27000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,27001,27250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,27251,27500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,27501,27750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,27751,28000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,28001,28250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,28251,28500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,28501,28750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,28751,29000)
-
- $$(call ListPathsSafely_IfPrintf,$1,$2,29001,29250)
- $$(call ListPathsSafely_IfPrintf,$1,$2,29251,29500)
- $$(call ListPathsSafely_IfPrintf,$1,$2,29501,29750)
- $$(call ListPathsSafely_IfPrintf,$1,$2,29751,30000)
- endef
-endif # HAS_FILE_FUNCTION
-
-################################################################################
# A file containing a way to uniquely identify the source code revision that
# the build was created from
@@ -409,21 +188,6 @@
$(eval $(call SetupLogging))
################################################################################
-# Creates a sequence of increasing numbers (inclusive).
-# Param 1 - starting number
-# Param 2 - ending number
-sequence = \
- $(wordlist $1, $2, $(strip \
- $(eval SEQUENCE_COUNT :=) \
- $(call _sequence-do,$(strip $2))))
-
-_sequence-do = \
- $(if $(word $1, $(SEQUENCE_COUNT)),, \
- $(eval SEQUENCE_COUNT += .) \
- $(words $(SEQUENCE_COUNT)) \
- $(call _sequence-do,$1))
-
-################################################################################
MAX_PARAMS := 36
PARAM_SEQUENCE := $(call sequence, 2, $(MAX_PARAMS))
@@ -465,16 +229,6 @@
endef
################################################################################
-# Replace question marks with space in string. This macro needs to be called on
-# files from CacheFind in case any of them contains space in their file name,
-# since CacheFind replaces space with ?.
-# Param 1 - String to replace in
-DecodeSpace = \
- $(subst ?,$(SPACE),$(strip $1))
-EncodeSpace = \
- $(subst $(SPACE),?,$(strip $1))
-
-################################################################################
# Make directory without forking mkdir if not needed.
#
# If a directory with an encoded space is provided, the wildcard function
@@ -502,13 +256,6 @@
$(call MakeDir, $(dir $(call EncodeSpace, $@)))
################################################################################
-# Assign a variable only if it is empty
-# Param 1 - Variable to assign
-# Param 2 - Value to assign
-SetIfEmpty = \
- $(if $($(strip $1)),,$(eval $(strip $1) := $2))
-
-################################################################################
# All install-file and related macros automatically call DecodeSpace when needed.
ifeq ($(OPENJDK_TARGET_OS),solaris)
@@ -576,46 +323,6 @@
endef
################################################################################
-# Take two paths and return the path of the last common directory.
-# Ex: /foo/bar/baz, /foo/bar/banan -> /foo/bar
-# foo/bar/baz, /foo/bar ->
-#
-# The x prefix is used to preserve the presence of the initial slash
-#
-# $1 - Path to compare
-# $2 - Other path to compare
-FindCommonPathPrefix = \
- $(patsubst x%,%,$(subst $(SPACE),/,$(strip \
- $(call FindCommonPathPrefixHelper, \
- $(subst /,$(SPACE),x$(strip $1)), $(subst /,$(SPACE),x$(strip $2))) \
- )))
-
-FindCommonPathPrefixHelper = \
- $(if $(call equals, $(firstword $1), $(firstword $2)), \
- $(firstword $1) \
- $(call FindCommonPathPrefixHelper, \
- $(wordlist 2, $(words $1), $1), $(wordlist 2, $(words $2), $2) \
- ) \
- )
-
-# Convert a partial path into as many directory levels of ../, removing
-# leading and following /.
-# Ex: foo/bar/baz/ -> ../../..
-# foo/bar -> ../..
-# /foo -> ..
-DirToDotDot = \
- $(subst $(SPACE),/,$(foreach d, $(subst /,$(SPACE),$1),..))
-
-# Computes the relative path from a directory to a file
-# $1 - File to compute the relative path to
-# $2 - Directory to compute the relative path from
-RelativePath = \
- $(eval $1_prefix := $(call FindCommonPathPrefix, $1, $2)) \
- $(eval $1_dotdots := $(call DirToDotDot, $(patsubst $($(strip $1)_prefix)/%, %, $2))) \
- $(eval $1_suffix := $(patsubst $($(strip $1)_prefix)/%, %, $1)) \
- $($(strip $1)_dotdots)/$($(strip $1)_suffix)
-
-################################################################################
# link-file-* works similarly to install-file but creates a symlink instead.
# There are two versions, either creating a relative or an absolute link. Be
# careful when using this on Windows since the symlink created is only valid in
@@ -633,60 +340,6 @@
endef
################################################################################
-# Filter out duplicate sub strings while preserving order. Keeps the first occurance.
-uniq = \
- $(strip $(if $1,$(firstword $1) $(call uniq,$(filter-out $(firstword $1),$1))))
-
-# Returns all whitespace-separated words in $2 where at least one of the
-# whitespace-separated words in $1 is a substring.
-containing = \
- $(strip \
- $(foreach v,$(strip $2),\
- $(call uniq,$(foreach p,$(strip $1),$(if $(findstring $p,$v),$v)))))
-
-# Returns all whitespace-separated words in $2 where none of the
-# whitespace-separated words in $1 is a substring.
-not-containing = \
- $(strip $(filter-out $(call containing,$1,$2),$2))
-
-# Return a list of all string elements that are duplicated in $1.
-dups = \
- $(strip $(foreach v, $(sort $1), $(if $(filter-out 1, \
- $(words $(filter $v, $1))), $v)))
-
-# String equals
-equals = \
- $(if $(strip $1)$(strip $2),$(strip \
- $(and $(findstring $(strip $1),$(strip $2)),\
- $(findstring $(strip $2),$(strip $1)))), \
- true \
- )
-
-# Remove a whole list of prefixes
-# $1 - List of prefixes
-# $2 - List of elements to process
-remove-prefixes = \
- $(strip $(if $1,$(patsubst $(firstword $1)%,%,\
- $(call remove-prefixes,$(filter-out $(firstword $1),$1),$2)),$2))
-
-# Convert the string given to upper case, without any $(shell)
-# Inspired by http://lists.gnu.org/archive/html/help-make/2013-09/msg00009.html
-uppercase_table := a,A b,B c,C d,D e,E f,F g,G h,H i,I j,J k,K l,L m,M n,N o,O \
- p,P q,Q r,R s,S t,T u,U v,V w,W x,X y,Y z,Z
-
-uppercase_internal = \
- $(if $(strip $1), $$(subst $(firstword $1), $(call uppercase_internal, \
- $(wordlist 2, $(words $1), $1), $2)), $2)
-
-# Convert a string to upper case. Works only on a-z.
-# $1 - The string to convert
-uppercase = \
- $(strip \
- $(eval uppercase_result := $(call uppercase_internal, $(uppercase_table), $1)) \
- $(uppercase_result) \
- )
-
-################################################################################
ifneq ($(DISABLE_CACHE_FIND), true)
# In Cygwin, finds are very costly, both because of expensive forks and because
@@ -758,144 +411,6 @@
endif
################################################################################
-
-define AddFileToCopy
- # Helper macro for SetupCopyFiles
- # 1 : Source file
- # 2 : Dest file
- # 3 : Variable to add targets to
- # 4 : Macro to call for copy operation
- # 5 : Action text to log
- $2: $1
- $$(call LogInfo, $(strip $5) $$(patsubst $(OUTPUTDIR)/%,%,$$(call DecodeSpace, $$@)))
- $$($$(strip $4))
-
- $3 += $2
- $3_SOURCES += $1
-endef
-
-# Returns the value of the first argument
-identity = \
- $(strip $1)
-
-# Setup make rules for copying files, with an option to do more complex
-# processing instead of copying.
-#
-# Parameter 1 is the name of the rule. This name is used as variable prefix,
-# and the targets generated are listed in a variable by that name.
-#
-# The list of all source files is returned in $1_SOURCES.
-#
-# Remaining parameters are named arguments. These include:
-# SRC : Source root dir (defaults to dir of first file)
-# DEST : Dest root dir
-# FILES : List of files to copy with absolute paths, or path relative to SRC.
-# Must be in SRC.
-# FLATTEN : Set to flatten the directory structure in the DEST dir.
-# MACRO : Optionally override the default macro used for making the copy.
-# Default is 'install-file'
-# NAME_MACRO : Optionally supply a macro that rewrites the target file name
-# based on the source file name
-# LOG_ACTION : Optionally specify a different action text for log messages
-SetupCopyFiles = $(NamedParamsMacroTemplate)
-define SetupCopyFilesBody
-
- ifeq ($$($1_MACRO), )
- $1_MACRO := install-file
- endif
-
- # Default SRC to the dir of the first file.
- ifeq ($$($1_SRC), )
- $1_SRC := $$(dir $$(firstword $$($1_FILES)))
- endif
-
- ifeq ($$($1_NAME_MACRO), )
- $1_NAME_MACRO := identity
- endif
-
- ifeq ($$($1_LOG_ACTION), )
- $1_LOG_ACTION := Copying
- endif
-
- # Remove any trailing slash from SRC and DEST
- $1_SRC := $$(patsubst %/,%,$$($1_SRC))
- $1_DEST := $$(patsubst %/,%,$$($1_DEST))
-
- # Need to wrap arguments in DoubleDollar because of the eval nested inside an
- # eval macro body.
- $$(foreach f, $$(patsubst $$($1_SRC)/%,%,$$($1_FILES)), \
- $$(eval $$(call AddFileToCopy, \
- $$(call DoubleDollar, $$($1_SRC)/$$f), \
- $$(call DoubleDollar, \
- $$($1_DEST)/$$(call $$(strip $$($1_NAME_MACRO)),$$(if $$($1_FLATTEN),$$(notdir $$f),$$f)) \
- ), \
- $1, \
- $$($1_MACRO), \
- $$($1_LOG_ACTION) \
- )) \
- )
-
-endef
-
-################################################################################
-# Parse a multiple-keyword variable, like FOO="KEYWORD1=val1;KEYWORD2=val2;..."
-# These will be converted into a series of variables like FOO_KEYWORD1=val1,
-# FOO_KEYWORD2=val2, etc. Unknown keywords will cause an error.
-#
-# Parameter 1 is the name of the rule, and is also the name of the variable.
-#
-# Remaining parameters are named arguments. These include:
-# SINGLE_KEYWORDS A list of valid keywords with single string values
-# STRING_KEYWORDS A list of valid keywords, processed as string. This means
-# that '%20' will be replaced by ' ' to allow for multi-word strings.
-#
-ParseKeywordVariable = $(NamedParamsMacroTemplate)
-define ParseKeywordVariableBody
- ifneq ($$($1), )
- # To preserve spaces, substitute them with a hopefully unique pattern
- # before splitting and then re-substitute spaces back.
- $1_MANGLED := $$(subst $$(SPACE),||||,$$($1))
- $$(foreach mangled_part, $$(subst ;, , $$($1_MANGLED)), \
- $$(eval mangled_part_eval := $$(call DoubleDollar, $$(mangled_part))) \
- $$(eval part := $$$$(subst ||||,$$$$(SPACE),$$$$(mangled_part_eval))) \
- $$(eval $1_NO_MATCH := true) \
- $$(foreach keyword, $$($1_SINGLE_KEYWORDS), \
- $$(eval keyword_eval := $$(call DoubleDollar, $$(keyword))) \
- $$(if $$(filter $$(keyword)=%, $$(part)), \
- $$(eval $(strip $1)_$$$$(keyword_eval) := $$$$(strip $$$$(patsubst $$$$(keyword_eval)=%, %, $$$$(part)))) \
- $$(eval $1_NO_MATCH := ) \
- ) \
- ) \
- $$(foreach keyword, $$($1_STRING_KEYWORDS), \
- $$(eval keyword_eval := $$(call DoubleDollar, $$(keyword))) \
- $$(if $$(filter $$(keyword)=%, $$(part)), \
- $$(eval $(strip $1)_$$$$(keyword_eval) := $$$$(strip $$$$(subst %20, , $$$$(patsubst $$$$(keyword_eval)=%, %, $$$$(part))))) \
- $$(eval $1_NO_MATCH := ) \
- ) \
- ) \
- $$(if $$($1_NO_MATCH), \
- $$(if $$(filter $$(part), $$($1_SINGLE_KEYWORDS) $$($1_STRING_KEYWORDS)), \
- $$(info Keyword $$(part) for $1 needs to be assigned a value.) \
- , \
- $$(info $$(part) is not a valid keyword for $1.) \
- $$(info Valid keywords: $$($1_SINGLE_KEYWORDS) $$($1_STRING_KEYWORDS).) \
- ) \
- $$(error Cannot continue) \
- ) \
- )
- endif
-endef
-
-################################################################################
-# ShellQuote
-#
-# Quotes a string with single quotes and replaces single quotes with '\'' so
-# that the contents survives being given to the shell.
-
-ShellQuote = \
- $(SQUOTE)$(subst $(SQUOTE),$(SQUOTE)\$(SQUOTE)$(SQUOTE),$(strip $1))$(SQUOTE)
-
-################################################################################
# FixPath
#
# On Windows, converts a path from cygwin/unix style (e.g. /bin/foo) into
@@ -912,35 +427,6 @@
endif
################################################################################
-# Write to and read from file
-
-# Param 1 - File to read
-ReadFile = \
- $(shell $(CAT) $1)
-
-# Param 1 - Text to write
-# Param 2 - File to write to
-ifeq ($(HAS_FILE_FUNCTION), true)
- WriteFile = \
- $(file >$2,$(strip $1))
-else
- # Use printf to get consistent behavior on all platforms.
- WriteFile = \
- $(shell $(PRINTF) "%s" $(call ShellQuote, $1) > $2)
-endif
-
-# Param 1 - Text to write
-# Param 2 - File to write to
-ifeq ($(HAS_FILE_FUNCTION), true)
- AppendFile = \
- $(file >>$2,$(strip $1))
-else
- # Use printf to get consistent behavior on all platforms.
- AppendFile = \
- $(shell $(PRINTF) "%s" $(call ShellQuote, $1) >> $2)
-endif
-
-################################################################################
# DependOnVariable
#
# This macro takes a variable name and puts the value in a file only if the
@@ -1026,75 +512,6 @@
exit $(DOLLAR)exitcode ) )
################################################################################
-# Find lib dir for module
-# Param 1 - module name
-FindLibDirForModule = \
- $(SUPPORT_OUTPUTDIR)/modules_libs/$(strip $1)
-
-################################################################################
-# Find executable dir for module
-# Param 1 - module name
-FindExecutableDirForModule = \
- $(SUPPORT_OUTPUTDIR)/modules_cmds/$(strip $1)
-
-################################################################################
-# Return a string suitable for use after a -classpath or --module-path option. It
-# will be correct and safe to use on all platforms. Arguments are given as space
-# separate classpath entries. Safe for multiple nested calls.
-# param 1 : A space separated list of classpath entries
-# The surrounding strip is needed to keep additional whitespace out
-PathList = \
- "$(subst $(SPACE),$(PATH_SEP),$(strip $(subst $(DQUOTE),,$1)))"
-
-################################################################################
-# Check if a specified hotspot variant is being built, or at least one of a
-# list of variants. Will return 'true' or 'false'.
-# $1 - the variant to test for
-check-jvm-variant = \
- $(strip \
- $(if $(filter-out $(VALID_JVM_VARIANTS), $1), \
- $(error Internal error: Invalid variant tested: $1)) \
- $(if $(filter $1, $(JVM_VARIANTS)), true, false))
-
-################################################################################
-# Converts a space separated list to a comma separated list.
-#
-# Replacing double-comma with a single comma is to workaround the issue with
-# some version of make on windows that doesn't substitute spaces with one comma
-# properly.
-CommaList = \
- $(strip \
- $(subst $(COMMA)$(COMMA),$(COMMA),$(subst $(SPACE),$(COMMA),$(strip $1))) \
- )
-
-################################################################################
-# Converts a space separated list to a colon separated list.
-#
-# Replacing double-colon with a single colon is to workaround the issue with
-# some version of make on windows that doesn't substitute spaces with one colon
-# properly.
-ColonList = \
- $(strip \
- $(subst ::,:,$(subst $(SPACE),:,$(strip $1))) \
- )
-
-################################################################################
-# Given a list of files, filters out locale specific files for translations
-# that should be excluded from this build.
-# $1 - The list of files to filter
-# $2 - The suffix of the files that should be considered (.java or .properties)
-FilterExcludedTranslations = \
- $(strip $(if $(EXCLUDE_TRANSLATIONS), \
- $(filter-out \
- $(foreach suffix, $2, \
- $(addprefix %_, $(addsuffix $(suffix), $(EXCLUDE_TRANSLATIONS))) \
- ), \
- $1 \
- ), \
- $1 \
- ))
-
-################################################################################
# Hook to include the corresponding custom file, if present.
$(eval $(call IncludeCustomExtension, common/MakeBase.gmk))
diff -r b50715adf242 -r cf2b4754174d make/common/MakeIO.gmk
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/common/MakeIO.gmk Tue Jan 29 09:38:31 2019 -0500
@@ -0,0 +1,272 @@
+#
+# Copyright (c) 2011, 2019, 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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# 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.
+#
+
+ifeq (,$(_MAKEBASE_GMK))
+ $(error You must include MakeBase.gmk prior to including MakeIO.gmk)
+endif
+
+################################################################################
+#
+# Functions for dealing with reading and writing from makefiles. Prior to GNU
+# Make 4.0, this was tricky business.
+#
+################################################################################
+
+
+################################################################################
+# ListPathsSafely can be used to print command parameters to a file. This is
+# typically done if the command line lenght risk being too long for the
+# OS/shell. In later make versions, the file function can be used for this
+# purpose. For earlier versions, a more complex implementation is provided.
+#
+# The function ListPathsSafely can be called either directly or, more commonly
+# from a recipe line. If called from a recipe, it will be executed in the
+# evaluation phase of that recipe, which means that it will write to the file
+# before any other line in the recipe has been run.
+ifeq ($(HAS_FILE_FUNCTION), true)
+ # Param 1 - Name of variable containing paths/arguments to output
+ # Param 2 - File to print to
+ # Param 3 - Set to true to append to file instead of overwriting
+ define ListPathsSafely
+ $$(call MakeDir, $$(dir $$(strip $2)))
+ $$(file $$(if $$(filter true, $$(strip $3)),>>,>) \
+ $$(strip $2),$$(subst $$(SPACE),$$(NEWLINE),$$(strip $$($$(strip $1)))))
+ endef
+
+else # HAS_FILE_FUNCTION = false
+
+ $(eval compress_paths = \
+ $(strip $(shell $(CAT) $(TOPDIR)/make/common/support/ListPathsSafely-pre-compress.incl)))
+ compress_paths += \
+ $(subst $(TOPDIR),X97, \
+ $(subst $(OUTPUTDIR),X98, \
+ $(subst X,X00, \
+ $(subst $(SPACE),\n,$(strip $1)))))
+ $(eval compress_paths += \
+ $(strip $(shell $(CAT) $(TOPDIR)/make/common/support/ListPathsSafely-post-compress.incl)))
+
+ decompress_paths=$(SED) -f $(TOPDIR)/make/common/support/ListPathsSafely-uncompress.sed \
+ -e 's|X99|\\n|g' \
+ -e 's|X98|$(OUTPUTDIR)|g' -e 's|X97|$(TOPDIR)|g' \
+ -e 's|X00|X|g'
+
+ ListPathsSafely_IfPrintf = \
+ $(if $(word $3,$($(strip $1))), \
+ $(shell $(PRINTF) -- "$(strip $(call EscapeDollar, \
+ $(call compress_paths, $(wordlist $3,$4,$($(strip $1))))))\n" \
+ | $(decompress_paths) >> $2))
+
+ # Param 1 - Name of variable containing paths/arguments to output
+ # Param 2 - File to print to
+ # Param 3 - Set to true to append to file instead of overwriting
+ define ListPathsSafely
+ ifneq (,$$(word 30001,$$($$(strip $1))))
+ $$(error Cannot list safely more than 30000 paths. $1 has $$(words $$($$(strip $1))) paths!)
+ endif
+ $$(call MakeDir, $$(dir $2))
+ ifneq ($$(strip $3), true)
+ $$(shell $(RM) $$(strip $2))
+ endif
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,1,250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,251,500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,501,750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,751,1000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,1001,1250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,1251,1500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,1501,1750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,1751,2000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,2001,2250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,2251,2500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,2501,2750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,2751,3000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,3001,3250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,3251,3500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,3501,3750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,3751,4000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,4001,4250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,4251,4500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,4501,4750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,4751,5000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,5001,5250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,5251,5500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,5501,5750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,5751,6000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,6001,6250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,6251,6500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,6501,6750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,6751,7000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,7001,7250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,7251,7500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,7501,7750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,7751,8000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,8001,8250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,8251,8500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,8501,8750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,8751,9000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,9001,9250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,9251,9500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,9501,9750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,9751,10000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,10001,10250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,10251,10500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,10501,10750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,10751,11000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,11001,11250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,11251,11500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,11501,11750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,11751,12000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,12001,12250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,12251,12500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,12501,12750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,12751,13000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,13001,13250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,13251,13500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,13501,13750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,13751,14000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,14001,14250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,14251,14500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,14501,14750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,14751,15000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,15001,15250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,15251,15500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,15501,15750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,15751,16000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,16001,16250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,16251,16500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,16501,16750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,16751,17000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,17001,17250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,17251,17500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,17501,17750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,17751,18000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,18001,18250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,18251,18500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,18501,18750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,18751,19000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,19001,19250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,19251,19500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,19501,19750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,19751,20000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,20001,20250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,20251,20500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,20501,20750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,20751,21000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,21001,21250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,21251,21500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,21501,21750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,21751,22000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,22001,22250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,22251,22500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,22501,22750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,22751,23000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,23001,23250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,23251,23500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,23501,23750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,23751,24000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,24001,24250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,24251,24500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,24501,24750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,24751,25000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,25001,25250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,25251,25500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,25501,25750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,25751,26000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,26001,26250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,26251,26500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,26501,26750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,26751,27000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,27001,27250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,27251,27500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,27501,27750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,27751,28000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,28001,28250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,28251,28500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,28501,28750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,28751,29000)
+
+ $$(call ListPathsSafely_IfPrintf,$1,$2,29001,29250)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,29251,29500)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,29501,29750)
+ $$(call ListPathsSafely_IfPrintf,$1,$2,29751,30000)
+ endef
+endif # HAS_FILE_FUNCTION
+
+################################################################################
+# Write to and read from file
+
+# Param 1 - File to read
+ReadFile = \
+ $(shell $(CAT) $1)
+
+# Param 1 - Text to write
+# Param 2 - File to write to
+ifeq ($(HAS_FILE_FUNCTION), true)
+ WriteFile = \
+ $(file >$2,$(strip $1))
+else
+ # Use printf to get consistent behavior on all platforms.
+ WriteFile = \
+ $(shell $(PRINTF) "%s" $(call ShellQuote, $1) > $2)
+endif
+
+# Param 1 - Text to write
+# Param 2 - File to write to
+ifeq ($(HAS_FILE_FUNCTION), true)
+ AppendFile = \
+ $(file >>$2,$(strip $1))
+else
+ # Use printf to get consistent behavior on all platforms.
+ AppendFile = \
+ $(shell $(PRINTF) "%s" $(call ShellQuote, $1) >> $2)
+endif
diff -r b50715adf242 -r cf2b4754174d make/common/Utils.gmk
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/common/Utils.gmk Tue Jan 29 09:38:31 2019 -0500
@@ -0,0 +1,307 @@
+#
+# Copyright (c) 2011, 2019, 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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# 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.
+#
+
+ifeq (,$(_MAKEBASE_GMK))
+ $(error You must include MakeBase.gmk prior to including Utils.gmk)
+endif
+
+################################################################################
+#
+# Common utility functions
+#
+################################################################################
+
+### Debug functions
+
+# Prints the name and value of a variable
+PrintVar = \
+ $(info $(strip $1) >$($(strip $1))<)
+
+################################################################################
+# This macro translates $ into \$ to protect the $ from expansion in the shell.
+# To make this macro resilient against already escaped strings, first remove
+# any present escapes before escaping so that no double escapes are added.
+EscapeDollar = $(subst $$,\$$,$(subst \$$,$$,$(strip $1)))
+
+################################################################################
+# This macro works just like EscapeDollar above, but for #.
+EscapeHash = $(subst \#,\\\#,$(subst \\\#,\#,$(strip $1)))
+
+################################################################################
+# This macro translates $ into $$ to protect the string from make itself.
+DoubleDollar = $(subst $$,$$$$,$(strip $1))
+
+################################################################################
+# Creates a sequence of increasing numbers (inclusive).
+# Param 1 - starting number
+# Param 2 - ending number
+sequence = \
+ $(wordlist $1, $2, $(strip \
+ $(eval SEQUENCE_COUNT :=) \
+ $(call _sequence-do,$(strip $2))))
+
+_sequence-do = \
+ $(if $(word $1, $(SEQUENCE_COUNT)),, \
+ $(eval SEQUENCE_COUNT += .) \
+ $(words $(SEQUENCE_COUNT)) \
+ $(call _sequence-do,$1))
+
+################################################################################
+# Replace question marks with space in string. This macro needs to be called on
+# files from CacheFind in case any of them contains space in their file name,
+# since CacheFind replaces space with ?.
+# Param 1 - String to replace in
+DecodeSpace = \
+ $(subst ?,$(SPACE),$(strip $1))
+
+EncodeSpace = \
+ $(subst $(SPACE),?,$(strip $1))
+
+################################################################################
+# Assign a variable only if it is empty
+# Param 1 - Variable to assign
+# Param 2 - Value to assign
+SetIfEmpty = \
+ $(if $($(strip $1)),,$(eval $(strip $1) := $2))
+
+################################################################################
+# Take two paths and return the path of the last common directory.
+# Ex: /foo/bar/baz, /foo/bar/banan -> /foo/bar
+# foo/bar/baz, /foo/bar ->
+#
+# The x prefix is used to preserve the presence of the initial slash
+#
+# $1 - Path to compare
+# $2 - Other path to compare
+FindCommonPathPrefix = \
+ $(patsubst x%,%,$(subst $(SPACE),/,$(strip \
+ $(call FindCommonPathPrefixHelper, \
+ $(subst /,$(SPACE),x$(strip $1)), $(subst /,$(SPACE),x$(strip $2))) \
+ )))
+
+FindCommonPathPrefixHelper = \
+ $(if $(call equals, $(firstword $1), $(firstword $2)), \
+ $(firstword $1) \
+ $(call FindCommonPathPrefixHelper, \
+ $(wordlist 2, $(words $1), $1), $(wordlist 2, $(words $2), $2) \
+ ) \
+ )
+
+# Convert a partial path into as many directory levels of ../, removing
+# leading and following /.
+# Ex: foo/bar/baz/ -> ../../..
+# foo/bar -> ../..
+# /foo -> ..
+DirToDotDot = \
+ $(subst $(SPACE),/,$(foreach d, $(subst /,$(SPACE),$1),..))
+
+# Computes the relative path from a directory to a file
+# $1 - File to compute the relative path to
+# $2 - Directory to compute the relative path from
+RelativePath = \
+ $(eval $1_prefix := $(call FindCommonPathPrefix, $1, $2)) \
+ $(eval $1_dotdots := $(call DirToDotDot, $(patsubst $($(strip $1)_prefix)/%, %, $2))) \
+ $(eval $1_suffix := $(patsubst $($(strip $1)_prefix)/%, %, $1)) \
+ $($(strip $1)_dotdots)/$($(strip $1)_suffix)
+
+################################################################################
+# Filter out duplicate sub strings while preserving order. Keeps the first occurance.
+uniq = \
+ $(strip $(if $1,$(firstword $1) $(call uniq,$(filter-out $(firstword $1),$1))))
+
+# Returns all whitespace-separated words in $2 where at least one of the
+# whitespace-separated words in $1 is a substring.
+containing = \
+ $(strip \
+ $(foreach v,$(strip $2),\
+ $(call uniq,$(foreach p,$(strip $1),$(if $(findstring $p,$v),$v)))))
+
+# Returns all whitespace-separated words in $2 where none of the
+# whitespace-separated words in $1 is a substring.
+not-containing = \
+ $(strip $(filter-out $(call containing,$1,$2),$2))
+
+# Return a list of all string elements that are duplicated in $1.
+dups = \
+ $(strip $(foreach v, $(sort $1), $(if $(filter-out 1, \
+ $(words $(filter $v, $1))), $v)))
+
+# String equals
+equals = \
+ $(if $(strip $1)$(strip $2),$(strip \
+ $(and $(findstring $(strip $1),$(strip $2)),\
+ $(findstring $(strip $2),$(strip $1)))), \
+ true \
+ )
+
+# Remove a whole list of prefixes
+# $1 - List of prefixes
+# $2 - List of elements to process
+remove-prefixes = \
+ $(strip $(if $1,$(patsubst $(firstword $1)%,%,\
+ $(call remove-prefixes,$(filter-out $(firstword $1),$1),$2)),$2))
+
+# Convert the string given to upper case, without any $(shell)
+# Inspired by http://lists.gnu.org/archive/html/help-make/2013-09/msg00009.html
+uppercase_table := a,A b,B c,C d,D e,E f,F g,G h,H i,I j,J k,K l,L m,M n,N o,O \
+ p,P q,Q r,R s,S t,T u,U v,V w,W x,X y,Y z,Z
+
+uppercase_internal = \
+ $(if $(strip $1), $$(subst $(firstword $1), $(call uppercase_internal, \
+ $(wordlist 2, $(words $1), $1), $2)), $2)
+
+# Convert a string to upper case. Works only on a-z.
+# $1 - The string to convert
+uppercase = \
+ $(strip \
+ $(eval uppercase_result := $(call uppercase_internal, $(uppercase_table), $1)) \
+ $(uppercase_result) \
+ )
+
+################################################################################
+# Parse a multiple-keyword variable, like FOO="KEYWORD1=val1;KEYWORD2=val2;..."
+# These will be converted into a series of variables like FOO_KEYWORD1=val1,
+# FOO_KEYWORD2=val2, etc. Unknown keywords will cause an error.
+#
+# Parameter 1 is the name of the rule, and is also the name of the variable.
+#
+# Remaining parameters are named arguments. These include:
+# SINGLE_KEYWORDS A list of valid keywords with single string values
+# STRING_KEYWORDS A list of valid keywords, processed as string. This means
+# that '%20' will be replaced by ' ' to allow for multi-word strings.
+#
+ParseKeywordVariable = $(NamedParamsMacroTemplate)
+define ParseKeywordVariableBody
+ ifneq ($$($1), )
+ # To preserve spaces, substitute them with a hopefully unique pattern
+ # before splitting and then re-substitute spaces back.
+ $1_MANGLED := $$(subst $$(SPACE),||||,$$($1))
+ $$(foreach mangled_part, $$(subst ;, , $$($1_MANGLED)), \
+ $$(eval mangled_part_eval := $$(call DoubleDollar, $$(mangled_part))) \
+ $$(eval part := $$$$(subst ||||,$$$$(SPACE),$$$$(mangled_part_eval))) \
+ $$(eval $1_NO_MATCH := true) \
+ $$(foreach keyword, $$($1_SINGLE_KEYWORDS), \
+ $$(eval keyword_eval := $$(call DoubleDollar, $$(keyword))) \
+ $$(if $$(filter $$(keyword)=%, $$(part)), \
+ $$(eval $(strip $1)_$$$$(keyword_eval) := $$$$(strip $$$$(patsubst $$$$(keyword_eval)=%, %, $$$$(part)))) \
+ $$(eval $1_NO_MATCH := ) \
+ ) \
+ ) \
+ $$(foreach keyword, $$($1_STRING_KEYWORDS), \
+ $$(eval keyword_eval := $$(call DoubleDollar, $$(keyword))) \
+ $$(if $$(filter $$(keyword)=%, $$(part)), \
+ $$(eval $(strip $1)_$$$$(keyword_eval) := $$$$(strip $$$$(subst %20, , $$$$(patsubst $$$$(keyword_eval)=%, %, $$$$(part))))) \
+ $$(eval $1_NO_MATCH := ) \
+ ) \
+ ) \
+ $$(if $$($1_NO_MATCH), \
+ $$(if $$(filter $$(part), $$($1_SINGLE_KEYWORDS) $$($1_STRING_KEYWORDS)), \
+ $$(info Keyword $$(part) for $1 needs to be assigned a value.) \
+ , \
+ $$(info $$(part) is not a valid keyword for $1.) \
+ $$(info Valid keywords: $$($1_SINGLE_KEYWORDS) $$($1_STRING_KEYWORDS).) \
+ ) \
+ $$(error Cannot continue) \
+ ) \
+ )
+ endif
+endef
+
+################################################################################
+# ShellQuote
+#
+# Quotes a string with single quotes and replaces single quotes with '\'' so
+# that the contents survives being given to the shell.
+ShellQuote = \
+ $(SQUOTE)$(subst $(SQUOTE),$(SQUOTE)\$(SQUOTE)$(SQUOTE),$(strip $1))$(SQUOTE)
+
+################################################################################
+# Find lib dir for module
+# Param 1 - module name
+FindLibDirForModule = \
+ $(SUPPORT_OUTPUTDIR)/modules_libs/$(strip $1)
+
+################################################################################
+# Find executable dir for module
+# Param 1 - module name
+FindExecutableDirForModule = \
+ $(SUPPORT_OUTPUTDIR)/modules_cmds/$(strip $1)
+
+################################################################################
+# Return a string suitable for use after a -classpath or --module-path option. It
+# will be correct and safe to use on all platforms. Arguments are given as space
+# separate classpath entries. Safe for multiple nested calls.
+# param 1 : A space separated list of classpath entries
+# The surrounding strip is needed to keep additional whitespace out
+PathList = \
+ "$(subst $(SPACE),$(PATH_SEP),$(strip $(subst $(DQUOTE),,$1)))"
+
+################################################################################
+# Check if a specified hotspot variant is being built, or at least one of a
+# list of variants. Will return 'true' or 'false'.
+# $1 - the variant to test for
+check-jvm-variant = \
+ $(strip \
+ $(if $(filter-out $(VALID_JVM_VARIANTS), $1), \
+ $(error Internal error: Invalid variant tested: $1)) \
+ $(if $(filter $1, $(JVM_VARIANTS)), true, false))
+
+################################################################################
+# Converts a space separated list to a comma separated list.
+#
+# Replacing double-comma with a single comma is to workaround the issue with
+# some version of make on windows that doesn't substitute spaces with one comma
+# properly.
+CommaList = \
+ $(strip \
+ $(subst $(COMMA)$(COMMA),$(COMMA),$(subst $(SPACE),$(COMMA),$(strip $1))) \
+ )
+
+################################################################################
+# Converts a space separated list to a colon separated list.
+#
+# Replacing double-colon with a single colon is to workaround the issue with
+# some version of make on windows that doesn't substitute spaces with one colon
+# properly.
+ColonList = \
+ $(strip \
+ $(subst ::,:,$(subst $(SPACE),:,$(strip $1))) \
+ )
+
+################################################################################
+# Given a list of files, filters out locale specific files for translations
+# that should be excluded from this build.
+# $1 - The list of files to filter
+# $2 - The suffix of the files that should be considered (.java or .properties)
+FilterExcludedTranslations = \
+ $(strip $(if $(EXCLUDE_TRANSLATIONS), \
+ $(filter-out \
+ $(foreach suffix, $2, \
+ $(addprefix %_, $(addsuffix $(suffix), $(EXCLUDE_TRANSLATIONS))) \
+ ), \
+ $1 \
+ ), \
+ $1 \
+ ))
diff -r b50715adf242 -r cf2b4754174d make/conf/jib-profiles.js
--- a/make/conf/jib-profiles.js Tue Jan 22 09:43:38 2019 -0500
+++ b/make/conf/jib-profiles.js Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -574,6 +574,20 @@
profiles[bootcyclePrebuiltName].default_make_targets = [ "product-images" ];
});
+ // JCov profiles build JCov-instrumented JDK image based on images provided through dependencies.
+ [ "linux-x64", "macosx-x64", "solaris-sparcv9", "windows-x64"]
+ .forEach(function (name) {
+ var jcovName = name + "-jcov";
+ profiles[jcovName] = clone(common.main_profile_base);
+ profiles[jcovName].target_os = profiles[name].target_os
+ profiles[jcovName].target_cpu = profiles[name].target_cpu
+ profiles[jcovName].default_make_targets = [ "jcov-bundles" ];
+ profiles[jcovName].dependencies = concat(profiles[jcovName].dependencies,
+ [ name + ".jdk", "devkit" ]);
+ profiles[jcovName].configure_args = concat(profiles[jcovName].configure_args,
+ ["--with-jcov-input-jdk=" + input.get(name + ".jdk", "home_path")]);
+ });
+
//
// Define artifacts for profiles
//
@@ -707,6 +721,26 @@
});
});
+ // Artifacts of JCov profiles
+ [ "linux-x64", "macosx-x64", "solaris-sparcv9", "windows-x64"]
+ .forEach(function (name) {
+ var o = artifactData[name]
+ var jdk_subdir = (o.jdk_subdir != null ? o.jdk_subdir : "jdk-" + data.version);
+ var jdk_suffix = (o.jdk_suffix != null ? o.jdk_suffix : "tar.gz");
+ var pf = o.platform
+ var jcovName = name + "-jcov";
+ profiles[jcovName].artifacts = {
+ jdk: {
+ local: "bundles/\\(jdk-jcov.*bin." + jdk_suffix + "\\)",
+ remote: [
+ "bundles/" + pf + "/jdk-jcov-" + data.version + "_" + pf + "_bin." + jdk_suffix
+ ],
+ subdir: jdk_subdir,
+ exploded: "images/jdk-jcov"
+ }
+ };
+ });
+
// Profiles used to run tests.
var testOnlyProfiles = {
"run-test": {
@@ -726,20 +760,27 @@
if (testedProfile == null) {
testedProfile = input.build_os + "-" + input.build_cpu;
}
+ var testedProfileJDK = testedProfile + ".jdk";
+ var testedProfileTest = ""
+ if (testedProfile.endsWith("-jcov")) {
+ testedProfileTest = testedProfile.substring(0, testedProfile.length - "-jcov".length) + ".test";
+ } else {
+ testedProfileTest = testedProfile + ".test";
+ }
var testOnlyProfilesPrebuilt = {
"run-test-prebuilt": {
target_os: input.build_os,
target_cpu: input.build_cpu,
dependencies: [
- "jtreg", "gnumake", "boot_jdk", "devkit", "jib", testedProfile + ".jdk",
- testedProfile + ".test"
+ "jtreg", "gnumake", "boot_jdk", "devkit", "jib", "jcov", testedProfileJDK,
+ testedProfileTest
],
src: "src.conf",
make_args: [ "run-test-prebuilt", "LOG_CMDLINES=true", "JTREG_VERBOSE=fail,error,time" ],
environment: {
"BOOT_JDK": common.boot_jdk_home,
- "JDK_IMAGE_DIR": input.get(testedProfile + ".jdk", "home_path"),
- "TEST_IMAGE_DIR": input.get(testedProfile + ".test", "home_path")
+ "JDK_IMAGE_DIR": input.get(testedProfileJDK, "home_path"),
+ "TEST_IMAGE_DIR": input.get(testedProfileTest, "home_path")
},
labels: "test"
}
@@ -905,6 +946,7 @@
version: "3.0",
build_number: "b07",
file: "bundles/jcov-3_0.zip",
+ environment_name: "JCOV_HOME",
},
gnumake: {
diff -r b50715adf242 -r cf2b4754174d make/data/charsetmapping/charsets
--- a/make/data/charsetmapping/charsets Tue Jan 22 09:43:38 2019 -0500
+++ b/make/data/charsetmapping/charsets Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2000, 2019, 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
@@ -1561,6 +1561,15 @@
alias ibm-euctw
alias 964
+charset x-IBM29626C IBM29626C
+ package sun.nio.cs.ext
+ type template
+ alias cp29626c # JDK historical
+ alias ibm29626c
+ alias ibm-29626c
+ alias 29626c
+ alias ibm-eucjp
+
charset x-IBM33722 IBM33722
package sun.nio.cs.ext
type source
diff -r b50715adf242 -r cf2b4754174d make/data/charsetmapping/stdcs-aix
--- a/make/data/charsetmapping/stdcs-aix Tue Jan 22 09:43:38 2019 -0500
+++ b/make/data/charsetmapping/stdcs-aix Tue Jan 29 09:38:31 2019 -0500
@@ -22,8 +22,12 @@
IBM1124
IBM1129
IBM1383
+IBM29626C
ISO_8859_6
ISO_8859_8
+JIS_X_0201
+JIS_X_0208
+JIS_X_0212
MS1252
TIS_620
SimpleEUCEncoder
diff -r b50715adf242 -r cf2b4754174d make/hotspot/gensrc/GensrcAdlc.gmk
--- a/make/hotspot/gensrc/GensrcAdlc.gmk Tue Jan 22 09:43:38 2019 -0500
+++ b/make/hotspot/gensrc/GensrcAdlc.gmk Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2019, 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
@@ -142,6 +142,12 @@
)))
endif
+ ifeq ($(call check-jvm-feature, zgc), true)
+ AD_SRC_FILES += $(call uniq, $(wildcard $(foreach d, $(AD_SRC_ROOTS), \
+ $d/cpu/$(HOTSPOT_TARGET_CPU_ARCH)/gc/z/z_$(HOTSPOT_TARGET_CPU).ad \
+ )))
+ endif
+
SINGLE_AD_SRCFILE := $(ADLC_SUPPORT_DIR)/all-ad-src.ad
INSERT_FILENAME_AWK_SCRIPT := \
diff -r b50715adf242 -r cf2b4754174d make/nb_native/nbproject/configurations.xml
--- a/make/nb_native/nbproject/configurations.xml Tue Jan 22 09:43:38 2019 -0500
+++ b/make/nb_native/nbproject/configurations.xml Tue Jan 29 09:38:31 2019 -0500
@@ -2,6711 +2,6 @@
-
- unshuffle_list.txt
-
-
-
-
-
-
- ad_x86_64.cpp
- ad_x86_64_clone.cpp
- ad_x86_64_expand.cpp
- ad_x86_64_format.cpp
- ad_x86_64_gen.cpp
- ad_x86_64_misc.cpp
- ad_x86_64_peephole.cpp
- ad_x86_64_pipeline.cpp
- dfa_x86_64.cpp
-
-
- bytecodeInterpreterWithChecks.cpp
- jvmtiEnter.cpp
- jvmtiEnterTrace.cpp
-
-
-
-
-
-
- ad_x86_64.cpp
- ad_x86_64_clone.cpp
- ad_x86_64_expand.cpp
- ad_x86_64_format.cpp
- ad_x86_64_gen.cpp
- ad_x86_64_misc.cpp
- ad_x86_64_peephole.cpp
- ad_x86_64_pipeline.cpp
- dfa_x86_64.cpp
-
-
- bytecodeInterpreterWithChecks.cpp
- jvmtiEnter.cpp
- jvmtiEnterTrace.cpp
-
-
-
-
- JvmOffsets.cpp
-
-
-
-
-
-
-
-
-
- ad_x86_64.cpp
- ad_x86_64_clone.cpp
- ad_x86_64_expand.cpp
- ad_x86_64_format.cpp
- ad_x86_64_gen.cpp
- ad_x86_64_misc.cpp
- ad_x86_64_peephole.cpp
- ad_x86_64_pipeline.cpp
- dfa_x86_64.cpp
-
-
- bytecodeInterpreterWithChecks.cpp
- jvmtiEnter.cpp
- jvmtiEnterTrace.cpp
-
-
-
-
-
-
-
-
-
- sizer.64.c
-
-
-
-
-
-
-
-
- Big5.map
- Big5_HKSCS.map
- Big5_Solaris.map
- EUC_CN.map
- EUC_JP.map
- EUC_JP_LINUX.map
- EUC_JP_Open.map
- EUC_KR.map
- EUC_TW.map
- GB18030.map
- GBK.map
- HKSCS2001.map
- HKSCS2008.map
- HKSCS_XP.map
- IBM037.map
- IBM1006.map
- IBM1025.map
- IBM1026.map
- IBM1046.map
- IBM1047.map
- IBM1097.map
- IBM1098.map
- IBM1112.map
- IBM1122.map
- IBM1123.map
- IBM1124.map
- IBM1129.map
- IBM1140.map
- IBM1141.map
- IBM1142.map
- IBM1143.map
- IBM1144.map
- IBM1145.map
- IBM1146.map
- IBM1147.map
- IBM1148.map
- IBM1149.map
- IBM1166.map
- IBM1364.map
- IBM1381.map
- IBM1383.map
- IBM273.map
- IBM277.map
- IBM278.map
- IBM280.map
- IBM284.map
- IBM285.map
- IBM290.map
- IBM297.map
- IBM300.map
- IBM420.map
- IBM424.map
- IBM437.map
- IBM500.map
- IBM737.map
- IBM775.map
- IBM833.map
- IBM838.map
- IBM850.map
- IBM852.map
- IBM855.map
- IBM856.map
- IBM857.map
- IBM858.map
- IBM860.map
- IBM861.map
- IBM862.map
- IBM863.map
- IBM864.map
- IBM865.map
- IBM866.map
- IBM868.map
- IBM869.map
- IBM870.map
- IBM871.map
- IBM874.map
- IBM875.map
- IBM918.map
- IBM921.map
- IBM922.map
- IBM930.map
- IBM933.map
- IBM935.map
- IBM937.map
- IBM939.map
- IBM942.map
- IBM943.map
- IBM948.map
- IBM949.map
- IBM950.map
- IBM970.map
- ISO_8859_11.map
- ISO_8859_13.map
- ISO_8859_15.map
- ISO_8859_16.map
- ISO_8859_2.map
- ISO_8859_3.map
- ISO_8859_4.map
- ISO_8859_5.map
- ISO_8859_6.map
- ISO_8859_7.map
- ISO_8859_8.map
- ISO_8859_9.map
- JIS_X_0201.map
- JIS_X_0208.map
- JIS_X_0208_MS5022X.map
- JIS_X_0208_MS932.map
- JIS_X_0208_Solaris.map
- JIS_X_0212.map
- JIS_X_0212_MS5022X.map
- JIS_X_0212_Solaris.map
- Johab.map
- KOI8_R.map
- KOI8_U.map
- MS1250.map
- MS1251.map
- MS1252.map
- MS1253.map
- MS1254.map
- MS1255.map
- MS1256.map
- MS1257.map
- MS1258.map
- MS874.map
- MS932.map
- MS936.map
- MS949.map
- MS950.map
- MS950_HKSCS_XP.map
- MacArabic.map
- MacCentralEurope.map
- MacCroatian.map
- MacCyrillic.map
- MacDingbat.map
- MacGreek.map
- MacHebrew.map
- MacIceland.map
- MacRoman.map
- MacRomania.map
- MacSymbol.map
- MacThai.map
- MacTurkish.map
- MacUkraine.map
- PCK.map
- SJIS.map
- TIS_620.map
- sjis0213.map
-
-
- public.map
-
-
- language-subtag-registry.txt
-
-
- java.activation-6.sym.txt
- java.activation-7.sym.txt
- java.activation-8.sym.txt
- java.annotations.common-6.sym.txt
- java.annotations.common-7.sym.txt
- java.annotations.common-8.sym.txt
- java.base-6.sym.txt
- java.base-7.sym.txt
- java.base-8.sym.txt
- java.compiler-6.sym.txt
- java.compiler-7.sym.txt
- java.compiler-8.sym.txt
- java.corba-6.sym.txt
- java.corba-7.sym.txt
- java.corba-8.sym.txt
- java.datatransfer-6.sym.txt
- java.datatransfer-7.sym.txt
- java.datatransfer-8.sym.txt
- java.desktop-6.sym.txt
- java.desktop-7.sym.txt
- java.desktop-8.sym.txt
- java.instrument-6.sym.txt
- java.instrument-7.sym.txt
- java.instrument-8.sym.txt
- java.logging-6.sym.txt
- java.logging-7.sym.txt
- java.logging-8.sym.txt
- java.management-6.sym.txt
- java.management-7.sym.txt
- java.management-8.sym.txt
- java.naming-6.sym.txt
- java.naming-7.sym.txt
- java.naming-8.sym.txt
- java.prefs-6.sym.txt
- java.prefs-7.sym.txt
- java.prefs-8.sym.txt
- java.rmi-6.sym.txt
- java.rmi-7.sym.txt
- java.rmi-8.sym.txt
- java.scripting-6.sym.txt
- java.scripting-7.sym.txt
- java.scripting-8.sym.txt
- java.security.jgss-6.sym.txt
- java.security.jgss-7.sym.txt
- java.security.jgss-8.sym.txt
- java.security.sasl-6.sym.txt
- java.security.sasl-7.sym.txt
- java.security.sasl-8.sym.txt
- java.sql-6.sym.txt
- java.sql-7.sym.txt
- java.sql-8.sym.txt
- java.sql.rowset-6.sym.txt
- java.sql.rowset-7.sym.txt
- java.sql.rowset-8.sym.txt
- java.transaction-6.sym.txt
- java.transaction-7.sym.txt
- java.transaction-8.sym.txt
- java.xml-6.sym.txt
- java.xml-7.sym.txt
- java.xml-8.sym.txt
- java.xml.bind-6.sym.txt
- java.xml.bind-7.sym.txt
- java.xml.bind-8.sym.txt
- java.xml.crypto-6.sym.txt
- java.xml.crypto-7.sym.txt
- java.xml.crypto-8.sym.txt
- java.xml.ws-6.sym.txt
- java.xml.ws-7.sym.txt
- java.xml.ws-8.sym.txt
- jdk.httpserver-6.sym.txt
- jdk.httpserver-7.sym.txt
- jdk.httpserver-8.sym.txt
- jdk.management-6.sym.txt
- jdk.management-7.sym.txt
- jdk.management-8.sym.txt
- jdk.scripting.nashorn-6.sym.txt
- jdk.scripting.nashorn-7.sym.txt
- jdk.scripting.nashorn-8.sym.txt
- jdk.sctp-6.sym.txt
- jdk.sctp-7.sym.txt
- jdk.sctp-8.sym.txt
- jdk.security.auth-6.sym.txt
- jdk.security.auth-7.sym.txt
- jdk.security.auth-8.sym.txt
- jdk.security.jgss-6.sym.txt
- jdk.security.jgss-7.sym.txt
- jdk.security.jgss-8.sym.txt
-
-
- PropList.txt
- Scripts.txt
- SpecialCasing.txt
- UnicodeData.txt
-
-
- functions.txt
- xlibtypes.txt
-
-
-
- solaris11.1-package-list.txt
-
-
-
-
-
- generateJvmOffsets.cpp
- generateJvmOffsets.h
- generateJvmOffsetsMain.c
-
-
-
-
-
-
-
- classes.gold.txt
- src.gold.txt
-
- HelloWorld.apt.gold.txt
- HelloWorld.gold.h
- HelloWorld.javadoc.gold.txt
- HelloWorld.javap.gold.txt
- contents.gold.txt
-
-
-
-
- exclude_list.txt
- exclude_list_cc.txt
-
-
-
-
- fixpath.c
-
-
-
-
-
-
-
-
-
-
- arabic.ut8.txt
- english.ut8.txt
- greek.ut8.txt
- hebrew.ut8.txt
- hindi.ut8.txt
- japanese.ut8.txt
- korean.ut8.txt
- thai.ut8.txt
-
-
-
-
-
-
- README.txt
-
-
- README.txt
-
-
- README.txt
-
-
- README.txt
-
-
- README.txt
-
-
- README.txt
-
-
- README.txt
-
-
- README.txt
-
-
-
-
-
-
-
- aarch64.ad
- aarch64Test.cpp
- aarch64_call.cpp
- aarch64_linkage.S
- abstractInterpreter_aarch64.cpp
- assembler_aarch64.cpp
- assembler_aarch64.hpp
- assembler_aarch64.inline.hpp
- bytecodes_aarch64.cpp
- bytecodes_aarch64.hpp
- bytes_aarch64.hpp
- c1_CodeStubs_aarch64.cpp
- c1_Defs_aarch64.hpp
- c1_FpuStackSim_aarch64.cpp
- c1_FpuStackSim_aarch64.hpp
- c1_FrameMap_aarch64.cpp
- c1_FrameMap_aarch64.hpp
- c1_LIRAssembler_aarch64.cpp
- c1_LIRAssembler_aarch64.hpp
- c1_LIRGenerator_aarch64.cpp
- c1_LIR_aarch64.cpp
- c1_LinearScan_aarch64.cpp
- c1_LinearScan_aarch64.hpp
- c1_MacroAssembler_aarch64.cpp
- c1_MacroAssembler_aarch64.hpp
- c1_Runtime1_aarch64.cpp
- c1_globals_aarch64.hpp
- c2_globals_aarch64.hpp
- c2_init_aarch64.cpp
- codeBuffer_aarch64.hpp
- compiledIC_aarch64.cpp
- copy_aarch64.hpp
- cpustate_aarch64.hpp
- decode_aarch64.hpp
- depChecker_aarch64.cpp
- depChecker_aarch64.hpp
- disassembler_aarch64.hpp
- frame_aarch64.cpp
- frame_aarch64.hpp
- frame_aarch64.inline.hpp
- globalDefinitions_aarch64.hpp
- globals_aarch64.hpp
- icBuffer_aarch64.cpp
- icache_aarch64.cpp
- icache_aarch64.hpp
- immediate_aarch64.cpp
- immediate_aarch64.hpp
- interp_masm_aarch64.cpp
- interp_masm_aarch64.hpp
- interpreterRT_aarch64.cpp
- interpreterRT_aarch64.hpp
- javaFrameAnchor_aarch64.hpp
- jniFastGetField_aarch64.cpp
- jniTypes_aarch64.hpp
- jni_aarch64.h
- jvmciCodeInstaller_aarch64.cpp
- macroAssembler_aarch64.cpp
- macroAssembler_aarch64.hpp
- macroAssembler_aarch64.inline.hpp
- methodHandles_aarch64.cpp
- methodHandles_aarch64.hpp
- nativeInst_aarch64.cpp
- nativeInst_aarch64.hpp
- registerMap_aarch64.hpp
- register_aarch64.cpp
- register_aarch64.hpp
- register_definitions_aarch64.cpp
- relocInfo_aarch64.cpp
- relocInfo_aarch64.hpp
- runtime_aarch64.cpp
- sharedRuntime_aarch64.cpp
- stubGenerator_aarch64.cpp
- stubRoutines_aarch64.cpp
- stubRoutines_aarch64.hpp
- templateInterpreterGenerator_aarch64.cpp
- templateTable_aarch64.cpp
- templateTable_aarch64.hpp
- vmStructs_aarch64.hpp
- vm_version_aarch64.cpp
- vm_version_aarch64.hpp
- vmreg_aarch64.cpp
- vmreg_aarch64.hpp
- vmreg_aarch64.inline.hpp
- vtableStubs_aarch64.cpp
-
-
- abstractInterpreter_arm.cpp
- arm.ad
- arm_32.ad
- arm_64.ad
- assembler_arm.cpp
- assembler_arm.hpp
- assembler_arm.inline.hpp
- assembler_arm_32.cpp
- assembler_arm_32.hpp
- assembler_arm_64.cpp
- assembler_arm_64.hpp
- bytes_arm.hpp
- c1_CodeStubs_arm.cpp
- c1_Defs_arm.hpp
- c1_FpuStackSim_arm.cpp
- c1_FpuStackSim_arm.hpp
- c1_FrameMap_arm.cpp
- c1_FrameMap_arm.hpp
- c1_LIRAssembler_arm.cpp
- c1_LIRAssembler_arm.hpp
- c1_LIRGenerator_arm.cpp
- c1_LIRGenerator_arm.hpp
- c1_LIR_arm.cpp
- c1_LinearScan_arm.cpp
- c1_LinearScan_arm.hpp
- c1_MacroAssembler_arm.cpp
- c1_MacroAssembler_arm.hpp
- c1_Runtime1_arm.cpp
- c1_globals_arm.hpp
- c2_globals_arm.hpp
- codeBuffer_arm.hpp
- compiledIC_arm.cpp
- copy_arm.hpp
- depChecker_arm.cpp
- depChecker_arm.hpp
- disassembler_arm.hpp
- frame_arm.cpp
- frame_arm.hpp
- frame_arm.inline.hpp
- globalDefinitions_arm.hpp
- globals_arm.hpp
- icBuffer_arm.cpp
- icache_arm.cpp
- icache_arm.hpp
- interp_masm_arm.cpp
- interp_masm_arm.hpp
- interpreterRT_arm.cpp
- interpreterRT_arm.hpp
- javaFrameAnchor_arm.hpp
- jniFastGetField_arm.cpp
- jniTypes_arm.hpp
- jni_arm.h
- jvmciCodeInstaller_arm.cpp
- macroAssembler_arm.cpp
- macroAssembler_arm.hpp
- macroAssembler_arm.inline.hpp
- methodHandles_arm.cpp
- methodHandles_arm.hpp
- nativeInst_arm.hpp
- nativeInst_arm_32.cpp
- nativeInst_arm_32.hpp
- nativeInst_arm_64.cpp
- nativeInst_arm_64.hpp
- registerMap_arm.hpp
- register_arm.cpp
- register_arm.hpp
- register_definitions_arm.cpp
- relocInfo_arm.cpp
- relocInfo_arm.hpp
- runtime_arm.cpp
- sharedRuntime_arm.cpp
- stubGenerator_arm.cpp
- stubRoutinesCrypto_arm.cpp
- stubRoutines_arm.cpp
- stubRoutines_arm.hpp
- templateInterpreterGenerator_arm.cpp
- templateTable_arm.cpp
- templateTable_arm.hpp
- vmStructs_arm.hpp
- vm_version_arm.hpp
- vm_version_arm_32.cpp
- vm_version_arm_64.cpp
- vmreg_arm.cpp
- vmreg_arm.hpp
- vmreg_arm.inline.hpp
- vtableStubs_arm.cpp
-
-
- abstractInterpreter_ppc.cpp
- assembler_ppc.cpp
- assembler_ppc.hpp
- assembler_ppc.inline.hpp
- bytes_ppc.hpp
- c1_CodeStubs_ppc.cpp
- c1_Defs_ppc.hpp
- c1_FpuStackSim_ppc.hpp
- c1_FrameMap_ppc.cpp
- c1_FrameMap_ppc.hpp
- c1_LIRAssembler_ppc.cpp
- c1_LIRAssembler_ppc.hpp
- c1_LIRGenerator_ppc.cpp
- c1_LIR_ppc.cpp
- c1_LinearScan_ppc.cpp
- c1_LinearScan_ppc.hpp
- c1_MacroAssembler_ppc.cpp
- c1_MacroAssembler_ppc.hpp
- c1_Runtime1_ppc.cpp
- c1_globals_ppc.hpp
- c2_globals_ppc.hpp
- c2_init_ppc.cpp
- codeBuffer_ppc.hpp
- compiledIC_ppc.cpp
- copy_ppc.hpp
- depChecker_ppc.hpp
- disassembler_ppc.hpp
- frame_ppc.cpp
- frame_ppc.hpp
- frame_ppc.inline.hpp
- globalDefinitions_ppc.hpp
- globals_ppc.hpp
- icBuffer_ppc.cpp
- icache_ppc.cpp
- icache_ppc.hpp
- interp_masm_ppc.hpp
- interp_masm_ppc_64.cpp
- interpreterRT_ppc.cpp
- interpreterRT_ppc.hpp
- javaFrameAnchor_ppc.hpp
- jniFastGetField_ppc.cpp
- jniTypes_ppc.hpp
- jni_ppc.h
- jvmciCodeInstaller_ppc.cpp
- macroAssembler_ppc.cpp
- macroAssembler_ppc.hpp
- macroAssembler_ppc.inline.hpp
- macroAssembler_ppc_sha.cpp
- methodHandles_ppc.cpp
- methodHandles_ppc.hpp
- nativeInst_ppc.cpp
- nativeInst_ppc.hpp
- ppc.ad
- registerMap_ppc.hpp
- register_definitions_ppc.cpp
- register_ppc.cpp
- register_ppc.hpp
- relocInfo_ppc.cpp
- relocInfo_ppc.hpp
- runtime_ppc.cpp
- sharedRuntime_ppc.cpp
- stubGenerator_ppc.cpp
- stubRoutines_ppc.hpp
- stubRoutines_ppc_64.cpp
- templateInterpreterGenerator_ppc.cpp
- templateTable_ppc.hpp
- templateTable_ppc_64.cpp
- vmStructs_ppc.hpp
- vm_version_ppc.cpp
- vm_version_ppc.hpp
- vmreg_ppc.cpp
- vmreg_ppc.hpp
- vmreg_ppc.inline.hpp
- vtableStubs_ppc_64.cpp
-
-
- abstractInterpreter_s390.cpp
- assembler_s390.cpp
- assembler_s390.hpp
- assembler_s390.inline.hpp
- bytes_s390.hpp
- c1_CodeStubs_s390.cpp
- c1_Defs_s390.hpp
- c1_FpuStackSim_s390.hpp
- c1_FrameMap_s390.cpp
- c1_FrameMap_s390.hpp
- c1_LIRAssembler_s390.cpp
- c1_LIRAssembler_s390.hpp
- c1_LIRGenerator_s390.cpp
- c1_LIR_s390.cpp
- c1_LinearScan_s390.cpp
- c1_LinearScan_s390.hpp
- c1_MacroAssembler_s390.cpp
- c1_MacroAssembler_s390.hpp
- c1_Runtime1_s390.cpp
- c1_globals_s390.hpp
- c2_globals_s390.hpp
- c2_init_s390.cpp
- codeBuffer_s390.hpp
- compiledIC_s390.cpp
- copy_s390.hpp
- depChecker_s390.hpp
- disassembler_s390.hpp
- frame_s390.cpp
- frame_s390.hpp
- frame_s390.inline.hpp
- globalDefinitions_s390.hpp
- globals_s390.hpp
- icBuffer_s390.cpp
- icache_s390.cpp
- icache_s390.hpp
- interp_masm_s390.cpp
- interp_masm_s390.hpp
- interpreterRT_s390.cpp
- interpreterRT_s390.hpp
- javaFrameAnchor_s390.hpp
- jniFastGetField_s390.cpp
- jniTypes_s390.hpp
- jni_s390.h
- jvmciCodeInstaller_s390.cpp
- macroAssembler_s390.cpp
- macroAssembler_s390.hpp
- macroAssembler_s390.inline.hpp
- methodHandles_s390.cpp
- methodHandles_s390.hpp
- nativeInst_s390.cpp
- nativeInst_s390.hpp
- registerMap_s390.hpp
- registerSaver_s390.hpp
- register_definitions_s390.cpp
- register_s390.cpp
- register_s390.hpp
- relocInfo_s390.cpp
- relocInfo_s390.hpp
- runtime_s390.cpp
- s390.ad
- sharedRuntime_s390.cpp
- stubGenerator_s390.cpp
- stubRoutines_s390.cpp
- stubRoutines_s390.hpp
- templateInterpreterGenerator_s390.cpp
- templateTable_s390.cpp
- templateTable_s390.hpp
- vmStructs_s390.hpp
- vm_version_s390.cpp
- vm_version_s390.hpp
- vmreg_s390.cpp
- vmreg_s390.hpp
- vmreg_s390.inline.hpp
- vtableStubs_s390.cpp
-
-
- abstractInterpreter_sparc.cpp
- args.cc
- assembler_sparc.cpp
- assembler_sparc.hpp
- assembler_sparc.inline.hpp
- bytes_sparc.hpp
- c1_CodeStubs_sparc.cpp
- c1_Defs_sparc.hpp
- c1_FpuStackSim_sparc.cpp
- c1_FpuStackSim_sparc.hpp
- c1_FrameMap_sparc.cpp
- c1_FrameMap_sparc.hpp
- c1_LIRAssembler_sparc.cpp
- c1_LIRAssembler_sparc.hpp
- c1_LIRGenerator_sparc.cpp
- c1_LIR_sparc.cpp
- c1_LinearScan_sparc.cpp
- c1_LinearScan_sparc.hpp
- c1_MacroAssembler_sparc.cpp
- c1_MacroAssembler_sparc.hpp
- c1_Runtime1_sparc.cpp
- c1_globals_sparc.hpp
- c2_globals_sparc.hpp
- c2_init_sparc.cpp
- codeBuffer_sparc.hpp
- compiledIC_sparc.cpp
- copy_sparc.hpp
- depChecker_sparc.cpp
- depChecker_sparc.hpp
- disassembler_sparc.hpp
- frame_sparc.cpp
- frame_sparc.hpp
- frame_sparc.inline.hpp
- globalDefinitions_sparc.hpp
- globals_sparc.hpp
- icBuffer_sparc.cpp
- icache_sparc.cpp
- icache_sparc.hpp
- interp_masm_sparc.cpp
- interp_masm_sparc.hpp
- interpreterRT_sparc.cpp
- interpreterRT_sparc.hpp
- javaFrameAnchor_sparc.hpp
- jniFastGetField_sparc.cpp
- jniTypes_sparc.hpp
- jni_sparc.h
- jvmciCodeInstaller_sparc.cpp
- macroAssembler_sparc.cpp
- macroAssembler_sparc.hpp
- macroAssembler_sparc.inline.hpp
- memset_with_concurrent_readers_sparc.cpp
- methodHandles_sparc.cpp
- methodHandles_sparc.hpp
- nativeInst_sparc.cpp
- nativeInst_sparc.hpp
- registerMap_sparc.hpp
- register_definitions_sparc.cpp
- register_sparc.cpp
- register_sparc.hpp
- relocInfo_sparc.cpp
- relocInfo_sparc.hpp
- runtime_sparc.cpp
- sharedRuntime_sparc.cpp
- sparc.ad
- stubGenerator_sparc.cpp
- stubRoutines_sparc.cpp
- stubRoutines_sparc.hpp
- templateInterpreterGenerator_sparc.cpp
- templateTable_sparc.cpp
- templateTable_sparc.hpp
- vmStructs_sparc.hpp
- vm_version_sparc.cpp
- vm_version_sparc.hpp
- vmreg_sparc.cpp
- vmreg_sparc.hpp
- vmreg_sparc.inline.hpp
- vtableStubs_sparc.cpp
-
-
- abstractInterpreter_x86.cpp
- assembler_x86.cpp
- assembler_x86.hpp
- assembler_x86.inline.hpp
- bytes_x86.hpp
- c1_CodeStubs_x86.cpp
- c1_Defs_x86.hpp
- c1_FpuStackSim_x86.cpp
- c1_FpuStackSim_x86.hpp
- c1_FrameMap_x86.cpp
- c1_FrameMap_x86.hpp
- c1_LIRAssembler_x86.cpp
- c1_LIRAssembler_x86.hpp
- c1_LIRGenerator_x86.cpp
- c1_LIR_x86.cpp
- c1_LinearScan_x86.cpp
- c1_LinearScan_x86.hpp
- c1_MacroAssembler_x86.cpp
- c1_MacroAssembler_x86.hpp
- c1_Runtime1_x86.cpp
- c1_globals_x86.hpp
- c2_globals_x86.hpp
- c2_init_x86.cpp
- codeBuffer_x86.hpp
- compiledIC_aot_x86_64.cpp
- compiledIC_x86.cpp
- copy_x86.hpp
- crc32c.h
- depChecker_x86.cpp
- depChecker_x86.hpp
- disassembler_x86.hpp
- frame_x86.cpp
- frame_x86.hpp
- frame_x86.inline.hpp
- globalDefinitions_x86.hpp
- globals_x86.hpp
- icBuffer_x86.cpp
- icache_x86.cpp
- icache_x86.hpp
- interp_masm_x86.cpp
- interp_masm_x86.hpp
- interpreterRT_x86.hpp
- interpreterRT_x86_32.cpp
- interpreterRT_x86_64.cpp
- javaFrameAnchor_x86.hpp
- jniFastGetField_x86_32.cpp
- jniFastGetField_x86_64.cpp
- jniTypes_x86.hpp
- jni_x86.h
- jvmciCodeInstaller_x86.cpp
- macroAssembler_x86.cpp
- macroAssembler_x86.hpp
- macroAssembler_x86.inline.hpp
- macroAssembler_x86_cos.cpp
- macroAssembler_x86_exp.cpp
- macroAssembler_x86_log.cpp
- macroAssembler_x86_log10.cpp
- macroAssembler_x86_pow.cpp
- macroAssembler_x86_sha.cpp
- macroAssembler_x86_sin.cpp
- macroAssembler_x86_tan.cpp
- methodHandles_x86.cpp
- methodHandles_x86.hpp
- nativeInst_x86.cpp
- nativeInst_x86.hpp
- registerMap_x86.cpp
- registerMap_x86.hpp
- register_definitions_x86.cpp
- register_x86.cpp
- register_x86.hpp
- relocInfo_x86.cpp
- relocInfo_x86.hpp
- runtime_x86_32.cpp
- runtime_x86_64.cpp
- sharedRuntime_x86.cpp
- sharedRuntime_x86_32.cpp
- sharedRuntime_x86_64.cpp
- stubGenerator_x86_32.cpp
- stubGenerator_x86_64.cpp
- stubRoutines_x86.cpp
- stubRoutines_x86.hpp
- stubRoutines_x86_32.cpp
- stubRoutines_x86_64.cpp
- templateInterpreterGenerator_x86.cpp
- templateInterpreterGenerator_x86_32.cpp
- templateInterpreterGenerator_x86_64.cpp
- templateTable_x86.cpp
- templateTable_x86.hpp
- vmStructs_x86.hpp
- vm_version_x86.cpp
- vm_version_x86.hpp
- vmreg_x86.cpp
- vmreg_x86.hpp
- vmreg_x86.inline.hpp
- vtableStubs_x86_32.cpp
- vtableStubs_x86_64.cpp
- x86.ad
- x86_32.ad
- x86_64.ad
-
-
- abstractInterpreter_zero.cpp
- assembler_zero.cpp
- assembler_zero.hpp
- assembler_zero.inline.hpp
- bytecodeInterpreter_zero.cpp
- bytecodeInterpreter_zero.hpp
- bytecodeInterpreter_zero.inline.hpp
- bytes_zero.hpp
- codeBuffer_zero.hpp
- compiledIC_zero.cpp
- copy_zero.hpp
- cppInterpreterGenerator_zero.cpp
- cppInterpreter_zero.cpp
- cppInterpreter_zero.hpp
- depChecker_zero.cpp
- depChecker_zero.hpp
- disassembler_zero.cpp
- disassembler_zero.hpp
- entryFrame_zero.hpp
- entry_zero.hpp
- fakeStubFrame_zero.hpp
- frame_zero.cpp
- frame_zero.hpp
- frame_zero.inline.hpp
- globalDefinitions_zero.hpp
- globals_zero.hpp
- icBuffer_zero.cpp
- icache_zero.cpp
- icache_zero.hpp
- interp_masm_zero.hpp
- interpreterFrame_zero.hpp
- interpreterRT_zero.cpp
- interpreterRT_zero.hpp
- javaFrameAnchor_zero.hpp
- jniFastGetField_zero.cpp
- jniTypes_zero.hpp
- jni_zero.h
- macroAssembler_zero.hpp
- macroAssembler_zero.inline.hpp
- methodHandles_zero.cpp
- methodHandles_zero.hpp
- nativeInst_zero.cpp
- nativeInst_zero.hpp
- registerMap_zero.hpp
- register_zero.cpp
- register_zero.hpp
- relocInfo_zero.cpp
- relocInfo_zero.hpp
- sharedRuntime_zero.cpp
- sharkFrame_zero.hpp
- shark_globals_zero.hpp
- stack_zero.cpp
- stack_zero.hpp
- stack_zero.inline.hpp
- stubGenerator_zero.cpp
- stubRoutines_zero.cpp
- stubRoutines_zero.hpp
- vmStructs_zero.hpp
- vm_version_zero.cpp
- vm_version_zero.hpp
- vmreg_zero.cpp
- vmreg_zero.hpp
- vmreg_zero.inline.hpp
- vtableStubs_zero.cpp
-
-
-
-
- attachListener_aix.cpp
- c1_globals_aix.hpp
- c2_globals_aix.hpp
- decoder_aix.hpp
- globals_aix.hpp
- jvm_aix.cpp
- jvm_aix.h
- libo4.cpp
- libo4.hpp
- libodm_aix.cpp
- libodm_aix.hpp
- libperfstat_aix.cpp
- libperfstat_aix.hpp
- loadlib_aix.cpp
- loadlib_aix.hpp
- misc_aix.cpp
- misc_aix.hpp
- osThread_aix.cpp
- osThread_aix.hpp
- os_aix.cpp
- os_aix.hpp
- os_aix.inline.hpp
- os_share_aix.hpp
- perfMemory_aix.cpp
- porting_aix.cpp
- porting_aix.hpp
- threadCritical_aix.cpp
- vmStructs_aix.hpp
-
-
- attachListener_bsd.cpp
- c1_globals_bsd.hpp
- c2_globals_bsd.hpp
- decoder_machO.cpp
- decoder_machO.hpp
- globals_bsd.hpp
- jvm_bsd.cpp
- jvm_bsd.h
- osThread_bsd.cpp
- osThread_bsd.hpp
- os_bsd.cpp
- os_bsd.hpp
- os_bsd.inline.hpp
- os_share_bsd.hpp
- perfMemory_bsd.cpp
- semaphore_bsd.hpp
- threadCritical_bsd.cpp
- vmStructs_bsd.hpp
-
-
- attachListener_linux.cpp
- c1_globals_linux.hpp
- c2_globals_linux.hpp
- decoder_linux.cpp
- globals_linux.hpp
- jvm_linux.cpp
- jvm_linux.h
- osThread_linux.cpp
- osThread_linux.hpp
- os_linux.cpp
- os_linux.hpp
- os_linux.inline.hpp
- os_share_linux.hpp
- perfMemory_linux.cpp
- threadCritical_linux.cpp
- vmStructs_linux.hpp
-
-
- os_posix.cpp
- os_posix.hpp
- semaphore_posix.hpp
- threadLocalStorage_posix.cpp
- vmError_posix.cpp
-
-
- attachListener_solaris.cpp
- c1_globals_solaris.hpp
- c2_globals_solaris.hpp
- decoder_solaris.cpp
- globals_solaris.hpp
- jvm_solaris.cpp
- jvm_solaris.h
- osThread_solaris.cpp
- osThread_solaris.hpp
- os_share_solaris.hpp
- os_solaris.cpp
- os_solaris.hpp
- os_solaris.inline.hpp
- perfMemory_solaris.cpp
- threadCritical_solaris.cpp
- vmStructs_solaris.hpp
-
-
- attachListener_windows.cpp
- c1_globals_windows.hpp
- c2_globals_windows.hpp
- decoder_windows.cpp
- decoder_windows.hpp
- globals_windows.hpp
- jvm_windows.cpp
- jvm_windows.h
- osThread_windows.cpp
- osThread_windows.hpp
- os_share_windows.hpp
- os_windows.cpp
- os_windows.hpp
- os_windows.inline.hpp
- perfMemory_windows.cpp
- semaphore_windows.hpp
- sharedRuntimeRem.cpp
- threadCritical_windows.cpp
- threadLocalStorage_windows.cpp
- vmError_windows.cpp
- vmStructs_windows.hpp
- windbghelp.cpp
- windbghelp.hpp
-
-
-
-
- atomic_aix_ppc.hpp
- bytes_aix_ppc.inline.hpp
- globals_aix_ppc.hpp
- orderAccess_aix_ppc.inline.hpp
- os_aix_ppc.cpp
- os_aix_ppc.hpp
- prefetch_aix_ppc.inline.hpp
- thread_aix_ppc.cpp
- thread_aix_ppc.hpp
- vmStructs_aix_ppc.hpp
-
-
- assembler_bsd_x86.cpp
- atomic_bsd_x86.hpp
- bsd_x86_32.s
- bsd_x86_64.s
- bytes_bsd_x86.inline.hpp
- copy_bsd_x86.inline.hpp
- globals_bsd_x86.hpp
- orderAccess_bsd_x86.inline.hpp
- os_bsd_x86.cpp
- os_bsd_x86.hpp
- os_bsd_x86.inline.hpp
- prefetch_bsd_x86.inline.hpp
- thread_bsd_x86.cpp
- thread_bsd_x86.hpp
- vmStructs_bsd_x86.hpp
- vm_version_bsd_x86.cpp
-
-
- assembler_bsd_zero.cpp
- atomic_bsd_zero.hpp
- bytes_bsd_zero.inline.hpp
- globals_bsd_zero.hpp
- orderAccess_bsd_zero.inline.hpp
- os_bsd_zero.cpp
- os_bsd_zero.hpp
- prefetch_bsd_zero.inline.hpp
- thread_bsd_zero.cpp
- thread_bsd_zero.hpp
- vmStructs_bsd_zero.hpp
- vm_version_bsd_zero.cpp
-
-
- assembler_linux_aarch64.cpp
- atomic_linux_aarch64.hpp
- bytes_linux_aarch64.inline.hpp
- copy_linux_aarch64.inline.hpp
- copy_linux_aarch64.s
- globals_linux_aarch64.hpp
- linux_aarch64.S
- linux_aarch64.ad
- orderAccess_linux_aarch64.inline.hpp
- os_linux_aarch64.cpp
- os_linux_aarch64.hpp
- os_linux_aarch64.inline.hpp
- prefetch_linux_aarch64.inline.hpp
- threadLS_linux_aarch64.s
- thread_linux_aarch64.cpp
- thread_linux_aarch64.hpp
- vmStructs_linux_aarch64.hpp
- vm_version_linux_aarch64.cpp
-
-
- atomic_linux_arm.hpp
- bytes_linux_arm.inline.hpp
- copy_linux_arm.inline.hpp
- globals_linux_arm.hpp
- linux_arm_32.s
- linux_arm_64.s
- macroAssembler_linux_arm_32.cpp
- orderAccess_linux_arm.inline.hpp
- os_linux_arm.cpp
- os_linux_arm.hpp
- prefetch_linux_arm.inline.hpp
- thread_linux_arm.cpp
- thread_linux_arm.hpp
- vmStructs_linux_arm.hpp
- vm_version_linux_arm_32.cpp
-
-
- atomic_linux_ppc.hpp
- bytes_linux_ppc.inline.hpp
- globals_linux_ppc.hpp
- orderAccess_linux_ppc.inline.hpp
- os_linux_ppc.cpp
- os_linux_ppc.hpp
- prefetch_linux_ppc.inline.hpp
- thread_linux_ppc.cpp
- thread_linux_ppc.hpp
- vmStructs_linux_ppc.hpp
-
-
- atomic_linux_s390.hpp
- bytes_linux_s390.inline.hpp
- globals_linux_s390.hpp
- orderAccess_linux_s390.inline.hpp
- os_linux_s390.cpp
- os_linux_s390.hpp
- prefetch_linux_s390.inline.hpp
- thread_linux_s390.cpp
- thread_linux_s390.hpp
- vmStructs_linux_s390.hpp
-
-
- atomic_linux_sparc.hpp
- globals_linux_sparc.hpp
- linux_sparc.ad
- linux_sparc.s
- orderAccess_linux_sparc.inline.hpp
- os_linux_sparc.cpp
- os_linux_sparc.hpp
- prefetch_linux_sparc.inline.hpp
- thread_linux_sparc.cpp
- thread_linux_sparc.hpp
- vmStructs_linux_sparc.hpp
- vm_version_linux_sparc.cpp
-
-
- assembler_linux_x86.cpp
- atomic_linux_x86.hpp
- bytes_linux_x86.inline.hpp
- copy_linux_x86.inline.hpp
- globals_linux_x86.hpp
- linux_x86_32.s
- linux_x86_64.s
- orderAccess_linux_x86.inline.hpp
- os_linux_x86.cpp
- os_linux_x86.hpp
- os_linux_x86.inline.hpp
- prefetch_linux_x86.inline.hpp
- thread_linux_x86.cpp
- thread_linux_x86.hpp
- vmStructs_linux_x86.hpp
- vm_version_linux_x86.cpp
-
-
- assembler_linux_zero.cpp
- atomic_linux_zero.hpp
- bytes_linux_zero.inline.hpp
- globals_linux_zero.hpp
- orderAccess_linux_zero.inline.hpp
- os_linux_zero.cpp
- os_linux_zero.hpp
- prefetch_linux_zero.inline.hpp
- thread_linux_zero.cpp
- thread_linux_zero.hpp
- vmStructs_linux_zero.hpp
- vm_version_linux_zero.cpp
-
-
- atomic_solaris_sparc.hpp
- count_trailing_zeros_solaris_sparc.hpp
- globals_solaris_sparc.hpp
- orderAccess_solaris_sparc.inline.hpp
- os_solaris_sparc.cpp
- os_solaris_sparc.hpp
- prefetch_solaris_sparc.inline.hpp
- solaris_sparc.il
- solaris_sparc.s
- thread_solaris_sparc.cpp
- thread_solaris_sparc.hpp
- vmStructs_solaris_sparc.hpp
- vm_version_solaris_sparc.cpp
-
-
- assembler_solaris_x86.cpp
- atomic_solaris_x86.hpp
- bytes_solaris_x86.inline.hpp
- copy_solaris_x86.inline.hpp
- count_trailing_zeros_solaris_x86.hpp
- globals_solaris_x86.hpp
- orderAccess_solaris_x86.inline.hpp
- os_solaris_x86.cpp
- os_solaris_x86.hpp
- os_solaris_x86.inline.hpp
- prefetch_solaris_x86.inline.hpp
- solaris_x86_64.il
- solaris_x86_64.s
- thread_solaris_x86.cpp
- thread_solaris_x86.hpp
- vmStructs_solaris_x86.hpp
- vm_version_solaris_x86.cpp
-
-
- assembler_windows_x86.cpp
- atomic_windows_x86.hpp
- bytes_windows_x86.inline.hpp
- copy_windows_x86.inline.hpp
- globals_windows_x86.hpp
- orderAccess_windows_x86.inline.hpp
- os_windows_x86.cpp
- os_windows_x86.hpp
- os_windows_x86.inline.hpp
- prefetch_windows_x86.inline.hpp
- thread_windows_x86.cpp
- thread_windows_x86.hpp
- unwind_windows_x86.hpp
- vmStructs_windows_x86.hpp
- vm_version_windows_x86.cpp
-
-
-
-
-
- i486.ad
-
- adlc.hpp
- adlparse.cpp
- adlparse.hpp
- archDesc.cpp
- archDesc.hpp
- arena.cpp
- arena.hpp
- dfa.cpp
- dict2.cpp
- dict2.hpp
- filebuff.cpp
- filebuff.hpp
- forms.cpp
- forms.hpp
- formsopt.cpp
- formsopt.hpp
- formssel.cpp
- formssel.hpp
- main.cpp
- output_c.cpp
- output_h.cpp
-
-
- aotCodeHeap.cpp
- aotCodeHeap.hpp
- aotCompiledMethod.cpp
- aotCompiledMethod.hpp
- aotLoader.cpp
- aotLoader.hpp
- aotLoader.inline.hpp
- compiledIC_aot.cpp
- compiledIC_aot.hpp
-
-
- assembler.cpp
- assembler.hpp
- assembler.inline.hpp
- codeBuffer.cpp
- codeBuffer.hpp
- macroAssembler.hpp
- macroAssembler.inline.hpp
- register.cpp
- register.hpp
-
-
- c1_CFGPrinter.cpp
- c1_CFGPrinter.hpp
- c1_Canonicalizer.cpp
- c1_Canonicalizer.hpp
- c1_CodeStubs.hpp
- c1_Compilation.cpp
- c1_Compilation.hpp
- c1_Compiler.cpp
- c1_Compiler.hpp
- c1_Defs.cpp
- c1_Defs.hpp
- c1_FpuStackSim.hpp
- c1_FrameMap.cpp
- c1_FrameMap.hpp
- c1_GraphBuilder.cpp
- c1_GraphBuilder.hpp
- c1_IR.cpp
- c1_IR.hpp
- c1_Instruction.cpp
- c1_Instruction.hpp
- c1_InstructionPrinter.cpp
- c1_InstructionPrinter.hpp
- c1_LIR.cpp
- c1_LIR.hpp
- c1_LIRAssembler.cpp
- c1_LIRAssembler.hpp
- c1_LIRGenerator.cpp
- c1_LIRGenerator.hpp
- c1_LinearScan.cpp
- c1_LinearScan.hpp
- c1_MacroAssembler.hpp
- c1_Optimizer.cpp
- c1_Optimizer.hpp
- c1_RangeCheckElimination.cpp
- c1_RangeCheckElimination.hpp
- c1_Runtime1.cpp
- c1_Runtime1.hpp
- c1_ValueMap.cpp
- c1_ValueMap.hpp
- c1_ValueSet.cpp
- c1_ValueSet.hpp
- c1_ValueSet.inline.hpp
- c1_ValueStack.cpp
- c1_ValueStack.hpp
- c1_ValueType.cpp
- c1_ValueType.hpp
- c1_globals.cpp
- c1_globals.hpp
-
-
- bcEscapeAnalyzer.cpp
- bcEscapeAnalyzer.hpp
- ciArray.cpp
- ciArray.hpp
- ciArrayKlass.cpp
- ciArrayKlass.hpp
- ciBaseObject.cpp
- ciBaseObject.hpp
- ciCallProfile.hpp
- ciCallSite.cpp
- ciCallSite.hpp
- ciClassList.hpp
- ciConstant.cpp
- ciConstant.hpp
- ciConstantPoolCache.cpp
- ciConstantPoolCache.hpp
- ciEnv.cpp
- ciEnv.hpp
- ciExceptionHandler.cpp
- ciExceptionHandler.hpp
- ciField.cpp
- ciField.hpp
- ciFlags.cpp
- ciFlags.hpp
- ciInstance.cpp
- ciInstance.hpp
- ciInstanceKlass.cpp
- ciInstanceKlass.hpp
- ciKlass.cpp
- ciKlass.hpp
- ciMemberName.cpp
- ciMemberName.hpp
- ciMetadata.cpp
- ciMetadata.hpp
- ciMethod.cpp
- ciMethod.hpp
- ciMethodBlocks.cpp
- ciMethodBlocks.hpp
- ciMethodData.cpp
- ciMethodData.hpp
- ciMethodHandle.cpp
- ciMethodHandle.hpp
- ciMethodType.hpp
- ciNullObject.cpp
- ciNullObject.hpp
- ciObjArray.cpp
- ciObjArray.hpp
- ciObjArrayKlass.cpp
- ciObjArrayKlass.hpp
- ciObject.cpp
- ciObject.hpp
- ciObjectFactory.cpp
- ciObjectFactory.hpp
- ciReplay.cpp
- ciReplay.hpp
- ciSignature.cpp
- ciSignature.hpp
- ciStreams.cpp
- ciStreams.hpp
- ciSymbol.cpp
- ciSymbol.hpp
- ciType.cpp
- ciType.hpp
- ciTypeArray.cpp
- ciTypeArray.hpp
- ciTypeArrayKlass.cpp
- ciTypeArrayKlass.hpp
- ciTypeFlow.cpp
- ciTypeFlow.hpp
- ciUtilities.cpp
- ciUtilities.hpp
- compilerInterface.hpp
-
-
- altHashing.cpp
- altHashing.hpp
- bytecodeAssembler.cpp
- bytecodeAssembler.hpp
- classFileError.cpp
- classFileParser.cpp
- classFileParser.hpp
- classFileStream.cpp
- classFileStream.hpp
- classListParser.cpp
- classListParser.hpp
- classLoader.cpp
- classLoader.hpp
- classLoaderData.cpp
- classLoaderData.hpp
- classLoaderData.inline.hpp
- classLoaderExt.cpp
- classLoaderExt.hpp
- classLoaderStats.cpp
- classLoaderStats.hpp
- compactHashtable.cpp
- compactHashtable.hpp
- compactHashtable.inline.hpp
- defaultMethods.cpp
- defaultMethods.hpp
- dictionary.cpp
- dictionary.hpp
- javaAssertions.cpp
- javaAssertions.hpp
- javaClasses.cpp
- javaClasses.hpp
- javaClasses.inline.hpp
- jimage.hpp
- klassFactory.cpp
- klassFactory.hpp
- loaderConstraints.cpp
- loaderConstraints.hpp
- metadataOnStackMark.cpp
- metadataOnStackMark.hpp
- moduleEntry.cpp
- moduleEntry.hpp
- modules.cpp
- modules.hpp
- packageEntry.cpp
- packageEntry.hpp
- placeholders.cpp
- placeholders.hpp
- protectionDomainCache.cpp
- protectionDomainCache.hpp
- resolutionErrors.cpp
- resolutionErrors.hpp
- sharedClassUtil.hpp
- sharedPathsMiscInfo.cpp
- sharedPathsMiscInfo.hpp
- stackMapFrame.cpp
- stackMapFrame.hpp
- stackMapTable.cpp
- stackMapTable.hpp
- stackMapTableFormat.hpp
- stringTable.cpp
- stringTable.hpp
- symbolTable.cpp
- symbolTable.hpp
- systemDictionary.cpp
- systemDictionary.hpp
- systemDictionaryShared.hpp
- systemDictionary_ext.hpp
- verificationType.cpp
- verificationType.hpp
- verifier.cpp
- verifier.hpp
- vmSymbols.cpp
- vmSymbols.hpp
- vmSymbols_ext.hpp
-
-
- codeBlob.cpp
- codeBlob.hpp
- codeCache.cpp
- codeCache.hpp
- compiledIC.cpp
- compiledIC.hpp
- compiledMethod.cpp
- compiledMethod.hpp
- compiledMethod.inline.hpp
- compressedStream.cpp
- compressedStream.hpp
- debugInfo.cpp
- debugInfo.hpp
- debugInfoRec.cpp
- debugInfoRec.hpp
- dependencies.cpp
- dependencies.hpp
- dependencyContext.cpp
- dependencyContext.hpp
- exceptionHandlerTable.cpp
- exceptionHandlerTable.hpp
- icBuffer.cpp
- icBuffer.hpp
- jvmticmlr.h
- location.cpp
- location.hpp
- nativeInst.hpp
- nmethod.cpp
- nmethod.hpp
- oopRecorder.cpp
- oopRecorder.hpp
- pcDesc.cpp
- pcDesc.hpp
- relocInfo.cpp
- relocInfo.hpp
- relocInfo_ext.cpp
- relocInfo_ext.hpp
- scopeDesc.cpp
- scopeDesc.hpp
- stubs.cpp
- stubs.hpp
- vmreg.cpp
- vmreg.hpp
- vmreg.inline.hpp
- vtableStubs.cpp
- vtableStubs.hpp
-
-
- abstractCompiler.cpp
- abstractCompiler.hpp
- compileBroker.cpp
- compileBroker.hpp
- compileLog.cpp
- compileLog.hpp
- compileTask.cpp
- compileTask.hpp
- compilerDefinitions.cpp
- compilerDefinitions.hpp
- compilerDirectives.cpp
- compilerDirectives.hpp
- compilerOracle.cpp
- compilerOracle.hpp
- directivesParser.cpp
- directivesParser.hpp
- disassembler.cpp
- disassembler.hpp
- methodLiveness.cpp
- methodLiveness.hpp
- methodMatcher.cpp
- methodMatcher.hpp
- oopMap.cpp
- oopMap.hpp
-
-
-
- adaptiveFreeList.cpp
- adaptiveFreeList.hpp
- allocationStats.cpp
- allocationStats.hpp
- cmsCollectorPolicy.cpp
- cmsCollectorPolicy.hpp
- cmsLockVerifier.cpp
- cmsLockVerifier.hpp
- cmsOopClosures.cpp
- cmsOopClosures.hpp
- cmsOopClosures.inline.hpp
- compactibleFreeListSpace.cpp
- compactibleFreeListSpace.hpp
- concurrentMarkSweepGeneration.cpp
- concurrentMarkSweepGeneration.hpp
- concurrentMarkSweepGeneration.inline.hpp
- concurrentMarkSweepThread.cpp
- concurrentMarkSweepThread.hpp
- freeChunk.cpp
- freeChunk.hpp
- gSpaceCounters.cpp
- gSpaceCounters.hpp
- parCardTableModRefBS.cpp
- parNewGeneration.cpp
- parNewGeneration.hpp
- parNewGeneration.inline.hpp
- parOopClosures.cpp
- parOopClosures.hpp
- parOopClosures.inline.hpp
- promotionInfo.cpp
- promotionInfo.hpp
- vmCMSOperations.cpp
- vmCMSOperations.hpp
- vmStructs_cms.hpp
- vmStructs_parNew.hpp
- yieldingWorkgroup.cpp
- yieldingWorkgroup.hpp
-
-
- bufferingOopClosure.hpp
- collectionSetChooser.cpp
- collectionSetChooser.hpp
- concurrentG1Refine.cpp
- concurrentG1Refine.hpp
- concurrentG1RefineThread.cpp
- concurrentG1RefineThread.hpp
- concurrentMarkThread.cpp
- concurrentMarkThread.hpp
- concurrentMarkThread.inline.hpp
- dirtyCardQueue.cpp
- dirtyCardQueue.hpp
- evacuationInfo.hpp
- g1AllocRegion.cpp
- g1AllocRegion.hpp
- g1AllocRegion.inline.hpp
- g1AllocationContext.hpp
- g1Allocator.cpp
- g1Allocator.hpp
- g1Allocator.inline.hpp
- g1Allocator_ext.cpp
- g1Analytics.cpp
- g1Analytics.hpp
- g1BiasedArray.cpp
- g1BiasedArray.hpp
- g1BlockOffsetTable.cpp
- g1BlockOffsetTable.hpp
- g1BlockOffsetTable.inline.hpp
- g1CardCounts.cpp
- g1CardCounts.hpp
- g1CardLiveData.cpp
- g1CardLiveData.hpp
- g1CardLiveData.inline.hpp
- g1CodeBlobClosure.cpp
- g1CodeBlobClosure.hpp
- g1CodeCacheRemSet.cpp
- g1CodeCacheRemSet.hpp
- g1CodeRootSetTable.hpp
- g1CollectedHeap.cpp
- g1CollectedHeap.hpp
- g1CollectedHeap.inline.hpp
- g1CollectedHeap_ext.cpp
- g1CollectionSet.cpp
- g1CollectionSet.hpp
- g1CollectorPolicy.cpp
- g1CollectorPolicy.hpp
- g1CollectorState.hpp
- g1ConcurrentMark.cpp
- g1ConcurrentMark.hpp
- g1ConcurrentMark.inline.hpp
- g1ConcurrentMarkBitMap.cpp
- g1ConcurrentMarkBitMap.hpp
- g1ConcurrentMarkBitMap.inline.hpp
- g1ConcurrentMarkObjArrayProcessor.cpp
- g1ConcurrentMarkObjArrayProcessor.hpp
- g1ConcurrentMarkObjArrayProcessor.inline.hpp
- g1DefaultPolicy.cpp
- g1DefaultPolicy.hpp
- g1EdenRegions.hpp
- g1EvacFailure.cpp
- g1EvacFailure.hpp
- g1EvacStats.cpp
- g1EvacStats.hpp
- g1EvacStats.inline.hpp
- g1FromCardCache.cpp
- g1FromCardCache.hpp
- g1FullGCScope.cpp
- g1FullGCScope.hpp
- g1GCPhaseTimes.cpp
- g1GCPhaseTimes.hpp
- g1HRPrinter.hpp
- g1HeapRegionTraceType.hpp
- g1HeapSizingPolicy.cpp
- g1HeapSizingPolicy.hpp
- g1HeapSizingPolicy_ext.cpp
- g1HeapTransition.cpp
- g1HeapTransition.hpp
- g1HeapVerifier.cpp
- g1HeapVerifier.hpp
- g1HotCardCache.cpp
- g1HotCardCache.hpp
- g1IHOPControl.cpp
- g1IHOPControl.hpp
- g1InCSetState.hpp
- g1InitialMarkToMixedTimeTracker.hpp
- g1MMUTracker.cpp
- g1MMUTracker.hpp
- g1MarkSweep.cpp
- g1MarkSweep.hpp
- g1MarkSweep_ext.cpp
- g1MonitoringSupport.cpp
- g1MonitoringSupport.hpp
- g1OopClosures.cpp
- g1OopClosures.hpp
- g1OopClosures.inline.hpp
- g1PageBasedVirtualSpace.cpp
- g1PageBasedVirtualSpace.hpp
- g1ParScanThreadState.cpp
- g1ParScanThreadState.hpp
- g1ParScanThreadState.inline.hpp
- g1ParScanThreadState_ext.cpp
- g1Policy.hpp
- g1Predictions.hpp
- g1RegionToSpaceMapper.cpp
- g1RegionToSpaceMapper.hpp
- g1RemSet.cpp
- g1RemSet.hpp
- g1RemSet.inline.hpp
- g1RemSetSummary.cpp
- g1RemSetSummary.hpp
- g1RootClosures.cpp
- g1RootClosures.hpp
- g1RootClosures_ext.cpp
- g1RootProcessor.cpp
- g1RootProcessor.hpp
- g1SATBCardTableModRefBS.cpp
- g1SATBCardTableModRefBS.hpp
- g1SATBCardTableModRefBS.inline.hpp
- g1SerialFullCollector.cpp
- g1SerialFullCollector.hpp
- g1SharedClosures.hpp
- g1StringDedup.cpp
- g1StringDedup.hpp
- g1StringDedupQueue.cpp
- g1StringDedupQueue.hpp
- g1StringDedupStat.cpp
- g1StringDedupStat.hpp
- g1StringDedupTable.cpp
- g1StringDedupTable.hpp
- g1StringDedupThread.cpp
- g1StringDedupThread.hpp
- g1SurvivorRegions.cpp
- g1SurvivorRegions.hpp
- g1YCTypes.hpp
- g1YoungGenSizer.cpp
- g1YoungGenSizer.hpp
- g1YoungRemSetSamplingThread.cpp
- g1YoungRemSetSamplingThread.hpp
- g1_globals.cpp
- g1_globals.hpp
- g1_specialized_oop_closures.hpp
- hSpaceCounters.cpp
- hSpaceCounters.hpp
- heapRegion.cpp
- heapRegion.hpp
- heapRegion.inline.hpp
- heapRegionBounds.hpp
- heapRegionBounds.inline.hpp
- heapRegionManager.cpp
- heapRegionManager.hpp
- heapRegionManager.inline.hpp
- heapRegionRemSet.cpp
- heapRegionRemSet.hpp
- heapRegionSet.cpp
- heapRegionSet.hpp
- heapRegionSet.inline.hpp
- heapRegionTracer.cpp
- heapRegionTracer.hpp
- heapRegionType.cpp
- heapRegionType.hpp
- ptrQueue.cpp
- ptrQueue.hpp
- satbMarkQueue.cpp
- satbMarkQueue.hpp
- sparsePRT.cpp
- sparsePRT.hpp
- survRateGroup.cpp
- survRateGroup.hpp
- suspendibleThreadSet.cpp
- suspendibleThreadSet.hpp
- vmStructs_g1.hpp
- vm_operations_g1.cpp
- vm_operations_g1.hpp
-
-
- adjoiningGenerations.cpp
- adjoiningGenerations.hpp
- adjoiningVirtualSpaces.cpp
- adjoiningVirtualSpaces.hpp
- asPSOldGen.cpp
- asPSOldGen.hpp
- asPSYoungGen.cpp
- asPSYoungGen.hpp
- cardTableExtension.cpp
- cardTableExtension.hpp
- gcAdaptivePolicyCounters.cpp
- gcAdaptivePolicyCounters.hpp
- gcTaskManager.cpp
- gcTaskManager.hpp
- gcTaskThread.cpp
- gcTaskThread.hpp
- generationSizer.cpp
- generationSizer.hpp
- immutableSpace.cpp
- immutableSpace.hpp
- mutableNUMASpace.cpp
- mutableNUMASpace.hpp
- mutableSpace.cpp
- mutableSpace.hpp
- objectStartArray.cpp
- objectStartArray.hpp
- objectStartArray.inline.hpp
- parMarkBitMap.cpp
- parMarkBitMap.hpp
- parMarkBitMap.inline.hpp
- parallelScavengeHeap.cpp
- parallelScavengeHeap.hpp
- parallelScavengeHeap.inline.hpp
- pcTasks.cpp
- pcTasks.hpp
- psAdaptiveSizePolicy.cpp
- psAdaptiveSizePolicy.hpp
- psCompactionManager.cpp
- psCompactionManager.hpp
- psCompactionManager.inline.hpp
- psGCAdaptivePolicyCounters.cpp
- psGCAdaptivePolicyCounters.hpp
- psGenerationCounters.cpp
- psGenerationCounters.hpp
- psMarkSweep.cpp
- psMarkSweep.hpp
- psMarkSweepDecorator.cpp
- psMarkSweepDecorator.hpp
- psOldGen.cpp
- psOldGen.hpp
- psParallelCompact.cpp
- psParallelCompact.hpp
- psParallelCompact.inline.hpp
- psPromotionLAB.cpp
- psPromotionLAB.hpp
- psPromotionLAB.inline.hpp
- psPromotionManager.cpp
- psPromotionManager.hpp
- psPromotionManager.inline.hpp
- psScavenge.cpp
- psScavenge.hpp
- psScavenge.inline.hpp
- psTasks.cpp
- psTasks.hpp
- psVirtualspace.cpp
- psVirtualspace.hpp
- psYoungGen.cpp
- psYoungGen.hpp
- spaceCounters.cpp
- spaceCounters.hpp
- vmPSOperations.cpp
- vmPSOperations.hpp
- vmStructs_parallelgc.hpp
-
-
- cSpaceCounters.cpp
- cSpaceCounters.hpp
- defNewGeneration.cpp
- defNewGeneration.hpp
- defNewGeneration.inline.hpp
- genMarkSweep.cpp
- genMarkSweep.hpp
- markSweep.cpp
- markSweep.hpp
- markSweep.inline.hpp
- tenuredGeneration.cpp
- tenuredGeneration.hpp
- tenuredGeneration.inline.hpp
-
-
- adaptiveSizePolicy.cpp
- adaptiveSizePolicy.hpp
- ageTable.cpp
- ageTable.hpp
- ageTable.inline.hpp
- ageTableTracer.cpp
- ageTableTracer.hpp
- allocTracer.cpp
- allocTracer.hpp
- barrierSet.cpp
- barrierSet.hpp
- barrierSet.inline.hpp
- blockOffsetTable.cpp
- blockOffsetTable.hpp
- blockOffsetTable.inline.hpp
- cardGeneration.cpp
- cardGeneration.hpp
- cardGeneration.inline.hpp
- cardTableModRefBS.cpp
- cardTableModRefBS.hpp
- cardTableModRefBS.inline.hpp
- cardTableModRefBSForCTRS.cpp
- cardTableModRefBSForCTRS.hpp
- cardTableRS.cpp
- cardTableRS.hpp
- collectedHeap.cpp
- collectedHeap.hpp
- collectedHeap.inline.hpp
- collectorCounters.cpp
- collectorCounters.hpp
- collectorPolicy.cpp
- collectorPolicy.hpp
- concurrentGCPhaseManager.cpp
- concurrentGCPhaseManager.hpp
- concurrentGCThread.cpp
- concurrentGCThread.hpp
- copyFailedInfo.hpp
- gcCause.cpp
- gcCause.hpp
- gcHeapSummary.hpp
- gcId.cpp
- gcId.hpp
- gcLocker.cpp
- gcLocker.hpp
- gcLocker.inline.hpp
- gcName.hpp
- gcPolicyCounters.cpp
- gcPolicyCounters.hpp
- gcStats.cpp
- gcStats.hpp
- gcTimer.cpp
- gcTimer.hpp
- gcTrace.cpp
- gcTrace.hpp
- gcTraceSend.cpp
- gcTraceTime.cpp
- gcTraceTime.hpp
- gcTraceTime.inline.hpp
- gcUtil.cpp
- gcUtil.hpp
- gcWhen.hpp
- genCollectedHeap.cpp
- genCollectedHeap.hpp
- genOopClosures.cpp
- genOopClosures.hpp
- genOopClosures.inline.hpp
- generation.cpp
- generation.hpp
- generationCounters.cpp
- generationCounters.hpp
- generationSpec.cpp
- generationSpec.hpp
- isGCActiveMark.hpp
- memset_with_concurrent_readers.hpp
- modRefBarrierSet.hpp
- objectCountEventSender.cpp
- objectCountEventSender.hpp
- plab.cpp
- plab.hpp
- plab.inline.hpp
- preservedMarks.cpp
- preservedMarks.hpp
- preservedMarks.inline.hpp
- referencePolicy.cpp
- referencePolicy.hpp
- referenceProcessor.cpp
- referenceProcessor.hpp
- referenceProcessor.inline.hpp
- referenceProcessorPhaseTimes.cpp
- referenceProcessorPhaseTimes.hpp
- referenceProcessorStats.hpp
- space.cpp
- space.hpp
- space.inline.hpp
- spaceDecorator.cpp
- spaceDecorator.hpp
- specialized_oop_closures.hpp
- strongRootsScope.cpp
- strongRootsScope.hpp
- taskqueue.cpp
- taskqueue.hpp
- taskqueue.inline.hpp
- threadLocalAllocBuffer.cpp
- threadLocalAllocBuffer.hpp
- threadLocalAllocBuffer.inline.hpp
- vmGCOperations.cpp
- vmGCOperations.hpp
- workerDataArray.cpp
- workerDataArray.hpp
- workerDataArray.inline.hpp
- workerManager.hpp
- workgroup.cpp
- workgroup.hpp
-
-
-
- abstractInterpreter.cpp
- abstractInterpreter.hpp
- bytecode.cpp
- bytecode.hpp
- bytecodeHistogram.cpp
- bytecodeHistogram.hpp
- bytecodeInterpreter.cpp
- bytecodeInterpreter.hpp
- bytecodeInterpreter.inline.hpp
- bytecodeInterpreterProfiling.hpp
- bytecodeStream.cpp
- bytecodeStream.hpp
- bytecodeTracer.cpp
- bytecodeTracer.hpp
- bytecodes.cpp
- bytecodes.hpp
- cppInterpreter.cpp
- cppInterpreter.hpp
- cppInterpreterGenerator.cpp
- cppInterpreterGenerator.hpp
- interp_masm.hpp
- interpreter.cpp
- interpreter.hpp
- interpreterRuntime.cpp
- interpreterRuntime.hpp
- invocationCounter.cpp
- invocationCounter.hpp
- linkResolver.cpp
- linkResolver.hpp
- oopMapCache.cpp
- oopMapCache.hpp
- rewriter.cpp
- rewriter.hpp
- templateInterpreter.cpp
- templateInterpreter.hpp
- templateInterpreterGenerator.cpp
- templateInterpreterGenerator.hpp
- templateTable.cpp
- templateTable.hpp
-
-
- compilerRuntime.cpp
- compilerRuntime.hpp
- jvmciCodeInstaller.cpp
- jvmciCodeInstaller.hpp
- jvmciCompiler.cpp
- jvmciCompiler.hpp
- jvmciCompilerToVM.cpp
- jvmciCompilerToVM.hpp
- jvmciEnv.cpp
- jvmciEnv.hpp
- jvmciJavaClasses.cpp
- jvmciJavaClasses.hpp
- jvmciRuntime.cpp
- jvmciRuntime.hpp
- jvmci_globals.cpp
- jvmci_globals.hpp
- systemDictionary_jvmci.hpp
- vmStructs_compiler_runtime.hpp
- vmStructs_jvmci.cpp
- vmStructs_jvmci.hpp
- vmSymbols_jvmci.hpp
-
-
- dict.cpp
- dict.hpp
- set.cpp
- set.hpp
- vectset.cpp
- vectset.hpp
-
-
- log.hpp
- logConfiguration.cpp
- logConfiguration.hpp
- logDecorations.cpp
- logDecorations.hpp
- logDecorators.cpp
- logDecorators.hpp
- logDiagnosticCommand.cpp
- logDiagnosticCommand.hpp
- logFileOutput.cpp
- logFileOutput.hpp
- logFileStreamOutput.cpp
- logFileStreamOutput.hpp
- logHandle.hpp
- logLevel.cpp
- logLevel.hpp
- logMessage.hpp
- logMessageBuffer.cpp
- logMessageBuffer.hpp
- logOutput.cpp
- logOutput.hpp
- logOutputList.cpp
- logOutputList.hpp
- logPrefix.hpp
- logStream.cpp
- logStream.hpp
- logTag.cpp
- logTag.hpp
- logTagLevelExpression.cpp
- logTagLevelExpression.hpp
- logTagSet.cpp
- logTagSet.hpp
- logTagSetDescriptions.cpp
- logTagSetDescriptions.hpp
- logTag_ext.hpp
-
-
- allocation.cpp
- allocation.hpp
- allocation.inline.hpp
- arena.cpp
- arena.hpp
- binaryTreeDictionary.cpp
- binaryTreeDictionary.hpp
- filemap.cpp
- filemap.hpp
- freeList.cpp
- freeList.hpp
- guardedMemory.cpp
- guardedMemory.hpp
- heap.cpp
- heap.hpp
- heapInspection.cpp
- heapInspection.hpp
- iterator.cpp
- iterator.hpp
- iterator.inline.hpp
- memRegion.cpp
- memRegion.hpp
- metachunk.cpp
- metachunk.hpp
- metadataFactory.hpp
- metaspace.cpp
- metaspace.hpp
- metaspaceChunkFreeListSummary.hpp
- metaspaceClosure.cpp
- metaspaceClosure.hpp
- metaspaceCounters.cpp
- metaspaceCounters.hpp
- metaspaceGCThresholdUpdater.hpp
- metaspaceShared.cpp
- metaspaceShared.hpp
- metaspaceTracer.cpp
- metaspaceTracer.hpp
- oopFactory.cpp
- oopFactory.hpp
- operator_new.cpp
- padded.hpp
- padded.inline.hpp
- referenceType.hpp
- resourceArea.cpp
- resourceArea.hpp
- universe.cpp
- universe.hpp
- universe.inline.hpp
- universe_ext.cpp
- virtualspace.cpp
- virtualspace.hpp
-
-
- conditional.hpp
- decay.hpp
- enableIf.hpp
- integralConstant.hpp
- isConst.hpp
- isFloatingPoint.hpp
- isIntegral.hpp
- isPointer.hpp
- isRegisteredEnum.hpp
- isSame.hpp
- isSigned.hpp
- isVolatile.hpp
- primitiveConversions.hpp
- removeCV.hpp
- removePointer.hpp
- removeReference.hpp
-
-
- annotations.cpp
- annotations.hpp
- array.hpp
- arrayKlass.cpp
- arrayKlass.hpp
- arrayKlass.inline.hpp
- arrayOop.hpp
- compiledICHolder.cpp
- compiledICHolder.hpp
- constMethod.cpp
- constMethod.hpp
- constantPool.cpp
- constantPool.hpp
- cpCache.cpp
- cpCache.hpp
- fieldInfo.hpp
- fieldStreams.hpp
- generateOopMap.cpp
- generateOopMap.hpp
- instanceClassLoaderKlass.hpp
- instanceClassLoaderKlass.inline.hpp
- instanceKlass.cpp
- instanceKlass.hpp
- instanceKlass.inline.hpp
- instanceMirrorKlass.cpp
- instanceMirrorKlass.hpp
- instanceMirrorKlass.inline.hpp
- instanceOop.cpp
- instanceOop.hpp
- instanceRefKlass.cpp
- instanceRefKlass.hpp
- instanceRefKlass.inline.hpp
- klass.cpp
- klass.hpp
- klass.inline.hpp
- klassVtable.cpp
- klassVtable.hpp
- markOop.cpp
- markOop.hpp
- markOop.inline.hpp
- metadata.cpp
- metadata.hpp
- method.cpp
- method.hpp
- methodCounters.cpp
- methodCounters.hpp
- methodData.cpp
- methodData.hpp
- objArrayKlass.cpp
- objArrayKlass.hpp
- objArrayKlass.inline.hpp
- objArrayOop.cpp
- objArrayOop.hpp
- objArrayOop.inline.hpp
- oop.cpp
- oop.hpp
- oop.inline.hpp
- oopHandle.hpp
- oopsHierarchy.cpp
- oopsHierarchy.hpp
- symbol.cpp
- symbol.hpp
- typeArrayKlass.cpp
- typeArrayKlass.hpp
- typeArrayKlass.inline.hpp
- typeArrayOop.hpp
- typeArrayOop.inline.hpp
- verifyOopClosure.hpp
-
-
- ad.hpp
- addnode.cpp
- addnode.hpp
- adlcVMDeps.hpp
- arraycopynode.cpp
- arraycopynode.hpp
- block.cpp
- block.hpp
- buildOopMap.cpp
- bytecodeInfo.cpp
- c2_globals.cpp
- c2_globals.hpp
- c2compiler.cpp
- c2compiler.hpp
- callGenerator.cpp
- callGenerator.hpp
- callnode.cpp
- callnode.hpp
- castnode.cpp
- castnode.hpp
- cfgnode.cpp
- cfgnode.hpp
- chaitin.cpp
- chaitin.hpp
- classes.cpp
- classes.hpp
- coalesce.cpp
- coalesce.hpp
- compile.cpp
- compile.hpp
- connode.cpp
- connode.hpp
- convertnode.cpp
- convertnode.hpp
- countbitsnode.cpp
- countbitsnode.hpp
- divnode.cpp
- divnode.hpp
- doCall.cpp
- domgraph.cpp
- escape.cpp
- escape.hpp
- gcm.cpp
- generateOptoStub.cpp
- graphKit.cpp
- graphKit.hpp
- idealGraphPrinter.cpp
- idealGraphPrinter.hpp
- idealKit.cpp
- idealKit.hpp
- ifg.cpp
- ifnode.cpp
- indexSet.cpp
- indexSet.hpp
- intrinsicnode.cpp
- intrinsicnode.hpp
- lcm.cpp
- library_call.cpp
- live.cpp
- live.hpp
- locknode.cpp
- locknode.hpp
- loopPredicate.cpp
- loopTransform.cpp
- loopUnswitch.cpp
- loopnode.cpp
- loopnode.hpp
- loopopts.cpp
- machnode.cpp
- machnode.hpp
- macro.cpp
- macro.hpp
- macroArrayCopy.cpp
- matcher.cpp
- matcher.hpp
- mathexactnode.cpp
- mathexactnode.hpp
- memnode.cpp
- memnode.hpp
- movenode.cpp
- movenode.hpp
- mulnode.cpp
- mulnode.hpp
- multnode.cpp
- multnode.hpp
- narrowptrnode.cpp
- narrowptrnode.hpp
- node.cpp
- node.hpp
- opaquenode.cpp
- opaquenode.hpp
- opcodes.cpp
- opcodes.hpp
- optoreg.hpp
- output.cpp
- output.hpp
- parse.hpp
- parse1.cpp
- parse2.cpp
- parse3.cpp
- parseHelper.cpp
- phase.cpp
- phase.hpp
- phaseX.cpp
- phaseX.hpp
- phasetype.hpp
- postaloc.cpp
- reg_split.cpp
- regalloc.cpp
- regalloc.hpp
- regmask.cpp
- regmask.hpp
- replacednodes.cpp
- replacednodes.hpp
- rootnode.cpp
- rootnode.hpp
- runtime.cpp
- runtime.hpp
- split_if.cpp
- stringopts.cpp
- stringopts.hpp
- subnode.cpp
- subnode.hpp
- superword.cpp
- superword.hpp
- type.cpp
- type.hpp
- vectornode.cpp
- vectornode.hpp
-
-
- precompiled.hpp
-
-
-
- parserTests.cpp
- parserTests.hpp
-
- evmCompat.cpp
- forte.cpp
- forte.hpp
- jni.cpp
- jni.h
- jniCheck.cpp
- jniCheck.hpp
- jniExport.hpp
- jniFastGetField.cpp
- jniFastGetField.hpp
- jni_md.h
- jvm.cpp
- jvm.h
- jvm_misc.hpp
- jvmtiAgentThread.hpp
- jvmtiClassFileReconstituter.cpp
- jvmtiClassFileReconstituter.hpp
- jvmtiCodeBlobEvents.cpp
- jvmtiCodeBlobEvents.hpp
- jvmtiEnter.inline.hpp
- jvmtiEnv.cpp
- jvmtiEnvBase.cpp
- jvmtiEnvBase.hpp
- jvmtiEnvThreadState.cpp
- jvmtiEnvThreadState.hpp
- jvmtiEventController.cpp
- jvmtiEventController.hpp
- jvmtiEventController.inline.hpp
- jvmtiExport.cpp
- jvmtiExport.hpp
- jvmtiExtensions.cpp
- jvmtiExtensions.hpp
- jvmtiGetLoadedClasses.cpp
- jvmtiGetLoadedClasses.hpp
- jvmtiImpl.cpp
- jvmtiImpl.hpp
- jvmtiManageCapabilities.cpp
- jvmtiManageCapabilities.hpp
- jvmtiRawMonitor.cpp
- jvmtiRawMonitor.hpp
- jvmtiRedefineClasses.cpp
- jvmtiRedefineClasses.hpp
- jvmtiTagMap.cpp
- jvmtiTagMap.hpp
- jvmtiThreadState.cpp
- jvmtiThreadState.hpp
- jvmtiThreadState.inline.hpp
- jvmtiTrace.cpp
- jvmtiTrace.hpp
- jvmtiUtil.cpp
- jvmtiUtil.hpp
- methodComparator.cpp
- methodComparator.hpp
- methodHandles.cpp
- methodHandles.hpp
- nativeLookup.cpp
- nativeLookup.hpp
- perf.cpp
- privilegedStack.cpp
- privilegedStack.hpp
- resolvedMethodTable.cpp
- resolvedMethodTable.hpp
- stackwalk.cpp
- stackwalk.hpp
- unsafe.cpp
- unsafe.hpp
- whitebox.cpp
- whitebox.hpp
- whitebox_ext.cpp
-
-
- advancedThresholdPolicy.cpp
- advancedThresholdPolicy.hpp
- arguments.cpp
- arguments.hpp
- arguments_ext.cpp
- atomic.hpp
- basicLock.cpp
- basicLock.hpp
- biasedLocking.cpp
- biasedLocking.hpp
- commandLineFlagConstraintList.cpp
- commandLineFlagConstraintList.hpp
- commandLineFlagConstraintsCompiler.cpp
- commandLineFlagConstraintsCompiler.hpp
- commandLineFlagConstraintsGC.cpp
- commandLineFlagConstraintsGC.hpp
- commandLineFlagConstraintsRuntime.cpp
- commandLineFlagConstraintsRuntime.hpp
- commandLineFlagRangeList.cpp
- commandLineFlagRangeList.hpp
- commandLineFlagWriteableList.cpp
- commandLineFlagWriteableList.hpp
- compilationPolicy.cpp
- compilationPolicy.hpp
- deoptimization.cpp
- deoptimization.hpp
- extendedPC.hpp
- fieldDescriptor.cpp
- fieldDescriptor.hpp
- fieldType.cpp
- fieldType.hpp
- frame.cpp
- frame.hpp
- frame.inline.hpp
- globals.cpp
- globals.hpp
- globals_ext.hpp
- globals_extension.hpp
- handles.cpp
- handles.hpp
- handles.inline.hpp
- icache.cpp
- icache.hpp
- init.cpp
- init.hpp
- interfaceSupport.cpp
- interfaceSupport.hpp
- java.cpp
- java.hpp
- javaCalls.cpp
- javaCalls.hpp
- javaFrameAnchor.hpp
- jfieldIDWorkaround.hpp
- jniHandles.cpp
- jniHandles.hpp
- jniPeriodicChecker.cpp
- jniPeriodicChecker.hpp
- memprofiler.cpp
- memprofiler.hpp
- monitorChunk.cpp
- monitorChunk.hpp
- mutex.cpp
- mutex.hpp
- mutexLocker.cpp
- mutexLocker.hpp
- objectMonitor.cpp
- objectMonitor.hpp
- objectMonitor.inline.hpp
- orderAccess.cpp
- orderAccess.hpp
- orderAccess.inline.hpp
- os.cpp
- os.hpp
- os.inline.hpp
- osThread.cpp
- osThread.hpp
- os_ext.hpp
- park.cpp
- park.hpp
- perfData.cpp
- perfData.hpp
- perfMemory.cpp
- perfMemory.hpp
- prefetch.hpp
- prefetch.inline.hpp
- reflection.cpp
- reflection.hpp
- reflectionUtils.cpp
- reflectionUtils.hpp
- registerMap.hpp
- relocator.cpp
- relocator.hpp
- rframe.cpp
- rframe.hpp
- rtmLocking.cpp
- rtmLocking.hpp
- safepoint.cpp
- safepoint.hpp
- semaphore.hpp
- serviceThread.cpp
- serviceThread.hpp
- sharedRuntime.cpp
- sharedRuntime.hpp
- sharedRuntimeMath.hpp
- sharedRuntimeTrans.cpp
- sharedRuntimeTrig.cpp
- signature.cpp
- signature.hpp
- simpleThresholdPolicy.cpp
- simpleThresholdPolicy.hpp
- simpleThresholdPolicy.inline.hpp
- stackValue.cpp
- stackValue.hpp
- stackValueCollection.cpp
- stackValueCollection.hpp
- statSampler.cpp
- statSampler.hpp
- stubCodeGenerator.cpp
- stubCodeGenerator.hpp
- stubRoutines.cpp
- stubRoutines.hpp
- sweeper.cpp
- sweeper.hpp
- synchronizer.cpp
- synchronizer.hpp
- task.cpp
- task.hpp
- thread.cpp
- thread.hpp
- thread.inline.hpp
- threadCritical.hpp
- threadLocalStorage.hpp
- thread_ext.cpp
- thread_ext.hpp
- timer.cpp
- timer.hpp
- timerTrace.cpp
- timerTrace.hpp
- unhandledOops.cpp
- unhandledOops.hpp
- vframe.cpp
- vframe.hpp
- vframeArray.cpp
- vframeArray.hpp
- vframe_hp.cpp
- vframe_hp.hpp
- vmStructs.cpp
- vmStructs.hpp
- vmStructs_ext.hpp
- vmStructs_trace.hpp
- vmThread.cpp
- vmThread.hpp
- vm_operations.cpp
- vm_operations.hpp
- vm_version.cpp
- vm_version.hpp
-
-
- allocationContextService.hpp
- allocationSite.hpp
- attachListener.cpp
- attachListener.hpp
- classLoadingService.cpp
- classLoadingService.hpp
- diagnosticArgument.cpp
- diagnosticArgument.hpp
- diagnosticCommand.cpp
- diagnosticCommand.hpp
- diagnosticFramework.cpp
- diagnosticFramework.hpp
- dtraceAttacher.cpp
- dtraceAttacher.hpp
- g1MemoryPool.cpp
- g1MemoryPool.hpp
- gcNotifier.cpp
- gcNotifier.hpp
- heapDumper.cpp
- heapDumper.hpp
- jmm.h
- lowMemoryDetector.cpp
- lowMemoryDetector.hpp
- mallocSiteTable.cpp
- mallocSiteTable.hpp
- mallocTracker.cpp
- mallocTracker.hpp
- mallocTracker.inline.hpp
- management.cpp
- management.hpp
- memBaseline.cpp
- memBaseline.hpp
- memReporter.cpp
- memReporter.hpp
- memTracker.cpp
- memTracker.hpp
- memoryManager.cpp
- memoryManager.hpp
- memoryPool.cpp
- memoryPool.hpp
- memoryService.cpp
- memoryService.hpp
- memoryUsage.hpp
- nmtCommon.cpp
- nmtCommon.hpp
- nmtDCmd.cpp
- nmtDCmd.hpp
- psMemoryPool.cpp
- psMemoryPool.hpp
- runtimeService.cpp
- runtimeService.hpp
- serviceUtil.hpp
- threadService.cpp
- threadService.hpp
- virtualMemoryTracker.cpp
- virtualMemoryTracker.hpp
- writeableFlags.cpp
- writeableFlags.hpp
-
-
- llvmHeaders.hpp
- llvmValue.hpp
- sharkBlock.cpp
- sharkBlock.hpp
- sharkBuilder.cpp
- sharkBuilder.hpp
- sharkCacheDecache.cpp
- sharkCacheDecache.hpp
- sharkCodeBuffer.hpp
- sharkCompiler.cpp
- sharkCompiler.hpp
- sharkConstant.cpp
- sharkConstant.hpp
- sharkContext.cpp
- sharkContext.hpp
- sharkEntry.hpp
- sharkFunction.cpp
- sharkFunction.hpp
- sharkInliner.cpp
- sharkInliner.hpp
- sharkIntrinsics.cpp
- sharkIntrinsics.hpp
- sharkInvariants.cpp
- sharkInvariants.hpp
- sharkMemoryManager.cpp
- sharkMemoryManager.hpp
- sharkNativeWrapper.cpp
- sharkNativeWrapper.hpp
- sharkRuntime.cpp
- sharkRuntime.hpp
- sharkStack.cpp
- sharkStack.hpp
- sharkState.cpp
- sharkState.hpp
- sharkStateScanner.cpp
- sharkStateScanner.hpp
- sharkTopLevelBlock.cpp
- sharkTopLevelBlock.hpp
- sharkType.hpp
- sharkValue.cpp
- sharkValue.hpp
- shark_globals.cpp
- shark_globals.hpp
-
-
- noTraceBackend.hpp
- traceBackend.cpp
- traceBackend.hpp
- traceDataTypes.hpp
- traceEvent.hpp
- traceMacros.hpp
- traceStream.cpp
- traceStream.hpp
- traceTime.hpp
- tracing.hpp
- xinclude.mod
-
-
- accessFlags.cpp
- accessFlags.hpp
- align.hpp
- bitMap.cpp
- bitMap.hpp
- bitMap.inline.hpp
- breakpoint.hpp
- bytes.hpp
- chunkedList.hpp
- compilerWarnings.hpp
- constantTag.cpp
- constantTag.hpp
- copy.cpp
- copy.hpp
- count_trailing_zeros.hpp
- debug.cpp
- debug.hpp
- decoder.cpp
- decoder.hpp
- decoder_elf.cpp
- decoder_elf.hpp
- defaultStream.hpp
- dtrace.hpp
- dtrace_disabled.hpp
- elfFile.cpp
- elfFile.hpp
- elfFuncDescTable.cpp
- elfFuncDescTable.hpp
- elfStringTable.cpp
- elfStringTable.hpp
- elfSymbolTable.cpp
- elfSymbolTable.hpp
- events.cpp
- events.hpp
- exceptions.cpp
- exceptions.hpp
- fakeRttiSupport.hpp
- formatBuffer.cpp
- formatBuffer.hpp
- globalDefinitions.cpp
- globalDefinitions.hpp
- globalDefinitions_gcc.hpp
- globalDefinitions_solstudio.hpp
- globalDefinitions_visCPP.hpp
- globalDefinitions_xlc.hpp
- growableArray.cpp
- growableArray.hpp
- hashtable.cpp
- hashtable.hpp
- hashtable.inline.hpp
- histogram.cpp
- histogram.hpp
- intHisto.cpp
- intHisto.hpp
- internalVMTests.cpp
- internalVMTests.hpp
- json.cpp
- json.hpp
- linkedlist.hpp
- macros.hpp
- nativeCallStack.cpp
- nativeCallStack.hpp
- numberSeq.cpp
- numberSeq.hpp
- ostream.cpp
- ostream.hpp
- pair.hpp
- preserveException.cpp
- preserveException.hpp
- quickSort.hpp
- resourceHash.hpp
- sizes.cpp
- sizes.hpp
- stack.hpp
- stack.inline.hpp
- stringUtils.cpp
- stringUtils.hpp
- ticks.cpp
- ticks.hpp
- utf8.cpp
- utf8.hpp
- vmError.cpp
- vmError.hpp
- xmlstream.cpp
- xmlstream.hpp
-
- Xusage.txt
-
-
-
-
-
-
- ProcessHandleImpl_aix.c
-
-
- java_md_aix.c
- java_md_aix.h
-
-
- jsig.c
-
-
- aix_close.c
-
-
-
- AixPollPort.c
-
-
- AixNativeDispatcher.c
-
-
-
-
-
-
-
- ProcessHandleImpl_linux.c
-
-
- jsig.c
-
-
- linux_close.c
-
-
-
- EPoll.c
- EPollArrayWrapper.c
- EPollPort.c
-
-
- LinuxNativeDispatcher.c
- LinuxWatchService.c
-
-
-
-
-
-
-
- jni_md.h
- jvm_md.h
-
-
- HostLocaleProviderAdapter_md.c
- ProcessHandleImpl_macosx.c
- java_props_macosx.c
- java_props_macosx.h
-
-
- java_md_macosx.c
- java_md_macosx.h
-
-
- jsig.c
-
-
- DefaultProxySelector.c
- bsd_close.c
-
-
-
- KQueue.c
- KQueueArrayWrapper.c
- KQueuePort.c
-
-
- BsdNativeDispatcher.c
- MacOSXNativeDispatcher.c
- UTIFileTypeDetector.c
-
-
-
- KeystoreImpl.m
-
-
-
-
-
-
-
-
-
-
- version.txt
-
-
-
-
-
-
-
-
-
- README.txt
-
-
-
-
-
- classfile_constants.h
- jni.h
- jvm.h
- jvmticmlr.h
-
-
- defines.h
- main.c
-
-
- e_acos.c
- e_asin.c
- e_atan2.c
- e_atanh.c
- e_cosh.c
- e_exp.c
- e_fmod.c
- e_log.c
- e_log10.c
- e_rem_pio2.c
- e_remainder.c
- e_scalb.c
- e_sinh.c
- e_sqrt.c
- fdlibm.h
- jfdlibm.h
- k_cos.c
- k_rem_pio2.c
- k_sin.c
- k_standard.c
- k_tan.c
- s_atan.c
- s_ceil.c
- s_copysign.c
- s_cos.c
- s_expm1.c
- s_fabs.c
- s_finite.c
- s_floor.c
- s_frexp.c
- s_ilogb.c
- s_isnan.c
- s_ldexp.c
- s_lib_version.c
- s_log1p.c
- s_logb.c
- s_matherr.c
- s_modf.c
- s_nextafter.c
- s_rint.c
- s_scalbn.c
- s_signgam.c
- s_significand.c
- s_sin.c
- s_tan.c
- s_tanh.c
- w_acos.c
- w_asin.c
- w_atan2.c
- w_atanh.c
- w_cosh.c
- w_exp.c
- w_fmod.c
- w_log.c
- w_log10.c
- w_remainder.c
- w_scalb.c
- w_sinh.c
- w_sqrt.c
-
-
- AccessController.c
- Array.c
- AtomicLong.c
- BootLoader.c
- Class.c
- ClassLoader.c
- ConstantPool.c
- Double.c
- Executable.c
- Field.c
- FileInputStream.c
- Float.c
- Module.c
- NativeAccessors.c
- Object.c
- ObjectInputStream.c
- ObjectOutputStream.c
- ObjectStreamClass.c
- RandomAccessFile.c
- Reference.c
- Reflection.c
- Runtime.c
- SecurityManager.c
- Shutdown.c
- Signal.c
- StackStreamFactory.c
- StackTraceElement.c
- StrictMath.c
- String.c
- StringCoding.c
- System.c
- Thread.c
- Throwable.c
- TimeZone.c
- VM.c
- VMSupport.c
- check_version.c
- gdefs.h
- io_util.c
- io_util.h
- java_props.h
- jdk_util.c
- jdk_util.h
- jio.c
- jlong.h
- jni_util.c
- jni_util.h
- sizecalc.h
- verify_stub.c
-
-
- NativeImageBuffer.cpp
- endian.cpp
- endian.hpp
- imageDecompressor.cpp
- imageDecompressor.hpp
- imageFile.cpp
- imageFile.hpp
- inttypes.hpp
- jimage.cpp
- jimage.hpp
- osSupport.hpp
-
-
- args.c
- emessages.h
- java.c
- java.h
- jli_util.c
- jli_util.h
- manifest_info.h
- parse_manifest.c
- splashscreen.h
- splashscreen_stubs.c
- wildcard.c
- wildcard.h
-
-
- DatagramPacket.c
- Inet4Address.c
- Inet6Address.c
- InetAddress.c
- net_util.c
- net_util.h
- proxy_util.c
- proxy_util.h
-
-
-
- nio.h
-
- nio_util.c
-
-
- check_code.c
- check_format.c
- opcodes.in_out
-
-
-
- compress.c
- crc32.h
- deflate.c
- deflate.h
- gzclose.c
- gzguts.h
- gzlib.c
- gzread.c
- gzwrite.c
- infback.c
- inffast.c
- inffast.h
- inffixed.h
- inflate.c
- inflate.h
- inftrees.c
- inftrees.h
- trees.c
- trees.h
- uncompr.c
- zadler32.c
- zconf.h
- zcrc32.c
- zlib.h
- zutil.c
- zutil.h
-
- Adler32.c
- CRC32.c
- Deflater.c
- Inflater.c
- zip_util.c
- zip_util.h
-
-
-
-
-
-
- ProcessHandleImpl_solaris.c
-
-
- jsig.c
-
-
- libjvm_db.c
- libjvm_db.h
-
-
- jvm_dtrace.c
- jvm_dtrace.h
-
-
- solaris_close.c
-
-
-
- DevPollArrayWrapper.c
- SolarisEventPort.c
-
-
- SolarisNativeDispatcher.c
- SolarisWatchService.c
-
-
-
-
-
-
-
- jni_md.h
- jvm_md.h
-
-
- jspawnhelper.c
-
-
- jexec.c
-
-
- Console_md.c
- FileDescriptor_md.c
- FileOutputStream_md.c
- ProcessEnvironment_md.c
- ProcessHandleImpl_unix.c
- ProcessHandleImpl_unix.h
- ProcessImpl_md.c
- TimeZone_md.c
- TimeZone_md.h
- UnixFileSystem_md.c
- VM_md.c
- canonicalize_md.c
- childproc.c
- childproc.h
- gdefs_md.h
- io_util_md.c
- io_util_md.h
- java_props_md.c
- jdk_util_md.c
- jdk_util_md.h
- jlong_md.h
- jni_util_md.c
- locale_str.h
-
-
- osSupport_unix.cpp
-
-
- java_md.h
- java_md_common.c
- java_md_solinux.c
- java_md_solinux.h
-
-
- DefaultProxySelector.c
- Inet4AddressImpl.c
- Inet6AddressImpl.c
- InetAddressImplFactory.c
- NetworkInterface.c
- PlainDatagramSocketImpl.c
- PlainSocketImpl.c
- ResolverConfigurationImpl.c
- SdpSupport.c
- SocketImpl.c
- SocketInputStream.c
- SocketOutputStream.c
- net_util_md.c
- net_util_md.h
- portconfig.c
-
-
-
- DatagramChannelImpl.c
- DatagramDispatcher.c
- FileChannelImpl.c
- FileDispatcherImpl.c
- FileKey.c
- IOUtil.c
- InheritedChannel.c
- NativeThread.c
- Net.c
- PollArrayWrapper.c
- ServerSocketChannelImpl.c
- SocketChannelImpl.c
- SocketDispatcher.c
- UnixAsynchronousServerSocketChannelImpl.c
- UnixAsynchronousSocketChannelImpl.c
- nio_util.h
-
-
- UnixCopyFile.c
- UnixNativeDispatcher.c
-
- MappedByteBuffer.c
-
-
-
-
-
-
- jni_md.h
- jvm_md.h
-
-
- Console_md.c
- FileDescriptor_md.c
- FileOutputStream_md.c
- HostLocaleProviderAdapter_md.c
- ProcessEnvironment_md.c
- ProcessHandleImpl_win.c
- ProcessImpl_md.c
- TimeZone_md.c
- TimeZone_md.h
- VM_md.c
- Win32ErrorMode.c
- WinCAPISeedGenerator.c
- WinNTFileSystem_md.c
- canonicalize_md.c
- dirent_md.c
- dirent_md.h
- gdefs_md.h
- io_util_md.c
- io_util_md.h
- java_main_md.h
- java_props_md.c
- jdk_util_md.c
- jdk_util_md.h
- jlong_md.h
- jni_util_md.c
- locale_str.h
-
-
- osSupport_windows.cpp
-
-
- cmdtoargs.c
- java_md.c
- java_md.h
-
-
- DefaultProxySelector.c
- DualStackPlainDatagramSocketImpl.c
- DualStackPlainSocketImpl.c
- Inet4AddressImpl.c
- Inet6AddressImpl.c
- InetAddressImplFactory.c
- NTLMAuthSequence.c
- NetworkInterface.c
- NetworkInterface.h
- NetworkInterface_winXP.c
- ResolverConfigurationImpl.c
- SocketImpl.c
- SocketInputStream.c
- SocketOutputStream.c
- TwoStacksPlainDatagramSocketImpl.c
- TwoStacksPlainSocketImpl.c
- net_util_md.c
- net_util_md.h
- portconfig.c
-
-
-
- DatagramChannelImpl.c
- DatagramDispatcher.c
- FileChannelImpl.c
- FileDispatcherImpl.c
- FileKey.c
- IOUtil.c
- Iocp.c
- Net.c
- ServerSocketChannelImpl.c
- SocketChannelImpl.c
- SocketDispatcher.c
- WindowsAsynchronousFileChannelImpl.c
- WindowsAsynchronousServerSocketChannelImpl.c
- WindowsAsynchronousSocketChannelImpl.c
- WindowsSelectorImpl.c
- nio_util.h
-
-
- RegistryFileTypeDetector.c
- WindowsNativeDispatcher.c
-
- MappedByteBuffer.c
-
-
-
-
-
-
-
-
-
-
-
-
-
- orb_config_design.txt
-
-
-
- minor_code_example.txt
- standard_minor_codes.txt
-
-
-
- parsing_combinators.txt
-
-
-
-
-
- README.txt
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- porting_aix.c
- porting_aix.h
-
-
-
-
-
-
- jawt_md.h
-
-
-
- AWTEvent.h
- AWTEvent.m
- AWTSurfaceLayers.h
- AWTSurfaceLayers.m
- AWTView.h
- AWTView.m
- AWTWindow.h
- AWTWindow.m
- ApplicationDelegate.h
- ApplicationDelegate.m
- CClipboard.m
- CCursorManager.m
- CDataTransferer.h
- CDataTransferer.m
- CDesktopPeer.m
- CDragSource.h
- CDragSource.m
- CDragSourceContextPeer.m
- CDropTarget.h
- CDropTarget.m
- CDropTargetContextPeer.m
- CFRetainedResource.m
- CFileDialog.h
- CFileDialog.m
- CGraphicsConfig.m
- CGraphicsDevice.m
- CGraphicsEnv.m
- CImage.m
- CInputMethod.m
- CMenu.h
- CMenu.m
- CMenuBar.h
- CMenuBar.m
- CMenuComponent.h
- CMenuComponent.m
- CMenuItem.h
- CMenuItem.m
- CPopupMenu.h
- CPopupMenu.m
- CPrinterJob.m
- CRobot.m
- CRobotKeyCode.h
- CRobotKeyCode.m
- CSystemColors.h
- CSystemColors.m
- CTextPipe.m
- CTrayIcon.h
- CTrayIcon.m
- CWrapper.m
- DnDUtilities.h
- DnDUtilities.m
- GeomUtilities.h
- GeomUtilities.m
- ImageSurfaceData.h
- ImageSurfaceData.m
- InitIDs.h
- InitIDs.m
- JavaAccessibilityAction.h
- JavaAccessibilityAction.m
- JavaAccessibilityUtilities.h
- JavaAccessibilityUtilities.m
- JavaComponentAccessibility.h
- JavaComponentAccessibility.m
- JavaTextAccessibility.h
- JavaTextAccessibility.m
- LWCToolkit.h
- LWCToolkit.m
- OSVersion.h
- OSVersion.m
- PrintModel.h
- PrintModel.m
- PrinterSurfaceData.h
- PrinterSurfaceData.m
- PrinterView.h
- PrinterView.m
- QuartzRenderer.m
- QuartzSurfaceData.h
- QuartzSurfaceData.m
- awt_DrawingSurface.m
-
-
- AWTFont.h
- AWTFont.m
- AWTStrike.h
- AWTStrike.m
- CCharToGlyphMapper.m
- CGGlyphImages.h
- CGGlyphImages.m
- CGGlyphOutlines.h
- CGGlyphOutlines.m
- CoreTextSupport.h
- CoreTextSupport.m
-
-
-
-
- cglext.h
-
- CGLGraphicsConfig.h
- CGLGraphicsConfig.m
- CGLLayer.h
- CGLLayer.m
- CGLSurfaceData.h
- CGLSurfaceData.m
- OGLFuncs_md.h
-
-
-
-
- jawt.m
-
-
- PLATFORM_API_MacOSX_MidiIn.c
- PLATFORM_API_MacOSX_MidiOut.c
- PLATFORM_API_MacOSX_MidiUtils.c
- PLATFORM_API_MacOSX_MidiUtils.h
- PLATFORM_API_MacOSX_PCM.cpp
- PLATFORM_API_MacOSX_Ports.cpp
- PLATFORM_API_MacOSX_Utils.cpp
- PLATFORM_API_MacOSX_Utils.h
-
-
- CFileManager.m
-
-
- AWT_debug.h
- AWT_debug.m
- NSApplicationAWT.h
- NSApplicationAWT.m
- PropertiesUtilities.h
- PropertiesUtilities.m
- QueuingApplicationDelegate.h
- QueuingApplicationDelegate.m
- ThreadUtilities.h
- ThreadUtilities.m
-
-
- AquaFileView.m
- AquaLookAndFeel.m
- AquaNativeResources.m
- JRSUIConstantSync.h
- JRSUIConstantSync.m
- JRSUIController.m
- JRSUIFocus.m
- ScreenMenu.h
- ScreenMenu.m
-
-
- splashscreen_config.h
- splashscreen_sys.m
-
-
-
-
-
-
-
-
-
-
- NeXT.txt
- ansi.txt
- cpg437.txt
- cpg850.txt
- mac.txt
-
-
-
-
-
-
-
-
-
-
- debug_assert.c
- debug_assert.h
- debug_mem.c
- debug_mem.h
- debug_trace.c
- debug_trace.h
- debug_util.c
- debug_util.h
-
-
- mlib_ImageCopy_Bit.c
- mlib_ImageCreate.c
- mlib_sys.c
-
-
- rect.c
-
-
-
- AccelGlyphCache.c
- AccelGlyphCache.h
- fontscalerdefs.h
- sunfontids.h
-
-
-
-
- gl.h
- glext.h
-
- OGLBlitLoops.c
- OGLBlitLoops.h
- OGLBufImgOps.c
- OGLBufImgOps.h
- OGLContext.c
- OGLContext.h
- OGLFuncMacros.h
- OGLFuncs.c
- OGLFuncs.h
- OGLMaskBlit.c
- OGLMaskBlit.h
- OGLMaskFill.c
- OGLMaskFill.h
- OGLPaints.c
- OGLPaints.h
- OGLRenderQueue.c
- OGLRenderQueue.h
- OGLRenderer.c
- OGLRenderer.h
- OGLSurfaceData.c
- OGLSurfaceData.h
- OGLTextRenderer.c
- OGLTextRenderer.h
- OGLVertexCache.c
- OGLVertexCache.h
-
-
-
-
- jawt.h
-
-
-
-
-
- img_alpha.h
- img_anycm.h
- img_colors.c
- img_colors.h
- img_dcm.h
- img_dcm8.h
- img_dir8dither.h
- img_dirdither.h
- img_fscolor.h
- img_fsdither.h
- img_fsgray.h
- img_fsutil.h
- img_globals.c
- img_globals.h
- img_icm.h
- img_input32.h
- img_input8.h
- img_input8_32.h
- img_nodither.h
- img_noscale.h
- img_opaque.h
- img_ordclrsgn.h
- img_ordclruns.h
- img_orddither.h
- img_ordgray.h
- img_output16.h
- img_output16_32.h
- img_output24.h
- img_output32.h
- img_output8.h
- img_output8_16_24.h
- img_output8_16_32.h
- img_output8_32.h
- img_replscale.h
- img_scaleloop.h
- img_util.h
-
-
- gifdecoder.c
-
- BufImgSurfaceData.c
- BufImgSurfaceData.h
- DataBufferNative.c
- awt_ImageRep.c
- awt_parseImage.c
- awt_parseImage.h
- dither.c
- dither.h
- imageInitIDs.c
- imageInitIDs.h
-
-
- awt_ImagingLib.c
- awt_ImagingLib.h
-
-
-
-
- AlphaMacros.c
- AlphaMacros.h
- AlphaMath.c
- AlphaMath.h
- Any3Byte.c
- Any3Byte.h
- Any4Byte.c
- Any4Byte.h
- AnyByte.c
- AnyByte.h
- AnyByteBinary.h
- AnyInt.c
- AnyInt.h
- AnyShort.c
- AnyShort.h
- Blit.c
- BlitBg.c
- ByteBinary1Bit.c
- ByteBinary1Bit.h
- ByteBinary2Bit.c
- ByteBinary2Bit.h
- ByteBinary4Bit.c
- ByteBinary4Bit.h
- ByteGray.c
- ByteGray.h
- ByteIndexed.c
- ByteIndexed.h
- DrawLine.c
- DrawParallelogram.c
- DrawPath.c
- DrawPath.h
- DrawPolygons.c
- DrawRect.c
- FillParallelogram.c
- FillPath.c
- FillRect.c
- FillSpans.c
- FourByteAbgr.c
- FourByteAbgr.h
- FourByteAbgrPre.c
- FourByteAbgrPre.h
- GlyphImageRef.h
- GraphicsPrimitiveMgr.c
- GraphicsPrimitiveMgr.h
- ImageData.h
- Index12Gray.c
- Index12Gray.h
- Index8Gray.c
- Index8Gray.h
- IntArgb.c
- IntArgb.h
- IntArgbBm.c
- IntArgbBm.h
- IntArgbPre.c
- IntArgbPre.h
- IntBgr.c
- IntBgr.h
- IntDcm.h
- IntRgb.c
- IntRgb.h
- IntRgbx.c
- IntRgbx.h
- LineUtils.h
- LoopMacros.h
- MapAccelFunc.c
- MaskBlit.c
- MaskFill.c
- ParallelogramUtils.h
- ProcessPath.c
- ProcessPath.h
- ScaledBlit.c
- ThreeByteBgr.c
- ThreeByteBgr.h
- TransformHelper.c
- Ushort4444Argb.c
- Ushort4444Argb.h
- Ushort555Rgb.c
- Ushort555Rgb.h
- Ushort555Rgbx.c
- Ushort555Rgbx.h
- Ushort565Rgb.c
- Ushort565Rgb.h
- UshortGray.c
- UshortGray.h
- UshortIndexed.c
- UshortIndexed.h
-
-
- BufferedMaskBlit.c
- BufferedRenderPipe.c
- PathConsumer2D.h
- Region.c
- Region.h
- ShapeSpanIterator.c
- SpanClipRenderer.c
- SpanIterator.h
-
- Disposer.c
- Disposer.h
- SurfaceData.c
- SurfaceData.h
- Trace.c
- Trace.h
-
-
-
-
-
- ucdn.c
- ucdn.h
- unicodedata_db.h
-
- hb-atomic-private.hh
- hb-blob.cc
- hb-blob.h
- hb-buffer-deserialize-json.hh
- hb-buffer-deserialize-text.hh
- hb-buffer-private.hh
- hb-buffer-serialize.cc
- hb-buffer.cc
- hb-buffer.h
- hb-cache-private.hh
- hb-common.cc
- hb-common.h
- hb-coretext.cc
- hb-coretext.h
- hb-deprecated.h
- hb-face-private.hh
- hb-face.cc
- hb-face.h
- hb-fallback-shape.cc
- hb-font-private.hh
- hb-font.cc
- hb-font.h
- hb-ft.cc
- hb-ft.h
- hb-mutex-private.hh
- hb-object-private.hh
- hb-open-file-private.hh
- hb-open-type-private.hh
- hb-ot-cbdt-table.hh
- hb-ot-cmap-table.hh
- hb-ot-font.cc
- hb-ot-font.h
- hb-ot-glyf-table.hh
- hb-ot-head-table.hh
- hb-ot-hhea-table.hh
- hb-ot-hmtx-table.hh
- hb-ot-layout-common-private.hh
- hb-ot-layout-gdef-table.hh
- hb-ot-layout-gpos-table.hh
- hb-ot-layout-gsub-table.hh
- hb-ot-layout-gsubgpos-private.hh
- hb-ot-layout-jstf-table.hh
- hb-ot-layout-private.hh
- hb-ot-layout.cc
- hb-ot-layout.h
- hb-ot-map-private.hh
- hb-ot-map.cc
- hb-ot-math.h
- hb-ot-maxp-table.hh
- hb-ot-name-table.hh
- hb-ot-os2-table.hh
- hb-ot-shape-complex-arabic-fallback.hh
- hb-ot-shape-complex-arabic-private.hh
- hb-ot-shape-complex-arabic-table.hh
- hb-ot-shape-complex-arabic-win1256.hh
- hb-ot-shape-complex-arabic.cc
- hb-ot-shape-complex-default.cc
- hb-ot-shape-complex-hangul.cc
- hb-ot-shape-complex-hebrew.cc
- hb-ot-shape-complex-indic-machine.hh
- hb-ot-shape-complex-indic-private.hh
- hb-ot-shape-complex-indic-table.cc
- hb-ot-shape-complex-indic.cc
- hb-ot-shape-complex-myanmar-machine.hh
- hb-ot-shape-complex-myanmar.cc
- hb-ot-shape-complex-private.hh
- hb-ot-shape-complex-thai.cc
- hb-ot-shape-complex-tibetan.cc
- hb-ot-shape-complex-use-machine.hh
- hb-ot-shape-complex-use-private.hh
- hb-ot-shape-complex-use-table.cc
- hb-ot-shape-complex-use.cc
- hb-ot-shape-fallback-private.hh
- hb-ot-shape-fallback.cc
- hb-ot-shape-normalize-private.hh
- hb-ot-shape-normalize.cc
- hb-ot-shape-private.hh
- hb-ot-shape.cc
- hb-ot-shape.h
- hb-ot-tag.cc
- hb-ot-tag.h
- hb-ot.h
- hb-private.hh
- hb-set-private.hh
- hb-set.cc
- hb-set.h
- hb-shape-plan-private.hh
- hb-shape-plan.cc
- hb-shape-plan.h
- hb-shape.cc
- hb-shape.h
- hb-shaper-impl-private.hh
- hb-shaper-list.hh
- hb-shaper-private.hh
- hb-shaper.cc
- hb-ucdn.cc
- hb-unicode-private.hh
- hb-unicode.cc
- hb-unicode.h
- hb-utf-private.hh
- hb-version.h
- hb-warning.cc
- hb.h
-
-
- AlternateSubstSubtables.cpp
- AlternateSubstSubtables.h
- AnchorTables.cpp
- AnchorTables.h
- ArabicLayoutEngine.cpp
- ArabicLayoutEngine.h
- ArabicShaping.cpp
- ArabicShaping.h
- AttachmentPosnSubtables.h
- CanonData.cpp
- CanonShaping.cpp
- CanonShaping.h
- CharSubstitutionFilter.h
- ClassDefinitionTables.cpp
- ClassDefinitionTables.h
- ContextualGlyphInsertion.h
- ContextualGlyphInsertionProc2.cpp
- ContextualGlyphInsertionProc2.h
- ContextualGlyphSubstProc.cpp
- ContextualGlyphSubstProc.h
- ContextualGlyphSubstProc2.cpp
- ContextualGlyphSubstProc2.h
- ContextualGlyphSubstitution.h
- ContextualSubstSubtables.cpp
- ContextualSubstSubtables.h
- CoverageTables.cpp
- CoverageTables.h
- CursiveAttachmentSubtables.cpp
- CursiveAttachmentSubtables.h
- DefaultCharMapper.h
- DeviceTables.cpp
- DeviceTables.h
- ExtensionSubtables.cpp
- ExtensionSubtables.h
- Features.cpp
- GDEFMarkFilter.cpp
- GDEFMarkFilter.h
- GXLayoutEngine.cpp
- GXLayoutEngine.h
- GXLayoutEngine2.cpp
- GXLayoutEngine2.h
- GlyphDefinitionTables.cpp
- GlyphDefinitionTables.h
- GlyphIterator.cpp
- GlyphIterator.h
- GlyphLookupTables.cpp
- GlyphLookupTables.h
- GlyphPositionAdjustments.cpp
- GlyphPositionAdjustments.h
- GlyphPositioningTables.cpp
- GlyphPositioningTables.h
- GlyphPosnLookupProc.cpp
- GlyphPosnLookupProc.h
- GlyphSubstLookupProc.cpp
- GlyphSubstLookupProc.h
- GlyphSubstitutionTables.cpp
- GlyphSubstitutionTables.h
- HanLayoutEngine.cpp
- HanLayoutEngine.h
- HangulLayoutEngine.cpp
- HangulLayoutEngine.h
- ICUFeatures.h
- IndicClassTables.cpp
- IndicLayoutEngine.cpp
- IndicLayoutEngine.h
- IndicRearrangement.h
- IndicRearrangementProcessor.cpp
- IndicRearrangementProcessor.h
- IndicRearrangementProcessor2.cpp
- IndicRearrangementProcessor2.h
- IndicReordering.cpp
- IndicReordering.h
- KernTable.cpp
- KernTable.h
- KhmerLayoutEngine.cpp
- KhmerLayoutEngine.h
- KhmerReordering.cpp
- KhmerReordering.h
- LEFontInstance.cpp
- LEFontInstance.h
- LEGlyphFilter.h
- LEGlyphStorage.cpp
- LEGlyphStorage.h
- LEInsertionList.cpp
- LEInsertionList.h
- LELanguages.h
- LEScripts.h
- LEStandalone.h
- LESwaps.h
- LETableReference.h
- LETypes.h
- LayoutEngine.cpp
- LayoutEngine.h
- LayoutTables.h
- LigatureSubstProc.cpp
- LigatureSubstProc.h
- LigatureSubstProc2.cpp
- LigatureSubstProc2.h
- LigatureSubstSubtables.cpp
- LigatureSubstSubtables.h
- LigatureSubstitution.h
- LookupProcessor.cpp
- LookupProcessor.h
- LookupTables.cpp
- LookupTables.h
- Lookups.cpp
- Lookups.h
- MPreFixups.cpp
- MPreFixups.h
- MarkArrays.cpp
- MarkArrays.h
- MarkToBasePosnSubtables.cpp
- MarkToBasePosnSubtables.h
- MarkToLigaturePosnSubtables.cpp
- MarkToLigaturePosnSubtables.h
- MarkToMarkPosnSubtables.cpp
- MarkToMarkPosnSubtables.h
- MirroredCharData.cpp
- MorphStateTables.h
- MorphTables.cpp
- MorphTables.h
- MorphTables2.cpp
- MultipleSubstSubtables.cpp
- MultipleSubstSubtables.h
- NonContextualGlyphSubst.h
- NonContextualGlyphSubstProc.cpp
- NonContextualGlyphSubstProc.h
- NonContextualGlyphSubstProc2.cpp
- NonContextualGlyphSubstProc2.h
- OpenTypeLayoutEngine.cpp
- OpenTypeLayoutEngine.h
- OpenTypeTables.h
- OpenTypeUtilities.cpp
- OpenTypeUtilities.h
- PairPositioningSubtables.cpp
- PairPositioningSubtables.h
- ScriptAndLanguage.cpp
- ScriptAndLanguage.h
- ScriptAndLanguageTags.cpp
- ScriptAndLanguageTags.h
- SegmentArrayProcessor.cpp
- SegmentArrayProcessor.h
- SegmentArrayProcessor2.cpp
- SegmentArrayProcessor2.h
- SegmentSingleProcessor.cpp
- SegmentSingleProcessor.h
- SegmentSingleProcessor2.cpp
- SegmentSingleProcessor2.h
- ShapingTypeData.cpp
- SimpleArrayProcessor.cpp
- SimpleArrayProcessor.h
- SimpleArrayProcessor2.cpp
- SimpleArrayProcessor2.h
- SinglePositioningSubtables.cpp
- SinglePositioningSubtables.h
- SingleSubstitutionSubtables.cpp
- SingleSubstitutionSubtables.h
- SingleTableProcessor.cpp
- SingleTableProcessor.h
- SingleTableProcessor2.cpp
- SingleTableProcessor2.h
- StateTableProcessor.cpp
- StateTableProcessor.h
- StateTableProcessor2.cpp
- StateTableProcessor2.h
- StateTables.h
- SubstitutionLookups.cpp
- SubstitutionLookups.h
- SubtableProcessor.cpp
- SubtableProcessor.h
- SubtableProcessor2.cpp
- SubtableProcessor2.h
- SunLayoutEngine.cpp
- ThaiLayoutEngine.cpp
- ThaiLayoutEngine.h
- ThaiShaping.cpp
- ThaiShaping.h
- ThaiStateTables.cpp
- TibetanLayoutEngine.cpp
- TibetanLayoutEngine.h
- TibetanReordering.cpp
- TibetanReordering.h
- TrimmedArrayProcessor.cpp
- TrimmedArrayProcessor.h
- TrimmedArrayProcessor2.cpp
- TrimmedArrayProcessor2.h
- ValueRecords.cpp
- ValueRecords.h
-
- DrawGlyphList.c
- FontInstanceAdapter.cpp
- FontInstanceAdapter.h
- HBShaper.c
- fontscaler.h
- freetypeScaler.c
- glyphblitting.h
- hb-jdk-font.cc
- hb-jdk.h
- scriptMapping.c
- scriptMapping.h
- sunFont.c
-
-
- imageioJPEG.c
- jcapimin.c
- jcapistd.c
- jccoefct.c
- jccolor.c
- jcdctmgr.c
- jchuff.c
- jchuff.h
- jcinit.c
- jcmainct.c
- jcmarker.c
- jcmaster.c
- jcomapi.c
- jconfig.h
- jcparam.c
- jcphuff.c
- jcprepct.c
- jcsample.c
- jctrans.c
- jdapimin.c
- jdapistd.c
- jdcoefct.c
- jdcolor.c
- jdct.h
- jddctmgr.c
- jdhuff.c
- jdhuff.h
- jdinput.c
- jdmainct.c
- jdmarker.c
- jdmaster.c
- jdmerge.c
- jdphuff.c
- jdpostct.c
- jdsample.c
- jdtrans.c
- jerror.c
- jerror.h
- jfdctflt.c
- jfdctfst.c
- jfdctint.c
- jidctflt.c
- jidctfst.c
- jidctint.c
- jidctred.c
- jinclude.h
- jmemmgr.c
- jmemnobs.c
- jmemsys.h
- jmorecfg.h
- jpegdecoder.c
- jpegint.h
- jpeglib.h
- jquant1.c
- jquant2.c
- jutils.c
- jversion.h
-
-
- Configure.h
- DirectAudio.h
- DirectAudioDevice.c
- DirectAudioDeviceProvider.c
- MidiInDevice.c
- MidiInDeviceProvider.c
- MidiOutDevice.c
- MidiOutDeviceProvider.c
- Platform.c
- PlatformMidi.c
- PlatformMidi.h
- PortMixer.c
- PortMixerProvider.c
- Ports.h
- SoundDefs.h
- Utilities.c
- Utilities.h
-
-
- LCMS.c
- cmsalpha.c
- cmscam02.c
- cmscgats.c
- cmscnvrt.c
- cmserr.c
- cmsgamma.c
- cmsgmt.c
- cmshalf.c
- cmsintrp.c
- cmsio0.c
- cmsio1.c
- cmslut.c
- cmsmd5.c
- cmsmtrx.c
- cmsnamed.c
- cmsopt.c
- cmspack.c
- cmspcs.c
- cmsplugin.c
- cmsps2.c
- cmssamp.c
- cmssm.c
- cmstypes.c
- cmsvirt.c
- cmswtpnt.c
- cmsxform.c
- lcms2.h
- lcms2_internal.h
- lcms2_plugin.h
-
-
- j2d_names.h
- mlib.h
- mlib_ImageAffine.c
- mlib_ImageAffine.h
- mlib_ImageAffineEdge.c
- mlib_ImageAffine_BC_D64.c
- mlib_ImageAffine_BC_F32.c
- mlib_ImageAffine_BC_S32.c
- mlib_ImageAffine_BL_D64.c
- mlib_ImageAffine_BL_F32.c
- mlib_ImageAffine_BL_S32.c
- mlib_ImageAffine_NN.c
- mlib_ImageAffine_NN_Bit.c
- mlib_ImageCheck.h
- mlib_ImageClipping.c
- mlib_ImageClipping.h
- mlib_ImageConv.h
- mlib_ImageConvClearEdge_Bit.c
- mlib_ImageConvClearEdge_Fp.c
- mlib_ImageConvCopyEdge_Bit.c
- mlib_ImageConvEdge.h
- mlib_ImageConvKernelConvert.c
- mlib_ImageConvMxN.c
- mlib_ImageConvMxN_Fp.c
- mlib_ImageConvMxN_ext.c
- mlib_ImageConv_16ext.c
- mlib_ImageConv_16nw.c
- mlib_ImageConv_32nw.c
- mlib_ImageConv_8ext.c
- mlib_ImageConv_8nw.c
- mlib_ImageConv_D64nw.c
- mlib_ImageConv_F32nw.c
- mlib_ImageConv_u16ext.c
- mlib_ImageConv_u16nw.c
- mlib_ImageCopy.h
- mlib_ImageCreate.h
- mlib_ImageDivTables.c
- mlib_ImageDivTables.h
- mlib_ImageFilters.c
- mlib_ImageFilters.h
- mlib_ImageLookUp.h
- mlib_ImageLookUp_64.c
- mlib_ImageLookUp_Bit.c
- mlib_ImageRowTable.h
- mlib_ImageScanPoly.c
- mlib_ImageUtils.c
- mlib_SysMath.h
- mlib_c_ImageAffine_BC.c
- mlib_c_ImageAffine_BC_S16.c
- mlib_c_ImageAffine_BC_U16.c
- mlib_c_ImageAffine_BL.c
- mlib_c_ImageAffine_BL_S16.c
- mlib_c_ImageAffine_BL_U16.c
- mlib_c_ImageAffine_NN.c
- mlib_c_ImageConv.h
- mlib_c_ImageConvClearEdge.c
- mlib_c_ImageConvCopyEdge.c
- mlib_c_ImageConvVersion.c
- mlib_c_ImageConv_f.c
- mlib_c_ImageCopy.c
- mlib_c_ImageLookUp.c
- mlib_c_ImageLookUp.h
- mlib_c_ImageLookUp_f.c
- mlib_image.h
- mlib_image_get.h
- mlib_image_proto.h
- mlib_image_types.h
- mlib_status.h
- mlib_sys.h
- mlib_sys_proto.h
- mlib_types.h
- safe_alloc.h
- safe_math.h
-
-
-
- dgif_lib.c
- gif_err.c
- gif_hash.h
- gif_lib.h
- gif_lib_private.h
- gifalloc.c
- openbsd-reallocarray.c
-
-
- png.c
- png.h
- pngconf.h
- pngdebug.h
- pngerror.c
- pngget.c
- pnginfo.h
- pnglibconf.h
- pngmem.c
- pngpread.c
- pngpriv.h
- pngread.c
- pngrio.c
- pngrtran.c
- pngrutil.c
- pngset.c
- pngstruct.h
- pngtrans.c
-
- java_awt_SplashScreen.c
- splashscreen_gfx.h
- splashscreen_gfx_impl.c
- splashscreen_gfx_impl.h
- splashscreen_gif.c
- splashscreen_impl.c
- splashscreen_impl.h
- splashscreen_jpeg.c
- splashscreen_png.c
-
-
-
-
-
-
-
-
-
- Modality.txt
-
- keysym2ucs.h
-
-
-
-
-
-
-
-
- mlib_v_ImageCopy_f.c
- mlib_v_ImageCopy_f.h
- vis_proto.h
-
-
- systemScale.c
- systemScale.h
-
-
- rect.h
-
- CUPSfuncs.c
- X11Color.c
- awt.h
- awt_Component.h
- awt_DrawingSurface.h
- awt_Font.c
- awt_Font.h
- awt_GraphicsEnv.h
- awt_Mlib.h
- awt_p.h
- awt_util.h
- color.h
- colordata.h
- fontconfig.h
- fontpath.c
- img_util_md.h
-
-
- X11FontScaler.h
-
-
-
-
- glx.h
- glxext.h
-
- GLXGraphicsConfig.c
- GLXGraphicsConfig.h
- GLXSurfaceData.c
- GLXSurfaceData.h
- OGLFuncs_md.h
-
-
- X11FontScaler_md.c
- X11PMBlitLoops.c
- X11Renderer.c
- X11SurfaceData.c
- X11SurfaceData.h
- X11TextRenderer_md.c
-
-
-
-
- jawt_md.h
-
-
-
- awt_LoadLibrary.c
- awt_Mlib.c
- initIDs.c
-
-
-
- java2d_Mlib.c
- java2d_Mlib.h
- mlib_ImageCopy.h
- mlib_ImageLogic_proto.h
- mlib_ImageZoom.h
- mlib_ImageZoom_NN.c
- mlib_v_ImageClear.c
- mlib_v_ImageClear_f.c
- mlib_v_ImageClear_f.h
- mlib_v_ImageConstLogic.h
- mlib_v_ImageConstXor.c
- mlib_v_ImageLogic.h
- mlib_v_ImageLogic_proto.h
- mlib_v_ImageXor.c
- mlib_v_ImageZoom_NN_f.c
- vis_AlphaMacros.c
- vis_AlphaMacros.h
- vis_AlphaMaskBlit.c
- vis_AlphaMaskFill.c
- vis_ByteGray.c
- vis_ByteGray_FromRgb.c
- vis_ByteGray_Mask.c
- vis_ByteIndexed.c
- vis_DrawLine.c
- vis_FourByteAbgr.c
- vis_FourByteAbgrPre.c
- vis_FuncArray.c
- vis_GlyphList.c
- vis_GlyphListXor.c
- vis_IntArgb.c
- vis_IntArgbBm.c
- vis_IntArgbPre.c
- vis_IntArgbPre_Mask.c
- vis_IntBgr.c
- vis_IntRgb.c
- vis_IntRgbx.c
- vis_Interp.c
- vis_SrcMaskFill.c
- vis_SrcOverMaskBlit.c
- vis_SrcOverMaskFill.c
- vis_ThreeByteBgr.c
- vis_UshortGray.c
- vis_UshortGray_FromRgb.c
- vis_XorBlit.c
-
- j2d_md.h
-
-
-
-
- HeadlessToolkit.c
-
-
-
-
- HPkeysym.h
- Xrandr.h
- awt_AWTEvent.c
- awt_AWTEvent.h
- awt_DrawingSurface.c
- awt_Event.c
- awt_Event.h
- awt_GraphicsEnv.c
- awt_InputMethod.c
- awt_Insets.c
- awt_Insets.h
- awt_MenuComponent.h
- awt_Robot.c
- awt_UNIXToolkit.c
- awt_util.c
- canvas.h
- gtk2_interface.c
- gtk2_interface.h
- gtk3_interface.c
- gtk3_interface.h
- gtk_interface.c
- gtk_interface.h
- list.c
- list.h
- multiVis.c
- multiVis.h
- multi_font.c
- multi_font.h
- randr.h
- robot_common.c
- robot_common.h
- sun_awt_X11_GtkFileDialogPeer.c
- swing_GTKEngine.c
- swing_GTKStyle.c
- wsutils.h
-
-
-
- XRBackendNative.c
- XRSurfaceData.c
-
-
-
- XToolkit.c
- XWindow.c
- XlibWrapper.c
- awt_Desktop.c
- awt_Taskbar.c
- awt_Taskbar.h
- gnome_interface.c
- gnome_interface.h
-
-
-
- X11FontScaler.c
- X11TextRenderer.c
-
-
- jawt.c
-
-
- PLATFORM_API_BsdOS_ALSA_CommonUtils.c
- PLATFORM_API_BsdOS_ALSA_CommonUtils.h
- PLATFORM_API_BsdOS_ALSA_MidiIn.c
- PLATFORM_API_BsdOS_ALSA_MidiOut.c
- PLATFORM_API_BsdOS_ALSA_MidiUtils.c
- PLATFORM_API_BsdOS_ALSA_MidiUtils.h
- PLATFORM_API_BsdOS_ALSA_PCM.c
- PLATFORM_API_BsdOS_ALSA_PCMUtils.c
- PLATFORM_API_BsdOS_ALSA_PCMUtils.h
- PLATFORM_API_BsdOS_ALSA_Ports.c
- PLATFORM_API_LinuxOS_ALSA_CommonUtils.c
- PLATFORM_API_LinuxOS_ALSA_CommonUtils.h
- PLATFORM_API_LinuxOS_ALSA_MidiIn.c
- PLATFORM_API_LinuxOS_ALSA_MidiOut.c
- PLATFORM_API_LinuxOS_ALSA_MidiUtils.c
- PLATFORM_API_LinuxOS_ALSA_MidiUtils.h
- PLATFORM_API_LinuxOS_ALSA_PCM.c
- PLATFORM_API_LinuxOS_ALSA_PCMUtils.c
- PLATFORM_API_LinuxOS_ALSA_PCMUtils.h
- PLATFORM_API_LinuxOS_ALSA_Ports.c
- PLATFORM_API_SolarisOS_PCM.c
- PLATFORM_API_SolarisOS_Ports.c
- PLATFORM_API_SolarisOS_Utils.c
- PLATFORM_API_SolarisOS_Utils.h
-
-
- mlib_ImageConvCopyEdge_Fp.c
- mlib_v_ImageAffine_BC.c
- mlib_v_ImageAffine_BC_S16.c
- mlib_v_ImageAffine_BC_U16.c
- mlib_v_ImageAffine_BL.c
- mlib_v_ImageAffine_BL_S16.c
- mlib_v_ImageAffine_BL_S16.h
- mlib_v_ImageAffine_BL_U16.c
- mlib_v_ImageAffine_NN.c
- mlib_v_ImageChannelExtract.h
- mlib_v_ImageChannelExtract_1.c
- mlib_v_ImageChannelExtract_43.c
- mlib_v_ImageChannelInsert.h
- mlib_v_ImageChannelInsert_1.c
- mlib_v_ImageConv.h
- mlib_v_ImageConvClearEdge.c
- mlib_v_ImageConvCopyEdge.c
- mlib_v_ImageConvMxN_8.c
- mlib_v_ImageConvMxN_8ext.c
- mlib_v_ImageConvVersion.c
- mlib_v_ImageConv_8nw.c
- mlib_v_ImageFilters.c
- mlib_v_ImageFilters.h
- mlib_v_ImageLookUp.c
- mlib_v_ImageLookUpFunc.h
- mlib_v_ImageLookUpS16S16Func.c
- mlib_v_ImageLookUpS16S32Func.c
- mlib_v_ImageLookUpS16U16Func.c
- mlib_v_ImageLookUpS16U8Func.c
- mlib_v_ImageLookUpS32S16Func.c
- mlib_v_ImageLookUpS32S32Func.c
- mlib_v_ImageLookUpS32U16Func.c
- mlib_v_ImageLookUpS32U8Func.c
- mlib_v_ImageLookUpSIS16S16Func.c
- mlib_v_ImageLookUpSIS16S32Func.c
- mlib_v_ImageLookUpSIS16U16Func.c
- mlib_v_ImageLookUpSIS16U8Func.c
- mlib_v_ImageLookUpSIS32S16Func.c
- mlib_v_ImageLookUpSIS32S32Func.c
- mlib_v_ImageLookUpSIS32U16Func.c
- mlib_v_ImageLookUpSIS32U8Func.c
- mlib_v_ImageLookUpSIU16S16Func.c
- mlib_v_ImageLookUpSIU16S32Func.c
- mlib_v_ImageLookUpSIU16U16Func.c
- mlib_v_ImageLookUpSIU16U8Func.c
- mlib_v_ImageLookUpSIU8S16Func.c
- mlib_v_ImageLookUpSIU8S32Func.c
- mlib_v_ImageLookUpSIU8U16Func.c
- mlib_v_ImageLookUpSIU8U8Func.c
- mlib_v_ImageLookUpU16S16Func.c
- mlib_v_ImageLookUpU16S32Func.c
- mlib_v_ImageLookUpU16U16Func.c
- mlib_v_ImageLookUpU16U8Func.c
- mlib_v_ImageLookUpU8S16Func.c
- mlib_v_ImageLookUpU8S32Func.c
- mlib_v_ImageLookUpU8U16Func.c
- mlib_v_ImageLookUpU8U8Func.c
- vis_32.il
- vis_64.il
-
-
- splashscreen_config.h
- splashscreen_sys.c
-
-
-
-
-
-
-
-
- systemScale.cpp
- systemScale.h
-
-
- rect.h
-
-
- awt_makecube.cpp
-
-
- jawt_md.h
-
-
-
-
- D3DBadHardware.h
- D3DBlitLoops.cpp
- D3DBlitLoops.h
- D3DBufImgOps.cpp
- D3DBufImgOps.h
- D3DContext.cpp
- D3DContext.h
- D3DGlyphCache.cpp
- D3DGlyphCache.h
- D3DGraphicsDevice.cpp
- D3DGraphicsDevice.h
- D3DMaskBlit.cpp
- D3DMaskBlit.h
- D3DMaskCache.cpp
- D3DMaskCache.h
- D3DMaskFill.cpp
- D3DMaskFill.h
- D3DPaints.cpp
- D3DPaints.h
- D3DPipeline.h
- D3DPipelineManager.cpp
- D3DPipelineManager.h
- D3DRenderQueue.cpp
- D3DRenderQueue.h
- D3DRenderer.cpp
- D3DRenderer.h
- D3DResourceManager.cpp
- D3DResourceManager.h
- D3DShaderGen.c
- D3DShaders.h
- D3DSurfaceData.cpp
- D3DSurfaceData.h
- D3DTextRenderer.cpp
- D3DTextRenderer.h
- D3DVertexCacher.cpp
- D3DVertexCacher.h
- ShaderList.c
- ShaderList.h
-
-
-
- wglext.h
-
- OGLFuncs_md.h
- WGLGraphicsConfig.c
- WGLGraphicsConfig.h
- WGLSurfaceData.c
- WGLSurfaceData.h
-
-
- GDIBlitLoops.cpp
- GDIRenderer.cpp
- GDIWindowSurfaceData.cpp
- GDIWindowSurfaceData.h
- WindowsFlags.cpp
- WindowsFlags.h
-
- j2d_md.h
-
-
- CmdIDList.cpp
- CmdIDList.h
- ComCtl32Util.cpp
- ComCtl32Util.h
- Devices.cpp
- Devices.h
- DllUtil.cpp
- DllUtil.h
- GDIHashtable.cpp
- GDIHashtable.h
- Hashtable.cpp
- Hashtable.h
- MouseInfo.cpp
- ObjectList.cpp
- ObjectList.h
- ShellFolder2.cpp
- ThemeReader.cpp
- WPrinterJob.cpp
- alloc.h
- awt.h
- awt_AWTEvent.cpp
- awt_AWTEvent.h
- awt_BitmapUtil.cpp
- awt_BitmapUtil.h
- awt_Brush.cpp
- awt_Brush.h
- awt_Button.cpp
- awt_Button.h
- awt_Canvas.cpp
- awt_Canvas.h
- awt_Checkbox.cpp
- awt_Checkbox.h
- awt_Choice.cpp
- awt_Choice.h
- awt_Clipboard.cpp
- awt_Clipboard.h
- awt_Color.cpp
- awt_Color.h
- awt_Component.cpp
- awt_Component.h
- awt_Container.cpp
- awt_Container.h
- awt_Cursor.cpp
- awt_Cursor.h
- awt_CustomPaletteDef.h
- awt_DCHolder.cpp
- awt_DCHolder.h
- awt_DataTransferer.cpp
- awt_DataTransferer.h
- awt_Debug.cpp
- awt_Debug.h
- awt_Desktop.cpp
- awt_DesktopProperties.cpp
- awt_DesktopProperties.h
- awt_Dialog.cpp
- awt_Dialog.h
- awt_Dimension.cpp
- awt_Dimension.h
- awt_DnDDS.cpp
- awt_DnDDS.h
- awt_DnDDT.cpp
- awt_DnDDT.h
- awt_DrawingSurface.cpp
- awt_DrawingSurface.h
- awt_Event.cpp
- awt_Event.h
- awt_FileDialog.cpp
- awt_FileDialog.h
- awt_Font.cpp
- awt_Font.h
- awt_Frame.cpp
- awt_Frame.h
- awt_GDIObject.cpp
- awt_GDIObject.h
- awt_IconCursor.cpp
- awt_IconCursor.h
- awt_InputEvent.cpp
- awt_InputEvent.h
- awt_InputMethod.cpp
- awt_InputTextInfor.cpp
- awt_InputTextInfor.h
- awt_Insets.cpp
- awt_Insets.h
- awt_KeyEvent.cpp
- awt_KeyEvent.h
- awt_KeyboardFocusManager.cpp
- awt_Label.cpp
- awt_Label.h
- awt_List.cpp
- awt_List.h
- awt_Menu.cpp
- awt_Menu.h
- awt_MenuBar.cpp
- awt_MenuBar.h
- awt_MenuItem.cpp
- awt_MenuItem.h
- awt_Mlib.cpp
- awt_Mlib.h
- awt_MouseEvent.cpp
- awt_MouseEvent.h
- awt_Object.cpp
- awt_Object.h
- awt_Palette.cpp
- awt_Palette.h
- awt_Panel.cpp
- awt_Panel.h
- awt_Pen.cpp
- awt_Pen.h
- awt_PopupMenu.cpp
- awt_PopupMenu.h
- awt_PrintControl.cpp
- awt_PrintControl.h
- awt_PrintDialog.cpp
- awt_PrintDialog.h
- awt_PrintJob.cpp
- awt_Rectangle.cpp
- awt_Rectangle.h
- awt_Robot.cpp
- awt_Robot.h
- awt_ScrollPane.cpp
- awt_ScrollPane.h
- awt_Scrollbar.cpp
- awt_Scrollbar.h
- awt_Taskbar.cpp
- awt_Taskbar.h
- awt_TextArea.cpp
- awt_TextArea.h
- awt_TextComponent.cpp
- awt_TextComponent.h
- awt_TextField.cpp
- awt_TextField.h
- awt_Toolkit.cpp
- awt_Toolkit.h
- awt_TrayIcon.cpp
- awt_TrayIcon.h
- awt_Win32GraphicsConfig.cpp
- awt_Win32GraphicsConfig.h
- awt_Win32GraphicsDevice.cpp
- awt_Win32GraphicsDevice.h
- awt_Win32GraphicsEnv.cpp
- awt_Window.cpp
- awt_Window.h
- awt_new.cpp
- awt_new.h
- awt_ole.cpp
- awt_ole.h
- awtmsg.h
- colordata.h
- img_util_md.h
- initIDs.cpp
- mlib_types_md.h
- stdhdrs.h
-
-
-
- fontpath.c
- lcdglyph.c
-
-
- jawt.cpp
-
-
- PLATFORM_API_WinOS_Charset_Util.cpp
- PLATFORM_API_WinOS_Charset_Util.h
- PLATFORM_API_WinOS_DirectSound.cpp
- PLATFORM_API_WinOS_MidiIn.cpp
- PLATFORM_API_WinOS_MidiOut.c
- PLATFORM_API_WinOS_Ports.c
- PLATFORM_API_WinOS_Util.c
- PLATFORM_API_WinOS_Util.h
-
-
- splashscreen_config.h
- splashscreen_sys.c
-
-
-
-
-
-
-
-
- EncodingSupport.c
- EncodingSupport.h
- FileSystemSupport.h
- InstrumentationImplNativeMethods.c
- InvocationAdapter.c
- JPLISAgent.c
- JPLISAgent.h
- JPLISAssert.c
- JPLISAssert.h
- JarFacade.c
- JarFacade.h
- JavaExceptions.c
- JavaExceptions.h
- PathCharsValidator.c
- PathCharsValidator.h
- Reentrancy.c
- Reentrancy.h
- Utilities.c
- Utilities.h
-
-
-
-
-
-
- EncodingSupport_md.c
- FileSystemSupport_md.c
- FileSystemSupport_md.h
-
-
-
-
-
-
- EncodingSupport_md.c
- FileSystemSupport_md.c
- FileSystemSupport_md.h
-
-
-
-
-
-
-
-
- jmm.h
-
-
- ClassLoadingImpl.c
- GarbageCollectorImpl.c
- HotspotThread.c
- MemoryImpl.c
- MemoryManagerImpl.c
- MemoryPoolImpl.c
- ThreadImpl.c
- VMManagementImpl.c
- management.c
- management.h
-
-
-
-
-
-
-
-
- MacOSXPreferencesFile.m
-
-
-
-
-
-
- FileSystemPreferences.c
-
-
-
-
-
-
- WindowsPreferences.c
-
-
-
-
-
-
-
-
- GC.c
-
-
-
-
-
-
-
-
- SCDynamicStoreConfig.m
- nativeccache.c
-
-
-
-
-
-
- GSSLibStub.c
- NativeUtil.c
- NativeUtil.h
- gssapi.h
-
-
-
-
-
-
- NativeFunc.c
- NativeFunc.h
-
-
-
-
-
-
- NativeCreds.c
- WindowsDirectory.c
-
-
-
-
-
-
-
-
- pcsc.c
-
-
-
-
-
-
-
- pcsclite.h
- winscard.h
-
- pcsc_md.c
- pcsc_md.h
-
-
-
-
-
-
- pcsc_md.c
- pcsc_md.h
-
-
-
-
-
-
-
-
- AccessBridgeCalls.c
-
-
- AccessBridgeDebug.cpp
- AccessBridgeDebug.h
- AccessBridgeMessages.cpp
- AccessBridgeMessages.h
- accessBridgeResource.h
- resource.h
-
-
-
- AccessBridgeCallbacks.h
- AccessBridgeCalls.h
- AccessBridgePackages.h
-
-
-
- jabswitch.cpp
-
-
- MessageHistory.cpp
- MessageHistory.h
- jaccessinspector.cpp
- jaccessinspector.h
- jaccessinspectorResource.h
-
-
- jaccesswalker.cpp
- jaccesswalker.h
- jaccesswalkerResource.h
-
-
- AccessBridgeSysInfo.cpp
-
-
- AccessBridgeATInstance.cpp
- AccessBridgeATInstance.h
- AccessBridgeJavaEntryPoints.cpp
- AccessBridgeJavaEntryPoints.h
- JavaAccessBridge.cpp
- JavaAccessBridge.h
-
-
- AccessBridgeEventHandler.cpp
- AccessBridgeEventHandler.h
- AccessBridgeJavaVMInstance.cpp
- AccessBridgeJavaVMInstance.h
- AccessBridgeMessageQueue.cpp
- AccessBridgeMessageQueue.h
- AccessBridgeWindowsEntryPoints.cpp
- AccessBridgeWindowsEntryPoints.h
- WinAccessBridge.cpp
- WinAccessBridge.h
-
-
- AccessInfo.cpp
- AccessInfo.h
-
-
-
-
-
-
-
-
- VirtualMachineImpl.c
-
-
-
-
-
-
- VirtualMachineImpl.c
-
-
-
-
-
-
- VirtualMachineImpl.c
-
-
-
-
-
-
- VirtualMachineImpl.c
-
-
-
-
-
-
- AttachProviderImpl.c
- VirtualMachineImpl.c
-
-
-
-
-
-
-
-
- j2secmod.c
- j2secmod.h
- p11_convert.c
- p11_crypt.c
- p11_digest.c
- p11_dual.c
- p11_general.c
- p11_keymgmt.c
- p11_mutex.c
- p11_objmgmt.c
- p11_sessmgmt.c
- p11_sign.c
- p11_util.c
- pkcs-11v2-20a3.h
- pkcs11.h
- pkcs11f.h
- pkcs11t.h
- pkcs11wrapper.h
-
-
-
-
-
-
- j2secmod_md.c
- j2secmod_md.h
- p11_md.c
- p11_md.h
-
-
-
-
-
-
- j2secmod_md.c
- j2secmod_md.h
- p11_md.c
- p11_md.h
-
-
-
-
-
-
-
-
-
- ec.c
- ec.h
- ec2.h
- ec2_163.c
- ec2_193.c
- ec2_233.c
- ec2_aff.c
- ec2_mont.c
- ec_naf.c
- ecc_impl.h
- ecdecode.c
- ecl-curve.h
- ecl-exp.h
- ecl-priv.h
- ecl.c
- ecl.h
- ecl_curve.c
- ecl_gf.c
- ecl_mult.c
- ecp.h
- ecp_192.c
- ecp_224.c
- ecp_256.c
- ecp_384.c
- ecp_521.c
- ecp_aff.c
- ecp_jac.c
- ecp_jm.c
- ecp_mont.c
- logtab.h
- mp_gf2m-priv.h
- mp_gf2m.c
- mp_gf2m.h
- mpi-config.h
- mpi-priv.h
- mpi.c
- mpi.h
- mplogic.c
- mplogic.h
- mpmontg.c
- mpprime.h
- oid.c
- secitem.c
- secoidt.h
-
- ECC_JNI.cpp
-
-
-
-
-
-
-
-
- security.cpp
-
-
-
-
-
-
-
-
- nativeCrypto.c
- nativeCrypto.h
- nativeCryptoMD.c
- nativeFunc.c
- nativeFunc.h
-
-
-
-
-
-
-
-
- LinuxDebuggerLocal.c
- elfmacros.h
- libproc.h
- libproc_impl.c
- libproc_impl.h
- proc_service.h
- ps_core.c
- ps_proc.c
- salibelf.c
- salibelf.h
- symtab.c
- symtab.h
- test.c
-
-
-
-
-
-
- BsdDebuggerLocal.c
- MacosxDebuggerLocal.m
- StubDebuggerLocal.c
- elfmacros.h
- libproc.h
- libproc_impl.c
- libproc_impl.h
- ps_core.c
- ps_proc.c
- salibelf.c
- salibelf.h
- symtab.c
- symtab.h
- test.c
-
-
-
-
-
-
- sadis.c
-
-
-
-
-
-
- libproc.h
- salibproc.h
- saproc.cpp
- saproc_audit.cpp
-
-
-
-
-
-
- sawindbg.cpp
-
-
-
-
-
-
-
-
- WindowsTerminal.cpp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- CompilationBailoutActionHelp.txt
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- DumpHelp.txt
- MethodFilterHelp.txt
- MetricsFileHelp.txt
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- BenchmarkDynamicCountersHelp.txt
-
-
-
-
- ProfileAllocationsContextHelp.txt
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- jdk8_internals.txt
-
-
-
-
-
-
-
-
-
-
-
-
- SharedMemory.h
- SharedMemoryConnection.c
- SharedMemoryTransport.c
- shmemBack.c
- shmemBase.c
- shmemBase.h
- sysShmem.h
-
-
-
-
-
-
- shmem_md.c
- shmem_md.h
-
-
-
-
-
-
-
-
- jdwpTransport.h
-
-
- socketTransport.c
- socketTransport.h
- sysSocket.h
-
-
-
- sys.h
-
- ArrayReferenceImpl.c
- ArrayReferenceImpl.h
- ArrayTypeImpl.c
- ArrayTypeImpl.h
- ClassLoaderReferenceImpl.c
- ClassLoaderReferenceImpl.h
- ClassObjectReferenceImpl.c
- ClassObjectReferenceImpl.h
- ClassTypeImpl.c
- ClassTypeImpl.h
- EventRequestImpl.c
- EventRequestImpl.h
- FieldImpl.c
- FieldImpl.h
- FrameID.c
- FrameID.h
- InterfaceTypeImpl.c
- InterfaceTypeImpl.h
- JDWP.h
- MethodImpl.c
- MethodImpl.h
- ModuleReferenceImpl.c
- ModuleReferenceImpl.h
- ObjectReferenceImpl.c
- ObjectReferenceImpl.h
- ReferenceTypeImpl.c
- ReferenceTypeImpl.h
- SDE.c
- SDE.h
- StackFrameImpl.c
- StackFrameImpl.h
- StringReferenceImpl.c
- StringReferenceImpl.h
- ThreadGroupReferenceImpl.c
- ThreadGroupReferenceImpl.h
- ThreadReferenceImpl.c
- ThreadReferenceImpl.h
- VirtualMachineImpl.c
- VirtualMachineImpl.h
- bag.c
- bag.h
- classTrack.c
- classTrack.h
- commonRef.c
- commonRef.h
- debugDispatch.c
- debugDispatch.h
- debugInit.c
- debugInit.h
- debugLoop.c
- debugLoop.h
- error_messages.c
- error_messages.h
- eventFilter.c
- eventFilter.h
- eventFilterRestricted.h
- eventHandler.c
- eventHandler.h
- eventHandlerRestricted.h
- eventHelper.c
- eventHelper.h
- inStream.c
- inStream.h
- invoker.c
- invoker.h
- log_messages.c
- log_messages.h
- outStream.c
- outStream.h
- standardHandlers.c
- standardHandlers.h
- stepControl.c
- stepControl.h
- stream.c
- stream.h
- threadControl.c
- threadControl.h
- transport.c
- transport.h
- utf_util.c
- utf_util.h
- util.c
- util.h
- vm_interface.h
-
-
-
-
-
-
- socket_md.c
- socket_md.h
-
-
- exec_md.c
- linker_md.c
- path_md.h
- proc_md.h
- util_md.h
-
-
-
-
-
-
- socket_md.c
- socket_md.h
-
-
- exec_md.c
- linker_md.c
- mutex_md.h
- path_md.h
- proc_md.h
- util_md.h
-
-
-
-
-
-
-
-
-
-
-
- unicode-license.txt
-
-
-
-
-
-
-
-
-
-
-
- UnixOperatingSystem.c
-
-
-
-
-
-
- UnixOperatingSystem.c
-
-
-
-
-
-
- UnixOperatingSystem.c
-
-
-
-
-
-
- DiagnosticCommandImpl.c
- Flag.c
- GarbageCollectorExtImpl.c
- GcInfoBuilder.c
- HotSpotDiagnostic.c
- management_ext.c
- management_ext.h
-
-
-
-
-
-
- UnixOperatingSystem.c
-
-
-
-
-
-
- OperatingSystemImpl.c
-
-
-
-
-
-
- OperatingSystemImpl.c
-
-
-
-
-
-
-
-
- FileSystemImpl.c
-
-
-
-
-
-
- FileSystemImpl.c
-
-
-
-
-
-
-
-
- SolarisSocketOptions.c
- SolarisSocketOptions.h
-
-
-
-
-
-
-
-
- bands.cpp
- bands.h
- bytes.cpp
- bytes.h
- coding.cpp
- coding.h
- constants.h
- defines.h
- unpack.cpp
- unpack.h
- utils.cpp
- utils.h
- zip.cpp
- zip.h
-
-
- jni.cpp
-
-
- main.cpp
-
-
-
-
-
-
-
-
- Sctp.h
- SctpChannelImpl.c
- SctpNet.c
- SctpServerChannelImpl.c
-
-
-
-
-
-
-
-
- Unix.c
-
-
-
-
-
-
- nt.c
-
-
-
-
-
-
- Main.asm
-
-
-
-
- hsdis-demo.c
- hsdis.c
- hsdis.h
-
-
-
- mcount.c
- remove_mcount.c
- util-i586.il
- util-sparc.il
- util-sparcv9.il
-
-
-
-
-
-
-
-
-
-
- GatherProcessInfoTimeoutHandler.c
-
-
-
-
-
-
-
-
-
-
- gtest-death-test-internal.h
- gtest-filepath.h
- gtest-internal.h
- gtest-linked_ptr.h
- gtest-param-util-generated.h
- gtest-param-util.h
- gtest-port.h
- gtest-string.h
- gtest-tuple.h
- gtest-type-util.h
-
- gtest-death-test.h
- gtest-message.h
- gtest-param-test.h
- gtest-printers.h
- gtest-spi.h
- gtest-test-part.h
- gtest-typed-test.h
- gtest.h
- gtest_pred_impl.h
- gtest_prod.h
-
-
-
- gtest-all.cc
- gtest-death-test.cc
- gtest-filepath.cc
- gtest-internal-inl.h
- gtest-port.cc
- gtest-printers.cc
- gtest-test-part.cc
- gtest-typed-test.cc
- gtest.cc
- gtest_main.cc
-
-
-
-
-
-
- test_AltHashing.cpp
- test_symbolTable.cpp
-
-
- test_dependencyContext.cpp
-
-
-
- test_bufferingOopClosure.cpp
- test_freeRegionList.cpp
- test_g1BiasedArray.cpp
- test_g1CodeCacheRemSet.cpp
- test_g1IHOPControl.cpp
- test_g1Predictions.cpp
-
-
- test_psAdaptiveSizePolicy.cpp
- test_psParallelCompact.cpp
-
-
- test_collectedHeap.cpp
- test_collectorPolicy.cpp
- test_memset_with_concurrent_readers.cpp
- test_workerDataArray.cpp
-
-
-
- logTestFixture.cpp
- logTestFixture.hpp
- logTestUtils.inline.hpp
- test_gcTraceTime.cpp
- test_log.cpp
- test_logConfiguration.cpp
- test_logDecorations.cpp
- test_logDecorators.cpp
- test_logFileOutput.cpp
- test_logLevel.cpp
- test_logMessageTest.cpp
- test_logOutputList.cpp
- test_logStream.cpp
- test_logTag.cpp
- test_logTagLevelExpression.cpp
- test_logTagSet.cpp
- test_logTagSetDescriptions.cpp
-
-
- test_chunkManager.cpp
- test_guardedMemory.cpp
- test_metachunk.cpp
- test_spaceManager.cpp
-
-
- test_conditional.cpp
- test_decay.cpp
- test_enableIf.cpp
- test_isConst.cpp
- test_isFloatingPoint.cpp
- test_isIntegral.cpp
- test_isPointer.cpp
- test_isRegisteredEnum.cpp
- test_isSame.cpp
- test_isSigned.cpp
- test_isVolatile.cpp
- test_primitiveConversions.cpp
- test_removeCV.cpp
- test_removePointer.cpp
- test_removeReference.cpp
-
-
- test_arrayOop.cpp
- test_instanceKlass.cpp
-
-
- test_arguments.cpp
- test_classLoader.cpp
- test_globals.cpp
- test_os.cpp
- test_semaphore.cpp
- test_vmStructs.cpp
-
-
- test_align.cpp
- test_bitMap.cpp
- test_bitMap_search.cpp
- test_bitMap_setops.cpp
- test_chunkedList.cpp
- test_count_trailing_zeros.cpp
- test_globalDefinitions.cpp
- test_json.cpp
- test_linkedlist.cpp
- test_quicksort.cpp
- test_resourceHash.cpp
- test_utf8.cpp
-
- gtestLauncher.cpp
- gtestMain.cpp
- unittest.hpp
-
-
-
-
-
- java.base-list.txt
- jdk.internal.vm.compiler-list.txt
- jdk.scripting.nashorn-list.txt
-
-
-
-
- input6890943.txt
- output6890943.txt
-
-
-
-
- libCallsNative.c
-
- libTestDirtyInt.c
-
-
- control_off.txt
- control_on.txt
-
-
- libTestFloatJNIArgs.c
-
-
-
- libNativeCallTest.c
-
-
-
- command1.txt
- command2.txt
-
-
-
-
- libTestCSLocker.c
-
-
-
- libTestJNIWeakG1.c
-
-
-
-
- libTestGCLocker.c
-
-
-
-
- libJniVersion.c
-
-
-
- libNativeSmallIntCalls.c
-
-
- flagfile.txt
-
-
- libtest-rw.c
- libtest-rwx.c
-
-
-
- libUninitializedStrings.c
-
-
- libDefaultMethods.c
-
-
- exeFPRegs.c
-
-
- libCallWithJNIWeak.c
-
-
- libTestCheckedJniExceptionCheck.c
-
-
- libPrivateInterfaceMethods.c
-
-
- libReturnJNIWeak.c
-
-
- libToStringTest.c
-
-
-
- libTestJNI.c
-
-
- liboverflow.c
-
-
-
- libGetModule.c
-
-
-
- libNoClassDefFoundMsg.c
-
-
- libRedefineDoubleDelete.c
-
-
- libSameObject.c
-
-
- exeinvoke.c
-
-
- exeThreadSignalMask.c
-
-
-
-
-
- control1.txt
- control2.txt
-
-
-
-
- libAddModuleExportsAndOpensTest.c
-
-
- libAddModuleReadsTest.c
-
-
- libAddModuleUsesAndProvidesTest.c
-
-
- libJvmtiGetAllModulesTest.c
-
-
- libGetNamedModuleTest.c
-
-
- libGetOwnedMonitorInfoTest.c
-
-
- libIsModifiableModuleTest.c
-
-
- libHeapMonitorTest.c
-
-
- libVMEventTest.c
-
-
-
- libMAAClassFileLoadHook.c
-
-
- libMAAClassLoadPrepare.c
-
-
- libMAAThreadStart.c
-
-
-
-
- libAllowedFunctions.c
-
-
-
-
-
-
- libSimpleClassFileLoadHook.c
-
-
- ProblemList.txt
-
-
-
-
-
-
-
-
-
-
-
- Bug4858685.txt
-
-
-
-
-
-
-
-
- nodetest1.txt
-
-
-
-
- replace1.txt
-
-
- replace1.txt
- replace2.txt
-
-
-
-
-
-
- ProblemList.txt
-
-
-
-
-
-
-
-
-
- plain0.txt
- plain1.txt
- plain10.txt
- plain2.txt
- plain3.txt
- plain4.txt
- plain5.txt
- plain6.txt
- plain7.txt
- plain8.txt
- plain9.txt
-
-
-
- oaep-vect.txt
-
-
-
- keymatdata.txt
- masterdata.txt
- prf12data.txt
- prfdata.txt
-
-
-
-
-
-
-
- largefile.txt
- smallfile.txt
-
-
-
-
-
-
-
-
-
- myfile.c
- myfile.cpp
-
-
-
-
- SkipInput.txt
-
-
-
- input.txt
-
-
-
- input.txt
-
-
- SkipInput.txt
-
-
- input.txt
-
-
-
-
- PropList.txt
- PropertyValueAliases.txt
- Scripts.txt
-
-
-
- libstringPlatformChars.c
-
-
-
- locales.txt
-
-
-
-
-
-
- foo.txt
- notsobigfile.txt
- smallfile.txt
-
-
-
-
-
- Readme.txt
-
-
-
-
-
-
-
-
- Launcher.c
-
-
-
-
-
-
-
- broken_th_TH.txt
- test_th_TH.txt
-
-
-
- Bug4185732.ser.txt
-
-
- ChoiceFormat.ser.txt
- DateFormat.Field.ser.txt
- MessageFormat.Field.ser.txt
- NumberFormat.Field.ser.txt
-
-
- SDFserialized.ser.txt
-
-
- Bug4185816.ser.txt
- Bug4185816Corrupt.ser.txt
-
-
- DecimalFormat.114.txt
- DecimalFormatSymbols.114.txt
- DecimalFormatSymbols.142.txt
- NumberFormat4185761a.ser.txt
- NumberFormat4185761b.ser.txt
-
-
-
-
-
- baseEncode.txt
- mimeEncode.txt
- plain.txt
- urlEncode.txt
-
-
- tablea1.txt
-
-
-
- deflocale.c
-
- icuLocales.txt
-
-
-
- README.txt
-
-
-
- BMPTestCases.txt
- GraphemeBreakProperty.txt
- GraphemeBreakTest.txt
- SupplementaryTestCases.txt
- TestCases.txt
-
-
- input.txt
-
-
-
-
-
-
-
- NIST_800_38A_vectors.txt
-
-
-
- README.txt
-
-
-
-
-
-
- RandomGen.c
- RandomGen.h
-
-
-
-
-
-
-
- sample.txt
-
-
-
-
-
-
- bug4697612.txt
-
-
-
-
- DemandGTK2.txt
-
-
-
-
-
- bug8015853.txt
-
-
-
-
-
-
-
-
-
-
-
- leaf1.txt
- leaf2.txt
-
-
- leaf3.txt
- leaf4.txt
-
-
-
-
-
- leaf1.txt
- leaf2.txt
-
-
- leaf3.txt
- leaf4.txt
-
-
-
-
-
-
-
-
-
- exesanity_SimpleNativeLauncher.c
-
-
- libsanity_SimpleNativeLib.c
-
-
- libsanity_SimpleNativeLib2.c
-
-
-
-
-
-
-
-
-
-
-
-
-
- tree.txt
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Readme.txt
-
- launcher.c
-
-
- REMOTE_TESTING.txt
-
-
-
- revokeall.c
-
-
-
-
-
-
-
-
-
- res1.txt
-
-
-
-
-
-
-
-
-
- p12passwords.txt
-
-
-
- msoid.txt
-
-
-
-
- p12passwords.txt
-
-
-
- p11-activcard.txt
- p11-ibutton.txt
- p11-nss.txt
- p11-sca1000.txt
- p11-solaris.txt
-
-
- p11-nss.txt
-
-
-
- p11-deimos.txt
- p11-nss.txt
-
-
- ConfigQuotedString-nss.txt
- Login-nss.txt
-
-
- keymatdata.txt
- masterdata.txt
- prfdata.txt
-
-
-
- README.txt
-
-
-
- p11-nss.txt
-
-
-
-
-
- dcmd-big-script.txt
- dcmd-script.txt
-
-
-
-
-
-
-
-
- manifest.txt
-
-
-
-
-
-
- Readme.txt
-
-
-
- ProblemList.txt
-
-
-
-
-
-
-
-
-
- testfile.txt
-
-
- testfile.txt
-
-
- testfile.txt
-
-
- testfile.txt
-
- testfile.txt
-
-
-
-
-
-
- test.txt
-
-
-
-
-
-
- README.txt
-
-
-
-
-
-
-
- README.txt
-
-
-
-
-
-
- README.txt
-
-
- README.txt
-
-
-
-
- README.examples.txt
- examples.not-yet.txt
-
-
-
-
-
-
- TestScanExpected.txt
-
-
-
-
-
- ProblemList.txt
-
-
-
-
-
-
-
-
-
-
- gay-fixed.txt
- gay-precision.txt
- gay-shortest.txt
-
-
-
-
-
-
-
-
- ProblemList.txt
-
- ../../Makefile
-
- default
- false
- false
-
-
-
-
-
-
- HOTSPOT_BUILD_TARGET="target"
- HOTSPOT_BUILD_USER="user"
- HOTSPOT_RELEASE_VERSION="version"
-
-
+
+
+ ../..
+ ${MAKE} -f Makefile images
+ ${MAKE} -f Makefile clean
+
+
+ ../..
+ sh configure --with-debug-level=slowdebug
+
+
+
+ ../..${MAKE} -f Makefile images${MAKE} -f Makefile clean
-
-
-
- THIS_FILE="MacosxDebuggerLocal.m"
-
- ../..
- sh ../configure --with-debug-level=slowdebug --disable-zip-debug-info
+ sh configure --with-debug-level=slowdebug
-
-
-
-
-
-
-
- THIS_FILE="ad_x86_64_clone.cpp"
-
-
-
-
-
-
- THIS_FILE="ad_x86_64_expand.cpp"
-
-
-
-
-
-
- THIS_FILE="ad_x86_64_format.cpp"
-
-
-
-
-
-
- THIS_FILE="ad_x86_64_gen.cpp"
-
-
-
-
-
-
- THIS_FILE="ad_x86_64_misc.cpp"
-
-
-
-
-
-
- THIS_FILE="ad_x86_64_peephole.cpp"
-
-
-
-
-
-
- THIS_FILE="ad_x86_64_pipeline.cpp"
-
-
-
-
-
-
- THIS_FILE="dfa_x86_64.cpp"
-
-
-
-
-
-
-
-
-
-
- THIS_FILE="jvmtiEnter.cpp"
-
-
-
-
-
-
- THIS_FILE="jvmtiEnterTrace.cpp"
-
-
-
-
-
-
- ../../hotspot/src/share/vm/opto
- ../../hotspot/src/share/vm/code
- ../../hotspot/src/cpu/x86/vm
- ../../hotspot/src/share/vm/asm
- ../../hotspot/src/share/vm/memory
- ../../hotspot/src/share/vm/utilities
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/adfiles
- /usr/include/c++/4.2.1
- ../../hotspot/src/share/vm/prims
- ../../hotspot/src/share/vm/runtime
- ../../hotspot/src/share/vm/logging
- ../../hotspot/make
- ../../hotspot/src/share/vm/ci
- ../../hotspot/src/share/vm/oops
- ../../hotspot/src/share/vm/trace
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/jfrfiles
- ../../hotspot/src/share/vm/gc/parallel
- ../../hotspot/src/share/vm/gc/shared
- ../../hotspot/src/share/vm/classfile
- ../../hotspot/src/share/vm/compiler
- ../../hotspot/src/share/vm/interpreter
- ../../hotspot/src/share/vm/libadt
- ../../hotspot/src/os/bsd/vm
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/jvmtifiles
- ../../hotspot/src/os/posix/vm
- ../../hotspot/src/os_cpu/bsd_x86/vm
- ../../hotspot/src/share/vm
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc
-
-
-
-
-
-
- ../../hotspot/src/share/vm/memory
- ../../hotspot/src/share/vm/logging
- ../../hotspot/src/share/vm/utilities
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/adfiles
- /usr/include/c++/4.2.1
- ../../hotspot/src/cpu/x86/vm
- ../../hotspot/src/share/vm/code
- ../../hotspot/src/share/vm/asm
- ../../hotspot/src/share/vm/runtime
- ../../hotspot/src/share/vm/prims
- ../../hotspot/src/share/vm/opto
- ../../hotspot/src/share/vm/ci
- ../../hotspot/src/share/vm/oops
- ../../hotspot/src/share/vm/trace
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/tracefiles
- ../../hotspot/src/share/vm/gc/parallel
- ../../hotspot/src/share/vm/gc/shared
- ../../hotspot/src/share/vm/classfile
- ../../hotspot/src/share/vm/compiler
- ../../hotspot/src/share/vm/interpreter
- ../../hotspot/src/share/vm/libadt
- ../../hotspot/make
- ../../hotspot/src/share/vm
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc
-
-
-
-
-
-
- ../../hotspot/src/share/vm/opto
- ../../hotspot/src/share/vm/code
- ../../hotspot/src/cpu/x86/vm
- ../../hotspot/src/share/vm/asm
- ../../hotspot/src/share/vm/memory
- ../../hotspot/src/share/vm/logging
- ../../hotspot/src/share/vm/utilities
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/adfiles
- /usr/include/c++/4.2.1
- ../../hotspot/src/share/vm/runtime
- ../../hotspot/src/share/vm/ci
- ../../hotspot/src/share/vm/prims
- ../../hotspot/src/share/vm/oops
- ../../hotspot/src/share/vm/trace
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/tracefiles
- ../../hotspot/src/share/vm/gc/parallel
- ../../hotspot/src/share/vm/gc/shared
- ../../hotspot/src/share/vm/classfile
- ../../hotspot/src/share/vm/compiler
- ../../hotspot/src/share/vm/interpreter
- ../../hotspot/src/share/vm/libadt
- ../../hotspot/make
- ../../hotspot/src/share/vm
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc
-
-
-
-
-
-
- ../../hotspot/src/share/vm/memory
- ../../hotspot/src/share/vm/logging
- ../../hotspot/src/share/vm/utilities
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/adfiles
- /usr/include/c++/4.2.1
- ../../hotspot/src/cpu/x86/vm
- ../../hotspot/src/share/vm
- ../../hotspot/make
-
-
-
-
-
-
- ../../hotspot/src/share/vm/memory
- ../../hotspot/src/share/vm/logging
- ../../hotspot/src/share/vm/utilities
- /usr/include/c++/4.2.1
- ../../hotspot/src/cpu/x86/vm
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/adfiles
- ../../hotspot/make
- ../../hotspot/src/share/vm/runtime
- ../../hotspot/src/share/vm/opto
- ../../hotspot/src/share/vm/ci
- ../../hotspot/src/share/vm/prims
- ../../hotspot/src/share/vm/oops
- ../../hotspot/src/share/vm/trace
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/tracefiles
- ../../hotspot/src/share/vm/gc/parallel
- ../../hotspot/src/share/vm/gc/shared
- ../../hotspot/src/share/vm/classfile
- ../../hotspot/src/share/vm/compiler
- ../../hotspot/src/share/vm/code
- ../../hotspot/src/share/vm/asm
- ../../hotspot/src/share/vm/interpreter
- ../../hotspot/src/share/vm/libadt
- ../../hotspot/src/share/vm
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc
-
-
-
-
-
-
- ../../hotspot/src/share/vm/memory
- ../../hotspot/src/share/vm/logging
- ../../hotspot/src/share/vm/utilities
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/adfiles
- /usr/include/c++/4.2.1
- ../../hotspot/src/cpu/x86/vm
- ../../hotspot/src/share/vm/code
- ../../hotspot/src/share/vm/asm
- ../../hotspot/src/share/vm/runtime
- ../../hotspot/src/share/vm/prims
- ../../hotspot/src/share/vm/opto
- ../../hotspot/src/share/vm/ci
- ../../hotspot/src/share/vm/oops
- ../../hotspot/src/share/vm/trace
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/tracefiles
- ../../hotspot/src/share/vm/gc/parallel
- ../../hotspot/src/share/vm/gc/shared
- ../../hotspot/src/share/vm/classfile
- ../../hotspot/src/share/vm/compiler
- ../../hotspot/src/share/vm/interpreter
- ../../hotspot/src/share/vm/libadt
- ../../hotspot/make
- ../../hotspot/src/share/vm
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc
-
-
-
-
-
-
- ../../hotspot/src/share/vm/memory
- ../../hotspot/src/share/vm/logging
- ../../hotspot/src/share/vm/utilities
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/adfiles
- /usr/include/c++/4.2.1
- ../../hotspot/src/cpu/x86/vm
- ../../hotspot/make
- ../../hotspot/src/share/vm/opto
- ../../hotspot/src/share/vm/runtime
- ../../hotspot/src/share/vm/ci
- ../../hotspot/src/share/vm/prims
- ../../hotspot/src/share/vm/oops
- ../../hotspot/src/share/vm/trace
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/tracefiles
- ../../hotspot/src/share/vm/gc/parallel
- ../../hotspot/src/share/vm/gc/shared
- ../../hotspot/src/share/vm/classfile
- ../../hotspot/src/share/vm/compiler
- ../../hotspot/src/share/vm/code
- ../../hotspot/src/share/vm/asm
- ../../hotspot/src/share/vm/interpreter
- ../../hotspot/src/share/vm/libadt
- ../../hotspot/src/share/vm
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc
-
-
-
-
-
-
- ../../hotspot/make
- ../../hotspot/src/share/vm/memory
- ../../hotspot/src/share/vm/logging
- ../../hotspot/src/share/vm/utilities
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/adfiles
- /usr/include/c++/4.2.1
- ../../hotspot/src/cpu/x86/vm
- ../../hotspot/src/share/vm/opto
- ../../hotspot/src/share/vm/runtime
- ../../hotspot/src/share/vm/ci
- ../../hotspot/src/share/vm/prims
- ../../hotspot/src/share/vm/oops
- ../../hotspot/src/share/vm/trace
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/tracefiles
- ../../hotspot/src/share/vm/gc/parallel
- ../../hotspot/src/share/vm/gc/shared
- ../../hotspot/src/share/vm/classfile
- ../../hotspot/src/share/vm/compiler
- ../../hotspot/src/share/vm/code
- ../../hotspot/src/share/vm/asm
- ../../hotspot/src/share/vm/interpreter
- ../../hotspot/src/share/vm/libadt
- ../../hotspot/src/share/vm
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc
-
-
-
-
-
-
- ../../hotspot/src/share/vm/memory
- ../../hotspot/src/share/vm/logging
- ../../hotspot/src/share/vm/utilities
- /usr/include/c++/4.2.1
- ../../hotspot/src/cpu/x86/vm
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/adfiles
- ../../hotspot/make
- ../../hotspot/src/share/vm/asm
- ../../hotspot/src/share/vm/code
- ../../hotspot/src/share/vm/runtime
- ../../hotspot/src/share/vm/prims
- ../../hotspot/src/share/vm/opto
- ../../hotspot/src/share/vm/oops
- ../../hotspot/src/share/vm/gc/parallel
- ../../hotspot/src/share/vm/gc/shared
- ../../hotspot/src/share/vm/classfile
- ../../hotspot/src/share/vm/trace
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/tracefiles
- ../../hotspot/src/share/vm/ci
- ../../hotspot/src/share/vm/compiler
- ../../hotspot/src/share/vm/interpreter
- ../../hotspot/src/share/vm/libadt
- ../../hotspot/src/share/vm
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc
-
-
-
-
-
-
- ../../hotspot/src/share/vm/logging
- ../../hotspot/src/share/vm/utilities
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/jvmtifiles
- /usr/include/c++/4.2.1
- ../../hotspot/src/cpu/x86/vm
- ../../hotspot/src/share/vm
- ../../hotspot/make
-
-
-
-
-
-
- ../../hotspot/src/share/vm/utilities
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/jvmtifiles
- /usr/include/c++/4.2.1
- ../../hotspot/src/share/vm/prims
- ../../hotspot/src/cpu/x86/vm
- ../../hotspot/src/share/vm/logging
- ../../hotspot/src/share/vm/runtime
- ../../hotspot/src/share/vm/oops
- ../../hotspot/src/share/vm/gc/parallel
- ../../hotspot/src/share/vm/gc/shared
- ../../hotspot/src/share/vm/classfile
- ../../hotspot/src/share/vm/trace
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/tracefiles
- ../../hotspot/src/os/bsd/vm
- ../../hotspot/src/share/vm/code
- ../../hotspot/src/share/vm/asm
- ../../hotspot/src/share/vm/interpreter
- ../../hotspot/src/os/posix/vm
- ../../hotspot/src/os_cpu/bsd_x86/vm
- ../../hotspot/src/share/vm
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc
- ../../hotspot/make
-
-
-
-
-
-
- ../../hotspot/src/share/vm/prims
- ../../hotspot/src/cpu/x86/vm
- ../../hotspot/src/share/vm/oops
- ../../hotspot/src/share/vm/runtime
- ../../hotspot/src/share/vm/trace
- ../../hotspot/src/share/vm/utilities
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/tracefiles
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc/jvmtifiles
- /usr/include/c++/4.2.1
- ../../hotspot/src/share/vm/gc/parallel
- ../../hotspot/src/share/vm/gc/shared
- ../../hotspot/src/share/vm/classfile
- ../../hotspot/src/share/vm/logging
- ../../hotspot/src/os/bsd/vm
- ../../hotspot/src/share/vm/code
- ../../hotspot/src/share/vm/asm
- ../../hotspot/src/share/vm/interpreter
- ../../hotspot/src/os/posix/vm
- ../../hotspot/src/os_cpu/bsd_x86/vm
- ../../hotspot/src/share/vm
- ../../build/macosx-x86_64-normal-server-release/hotspot/variant-server/gensrc
- ../../hotspot/make
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ../../hotspot/src/share/vm
- ../../hotspot/src/os/bsd/vm
- ../../hotspot/src/os/posix/vm
- ../../hotspot/src/cpu/x86/vm
- ../../hotspot/src/os_cpu/bsd_x86/vm
- ../../build/hotspot/variant-server/gensrc
- ../../hotspot/src/share/vm/precompiled
- ../../hotspot/src/share/vm/prims
- ../../hotspot/makefiles
-
-
- AMD64
- ASSERT
- COMPILER1
- COMPILER2
- DTRACE_ENABLED
- HOTSPOT_LIB_ARCH="amd64"
- TARGET_ARCH_MODEL_x86_64
- TARGET_ARCH_x86
- TARGET_COMPILER_gcc
- TARGET_OS_ARCH_MODEL_bsd_x86_64
- TARGET_OS_ARCH_bsd_x86
- TARGET_OS_FAMILY_bsd
- VM_LITTLE_ENDIAN
- _ALLBSD_SOURCE
- _DARWIN_C_SOURCE
- _GNU_SOURCE
- _LP64=1
- _NMT_NOINLINE_
- _XOPEN_SOURCE
-
-
-
-
-
-
- THIS_FILE="ad_x86_64.cpp"
-
-
-
-
-
-
- THIS_FILE="bytecodeInterpreterWithChecks.cpp"
-
-
-
-
-
-
- ../../hotspot/src/share/vm/memory
-
-
-
-
-
-
- default
- false
- false
-
-
-
-
-
-
-
- HOTSPOT_BUILD_TARGET="target"
- HOTSPOT_BUILD_USER="user"
- HOTSPOT_RELEASE_VERSION="version"
-
-
-
-
- ../..
- ${MAKE} -f Makefile images
- ${MAKE} -f Makefile clean
-
-
-
- LINUX
- _GNU_SOURCE
- _REENTRANT
-
-
-
-
- ../..
- sh ../configure --with-debug-level=slowdebug --disable-zip-debug-info
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ../../jdk/src/java.base/share/native/include
- ../../jdk/src/java.base/unix/native/include
- ../../jdk/src/java.base/share/native/libjava
- ../../jdk/src/java.base/unix/native/libjava
- ../../jdk/src/java.desktop/unix/native/common/awt
- ../../jdk/src/java.desktop/share/native/common/awt/debug
- ../../jdk/src/java.desktop/share/native/libawt/awt/image/cvutils
-
-
-
-
- ../../build/hotspot/linux_amd64_compiler2/debug
- ../../hotspot/src/share/vm/prims
- ../../hotspot/src/share/vm
- ../../hotspot/src/share/vm/precompiled
- ../../hotspot/src/cpu/x86/vm
- ../../hotspot/src/os_cpu/linux_x86/vm
- ../../hotspot/src/os/linux/vm
- ../../hotspot/src/os/posix/vm
- ../../build/hotspot/linux_amd64_compiler2/generated
-
-
- AMD64
- ASSERT
- COMPILER1
- COMPILER2
- HOTSPOT_BUILD_USER="user"
- HOTSPOT_LIB_ARCH="amd64"
- HOTSPOT_VM_DISTRO="OpenJDK"
- TARGET_ARCH_MODEL_x86_64
- TARGET_ARCH_x86
- TARGET_COMPILER_gcc
- TARGET_OS_ARCH_MODEL_linux_x86_64
- TARGET_OS_ARCH_linux_x86
- TARGET_OS_FAMILY_linux
- VM_LITTLE_ENDIAN
- _LP64=1
- _NMT_NOINLINE_
-
-
-
-
- default
- false
- false
-
-
-
-
-
-
- HOTSPOT_BUILD_TARGET="target"
- HOTSPOT_BUILD_USER="user"
- HOTSPOT_RELEASE_VERSION="version"
-
- ../..gmake -f Makefile imagesgmake -f Makefile clean
-
-
-
- THIS_FILE="ad_x86_64.cpp"
-
- ../..
- sh ../configure --with-debug-level=slowdebug --disable-zip-debug-info
+ sh configure --with-debug-level=slowdebug
-
-
-
-
-
-
-
- THIS_FILE="ad_x86_64_clone.cpp"
-
-
-
-
-
-
- THIS_FILE="ad_x86_64_expand.cpp"
-
-
-
-
-
-
- THIS_FILE="ad_x86_64_format.cpp"
-
-
-
-
-
-
- THIS_FILE="ad_x86_64_gen.cpp"
-
-
-
-
-
-
- THIS_FILE="ad_x86_64_misc.cpp"
-
-
-
-
-
-
- THIS_FILE="ad_x86_64_peephole.cpp"
-
-
-
-
-
-
- THIS_FILE="ad_x86_64_pipeline.cpp"
-
-
-
-
-
-
- THIS_FILE="dfa_x86_64.cpp"
-
-
-
-
-
-
-
-
-
-
- THIS_FILE="jvmtiEnter.cpp"
-
-
-
-
-
-
- THIS_FILE="jvmtiEnterTrace.cpp"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- /usr/openwin/include
- /usr/openwin/include/X11/extensions
- ../../jdk/src/java.base/share/native/include
- ../../jdk/src/java.base/unix/native/include
- ../../jdk/src/java.base/share/native/libjava
- ../../jdk/src/java.base/unix/native/libjava
- ../../jdk/src/java.desktop/unix/native/common/awt
- ../../jdk/src/java.desktop/share/native/common/awt/debug
- ../../jdk/src/java.desktop/share/native/libawt/awt/image/cvutils
-
-
-
-
- ../../hotspot/src/share/vm
- ../../hotspot/src/os/solaris/vm
- ../../hotspot/src/os/posix/vm
- ../../hotspot/src/cpu/x86/vm
- ../../hotspot/src/os_cpu/solaris_x86/vm
- ../../build/hotspot/variant-server/gensrc
- ../../hotspot/src/share/vm/precompiled
- ../../hotspot/src/share/vm/prims
- ../../hotspot/make
-
-
- AMD64
- ASSERT
- COMPILER1
- COMPILER2
- DONT_USE_PRECOMPILED_HEADER
- DTRACE_ENABLED
- HOTSPOT_LIB_ARCH="amd64"
- SOLARIS
- SPARC_WORKS
- TARGET_ARCH_MODEL_x86_64
- TARGET_ARCH_x86
- TARGET_COMPILER_solstudio
- TARGET_OS_ARCH_MODEL_solaris_x86_64
- TARGET_OS_ARCH_solaris_x86
- TARGET_OS_FAMILY_solaris
- VM_LITTLE_ENDIAN
- _Crun_inline_placement
- _NMT_NOINLINE_
-
-
-
-
-
-
- THIS_FILE="bytecodeInterpreterWithChecks.cpp"
-
-
-
-
-
-
- ../../build/hotspot/variant-server/support/dtrace
-
-
-
-
-
-
- ../../hotspot/src/share/vm
- ../../hotspot/src/os/solaris/vm
- ../../hotspot/src/os/posix/vm
- ../../hotspot/src/cpu/x86/vm
- ../../hotspot/src/os_cpu/solaris_x86/vm
- ../../build/hotspot/variant-server/gensrc
- ../../hotspot/src/share/vm/precompiled
- ../../hotspot/src/share/vm/prims
- ../../test/fmw/gtest
- ../../test/fmw/gtest/include
- ../../hotspot/test/native
- ../../hotspot/make
-
-
- AMD64
- ASSERT
- COMPILER1
- COMPILER2
- DONT_USE_PRECOMPILED_HEADER
- DTRACE_ENABLED
- GTEST_HAS_EXCEPTIONS=0
- HOTSPOT_LIB_ARCH="amd64"
- SOLARIS
- SPARC_WORKS
- TARGET_ARCH_MODEL_x86_64
- TARGET_ARCH_x86
- TARGET_COMPILER_solstudio
- TARGET_OS_ARCH_MODEL_solaris_x86_64
- TARGET_OS_ARCH_solaris_x86
- TARGET_OS_FAMILY_solaris
- THIS_FILE="gtest-all.cc"
- VM_LITTLE_ENDIAN
- _Crun_inline_placement
- _NMT_NOINLINE_
-
-
-
-
- default
- false
- false
-
-
- ../../../output
@@ -15943,24911 +69,6 @@
true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ../../src/hotspot/cpu/x86
- ../../src/hotspot/os/windows
- ../../src/hotspot/os_cpu/windows_x86
- ../../src/hotspot/share
- ../../../output/hotspot/variant-server/gensrc/adfiles
-
-
-
-
- ../../src/hotspot/cpu/x86
- ../../src/hotspot/os/windows
- ../../src/hotspot/os_cpu/windows_x86
- ../../src/hotspot/share
- ../../../output/hotspot/variant-server/gensrc/adfiles
-
-
-
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/aarch64/aarch64.ad
--- a/src/hotspot/cpu/aarch64/aarch64.ad Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/aarch64/aarch64.ad Tue Jan 29 09:38:31 2019 -0500
@@ -3417,37 +3417,21 @@
__ biased_locking_enter(box, oop, disp_hdr, tmp, true, cont);
}
- // Handle existing monitor
+ // Check for existing monitor
__ tbnz(disp_hdr, exact_log2(markOopDesc::monitor_value), object_has_monitor);
- // Set displaced_header to be (markOop of object | UNLOCK_VALUE).
- __ orr(disp_hdr, disp_hdr, markOopDesc::unlocked_value);
-
- // Load Compare Value application register.
+ // Set tmp to be (markOop of object | UNLOCK_VALUE).
+ __ orr(tmp, disp_hdr, markOopDesc::unlocked_value);
// Initialize the box. (Must happen before we update the object mark!)
- __ str(disp_hdr, Address(box, BasicLock::displaced_header_offset_in_bytes()));
-
- // Compare object markOop with mark and if equal exchange scratch1
- // with object markOop.
- if (UseLSE) {
- __ mov(tmp, disp_hdr);
- __ casal(Assembler::xword, tmp, box, oop);
- __ cmp(tmp, disp_hdr);
- __ br(Assembler::EQ, cont);
- } else {
- Label retry_load;
- if ((VM_Version::features() & VM_Version::CPU_STXR_PREFETCH))
- __ prfm(Address(oop), PSTL1STRM);
- __ bind(retry_load);
- __ ldaxr(tmp, oop);
- __ cmp(tmp, disp_hdr);
- __ br(Assembler::NE, cas_failed);
- // use stlxr to ensure update is immediately visible
- __ stlxr(tmp, box, oop);
- __ cbzw(tmp, cont);
- __ b(retry_load);
- }
+ __ str(tmp, Address(box, BasicLock::displaced_header_offset_in_bytes()));
+
+ // Compare object markOop with an unlocked value (tmp) and if
+ // equal exchange the stack address of our box with object markOop.
+ // On failure disp_hdr contains the possibly locked markOop.
+ __ cmpxchg(oop, tmp, box, Assembler::xword, /*acquire*/ true,
+ /*release*/ true, /*weak*/ false, disp_hdr);
+ __ br(Assembler::EQ, cont);
assert(oopDesc::mark_offset_in_bytes() == 0, "offset of _mark is not 0");
@@ -3464,38 +3448,21 @@
__ mov(tmp, (address) (~(os::vm_page_size()-1) | markOopDesc::lock_mask_in_place));
// If condition is true we are cont and hence we can store 0 as the
// displaced header in the box, which indicates that it is a recursive lock.
- __ ands(tmp/*==0?*/, disp_hdr, tmp);
+ __ ands(tmp/*==0?*/, disp_hdr, tmp); // Sets flags for result
__ str(tmp/*==0, perhaps*/, Address(box, BasicLock::displaced_header_offset_in_bytes()));
+ __ b(cont);
+
// Handle existing monitor.
- __ b(cont);
-
__ bind(object_has_monitor);
+
// The object's monitor m is unlocked iff m->owner == NULL,
// otherwise m->owner may contain a thread or a stack address.
//
// Try to CAS m->owner from NULL to current thread.
__ add(tmp, disp_hdr, (ObjectMonitor::owner_offset_in_bytes()-markOopDesc::monitor_value));
- __ mov(disp_hdr, zr);
-
- if (UseLSE) {
- __ mov(rscratch1, disp_hdr);
- __ casal(Assembler::xword, rscratch1, rthread, tmp);
- __ cmp(rscratch1, disp_hdr);
- } else {
- Label retry_load, fail;
- if ((VM_Version::features() & VM_Version::CPU_STXR_PREFETCH)) {
- __ prfm(Address(tmp), PSTL1STRM);
- }
- __ bind(retry_load);
- __ ldaxr(rscratch1, tmp);
- __ cmp(disp_hdr, rscratch1);
- __ br(Assembler::NE, fail);
- // use stlxr to ensure update is immediately visible
- __ stlxr(rscratch1, rthread, tmp);
- __ cbnzw(rscratch1, retry_load);
- __ bind(fail);
- }
+ __ cmpxchg(tmp, zr, rthread, Assembler::xword, /*acquire*/ true,
+ /*release*/ true, /*weak*/ false, noreg); // Sets flags for result
// Store a non-null value into the box to avoid looking like a re-entrant
// lock. The fast-path monitor unlock code checks for
@@ -3539,24 +3506,9 @@
// see the stack address of the basicLock in the markOop of the
// object.
- if (UseLSE) {
- __ mov(tmp, box);
- __ casl(Assembler::xword, tmp, disp_hdr, oop);
- __ cmp(tmp, box);
- __ b(cont);
- } else {
- Label retry_load;
- if ((VM_Version::features() & VM_Version::CPU_STXR_PREFETCH))
- __ prfm(Address(oop), PSTL1STRM);
- __ bind(retry_load);
- __ ldxr(tmp, oop);
- __ cmp(box, tmp);
- __ br(Assembler::NE, cont);
- // use stlxr to ensure update is immediately visible
- __ stlxr(tmp, disp_hdr, oop);
- __ cbzw(tmp, cont);
- __ b(retry_load);
- }
+ __ cmpxchg(oop, box, disp_hdr, Assembler::xword, /*acquire*/ false,
+ /*release*/ true, /*weak*/ false, tmp);
+ __ b(cont);
assert(oopDesc::mark_offset_in_bytes() == 0, "offset of _mark is not 0");
@@ -3567,13 +3519,13 @@
__ ldr(disp_hdr, Address(tmp, ObjectMonitor::recursions_offset_in_bytes()));
__ eor(rscratch1, rscratch1, rthread); // Will be 0 if we are the owner.
__ orr(rscratch1, rscratch1, disp_hdr); // Will be 0 if there are 0 recursions
- __ cmp(rscratch1, zr);
+ __ cmp(rscratch1, zr); // Sets flags for result
__ br(Assembler::NE, cont);
__ ldr(rscratch1, Address(tmp, ObjectMonitor::EntryList_offset_in_bytes()));
__ ldr(disp_hdr, Address(tmp, ObjectMonitor::cxq_offset_in_bytes()));
__ orr(rscratch1, rscratch1, disp_hdr); // Will be 0 if both are 0.
- __ cmp(rscratch1, zr);
+ __ cmp(rscratch1, zr); // Sets flags for result
__ cbnz(rscratch1, cont);
// need a release store here
__ lea(tmp, Address(tmp, ObjectMonitor::owner_offset_in_bytes()));
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/aarch64/frame_aarch64.inline.hpp
--- a/src/hotspot/cpu/aarch64/frame_aarch64.inline.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/aarch64/frame_aarch64.inline.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -137,11 +137,6 @@
// frame.
inline intptr_t* frame::id(void) const { return unextended_sp(); }
-// Relationals on frames based
-// Return true if the frame is younger (more recent activation) than the frame represented by id
-inline bool frame::is_younger(intptr_t* id) const { assert(this->id() != NULL && id != NULL, "NULL frame id");
- return this->id() < id ; }
-
// Return true if the frame is older (less recent activation) than the frame represented by id
inline bool frame::is_older(intptr_t* id) const { assert(this->id() != NULL && id != NULL, "NULL frame id");
return this->id() > id ; }
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp
--- a/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -423,45 +423,14 @@
}
void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm, Register addr, Register expected, Register new_val,
- bool acquire, bool release, bool weak, bool encode,
- Register tmp1, Register tmp2, Register tmp3,
+ bool acquire, bool release, bool weak, bool is_cae,
Register result) {
- if (!ShenandoahCASBarrier) {
- if (UseCompressedOops) {
- if (encode) {
- __ encode_heap_oop(tmp1, expected);
- expected = tmp1;
- __ encode_heap_oop(tmp3, new_val);
- new_val = tmp3;
- }
- __ cmpxchg(addr, expected, new_val, Assembler::word, /* acquire*/ true, /* release*/ true, /* weak*/ false, rscratch1);
- __ membar(__ AnyAny);
- } else {
- __ cmpxchg(addr, expected, new_val, Assembler::xword, /* acquire*/ true, /* release*/ true, /* weak*/ false, rscratch1);
- __ membar(__ AnyAny);
- }
- return;
- }
-
- if (encode) {
- storeval_barrier(masm, new_val, tmp3);
- }
-
- if (UseCompressedOops) {
- if (encode) {
- __ encode_heap_oop(tmp1, expected);
- expected = tmp1;
- __ encode_heap_oop(tmp2, new_val);
- new_val = tmp2;
- }
- }
- bool is_cae = (result != noreg);
+ Register tmp = rscratch2;
bool is_narrow = UseCompressedOops;
Assembler::operand_size size = is_narrow ? Assembler::word : Assembler::xword;
- if (! is_cae) result = rscratch1;
- assert_different_registers(addr, expected, new_val, result, tmp3);
+ assert_different_registers(addr, expected, new_val, result, tmp);
Label retry, done, fail;
@@ -474,35 +443,38 @@
__ cmp(result, expected);
}
__ br(Assembler::NE, fail);
- __ store_exclusive(tmp3, new_val, addr, size, release);
+ __ store_exclusive(tmp, new_val, addr, size, release);
if (weak) {
- __ cmpw(tmp3, 0u); // If the store fails, return NE to our caller
+ __ cmpw(tmp, 0u); // If the store fails, return NE to our caller
} else {
- __ cbnzw(tmp3, retry);
+ __ cbnzw(tmp, retry);
}
__ b(done);
__ bind(fail);
// Check if rb(expected)==rb(result)
// Shuffle registers so that we have memory value ready for next expected.
- __ mov(tmp3, expected);
+ __ mov(tmp, expected);
__ mov(expected, result);
if (is_narrow) {
__ decode_heap_oop(result, result);
- __ decode_heap_oop(tmp3, tmp3);
+ __ decode_heap_oop(tmp, tmp);
}
read_barrier_impl(masm, result);
- read_barrier_impl(masm, tmp3);
- __ cmp(result, tmp3);
+ read_barrier_impl(masm, tmp);
+ __ cmp(result, tmp);
// Retry with expected now being the value we just loaded from addr.
__ br(Assembler::EQ, retry);
- if (is_narrow && is_cae) {
+ if (is_cae && is_narrow) {
// For cmp-and-exchange and narrow oops, we need to restore
// the compressed old-value. We moved it to 'expected' a few lines up.
__ mov(result, expected);
}
__ bind(done);
+ if (!is_cae) {
+ __ cset(result, Assembler::EQ);
+ }
}
#ifdef COMPILER1
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.hpp
--- a/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -60,7 +60,6 @@
void read_barrier_not_null_impl(MacroAssembler* masm, Register dst);
void write_barrier(MacroAssembler* masm, Register dst);
void write_barrier_impl(MacroAssembler* masm, Register dst);
- void storeval_barrier(MacroAssembler* masm, Register dst, Register tmp);
void asm_acmp_barrier(MacroAssembler* masm, Register op1, Register op2);
address generate_shenandoah_wb(StubCodeGenerator* cgen);
@@ -68,6 +67,8 @@
public:
static address shenandoah_wb();
+ void storeval_barrier(MacroAssembler* masm, Register dst, Register tmp);
+
#ifdef COMPILER1
void gen_pre_barrier_stub(LIR_Assembler* ce, ShenandoahPreBarrierStub* stub);
void gen_write_barrier_stub(LIR_Assembler* ce, ShenandoahWriteBarrierStub* stub);
@@ -92,9 +93,7 @@
Label& slow_case);
void cmpxchg_oop(MacroAssembler* masm, Register addr, Register expected, Register new_val,
- bool acquire, bool release, bool weak, bool encode,
- Register tmp1, Register tmp2, Register tmp3 = rscratch2,
- Register result = noreg);
+ bool acquire, bool release, bool weak, bool is_cae, Register result);
virtual void barrier_stubs_init();
};
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetC1_aarch64.cpp
--- a/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetC1_aarch64.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetC1_aarch64.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -28,15 +28,30 @@
#include "gc/shenandoah/shenandoahBarrierSetAssembler.hpp"
#include "gc/shenandoah/c1/shenandoahBarrierSetC1.hpp"
+#define __ masm->masm()->
+
void LIR_OpShenandoahCompareAndSwap::emit_code(LIR_Assembler* masm) {
Register addr = _addr->as_register_lo();
Register newval = _new_value->as_register();
Register cmpval = _cmp_value->as_register();
Register tmp1 = _tmp1->as_register();
Register tmp2 = _tmp2->as_register();
- ShenandoahBarrierSet::assembler()->cmpxchg_oop(masm->masm(), addr, cmpval, newval, /*acquire*/ false, /*release*/ true, /*weak*/ false, true, tmp1, tmp2);
+ Register result = result_opr()->as_register();
+
+ ShenandoahBarrierSet::assembler()->storeval_barrier(masm->masm(), newval, rscratch2);
+
+ if (UseCompressedOops) {
+ __ encode_heap_oop(tmp1, cmpval);
+ cmpval = tmp1;
+ __ encode_heap_oop(tmp2, newval);
+ newval = tmp2;
+ }
+
+ ShenandoahBarrierSet::assembler()->cmpxchg_oop(masm->masm(), addr, cmpval, newval, /*acquire*/ false, /*release*/ true, /*weak*/ false, /*is_cae*/ false, result);
}
+#undef __
+
#ifdef ASSERT
#define __ gen->lir(__FILE__, __LINE__)->
#else
@@ -58,13 +73,9 @@
LIR_Opr t1 = gen->new_register(T_OBJECT);
LIR_Opr t2 = gen->new_register(T_OBJECT);
LIR_Opr addr = access.resolved_addr()->as_address_ptr()->base();
-
- __ append(new LIR_OpShenandoahCompareAndSwap(addr, cmp_value.result(), new_value.result(), t1, t2,
- LIR_OprFact::illegalOpr));
+ LIR_Opr result = gen->new_register(T_INT);
- LIR_Opr result = gen->new_register(T_INT);
- __ cmove(lir_cond_equal, LIR_OprFact::intConst(1), LIR_OprFact::intConst(0),
- result, T_INT);
+ __ append(new LIR_OpShenandoahCompareAndSwap(addr, cmp_value.result(), new_value.result(), t1, t2, result));
return result;
}
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/aarch64/gc/shenandoah/shenandoah_aarch64.ad
--- a/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoah_aarch64.ad Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoah_aarch64.ad Tue Jan 29 09:38:31 2019 -0500
@@ -26,22 +26,22 @@
%}
encode %{
- enc_class aarch64_enc_cmpxchg_oop_shenandoah(memory mem, iRegP oldval, iRegP newval, iRegPNoSp tmp) %{
+ enc_class aarch64_enc_cmpxchg_oop_shenandoah(memory mem, iRegP oldval, iRegP newval, iRegPNoSp tmp, iRegINoSp res) %{
MacroAssembler _masm(&cbuf);
guarantee($mem$$index == -1 && $mem$$disp == 0, "impossible encoding");
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm, $mem$$Register, tmp, $newval$$Register,
- /*acquire*/ false, /*release*/ true, /*weak*/ false, /*encode*/ false, noreg, noreg);
+ /*acquire*/ false, /*release*/ true, /*weak*/ false, /*is_cae*/ false, $res$$Register);
%}
- enc_class aarch64_enc_cmpxchg_acq_oop_shenandoah(memory mem, iRegP oldval, iRegP newval, iRegPNoSp tmp) %{
+ enc_class aarch64_enc_cmpxchg_acq_oop_shenandoah(memory mem, iRegP oldval, iRegP newval, iRegPNoSp tmp, iRegINoSp res) %{
MacroAssembler _masm(&cbuf);
guarantee($mem$$index == -1 && $mem$$disp == 0, "impossible encoding");
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm, $mem$$Register, tmp, $newval$$Register,
- /*acquire*/ true, /*release*/ true, /*weak*/ false, /*encode*/ false, noreg, noreg);
+ /*acquire*/ true, /*release*/ true, /*weak*/ false, /*is_cae*/ false, $res$$Register);
%}
%}
@@ -66,11 +66,9 @@
format %{
"cmpxchg_shenandoah $mem, $oldval, $newval\t# (ptr) if $mem == $oldval then $mem <-- $newval with temp $tmp"
- "cset $res, EQ\t# $res <-- (EQ ? 1 : 0)"
%}
- ins_encode(aarch64_enc_cmpxchg_oop_shenandoah(mem, oldval, newval, tmp),
- aarch64_enc_cset_eq(res));
+ ins_encode(aarch64_enc_cmpxchg_oop_shenandoah(mem, oldval, newval, tmp, res));
ins_pipe(pipe_slow);
%}
@@ -84,14 +82,12 @@
format %{
"cmpxchgw_shenandoah $mem, $oldval, $newval\t# (ptr) if $mem == $oldval then $mem <-- $newval with temp $tmp"
- "cset $res, EQ\t# $res <-- (EQ ? 1 : 0)"
%}
ins_encode %{
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
- ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm, $mem$$Register, tmp, $newval$$Register, /*acquire*/ false, /*release*/ true, /*weak*/ false, /*encode*/ false, noreg, noreg);
- __ cset($res$$Register, Assembler::EQ);
+ ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm, $mem$$Register, tmp, $newval$$Register, /*acquire*/ false, /*release*/ true, /*weak*/ false, /*is_cae*/ false, $res$$Register);
%}
ins_pipe(pipe_slow);
@@ -107,11 +103,9 @@
format %{
"cmpxchg_acq_shenandoah_oop $mem, $oldval, $newval\t# (ptr) if $mem == $oldval then $mem <-- $newval with temp $tmp"
- "cset $res, EQ\t# $res <-- (EQ ? 1 : 0)"
%}
- ins_encode(aarch64_enc_cmpxchg_acq_oop_shenandoah(mem, oldval, newval, tmp),
- aarch64_enc_cset_eq(res));
+ ins_encode(aarch64_enc_cmpxchg_acq_oop_shenandoah(mem, oldval, newval, tmp, res));
ins_pipe(pipe_slow);
%}
@@ -126,14 +120,12 @@
format %{
"cmpxchgw_acq_shenandoah_narrow_oop $mem, $oldval, $newval\t# (ptr) if $mem == $oldval then $mem <-- $newval with temp $tmp"
- "cset $res, EQ\t# $res <-- (EQ ? 1 : 0)"
%}
ins_encode %{
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
- ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm, $mem$$Register, tmp, $newval$$Register, /*acquire*/ true, /*release*/ true, /*weak*/ false, /*encode*/ false, noreg, noreg);
- __ cset($res$$Register, Assembler::EQ);
+ ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm, $mem$$Register, tmp, $newval$$Register, /*acquire*/ true, /*release*/ true, /*weak*/ false, /*is_cae*/ false, $res$$Register);
%}
ins_pipe(pipe_slow);
@@ -150,7 +142,7 @@
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm, $mem$$Register, tmp, $newval$$Register,
- /*acquire*/ false, /*release*/ true, /*weak*/ false, /* encode*/ false, noreg, noreg, rscratch2, $res$$Register);
+ /*acquire*/ false, /*release*/ true, /*weak*/ false, /*is_cae*/ true, $res$$Register);
%}
ins_pipe(pipe_slow);
%}
@@ -166,7 +158,7 @@
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm, $mem$$Register, tmp, $newval$$Register,
- /*acquire*/ false, /*release*/ true, /*weak*/ false, /*encode*/ false, noreg, noreg, rscratch2, $res$$Register);
+ /*acquire*/ false, /*release*/ true, /*weak*/ false, /*is_cae*/ true, $res$$Register);
%}
ins_pipe(pipe_slow);
%}
@@ -183,7 +175,7 @@
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm, $mem$$Register, tmp, $newval$$Register,
- /*acquire*/ true, /*release*/ true, /*weak*/ false, /* encode*/ false, noreg, noreg, rscratch2, $res$$Register);
+ /*acquire*/ true, /*release*/ true, /*weak*/ false, /*is_cae*/ true, $res$$Register);
%}
ins_pipe(pipe_slow);
%}
@@ -200,7 +192,7 @@
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm, $mem$$Register, tmp, $newval$$Register,
- /*acquire*/ true, /*release*/ true, /*weak*/ false, /*encode*/ false, noreg, noreg, rscratch2, $res$$Register);
+ /*acquire*/ true, /*release*/ true, /*weak*/ false, /*is_cae*/ true, $res$$Register);
%}
ins_pipe(pipe_slow);
%}
@@ -217,8 +209,7 @@
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm, $mem$$Register, tmp, $newval$$Register,
- /*acquire*/ false, /*release*/ true, /*weak*/ true, /*encode*/ false, noreg, noreg);
- __ csetw($res$$Register, Assembler::EQ);
+ /*acquire*/ false, /*release*/ true, /*weak*/ true, /*is_cae*/ false, $res$$Register);
%}
ins_pipe(pipe_slow);
%}
@@ -229,14 +220,12 @@
effect(TEMP tmp, KILL cr);
format %{
"cmpxchg_shenandoah $res = $mem, $oldval, $newval\t# (ptr, weak) if $mem == $oldval then $mem <-- $newval"
- "csetw $res, EQ\t# $res <-- (EQ ? 1 : 0)"
%}
ins_encode %{
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm, $mem$$Register, tmp, $newval$$Register,
- /*acquire*/ false, /*release*/ true, /*weak*/ true, /*encode*/ false, noreg, noreg);
- __ csetw($res$$Register, Assembler::EQ);
+ /*acquire*/ false, /*release*/ true, /*weak*/ true, /*is_cae*/ false, $res$$Register);
%}
ins_pipe(pipe_slow);
%}
@@ -254,8 +243,7 @@
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm, $mem$$Register, tmp, $newval$$Register,
- /*acquire*/ true, /*release*/ true, /*weak*/ true, /*encode*/ false, noreg, noreg);
- __ csetw($res$$Register, Assembler::EQ);
+ /*acquire*/ true, /*release*/ true, /*weak*/ true, /*is_cae*/ false, $res$$Register);
%}
ins_pipe(pipe_slow);
%}
@@ -273,9 +261,7 @@
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm, $mem$$Register, tmp, $newval$$Register,
- /*acquire*/ true, /*release*/ true, /*weak*/ true, /*encode*/ false, noreg, noreg);
- __ csetw($res$$Register, Assembler::EQ);
+ /*acquire*/ true, /*release*/ true, /*weak*/ true, /*is_cae*/ false, $res$$Register);
%}
ins_pipe(pipe_slow);
%}
-
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/arm/frame_arm.inline.hpp
--- a/src/hotspot/cpu/arm/frame_arm.inline.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/arm/frame_arm.inline.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -120,17 +120,11 @@
// frame.
inline intptr_t* frame::id(void) const { return unextended_sp(); }
-// Relationals on frames based
-// Return true if the frame is younger (more recent activation) than the frame represented by id
-inline bool frame::is_younger(intptr_t* id) const { assert(this->id() != NULL && id != NULL, "NULL frame id");
- return this->id() < id ; }
-
// Return true if the frame is older (less recent activation) than the frame represented by id
inline bool frame::is_older(intptr_t* id) const { assert(this->id() != NULL && id != NULL, "NULL frame id");
return this->id() > id ; }
-
inline intptr_t* frame::link() const { return (intptr_t*) *(intptr_t **)addr_at(link_offset); }
inline intptr_t* frame::unextended_sp() const { return _unextended_sp; }
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/ppc/macroAssembler_ppc.cpp
--- a/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -3859,31 +3859,20 @@
// Due to register shortage, setting tc3 may overwrite table. With the return offset
// at hand, the original table address can be easily reconstructed.
int MacroAssembler::crc32_table_columns(Register table, Register tc0, Register tc1, Register tc2, Register tc3) {
-
+ assert(!VM_Version::has_vpmsumb(), "Vector version should be used instead!");
+
+ // Point to 4 byte folding tables (byte-reversed version for Big Endian)
+ // Layout: See StubRoutines::generate_crc_constants.
#ifdef VM_LITTLE_ENDIAN
- // This is what we implement (the DOLIT4 part):
- // ========================================================================= */
- // #define DOLIT4 c ^= *buf4++; \
- // c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
- // crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24]
- // #define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4
- // ========================================================================= */
- const int ix0 = 3*(4*CRC32_COLUMN_SIZE);
- const int ix1 = 2*(4*CRC32_COLUMN_SIZE);
- const int ix2 = 1*(4*CRC32_COLUMN_SIZE);
- const int ix3 = 0*(4*CRC32_COLUMN_SIZE);
+ const int ix0 = 3 * CRC32_TABLE_SIZE;
+ const int ix1 = 2 * CRC32_TABLE_SIZE;
+ const int ix2 = 1 * CRC32_TABLE_SIZE;
+ const int ix3 = 0 * CRC32_TABLE_SIZE;
#else
- // This is what we implement (the DOBIG4 part):
- // =========================================================================
- // #define DOBIG4 c ^= *++buf4; \
- // c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
- // crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
- // #define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
- // =========================================================================
- const int ix0 = 4*(4*CRC32_COLUMN_SIZE);
- const int ix1 = 5*(4*CRC32_COLUMN_SIZE);
- const int ix2 = 6*(4*CRC32_COLUMN_SIZE);
- const int ix3 = 7*(4*CRC32_COLUMN_SIZE);
+ const int ix0 = 1 * CRC32_TABLE_SIZE;
+ const int ix1 = 2 * CRC32_TABLE_SIZE;
+ const int ix2 = 3 * CRC32_TABLE_SIZE;
+ const int ix3 = 4 * CRC32_TABLE_SIZE;
#endif
assert_different_registers(table, tc0, tc1, tc2);
assert(table == tc3, "must be!");
@@ -3898,7 +3887,7 @@
/**
* uint32_t crc;
- * timesXtoThe32[crc & 0xFF] ^ (crc >> 8);
+ * table[crc & 0xFF] ^ (crc >> 8);
*/
void MacroAssembler::fold_byte_crc32(Register crc, Register val, Register table, Register tmp) {
assert_different_registers(crc, table, tmp);
@@ -3917,14 +3906,6 @@
}
/**
- * uint32_t crc;
- * timesXtoThe32[crc & 0xFF] ^ (crc >> 8);
- */
-void MacroAssembler::fold_8bit_crc32(Register crc, Register table, Register tmp) {
- fold_byte_crc32(crc, crc, table, tmp);
-}
-
-/**
* Emits code to update CRC-32 with a byte value according to constants in table.
*
* @param [in,out]crc Register containing the crc.
@@ -3975,9 +3956,7 @@
* Implementation according to jdk/src/share/native/java/util/zip/zlib-1.2.8/crc32.c
*/
// A note on the lookup table address(es):
-// The lookup table consists of two sets of four columns each.
-// The columns {0..3} are used for little-endian machines.
-// The columns {4..7} are used for big-endian machines.
+// The implementation uses 4 table columns (byte-reversed versions for Big Endian).
// To save the effort of adding the column offset to the table address each time
// a table element is looked up, it is possible to pass the pre-calculated
// column addresses.
@@ -4112,47 +4091,16 @@
}
/**
- * @param crc register containing existing CRC (32-bit)
- * @param buf register pointing to input byte buffer (byte*)
- * @param len register containing number of bytes
- * @param table register pointing to CRC table
- *
- * Uses R7_ARG5, R8_ARG6 as work registers.
- */
-void MacroAssembler::kernel_crc32_1byte(Register crc, Register buf, Register len, Register table,
- Register t0, Register t1, Register t2, Register t3,
- bool invertCRC) {
- assert_different_registers(crc, buf, len, table);
-
- Register data = t0; // Holds the current byte to be folded into crc.
-
- BLOCK_COMMENT("kernel_crc32_1byte {");
-
- if (invertCRC) {
- nand(crc, crc, crc); // 1s complement of crc
- }
-
- // Process all bytes in a single-byte loop.
- update_byteLoop_crc32(crc, buf, len, table, data, true);
-
- if (invertCRC) {
- nand(crc, crc, crc); // 1s complement of crc
- }
- BLOCK_COMMENT("} kernel_crc32_1byte");
-}
-
-/**
* @param crc register containing existing CRC (32-bit)
* @param buf register pointing to input byte buffer (byte*)
* @param len register containing number of bytes
- * @param table register pointing to CRC table
- * @param constants register pointing to CRC table for 128-bit aligned memory
- * @param t0-t5 temp registers
+ * @param constants register pointing to precomputed constants
+ * @param t0-t6 temp registers
*/
-void MacroAssembler::kernel_crc32_vpmsum(Register crc, Register buf, Register len, Register table,
- Register constants, Register t0, Register t1, Register t2,
- Register t3, Register t4, Register t5, bool invertCRC) {
- assert_different_registers(crc, buf, len, table);
+void MacroAssembler::kernel_crc32_vpmsum(Register crc, Register buf, Register len, Register constants,
+ Register t0, Register t1, Register t2, Register t3,
+ Register t4, Register t5, Register t6, bool invertCRC) {
+ assert_different_registers(crc, buf, len, constants);
Label L_tail;
@@ -4177,14 +4125,16 @@
blt(CCR0, L_tail); // len - prealign < threshold?
subf(len, prealign, len);
- update_byteLoop_crc32(crc, buf, prealign, table, t2, false);
+ update_byteLoop_crc32(crc, buf, prealign, constants, t2, false);
// Calculate from first aligned address as far as possible.
- kernel_crc32_vpmsum_aligned(crc, buf, len, constants, t0, t1, t2, t3, t4, t5);
+ addi(constants, constants, CRC32_TABLE_SIZE); // Point to vector constants.
+ kernel_crc32_vpmsum_aligned(crc, buf, len, constants, t0, t1, t2, t3, t4, t5, t6);
+ addi(constants, constants, -CRC32_TABLE_SIZE); // Point to table again.
// Remaining bytes.
BIND(L_tail);
- update_byteLoop_crc32(crc, buf, len, table, t2, false);
+ update_byteLoop_crc32(crc, buf, len, constants, t2, false);
if (invertCRC) {
nand(crc, crc, crc); // 1s complement of crc
@@ -4198,10 +4148,10 @@
* @param buf register pointing to input byte buffer (byte*)
* @param len register containing number of bytes (will get updated to remaining bytes)
* @param constants register pointing to CRC table for 128-bit aligned memory
- * @param t0-t5 temp registers
+ * @param t0-t6 temp registers
*/
-void MacroAssembler::kernel_crc32_vpmsum_aligned(Register crc, Register buf, Register len,
- Register constants, Register t0, Register t1, Register t2, Register t3, Register t4, Register t5) {
+void MacroAssembler::kernel_crc32_vpmsum_aligned(Register crc, Register buf, Register len, Register constants,
+ Register t0, Register t1, Register t2, Register t3, Register t4, Register t5, Register t6) {
// Save non-volatile vector registers (frameless).
Register offset = t1;
@@ -4217,7 +4167,6 @@
#endif
offsetInt -= 8; std(R14, offsetInt, R1_SP);
offsetInt -= 8; std(R15, offsetInt, R1_SP);
- offsetInt -= 8; std(R16, offsetInt, R1_SP);
// Implementation uses an inner loop which uses between 256 and 16 * unroll_factor
// bytes per iteration. The basic scheme is:
@@ -4235,10 +4184,10 @@
inner_consts_size = (unroll_factor / unroll_factor2) * 16;
// Support registers.
- Register offs[] = { noreg, t0, t1, t2, t3, t4, t5, crc /* will live in VCRC */ };
+ Register offs[] = { noreg, t0, t1, t2, t3, t4, t5, t6 };
Register num_bytes = R14,
loop_count = R15,
- cur_const = R16;
+ cur_const = crc; // will live in VCRC
// Constant array for outer loop: unroll_factor2 - 1 registers,
// Constant array for inner loop: unroll_factor / unroll_factor2 registers.
VectorRegister consts0[] = { VR16, VR17, VR18, VR19, VR20, VR21, VR22 },
@@ -4470,7 +4419,6 @@
#endif
offsetInt -= 8; ld(R14, offsetInt, R1_SP);
offsetInt -= 8; ld(R15, offsetInt, R1_SP);
- offsetInt -= 8; ld(R16, offsetInt, R1_SP);
}
void MacroAssembler::crc32(Register crc, Register buf, Register len, Register t0, Register t1, Register t2,
@@ -4479,30 +4427,12 @@
: StubRoutines::crc_table_addr() , R0);
if (VM_Version::has_vpmsumb()) {
- load_const_optimized(t1, is_crc32c ? StubRoutines::ppc64::crc32c_constants()
- : StubRoutines::ppc64::crc_constants() , R0);
kernel_crc32_vpmsum(crc, buf, len, t0, t1, t2, t3, t4, t5, t6, t7, !is_crc32c);
} else {
kernel_crc32_1word(crc, buf, len, t0, t1, t2, t3, t4, t5, t6, t7, t0, !is_crc32c);
}
}
-void MacroAssembler::kernel_crc32_singleByte(Register crc, Register buf, Register len, Register table, Register tmp, bool invertCRC) {
- assert_different_registers(crc, buf, /* len, not used!! */ table, tmp);
-
- BLOCK_COMMENT("kernel_crc32_singleByte:");
- if (invertCRC) {
- nand(crc, crc, crc); // 1s complement of crc
- }
-
- lbz(tmp, 0, buf); // Byte from buffer, zero-extended.
- update_byte_crc32(crc, tmp, table);
-
- if (invertCRC) {
- nand(crc, crc, crc); // 1s complement of crc
- }
-}
-
void MacroAssembler::kernel_crc32_singleByteReg(Register crc, Register val, Register table, bool invertCRC) {
assert_different_registers(crc, val, table);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/ppc/macroAssembler_ppc.hpp
--- a/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -828,7 +828,6 @@
void load_reverse_32(Register dst, Register src);
int crc32_table_columns(Register table, Register tc0, Register tc1, Register tc2, Register tc3);
void fold_byte_crc32(Register crc, Register val, Register table, Register tmp);
- void fold_8bit_crc32(Register crc, Register table, Register tmp);
void update_byte_crc32(Register crc, Register val, Register table);
void update_byteLoop_crc32(Register crc, Register buf, Register len, Register table,
Register data, bool loopAlignment);
@@ -839,20 +838,16 @@
Register t0, Register t1, Register t2, Register t3,
Register tc0, Register tc1, Register tc2, Register tc3,
bool invertCRC);
- void kernel_crc32_1byte(Register crc, Register buf, Register len, Register table,
- Register t0, Register t1, Register t2, Register t3,
- bool invertCRC);
- void kernel_crc32_vpmsum(Register crc, Register buf, Register len, Register table, Register constants,
- Register t0, Register t1, Register t2, Register t3, Register t4, Register t5,
- bool invertCRC);
+ void kernel_crc32_vpmsum(Register crc, Register buf, Register len, Register constants,
+ Register t0, Register t1, Register t2, Register t3, Register t4,
+ Register t5, Register t6, bool invertCRC);
void kernel_crc32_vpmsum_aligned(Register crc, Register buf, Register len, Register constants,
- Register t0, Register t1, Register t2, Register t3, Register t4, Register t5);
+ Register t0, Register t1, Register t2, Register t3, Register t4,
+ Register t5, Register t6);
// Version which internally decides what to use.
void crc32(Register crc, Register buf, Register len, Register t0, Register t1, Register t2,
Register t3, Register t4, Register t5, Register t6, Register t7, bool is_crc32c);
- void kernel_crc32_singleByte(Register crc, Register buf, Register len, Register table, Register tmp,
- bool invertCRC);
void kernel_crc32_singleByteReg(Register crc, Register val, Register table,
bool invertCRC);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/ppc/stubGenerator_ppc.cpp
--- a/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -3496,19 +3496,13 @@
// CRC32 Intrinsics.
if (UseCRC32Intrinsics) {
- StubRoutines::_crc_table_adr = (address)StubRoutines::ppc64::_crc_table;
- if (VM_Version::has_vpmsumb()) {
- StubRoutines::ppc64::_crc_constants = StubRoutines::ppc64::generate_crc_constants(REVERSE_CRC32_POLY);
- }
+ StubRoutines::_crc_table_adr = StubRoutines::generate_crc_constants(REVERSE_CRC32_POLY);
StubRoutines::_updateBytesCRC32 = generate_CRC32_updateBytes(false);
}
// CRC32C Intrinsics.
if (UseCRC32CIntrinsics) {
- StubRoutines::_crc32c_table_addr = (address)StubRoutines::ppc64::_crc32c_table;
- if (VM_Version::has_vpmsumb()) {
- StubRoutines::ppc64::_crc32c_constants = StubRoutines::ppc64::generate_crc_constants(REVERSE_CRC32C_POLY);
- }
+ StubRoutines::_crc32c_table_addr = StubRoutines::generate_crc_constants(REVERSE_CRC32C_POLY);
StubRoutines::_updateBytesCRC32C = generate_CRC32_updateBytes(true);
}
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/ppc/stubRoutines_ppc.hpp
--- a/src/hotspot/cpu/ppc/stubRoutines_ppc.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/ppc/stubRoutines_ppc.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -38,14 +38,7 @@
};
// CRC32 Intrinsics.
-#define CRC32_COLUMN_SIZE 256
-#define CRC32_BYFOUR
-#ifdef CRC32_BYFOUR
- #define CRC32_TABLES 8
-#else
- #define CRC32_TABLES 1
-#endif
-
+#define CRC32_TABLE_SIZE (4 * 256)
#define REVERSE_CRC32_POLY 0xEDB88320
#define REVERSE_CRC32C_POLY 0x82F63B78
#define INVERSE_REVERSE_CRC32_POLY 0x1aab14226ull
@@ -53,24 +46,6 @@
#define CRC32_UNROLL_FACTOR 2048
#define CRC32_UNROLL_FACTOR2 8
-
-class ppc64 {
- friend class StubGenerator;
-
- private:
-
- // CRC32 Intrinsics.
- static juint _crc_table[CRC32_TABLES][CRC32_COLUMN_SIZE];
- static juint _crc32c_table[CRC32_TABLES][CRC32_COLUMN_SIZE];
- static juint *_crc_constants;
- static juint *_crc32c_constants;
-
- public:
-
- // CRC32 Intrinsics.
- static address crc_constants() { return (address)_crc_constants; }
- static address crc32c_constants() { return (address)_crc32c_constants; }
- static juint* generate_crc_constants(juint reverse_poly);
-};
+static address generate_crc_constants(juint reverse_poly);
#endif // CPU_PPC_STUBROUTINES_PPC_HPP
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/ppc/stubRoutines_ppc_64.cpp
--- a/src/hotspot/cpu/ppc/stubRoutines_ppc_64.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/ppc/stubRoutines_ppc_64.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -26,6 +26,7 @@
#include "precompiled.hpp"
#include "asm/macroAssembler.inline.hpp"
#include "runtime/stubRoutines.hpp"
+#include "runtime/vm_version.hpp"
// Implementation of the platform-specific part of StubRoutines - for
// a description of how to extend it, see the stubRoutines.hpp file.
@@ -34,6 +35,14 @@
#define __ masm->
// CRC constant compute functions
+static juint fold_byte(juint w, juint reverse_poly) {
+ for (int i = 0; i < 8; i++) {
+ int poly_if_odd = (-(w & 1)) & reverse_poly;
+ w = (w >> 1) ^ poly_if_odd;
+ }
+ return w;
+}
+
static juint fold_word(juint w, juint reverse_poly) {
for (int i = 0; i < 32; i++) {
int poly_if_odd = (-(w & 1)) & reverse_poly;
@@ -64,11 +73,71 @@
return div;
}
+#ifndef VM_LITTLE_ENDIAN
+static void reverse_bytes(juint &w) {
+ w = ((w >> 24) & 0xFF) | (((w >> 16) & 0xFF) << 8) | (((w >> 8) & 0xFF) << 16) | ((w & 0xFF) << 24);
+}
+#endif
+
// Constants to fold n words as needed by macroAssembler.
-juint* StubRoutines::ppc64::generate_crc_constants(juint reverse_poly) {
- juint* ptr = (juint*) malloc(sizeof(juint) * 4 * (CRC32_UNROLL_FACTOR2 + CRC32_UNROLL_FACTOR / CRC32_UNROLL_FACTOR2));
- guarantee(((intptr_t)ptr & 0xF) == 0, "16-byte alignment needed");
- guarantee(ptr != NULL, "allocation error of a crc table");
+address StubRoutines::generate_crc_constants(juint reverse_poly) {
+ // Layout of constant table:
+ // <= Power7 Little Endian: 4 tables for byte folding
+ // <= Power7 Big Endian: 1 table for single byte folding + 4 tables for multi-byte folding
+ // >= Power8: 1 table for single byte folding + constants for fast vector implementation
+ const bool use_vector = VM_Version::has_vpmsumb();
+ const int vector_size = 16 * (CRC32_UNROLL_FACTOR2 + CRC32_UNROLL_FACTOR / CRC32_UNROLL_FACTOR2);
+
+ const int size = use_vector ? CRC32_TABLE_SIZE + vector_size : (4 BIG_ENDIAN_ONLY(+1)) * CRC32_TABLE_SIZE;
+ const address consts = (address)malloc(size);
+ if (consts == NULL) {
+ vm_exit_out_of_memory(size, OOM_MALLOC_ERROR, "CRC constants: no enough space");
+ }
+ juint* ptr = (juint*)consts;
+
+ // Simple table used for single byte folding
+ LITTLE_ENDIAN_ONLY(if (use_vector)) {
+ for (int i = 0; i < 256; ++i) {
+ ptr[i] = fold_byte(i, reverse_poly);
+ }
+ }
+
+ if (!use_vector) {
+ BIG_ENDIAN_ONLY(ptr = (juint*)(consts + CRC32_TABLE_SIZE);)
+ // <= Power7: 4 tables
+ for (int i = 0; i < 256; ++i) {
+ juint a = fold_byte(i, reverse_poly),
+ b = fold_byte(a, reverse_poly),
+ c = fold_byte(b, reverse_poly),
+ d = fold_byte(c, reverse_poly);
+#ifndef VM_LITTLE_ENDIAN
+ reverse_bytes(a);
+ reverse_bytes(b);
+ reverse_bytes(c);
+ reverse_bytes(d);
+#endif
+ ptr[i ] = a;
+ ptr[i + 256] = b;
+ ptr[i + 2* 256] = c;
+ ptr[i + 3* 256] = d;
+ }
+#if 0
+ for (int i = 0; i < 4; ++i) {
+ tty->print_cr("table %d:", i);
+ for (int j = 0; j < 32; ++j) {
+ for (int k = 0; k < 8; ++k) {
+ tty->print("%08x ", ptr[i*256 + j*8 + k]);
+ }
+ tty->cr();
+ }
+ }
+#endif
+ return consts;
+ }
+
+ // >= Power8: vector constants
+ juint* ptr1 = (juint*)(consts + CRC32_TABLE_SIZE);
+ guarantee(((intptr_t)ptr1 & 0xF) == 0, "16-byte alignment needed");
// Generate constants for outer loop
juint v0, v1, v2, v3 = 1;
@@ -78,20 +147,20 @@
v2 = fold_word(v1, reverse_poly);
v3 = fold_word(v2, reverse_poly);
#ifdef VM_LITTLE_ENDIAN
- ptr[4*i ] = v3;
- ptr[4*i+1] = v2;
- ptr[4*i+2] = v3;
- ptr[4*i+3] = v2;
+ ptr1[4*i ] = v3;
+ ptr1[4*i+1] = v2;
+ ptr1[4*i+2] = v3;
+ ptr1[4*i+3] = v2;
#else
- ptr[4*i ] = v2;
- ptr[4*i+1] = v3;
- ptr[4*i+2] = v2;
- ptr[4*i+3] = v3;
+ ptr1[4*i ] = v2;
+ ptr1[4*i+1] = v3;
+ ptr1[4*i+2] = v2;
+ ptr1[4*i+3] = v3;
#endif
}
// Generate constants for inner loop
- juint* ptr2 = ptr + 4 * (CRC32_UNROLL_FACTOR2 - 1);
+ juint* ptr2 = ptr1 + 4 * (CRC32_UNROLL_FACTOR2 - 1);
v3 = 1; // Restart from scratch.
for (int i = 0; i < CRC32_UNROLL_FACTOR; ++i) {
v0 = fold_word(v3, reverse_poly);
@@ -139,600 +208,5 @@
//printf("inv poly: 0x%016llx\n", (long long unsigned int)inverse_long_poly);
- return ptr;
+ return consts;
}
-
-// CRC32 Intrinsics.
-/**
- * crc_table[] from jdk/src/share/native/java/util/zip/zlib-1.2.8/crc32.h
- */
-juint StubRoutines::ppc64::_crc_table[CRC32_TABLES][CRC32_COLUMN_SIZE] = {
- /* polyBits = 7976584769 0x00000001db710641L, shifted = 0xedb88320 */
- /* CRC32 table for single bytes, auto-generated. DO NOT MODIFY! */
- /* CRC32 table 0 for quad-bytes (little-endian), auto-generated. DO NOT MODIFY! */
- {
- /* 0 */ 0x00000000U, 0x77073096U, 0xee0e612cU, 0x990951baU, 0x076dc419U, 0x706af48fU, 0xe963a535U, 0x9e6495a3U
- /* 8 */ , 0x0edb8832U, 0x79dcb8a4U, 0xe0d5e91eU, 0x97d2d988U, 0x09b64c2bU, 0x7eb17cbdU, 0xe7b82d07U, 0x90bf1d91U
- /* 16 */ , 0x1db71064U, 0x6ab020f2U, 0xf3b97148U, 0x84be41deU, 0x1adad47dU, 0x6ddde4ebU, 0xf4d4b551U, 0x83d385c7U
- /* 24 */ , 0x136c9856U, 0x646ba8c0U, 0xfd62f97aU, 0x8a65c9ecU, 0x14015c4fU, 0x63066cd9U, 0xfa0f3d63U, 0x8d080df5U
- /* 32 */ , 0x3b6e20c8U, 0x4c69105eU, 0xd56041e4U, 0xa2677172U, 0x3c03e4d1U, 0x4b04d447U, 0xd20d85fdU, 0xa50ab56bU
- /* 40 */ , 0x35b5a8faU, 0x42b2986cU, 0xdbbbc9d6U, 0xacbcf940U, 0x32d86ce3U, 0x45df5c75U, 0xdcd60dcfU, 0xabd13d59U
- /* 48 */ , 0x26d930acU, 0x51de003aU, 0xc8d75180U, 0xbfd06116U, 0x21b4f4b5U, 0x56b3c423U, 0xcfba9599U, 0xb8bda50fU
- /* 56 */ , 0x2802b89eU, 0x5f058808U, 0xc60cd9b2U, 0xb10be924U, 0x2f6f7c87U, 0x58684c11U, 0xc1611dabU, 0xb6662d3dU
- /* 64 */ , 0x76dc4190U, 0x01db7106U, 0x98d220bcU, 0xefd5102aU, 0x71b18589U, 0x06b6b51fU, 0x9fbfe4a5U, 0xe8b8d433U
- /* 72 */ , 0x7807c9a2U, 0x0f00f934U, 0x9609a88eU, 0xe10e9818U, 0x7f6a0dbbU, 0x086d3d2dU, 0x91646c97U, 0xe6635c01U
- /* 80 */ , 0x6b6b51f4U, 0x1c6c6162U, 0x856530d8U, 0xf262004eU, 0x6c0695edU, 0x1b01a57bU, 0x8208f4c1U, 0xf50fc457U
- /* 88 */ , 0x65b0d9c6U, 0x12b7e950U, 0x8bbeb8eaU, 0xfcb9887cU, 0x62dd1ddfU, 0x15da2d49U, 0x8cd37cf3U, 0xfbd44c65U
- /* 96 */ , 0x4db26158U, 0x3ab551ceU, 0xa3bc0074U, 0xd4bb30e2U, 0x4adfa541U, 0x3dd895d7U, 0xa4d1c46dU, 0xd3d6f4fbU
- /* 104 */ , 0x4369e96aU, 0x346ed9fcU, 0xad678846U, 0xda60b8d0U, 0x44042d73U, 0x33031de5U, 0xaa0a4c5fU, 0xdd0d7cc9U
- /* 112 */ , 0x5005713cU, 0x270241aaU, 0xbe0b1010U, 0xc90c2086U, 0x5768b525U, 0x206f85b3U, 0xb966d409U, 0xce61e49fU
- /* 120 */ , 0x5edef90eU, 0x29d9c998U, 0xb0d09822U, 0xc7d7a8b4U, 0x59b33d17U, 0x2eb40d81U, 0xb7bd5c3bU, 0xc0ba6cadU
- /* 128 */ , 0xedb88320U, 0x9abfb3b6U, 0x03b6e20cU, 0x74b1d29aU, 0xead54739U, 0x9dd277afU, 0x04db2615U, 0x73dc1683U
- /* 136 */ , 0xe3630b12U, 0x94643b84U, 0x0d6d6a3eU, 0x7a6a5aa8U, 0xe40ecf0bU, 0x9309ff9dU, 0x0a00ae27U, 0x7d079eb1U
- /* 144 */ , 0xf00f9344U, 0x8708a3d2U, 0x1e01f268U, 0x6906c2feU, 0xf762575dU, 0x806567cbU, 0x196c3671U, 0x6e6b06e7U
- /* 152 */ , 0xfed41b76U, 0x89d32be0U, 0x10da7a5aU, 0x67dd4accU, 0xf9b9df6fU, 0x8ebeeff9U, 0x17b7be43U, 0x60b08ed5U
- /* 160 */ , 0xd6d6a3e8U, 0xa1d1937eU, 0x38d8c2c4U, 0x4fdff252U, 0xd1bb67f1U, 0xa6bc5767U, 0x3fb506ddU, 0x48b2364bU
- /* 168 */ , 0xd80d2bdaU, 0xaf0a1b4cU, 0x36034af6U, 0x41047a60U, 0xdf60efc3U, 0xa867df55U, 0x316e8eefU, 0x4669be79U
- /* 176 */ , 0xcb61b38cU, 0xbc66831aU, 0x256fd2a0U, 0x5268e236U, 0xcc0c7795U, 0xbb0b4703U, 0x220216b9U, 0x5505262fU
- /* 184 */ , 0xc5ba3bbeU, 0xb2bd0b28U, 0x2bb45a92U, 0x5cb36a04U, 0xc2d7ffa7U, 0xb5d0cf31U, 0x2cd99e8bU, 0x5bdeae1dU
- /* 192 */ , 0x9b64c2b0U, 0xec63f226U, 0x756aa39cU, 0x026d930aU, 0x9c0906a9U, 0xeb0e363fU, 0x72076785U, 0x05005713U
- /* 200 */ , 0x95bf4a82U, 0xe2b87a14U, 0x7bb12baeU, 0x0cb61b38U, 0x92d28e9bU, 0xe5d5be0dU, 0x7cdcefb7U, 0x0bdbdf21U
- /* 208 */ , 0x86d3d2d4U, 0xf1d4e242U, 0x68ddb3f8U, 0x1fda836eU, 0x81be16cdU, 0xf6b9265bU, 0x6fb077e1U, 0x18b74777U
- /* 216 */ , 0x88085ae6U, 0xff0f6a70U, 0x66063bcaU, 0x11010b5cU, 0x8f659effU, 0xf862ae69U, 0x616bffd3U, 0x166ccf45U
- /* 224 */ , 0xa00ae278U, 0xd70dd2eeU, 0x4e048354U, 0x3903b3c2U, 0xa7672661U, 0xd06016f7U, 0x4969474dU, 0x3e6e77dbU
- /* 232 */ , 0xaed16a4aU, 0xd9d65adcU, 0x40df0b66U, 0x37d83bf0U, 0xa9bcae53U, 0xdebb9ec5U, 0x47b2cf7fU, 0x30b5ffe9U
- /* 240 */ , 0xbdbdf21cU, 0xcabac28aU, 0x53b39330U, 0x24b4a3a6U, 0xbad03605U, 0xcdd70693U, 0x54de5729U, 0x23d967bfU
- /* 248 */ , 0xb3667a2eU, 0xc4614ab8U, 0x5d681b02U, 0x2a6f2b94U, 0xb40bbe37U, 0xc30c8ea1U, 0x5a05df1bU, 0x2d02ef8dU
- }
- #ifdef CRC32_BYFOUR
- ,
- /* CRC32 table 1 for quad-bytes (little-endian), auto-generated. DO NOT MODIFY! */
- {
- /* 0 */ 0x00000000U, 0x191b3141U, 0x32366282U, 0x2b2d53c3U, 0x646cc504U, 0x7d77f445U, 0x565aa786U, 0x4f4196c7U
- /* 8 */ , 0xc8d98a08U, 0xd1c2bb49U, 0xfaefe88aU, 0xe3f4d9cbU, 0xacb54f0cU, 0xb5ae7e4dU, 0x9e832d8eU, 0x87981ccfU
- /* 16 */ , 0x4ac21251U, 0x53d92310U, 0x78f470d3U, 0x61ef4192U, 0x2eaed755U, 0x37b5e614U, 0x1c98b5d7U, 0x05838496U
- /* 24 */ , 0x821b9859U, 0x9b00a918U, 0xb02dfadbU, 0xa936cb9aU, 0xe6775d5dU, 0xff6c6c1cU, 0xd4413fdfU, 0xcd5a0e9eU
- /* 32 */ , 0x958424a2U, 0x8c9f15e3U, 0xa7b24620U, 0xbea97761U, 0xf1e8e1a6U, 0xe8f3d0e7U, 0xc3de8324U, 0xdac5b265U
- /* 40 */ , 0x5d5daeaaU, 0x44469febU, 0x6f6bcc28U, 0x7670fd69U, 0x39316baeU, 0x202a5aefU, 0x0b07092cU, 0x121c386dU
- /* 48 */ , 0xdf4636f3U, 0xc65d07b2U, 0xed705471U, 0xf46b6530U, 0xbb2af3f7U, 0xa231c2b6U, 0x891c9175U, 0x9007a034U
- /* 56 */ , 0x179fbcfbU, 0x0e848dbaU, 0x25a9de79U, 0x3cb2ef38U, 0x73f379ffU, 0x6ae848beU, 0x41c51b7dU, 0x58de2a3cU
- /* 64 */ , 0xf0794f05U, 0xe9627e44U, 0xc24f2d87U, 0xdb541cc6U, 0x94158a01U, 0x8d0ebb40U, 0xa623e883U, 0xbf38d9c2U
- /* 72 */ , 0x38a0c50dU, 0x21bbf44cU, 0x0a96a78fU, 0x138d96ceU, 0x5ccc0009U, 0x45d73148U, 0x6efa628bU, 0x77e153caU
- /* 80 */ , 0xbabb5d54U, 0xa3a06c15U, 0x888d3fd6U, 0x91960e97U, 0xded79850U, 0xc7cca911U, 0xece1fad2U, 0xf5facb93U
- /* 88 */ , 0x7262d75cU, 0x6b79e61dU, 0x4054b5deU, 0x594f849fU, 0x160e1258U, 0x0f152319U, 0x243870daU, 0x3d23419bU
- /* 96 */ , 0x65fd6ba7U, 0x7ce65ae6U, 0x57cb0925U, 0x4ed03864U, 0x0191aea3U, 0x188a9fe2U, 0x33a7cc21U, 0x2abcfd60U
- /* 104 */ , 0xad24e1afU, 0xb43fd0eeU, 0x9f12832dU, 0x8609b26cU, 0xc94824abU, 0xd05315eaU, 0xfb7e4629U, 0xe2657768U
- /* 112 */ , 0x2f3f79f6U, 0x362448b7U, 0x1d091b74U, 0x04122a35U, 0x4b53bcf2U, 0x52488db3U, 0x7965de70U, 0x607eef31U
- /* 120 */ , 0xe7e6f3feU, 0xfefdc2bfU, 0xd5d0917cU, 0xcccba03dU, 0x838a36faU, 0x9a9107bbU, 0xb1bc5478U, 0xa8a76539U
- /* 128 */ , 0x3b83984bU, 0x2298a90aU, 0x09b5fac9U, 0x10aecb88U, 0x5fef5d4fU, 0x46f46c0eU, 0x6dd93fcdU, 0x74c20e8cU
- /* 136 */ , 0xf35a1243U, 0xea412302U, 0xc16c70c1U, 0xd8774180U, 0x9736d747U, 0x8e2de606U, 0xa500b5c5U, 0xbc1b8484U
- /* 144 */ , 0x71418a1aU, 0x685abb5bU, 0x4377e898U, 0x5a6cd9d9U, 0x152d4f1eU, 0x0c367e5fU, 0x271b2d9cU, 0x3e001cddU
- /* 152 */ , 0xb9980012U, 0xa0833153U, 0x8bae6290U, 0x92b553d1U, 0xddf4c516U, 0xc4eff457U, 0xefc2a794U, 0xf6d996d5U
- /* 160 */ , 0xae07bce9U, 0xb71c8da8U, 0x9c31de6bU, 0x852aef2aU, 0xca6b79edU, 0xd37048acU, 0xf85d1b6fU, 0xe1462a2eU
- /* 168 */ , 0x66de36e1U, 0x7fc507a0U, 0x54e85463U, 0x4df36522U, 0x02b2f3e5U, 0x1ba9c2a4U, 0x30849167U, 0x299fa026U
- /* 176 */ , 0xe4c5aeb8U, 0xfdde9ff9U, 0xd6f3cc3aU, 0xcfe8fd7bU, 0x80a96bbcU, 0x99b25afdU, 0xb29f093eU, 0xab84387fU
- /* 184 */ , 0x2c1c24b0U, 0x350715f1U, 0x1e2a4632U, 0x07317773U, 0x4870e1b4U, 0x516bd0f5U, 0x7a468336U, 0x635db277U
- /* 192 */ , 0xcbfad74eU, 0xd2e1e60fU, 0xf9ccb5ccU, 0xe0d7848dU, 0xaf96124aU, 0xb68d230bU, 0x9da070c8U, 0x84bb4189U
- /* 200 */ , 0x03235d46U, 0x1a386c07U, 0x31153fc4U, 0x280e0e85U, 0x674f9842U, 0x7e54a903U, 0x5579fac0U, 0x4c62cb81U
- /* 208 */ , 0x8138c51fU, 0x9823f45eU, 0xb30ea79dU, 0xaa1596dcU, 0xe554001bU, 0xfc4f315aU, 0xd7626299U, 0xce7953d8U
- /* 216 */ , 0x49e14f17U, 0x50fa7e56U, 0x7bd72d95U, 0x62cc1cd4U, 0x2d8d8a13U, 0x3496bb52U, 0x1fbbe891U, 0x06a0d9d0U
- /* 224 */ , 0x5e7ef3ecU, 0x4765c2adU, 0x6c48916eU, 0x7553a02fU, 0x3a1236e8U, 0x230907a9U, 0x0824546aU, 0x113f652bU
- /* 232 */ , 0x96a779e4U, 0x8fbc48a5U, 0xa4911b66U, 0xbd8a2a27U, 0xf2cbbce0U, 0xebd08da1U, 0xc0fdde62U, 0xd9e6ef23U
- /* 240 */ , 0x14bce1bdU, 0x0da7d0fcU, 0x268a833fU, 0x3f91b27eU, 0x70d024b9U, 0x69cb15f8U, 0x42e6463bU, 0x5bfd777aU
- /* 248 */ , 0xdc656bb5U, 0xc57e5af4U, 0xee530937U, 0xf7483876U, 0xb809aeb1U, 0xa1129ff0U, 0x8a3fcc33U, 0x9324fd72U
- }
- ,
- /* CRC32 table 2 for quad-bytes (little-endian), auto-generated. DO NOT MODIFY! */
- {
- /* 0 */ 0x00000000U, 0x01c26a37U, 0x0384d46eU, 0x0246be59U, 0x0709a8dcU, 0x06cbc2ebU, 0x048d7cb2U, 0x054f1685U
- /* 8 */ , 0x0e1351b8U, 0x0fd13b8fU, 0x0d9785d6U, 0x0c55efe1U, 0x091af964U, 0x08d89353U, 0x0a9e2d0aU, 0x0b5c473dU
- /* 16 */ , 0x1c26a370U, 0x1de4c947U, 0x1fa2771eU, 0x1e601d29U, 0x1b2f0bacU, 0x1aed619bU, 0x18abdfc2U, 0x1969b5f5U
- /* 24 */ , 0x1235f2c8U, 0x13f798ffU, 0x11b126a6U, 0x10734c91U, 0x153c5a14U, 0x14fe3023U, 0x16b88e7aU, 0x177ae44dU
- /* 32 */ , 0x384d46e0U, 0x398f2cd7U, 0x3bc9928eU, 0x3a0bf8b9U, 0x3f44ee3cU, 0x3e86840bU, 0x3cc03a52U, 0x3d025065U
- /* 40 */ , 0x365e1758U, 0x379c7d6fU, 0x35dac336U, 0x3418a901U, 0x3157bf84U, 0x3095d5b3U, 0x32d36beaU, 0x331101ddU
- /* 48 */ , 0x246be590U, 0x25a98fa7U, 0x27ef31feU, 0x262d5bc9U, 0x23624d4cU, 0x22a0277bU, 0x20e69922U, 0x2124f315U
- /* 56 */ , 0x2a78b428U, 0x2bbade1fU, 0x29fc6046U, 0x283e0a71U, 0x2d711cf4U, 0x2cb376c3U, 0x2ef5c89aU, 0x2f37a2adU
- /* 64 */ , 0x709a8dc0U, 0x7158e7f7U, 0x731e59aeU, 0x72dc3399U, 0x7793251cU, 0x76514f2bU, 0x7417f172U, 0x75d59b45U
- /* 72 */ , 0x7e89dc78U, 0x7f4bb64fU, 0x7d0d0816U, 0x7ccf6221U, 0x798074a4U, 0x78421e93U, 0x7a04a0caU, 0x7bc6cafdU
- /* 80 */ , 0x6cbc2eb0U, 0x6d7e4487U, 0x6f38fadeU, 0x6efa90e9U, 0x6bb5866cU, 0x6a77ec5bU, 0x68315202U, 0x69f33835U
- /* 88 */ , 0x62af7f08U, 0x636d153fU, 0x612bab66U, 0x60e9c151U, 0x65a6d7d4U, 0x6464bde3U, 0x662203baU, 0x67e0698dU
- /* 96 */ , 0x48d7cb20U, 0x4915a117U, 0x4b531f4eU, 0x4a917579U, 0x4fde63fcU, 0x4e1c09cbU, 0x4c5ab792U, 0x4d98dda5U
- /* 104 */ , 0x46c49a98U, 0x4706f0afU, 0x45404ef6U, 0x448224c1U, 0x41cd3244U, 0x400f5873U, 0x4249e62aU, 0x438b8c1dU
- /* 112 */ , 0x54f16850U, 0x55330267U, 0x5775bc3eU, 0x56b7d609U, 0x53f8c08cU, 0x523aaabbU, 0x507c14e2U, 0x51be7ed5U
- /* 120 */ , 0x5ae239e8U, 0x5b2053dfU, 0x5966ed86U, 0x58a487b1U, 0x5deb9134U, 0x5c29fb03U, 0x5e6f455aU, 0x5fad2f6dU
- /* 128 */ , 0xe1351b80U, 0xe0f771b7U, 0xe2b1cfeeU, 0xe373a5d9U, 0xe63cb35cU, 0xe7fed96bU, 0xe5b86732U, 0xe47a0d05U
- /* 136 */ , 0xef264a38U, 0xeee4200fU, 0xeca29e56U, 0xed60f461U, 0xe82fe2e4U, 0xe9ed88d3U, 0xebab368aU, 0xea695cbdU
- /* 144 */ , 0xfd13b8f0U, 0xfcd1d2c7U, 0xfe976c9eU, 0xff5506a9U, 0xfa1a102cU, 0xfbd87a1bU, 0xf99ec442U, 0xf85cae75U
- /* 152 */ , 0xf300e948U, 0xf2c2837fU, 0xf0843d26U, 0xf1465711U, 0xf4094194U, 0xf5cb2ba3U, 0xf78d95faU, 0xf64fffcdU
- /* 160 */ , 0xd9785d60U, 0xd8ba3757U, 0xdafc890eU, 0xdb3ee339U, 0xde71f5bcU, 0xdfb39f8bU, 0xddf521d2U, 0xdc374be5U
- /* 168 */ , 0xd76b0cd8U, 0xd6a966efU, 0xd4efd8b6U, 0xd52db281U, 0xd062a404U, 0xd1a0ce33U, 0xd3e6706aU, 0xd2241a5dU
- /* 176 */ , 0xc55efe10U, 0xc49c9427U, 0xc6da2a7eU, 0xc7184049U, 0xc25756ccU, 0xc3953cfbU, 0xc1d382a2U, 0xc011e895U
- /* 184 */ , 0xcb4dafa8U, 0xca8fc59fU, 0xc8c97bc6U, 0xc90b11f1U, 0xcc440774U, 0xcd866d43U, 0xcfc0d31aU, 0xce02b92dU
- /* 192 */ , 0x91af9640U, 0x906dfc77U, 0x922b422eU, 0x93e92819U, 0x96a63e9cU, 0x976454abU, 0x9522eaf2U, 0x94e080c5U
- /* 200 */ , 0x9fbcc7f8U, 0x9e7eadcfU, 0x9c381396U, 0x9dfa79a1U, 0x98b56f24U, 0x99770513U, 0x9b31bb4aU, 0x9af3d17dU
- /* 208 */ , 0x8d893530U, 0x8c4b5f07U, 0x8e0de15eU, 0x8fcf8b69U, 0x8a809decU, 0x8b42f7dbU, 0x89044982U, 0x88c623b5U
- /* 216 */ , 0x839a6488U, 0x82580ebfU, 0x801eb0e6U, 0x81dcdad1U, 0x8493cc54U, 0x8551a663U, 0x8717183aU, 0x86d5720dU
- /* 224 */ , 0xa9e2d0a0U, 0xa820ba97U, 0xaa6604ceU, 0xaba46ef9U, 0xaeeb787cU, 0xaf29124bU, 0xad6fac12U, 0xacadc625U
- /* 232 */ , 0xa7f18118U, 0xa633eb2fU, 0xa4755576U, 0xa5b73f41U, 0xa0f829c4U, 0xa13a43f3U, 0xa37cfdaaU, 0xa2be979dU
- /* 240 */ , 0xb5c473d0U, 0xb40619e7U, 0xb640a7beU, 0xb782cd89U, 0xb2cddb0cU, 0xb30fb13bU, 0xb1490f62U, 0xb08b6555U
- /* 248 */ , 0xbbd72268U, 0xba15485fU, 0xb853f606U, 0xb9919c31U, 0xbcde8ab4U, 0xbd1ce083U, 0xbf5a5edaU, 0xbe9834edU
- }
- ,
- /* CRC32 table 3 for quad-bytes (little-endian), auto-generated. DO NOT MODIFY! */
- {
- /* 0 */ 0x00000000U, 0xb8bc6765U, 0xaa09c88bU, 0x12b5afeeU, 0x8f629757U, 0x37def032U, 0x256b5fdcU, 0x9dd738b9U
- /* 8 */ , 0xc5b428efU, 0x7d084f8aU, 0x6fbde064U, 0xd7018701U, 0x4ad6bfb8U, 0xf26ad8ddU, 0xe0df7733U, 0x58631056U
- /* 16 */ , 0x5019579fU, 0xe8a530faU, 0xfa109f14U, 0x42acf871U, 0xdf7bc0c8U, 0x67c7a7adU, 0x75720843U, 0xcdce6f26U
- /* 24 */ , 0x95ad7f70U, 0x2d111815U, 0x3fa4b7fbU, 0x8718d09eU, 0x1acfe827U, 0xa2738f42U, 0xb0c620acU, 0x087a47c9U
- /* 32 */ , 0xa032af3eU, 0x188ec85bU, 0x0a3b67b5U, 0xb28700d0U, 0x2f503869U, 0x97ec5f0cU, 0x8559f0e2U, 0x3de59787U
- /* 40 */ , 0x658687d1U, 0xdd3ae0b4U, 0xcf8f4f5aU, 0x7733283fU, 0xeae41086U, 0x525877e3U, 0x40edd80dU, 0xf851bf68U
- /* 48 */ , 0xf02bf8a1U, 0x48979fc4U, 0x5a22302aU, 0xe29e574fU, 0x7f496ff6U, 0xc7f50893U, 0xd540a77dU, 0x6dfcc018U
- /* 56 */ , 0x359fd04eU, 0x8d23b72bU, 0x9f9618c5U, 0x272a7fa0U, 0xbafd4719U, 0x0241207cU, 0x10f48f92U, 0xa848e8f7U
- /* 64 */ , 0x9b14583dU, 0x23a83f58U, 0x311d90b6U, 0x89a1f7d3U, 0x1476cf6aU, 0xaccaa80fU, 0xbe7f07e1U, 0x06c36084U
- /* 72 */ , 0x5ea070d2U, 0xe61c17b7U, 0xf4a9b859U, 0x4c15df3cU, 0xd1c2e785U, 0x697e80e0U, 0x7bcb2f0eU, 0xc377486bU
- /* 80 */ , 0xcb0d0fa2U, 0x73b168c7U, 0x6104c729U, 0xd9b8a04cU, 0x446f98f5U, 0xfcd3ff90U, 0xee66507eU, 0x56da371bU
- /* 88 */ , 0x0eb9274dU, 0xb6054028U, 0xa4b0efc6U, 0x1c0c88a3U, 0x81dbb01aU, 0x3967d77fU, 0x2bd27891U, 0x936e1ff4U
- /* 96 */ , 0x3b26f703U, 0x839a9066U, 0x912f3f88U, 0x299358edU, 0xb4446054U, 0x0cf80731U, 0x1e4da8dfU, 0xa6f1cfbaU
- /* 104 */ , 0xfe92dfecU, 0x462eb889U, 0x549b1767U, 0xec277002U, 0x71f048bbU, 0xc94c2fdeU, 0xdbf98030U, 0x6345e755U
- /* 112 */ , 0x6b3fa09cU, 0xd383c7f9U, 0xc1366817U, 0x798a0f72U, 0xe45d37cbU, 0x5ce150aeU, 0x4e54ff40U, 0xf6e89825U
- /* 120 */ , 0xae8b8873U, 0x1637ef16U, 0x048240f8U, 0xbc3e279dU, 0x21e91f24U, 0x99557841U, 0x8be0d7afU, 0x335cb0caU
- /* 128 */ , 0xed59b63bU, 0x55e5d15eU, 0x47507eb0U, 0xffec19d5U, 0x623b216cU, 0xda874609U, 0xc832e9e7U, 0x708e8e82U
- /* 136 */ , 0x28ed9ed4U, 0x9051f9b1U, 0x82e4565fU, 0x3a58313aU, 0xa78f0983U, 0x1f336ee6U, 0x0d86c108U, 0xb53aa66dU
- /* 144 */ , 0xbd40e1a4U, 0x05fc86c1U, 0x1749292fU, 0xaff54e4aU, 0x322276f3U, 0x8a9e1196U, 0x982bbe78U, 0x2097d91dU
- /* 152 */ , 0x78f4c94bU, 0xc048ae2eU, 0xd2fd01c0U, 0x6a4166a5U, 0xf7965e1cU, 0x4f2a3979U, 0x5d9f9697U, 0xe523f1f2U
- /* 160 */ , 0x4d6b1905U, 0xf5d77e60U, 0xe762d18eU, 0x5fdeb6ebU, 0xc2098e52U, 0x7ab5e937U, 0x680046d9U, 0xd0bc21bcU
- /* 168 */ , 0x88df31eaU, 0x3063568fU, 0x22d6f961U, 0x9a6a9e04U, 0x07bda6bdU, 0xbf01c1d8U, 0xadb46e36U, 0x15080953U
- /* 176 */ , 0x1d724e9aU, 0xa5ce29ffU, 0xb77b8611U, 0x0fc7e174U, 0x9210d9cdU, 0x2aacbea8U, 0x38191146U, 0x80a57623U
- /* 184 */ , 0xd8c66675U, 0x607a0110U, 0x72cfaefeU, 0xca73c99bU, 0x57a4f122U, 0xef189647U, 0xfdad39a9U, 0x45115eccU
- /* 192 */ , 0x764dee06U, 0xcef18963U, 0xdc44268dU, 0x64f841e8U, 0xf92f7951U, 0x41931e34U, 0x5326b1daU, 0xeb9ad6bfU
- /* 200 */ , 0xb3f9c6e9U, 0x0b45a18cU, 0x19f00e62U, 0xa14c6907U, 0x3c9b51beU, 0x842736dbU, 0x96929935U, 0x2e2efe50U
- /* 208 */ , 0x2654b999U, 0x9ee8defcU, 0x8c5d7112U, 0x34e11677U, 0xa9362eceU, 0x118a49abU, 0x033fe645U, 0xbb838120U
- /* 216 */ , 0xe3e09176U, 0x5b5cf613U, 0x49e959fdU, 0xf1553e98U, 0x6c820621U, 0xd43e6144U, 0xc68bceaaU, 0x7e37a9cfU
- /* 224 */ , 0xd67f4138U, 0x6ec3265dU, 0x7c7689b3U, 0xc4caeed6U, 0x591dd66fU, 0xe1a1b10aU, 0xf3141ee4U, 0x4ba87981U
- /* 232 */ , 0x13cb69d7U, 0xab770eb2U, 0xb9c2a15cU, 0x017ec639U, 0x9ca9fe80U, 0x241599e5U, 0x36a0360bU, 0x8e1c516eU
- /* 240 */ , 0x866616a7U, 0x3eda71c2U, 0x2c6fde2cU, 0x94d3b949U, 0x090481f0U, 0xb1b8e695U, 0xa30d497bU, 0x1bb12e1eU
- /* 248 */ , 0x43d23e48U, 0xfb6e592dU, 0xe9dbf6c3U, 0x516791a6U, 0xccb0a91fU, 0x740cce7aU, 0x66b96194U, 0xde0506f1U
- }
- ,
- /* CRC32 table 4 for quad-bytes ( big-endian ), auto-generated. DO NOT MODIFY! */
- {
- /* 0 */ 0x00000000U, 0x96300777U, 0x2c610eeeU, 0xba510999U, 0x19c46d07U, 0x8ff46a70U, 0x35a563e9U, 0xa395649eU
- /* 8 */ , 0x3288db0eU, 0xa4b8dc79U, 0x1ee9d5e0U, 0x88d9d297U, 0x2b4cb609U, 0xbd7cb17eU, 0x072db8e7U, 0x911dbf90U
- /* 16 */ , 0x6410b71dU, 0xf220b06aU, 0x4871b9f3U, 0xde41be84U, 0x7dd4da1aU, 0xebe4dd6dU, 0x51b5d4f4U, 0xc785d383U
- /* 24 */ , 0x56986c13U, 0xc0a86b64U, 0x7af962fdU, 0xecc9658aU, 0x4f5c0114U, 0xd96c0663U, 0x633d0ffaU, 0xf50d088dU
- /* 32 */ , 0xc8206e3bU, 0x5e10694cU, 0xe44160d5U, 0x727167a2U, 0xd1e4033cU, 0x47d4044bU, 0xfd850dd2U, 0x6bb50aa5U
- /* 40 */ , 0xfaa8b535U, 0x6c98b242U, 0xd6c9bbdbU, 0x40f9bcacU, 0xe36cd832U, 0x755cdf45U, 0xcf0dd6dcU, 0x593dd1abU
- /* 48 */ , 0xac30d926U, 0x3a00de51U, 0x8051d7c8U, 0x1661d0bfU, 0xb5f4b421U, 0x23c4b356U, 0x9995bacfU, 0x0fa5bdb8U
- /* 56 */ , 0x9eb80228U, 0x0888055fU, 0xb2d90cc6U, 0x24e90bb1U, 0x877c6f2fU, 0x114c6858U, 0xab1d61c1U, 0x3d2d66b6U
- /* 64 */ , 0x9041dc76U, 0x0671db01U, 0xbc20d298U, 0x2a10d5efU, 0x8985b171U, 0x1fb5b606U, 0xa5e4bf9fU, 0x33d4b8e8U
- /* 72 */ , 0xa2c90778U, 0x34f9000fU, 0x8ea80996U, 0x18980ee1U, 0xbb0d6a7fU, 0x2d3d6d08U, 0x976c6491U, 0x015c63e6U
- /* 80 */ , 0xf4516b6bU, 0x62616c1cU, 0xd8306585U, 0x4e0062f2U, 0xed95066cU, 0x7ba5011bU, 0xc1f40882U, 0x57c40ff5U
- /* 88 */ , 0xc6d9b065U, 0x50e9b712U, 0xeab8be8bU, 0x7c88b9fcU, 0xdf1ddd62U, 0x492dda15U, 0xf37cd38cU, 0x654cd4fbU
- /* 96 */ , 0x5861b24dU, 0xce51b53aU, 0x7400bca3U, 0xe230bbd4U, 0x41a5df4aU, 0xd795d83dU, 0x6dc4d1a4U, 0xfbf4d6d3U
- /* 104 */ , 0x6ae96943U, 0xfcd96e34U, 0x468867adU, 0xd0b860daU, 0x732d0444U, 0xe51d0333U, 0x5f4c0aaaU, 0xc97c0dddU
- /* 112 */ , 0x3c710550U, 0xaa410227U, 0x10100bbeU, 0x86200cc9U, 0x25b56857U, 0xb3856f20U, 0x09d466b9U, 0x9fe461ceU
- /* 120 */ , 0x0ef9de5eU, 0x98c9d929U, 0x2298d0b0U, 0xb4a8d7c7U, 0x173db359U, 0x810db42eU, 0x3b5cbdb7U, 0xad6cbac0U
- /* 128 */ , 0x2083b8edU, 0xb6b3bf9aU, 0x0ce2b603U, 0x9ad2b174U, 0x3947d5eaU, 0xaf77d29dU, 0x1526db04U, 0x8316dc73U
- /* 136 */ , 0x120b63e3U, 0x843b6494U, 0x3e6a6d0dU, 0xa85a6a7aU, 0x0bcf0ee4U, 0x9dff0993U, 0x27ae000aU, 0xb19e077dU
- /* 144 */ , 0x44930ff0U, 0xd2a30887U, 0x68f2011eU, 0xfec20669U, 0x5d5762f7U, 0xcb676580U, 0x71366c19U, 0xe7066b6eU
- /* 152 */ , 0x761bd4feU, 0xe02bd389U, 0x5a7ada10U, 0xcc4add67U, 0x6fdfb9f9U, 0xf9efbe8eU, 0x43beb717U, 0xd58eb060U
- /* 160 */ , 0xe8a3d6d6U, 0x7e93d1a1U, 0xc4c2d838U, 0x52f2df4fU, 0xf167bbd1U, 0x6757bca6U, 0xdd06b53fU, 0x4b36b248U
- /* 168 */ , 0xda2b0dd8U, 0x4c1b0aafU, 0xf64a0336U, 0x607a0441U, 0xc3ef60dfU, 0x55df67a8U, 0xef8e6e31U, 0x79be6946U
- /* 176 */ , 0x8cb361cbU, 0x1a8366bcU, 0xa0d26f25U, 0x36e26852U, 0x95770cccU, 0x03470bbbU, 0xb9160222U, 0x2f260555U
- /* 184 */ , 0xbe3bbac5U, 0x280bbdb2U, 0x925ab42bU, 0x046ab35cU, 0xa7ffd7c2U, 0x31cfd0b5U, 0x8b9ed92cU, 0x1daede5bU
- /* 192 */ , 0xb0c2649bU, 0x26f263ecU, 0x9ca36a75U, 0x0a936d02U, 0xa906099cU, 0x3f360eebU, 0x85670772U, 0x13570005U
- /* 200 */ , 0x824abf95U, 0x147ab8e2U, 0xae2bb17bU, 0x381bb60cU, 0x9b8ed292U, 0x0dbed5e5U, 0xb7efdc7cU, 0x21dfdb0bU
- /* 208 */ , 0xd4d2d386U, 0x42e2d4f1U, 0xf8b3dd68U, 0x6e83da1fU, 0xcd16be81U, 0x5b26b9f6U, 0xe177b06fU, 0x7747b718U
- /* 216 */ , 0xe65a0888U, 0x706a0fffU, 0xca3b0666U, 0x5c0b0111U, 0xff9e658fU, 0x69ae62f8U, 0xd3ff6b61U, 0x45cf6c16U
- /* 224 */ , 0x78e20aa0U, 0xeed20dd7U, 0x5483044eU, 0xc2b30339U, 0x612667a7U, 0xf71660d0U, 0x4d476949U, 0xdb776e3eU
- /* 232 */ , 0x4a6ad1aeU, 0xdc5ad6d9U, 0x660bdf40U, 0xf03bd837U, 0x53aebca9U, 0xc59ebbdeU, 0x7fcfb247U, 0xe9ffb530U
- /* 240 */ , 0x1cf2bdbdU, 0x8ac2bacaU, 0x3093b353U, 0xa6a3b424U, 0x0536d0baU, 0x9306d7cdU, 0x2957de54U, 0xbf67d923U
- /* 248 */ , 0x2e7a66b3U, 0xb84a61c4U, 0x021b685dU, 0x942b6f2aU, 0x37be0bb4U, 0xa18e0cc3U, 0x1bdf055aU, 0x8def022dU
- }
- ,
- /* CRC32 table 5 for quad-bytes ( big-endian ), auto-generated. DO NOT MODIFY! */
- {
- /* 0 */ 0x00000000U, 0x41311b19U, 0x82623632U, 0xc3532d2bU, 0x04c56c64U, 0x45f4777dU, 0x86a75a56U, 0xc796414fU
- /* 8 */ , 0x088ad9c8U, 0x49bbc2d1U, 0x8ae8effaU, 0xcbd9f4e3U, 0x0c4fb5acU, 0x4d7eaeb5U, 0x8e2d839eU, 0xcf1c9887U
- /* 16 */ , 0x5112c24aU, 0x1023d953U, 0xd370f478U, 0x9241ef61U, 0x55d7ae2eU, 0x14e6b537U, 0xd7b5981cU, 0x96848305U
- /* 24 */ , 0x59981b82U, 0x18a9009bU, 0xdbfa2db0U, 0x9acb36a9U, 0x5d5d77e6U, 0x1c6c6cffU, 0xdf3f41d4U, 0x9e0e5acdU
- /* 32 */ , 0xa2248495U, 0xe3159f8cU, 0x2046b2a7U, 0x6177a9beU, 0xa6e1e8f1U, 0xe7d0f3e8U, 0x2483dec3U, 0x65b2c5daU
- /* 40 */ , 0xaaae5d5dU, 0xeb9f4644U, 0x28cc6b6fU, 0x69fd7076U, 0xae6b3139U, 0xef5a2a20U, 0x2c09070bU, 0x6d381c12U
- /* 48 */ , 0xf33646dfU, 0xb2075dc6U, 0x715470edU, 0x30656bf4U, 0xf7f32abbU, 0xb6c231a2U, 0x75911c89U, 0x34a00790U
- /* 56 */ , 0xfbbc9f17U, 0xba8d840eU, 0x79dea925U, 0x38efb23cU, 0xff79f373U, 0xbe48e86aU, 0x7d1bc541U, 0x3c2ade58U
- /* 64 */ , 0x054f79f0U, 0x447e62e9U, 0x872d4fc2U, 0xc61c54dbU, 0x018a1594U, 0x40bb0e8dU, 0x83e823a6U, 0xc2d938bfU
- /* 72 */ , 0x0dc5a038U, 0x4cf4bb21U, 0x8fa7960aU, 0xce968d13U, 0x0900cc5cU, 0x4831d745U, 0x8b62fa6eU, 0xca53e177U
- /* 80 */ , 0x545dbbbaU, 0x156ca0a3U, 0xd63f8d88U, 0x970e9691U, 0x5098d7deU, 0x11a9ccc7U, 0xd2fae1ecU, 0x93cbfaf5U
- /* 88 */ , 0x5cd76272U, 0x1de6796bU, 0xdeb55440U, 0x9f844f59U, 0x58120e16U, 0x1923150fU, 0xda703824U, 0x9b41233dU
- /* 96 */ , 0xa76bfd65U, 0xe65ae67cU, 0x2509cb57U, 0x6438d04eU, 0xa3ae9101U, 0xe29f8a18U, 0x21cca733U, 0x60fdbc2aU
- /* 104 */ , 0xafe124adU, 0xeed03fb4U, 0x2d83129fU, 0x6cb20986U, 0xab2448c9U, 0xea1553d0U, 0x29467efbU, 0x687765e2U
- /* 112 */ , 0xf6793f2fU, 0xb7482436U, 0x741b091dU, 0x352a1204U, 0xf2bc534bU, 0xb38d4852U, 0x70de6579U, 0x31ef7e60U
- /* 120 */ , 0xfef3e6e7U, 0xbfc2fdfeU, 0x7c91d0d5U, 0x3da0cbccU, 0xfa368a83U, 0xbb07919aU, 0x7854bcb1U, 0x3965a7a8U
- /* 128 */ , 0x4b98833bU, 0x0aa99822U, 0xc9fab509U, 0x88cbae10U, 0x4f5def5fU, 0x0e6cf446U, 0xcd3fd96dU, 0x8c0ec274U
- /* 136 */ , 0x43125af3U, 0x022341eaU, 0xc1706cc1U, 0x804177d8U, 0x47d73697U, 0x06e62d8eU, 0xc5b500a5U, 0x84841bbcU
- /* 144 */ , 0x1a8a4171U, 0x5bbb5a68U, 0x98e87743U, 0xd9d96c5aU, 0x1e4f2d15U, 0x5f7e360cU, 0x9c2d1b27U, 0xdd1c003eU
- /* 152 */ , 0x120098b9U, 0x533183a0U, 0x9062ae8bU, 0xd153b592U, 0x16c5f4ddU, 0x57f4efc4U, 0x94a7c2efU, 0xd596d9f6U
- /* 160 */ , 0xe9bc07aeU, 0xa88d1cb7U, 0x6bde319cU, 0x2aef2a85U, 0xed796bcaU, 0xac4870d3U, 0x6f1b5df8U, 0x2e2a46e1U
- /* 168 */ , 0xe136de66U, 0xa007c57fU, 0x6354e854U, 0x2265f34dU, 0xe5f3b202U, 0xa4c2a91bU, 0x67918430U, 0x26a09f29U
- /* 176 */ , 0xb8aec5e4U, 0xf99fdefdU, 0x3accf3d6U, 0x7bfde8cfU, 0xbc6ba980U, 0xfd5ab299U, 0x3e099fb2U, 0x7f3884abU
- /* 184 */ , 0xb0241c2cU, 0xf1150735U, 0x32462a1eU, 0x73773107U, 0xb4e17048U, 0xf5d06b51U, 0x3683467aU, 0x77b25d63U
- /* 192 */ , 0x4ed7facbU, 0x0fe6e1d2U, 0xccb5ccf9U, 0x8d84d7e0U, 0x4a1296afU, 0x0b238db6U, 0xc870a09dU, 0x8941bb84U
- /* 200 */ , 0x465d2303U, 0x076c381aU, 0xc43f1531U, 0x850e0e28U, 0x42984f67U, 0x03a9547eU, 0xc0fa7955U, 0x81cb624cU
- /* 208 */ , 0x1fc53881U, 0x5ef42398U, 0x9da70eb3U, 0xdc9615aaU, 0x1b0054e5U, 0x5a314ffcU, 0x996262d7U, 0xd85379ceU
- /* 216 */ , 0x174fe149U, 0x567efa50U, 0x952dd77bU, 0xd41ccc62U, 0x138a8d2dU, 0x52bb9634U, 0x91e8bb1fU, 0xd0d9a006U
- /* 224 */ , 0xecf37e5eU, 0xadc26547U, 0x6e91486cU, 0x2fa05375U, 0xe836123aU, 0xa9070923U, 0x6a542408U, 0x2b653f11U
- /* 232 */ , 0xe479a796U, 0xa548bc8fU, 0x661b91a4U, 0x272a8abdU, 0xe0bccbf2U, 0xa18dd0ebU, 0x62defdc0U, 0x23efe6d9U
- /* 240 */ , 0xbde1bc14U, 0xfcd0a70dU, 0x3f838a26U, 0x7eb2913fU, 0xb924d070U, 0xf815cb69U, 0x3b46e642U, 0x7a77fd5bU
- /* 248 */ , 0xb56b65dcU, 0xf45a7ec5U, 0x370953eeU, 0x763848f7U, 0xb1ae09b8U, 0xf09f12a1U, 0x33cc3f8aU, 0x72fd2493U
- }
- ,
- /* CRC32 table 6 for quad-bytes ( big-endian ), auto-generated. DO NOT MODIFY! */
- {
- /* 0 */ 0x00000000U, 0x376ac201U, 0x6ed48403U, 0x59be4602U, 0xdca80907U, 0xebc2cb06U, 0xb27c8d04U, 0x85164f05U
- /* 8 */ , 0xb851130eU, 0x8f3bd10fU, 0xd685970dU, 0xe1ef550cU, 0x64f91a09U, 0x5393d808U, 0x0a2d9e0aU, 0x3d475c0bU
- /* 16 */ , 0x70a3261cU, 0x47c9e41dU, 0x1e77a21fU, 0x291d601eU, 0xac0b2f1bU, 0x9b61ed1aU, 0xc2dfab18U, 0xf5b56919U
- /* 24 */ , 0xc8f23512U, 0xff98f713U, 0xa626b111U, 0x914c7310U, 0x145a3c15U, 0x2330fe14U, 0x7a8eb816U, 0x4de47a17U
- /* 32 */ , 0xe0464d38U, 0xd72c8f39U, 0x8e92c93bU, 0xb9f80b3aU, 0x3cee443fU, 0x0b84863eU, 0x523ac03cU, 0x6550023dU
- /* 40 */ , 0x58175e36U, 0x6f7d9c37U, 0x36c3da35U, 0x01a91834U, 0x84bf5731U, 0xb3d59530U, 0xea6bd332U, 0xdd011133U
- /* 48 */ , 0x90e56b24U, 0xa78fa925U, 0xfe31ef27U, 0xc95b2d26U, 0x4c4d6223U, 0x7b27a022U, 0x2299e620U, 0x15f32421U
- /* 56 */ , 0x28b4782aU, 0x1fdeba2bU, 0x4660fc29U, 0x710a3e28U, 0xf41c712dU, 0xc376b32cU, 0x9ac8f52eU, 0xada2372fU
- /* 64 */ , 0xc08d9a70U, 0xf7e75871U, 0xae591e73U, 0x9933dc72U, 0x1c259377U, 0x2b4f5176U, 0x72f11774U, 0x459bd575U
- /* 72 */ , 0x78dc897eU, 0x4fb64b7fU, 0x16080d7dU, 0x2162cf7cU, 0xa4748079U, 0x931e4278U, 0xcaa0047aU, 0xfdcac67bU
- /* 80 */ , 0xb02ebc6cU, 0x87447e6dU, 0xdefa386fU, 0xe990fa6eU, 0x6c86b56bU, 0x5bec776aU, 0x02523168U, 0x3538f369U
- /* 88 */ , 0x087faf62U, 0x3f156d63U, 0x66ab2b61U, 0x51c1e960U, 0xd4d7a665U, 0xe3bd6464U, 0xba032266U, 0x8d69e067U
- /* 96 */ , 0x20cbd748U, 0x17a11549U, 0x4e1f534bU, 0x7975914aU, 0xfc63de4fU, 0xcb091c4eU, 0x92b75a4cU, 0xa5dd984dU
- /* 104 */ , 0x989ac446U, 0xaff00647U, 0xf64e4045U, 0xc1248244U, 0x4432cd41U, 0x73580f40U, 0x2ae64942U, 0x1d8c8b43U
- /* 112 */ , 0x5068f154U, 0x67023355U, 0x3ebc7557U, 0x09d6b756U, 0x8cc0f853U, 0xbbaa3a52U, 0xe2147c50U, 0xd57ebe51U
- /* 120 */ , 0xe839e25aU, 0xdf53205bU, 0x86ed6659U, 0xb187a458U, 0x3491eb5dU, 0x03fb295cU, 0x5a456f5eU, 0x6d2fad5fU
- /* 128 */ , 0x801b35e1U, 0xb771f7e0U, 0xeecfb1e2U, 0xd9a573e3U, 0x5cb33ce6U, 0x6bd9fee7U, 0x3267b8e5U, 0x050d7ae4U
- /* 136 */ , 0x384a26efU, 0x0f20e4eeU, 0x569ea2ecU, 0x61f460edU, 0xe4e22fe8U, 0xd388ede9U, 0x8a36abebU, 0xbd5c69eaU
- /* 144 */ , 0xf0b813fdU, 0xc7d2d1fcU, 0x9e6c97feU, 0xa90655ffU, 0x2c101afaU, 0x1b7ad8fbU, 0x42c49ef9U, 0x75ae5cf8U
- /* 152 */ , 0x48e900f3U, 0x7f83c2f2U, 0x263d84f0U, 0x115746f1U, 0x944109f4U, 0xa32bcbf5U, 0xfa958df7U, 0xcdff4ff6U
- /* 160 */ , 0x605d78d9U, 0x5737bad8U, 0x0e89fcdaU, 0x39e33edbU, 0xbcf571deU, 0x8b9fb3dfU, 0xd221f5ddU, 0xe54b37dcU
- /* 168 */ , 0xd80c6bd7U, 0xef66a9d6U, 0xb6d8efd4U, 0x81b22dd5U, 0x04a462d0U, 0x33cea0d1U, 0x6a70e6d3U, 0x5d1a24d2U
- /* 176 */ , 0x10fe5ec5U, 0x27949cc4U, 0x7e2adac6U, 0x494018c7U, 0xcc5657c2U, 0xfb3c95c3U, 0xa282d3c1U, 0x95e811c0U
- /* 184 */ , 0xa8af4dcbU, 0x9fc58fcaU, 0xc67bc9c8U, 0xf1110bc9U, 0x740744ccU, 0x436d86cdU, 0x1ad3c0cfU, 0x2db902ceU
- /* 192 */ , 0x4096af91U, 0x77fc6d90U, 0x2e422b92U, 0x1928e993U, 0x9c3ea696U, 0xab546497U, 0xf2ea2295U, 0xc580e094U
- /* 200 */ , 0xf8c7bc9fU, 0xcfad7e9eU, 0x9613389cU, 0xa179fa9dU, 0x246fb598U, 0x13057799U, 0x4abb319bU, 0x7dd1f39aU
- /* 208 */ , 0x3035898dU, 0x075f4b8cU, 0x5ee10d8eU, 0x698bcf8fU, 0xec9d808aU, 0xdbf7428bU, 0x82490489U, 0xb523c688U
- /* 216 */ , 0x88649a83U, 0xbf0e5882U, 0xe6b01e80U, 0xd1dadc81U, 0x54cc9384U, 0x63a65185U, 0x3a181787U, 0x0d72d586U
- /* 224 */ , 0xa0d0e2a9U, 0x97ba20a8U, 0xce0466aaU, 0xf96ea4abU, 0x7c78ebaeU, 0x4b1229afU, 0x12ac6fadU, 0x25c6adacU
- /* 232 */ , 0x1881f1a7U, 0x2feb33a6U, 0x765575a4U, 0x413fb7a5U, 0xc429f8a0U, 0xf3433aa1U, 0xaafd7ca3U, 0x9d97bea2U
- /* 240 */ , 0xd073c4b5U, 0xe71906b4U, 0xbea740b6U, 0x89cd82b7U, 0x0cdbcdb2U, 0x3bb10fb3U, 0x620f49b1U, 0x55658bb0U
- /* 248 */ , 0x6822d7bbU, 0x5f4815baU, 0x06f653b8U, 0x319c91b9U, 0xb48adebcU, 0x83e01cbdU, 0xda5e5abfU, 0xed3498beU
- }
- ,
- /* CRC32 table 7 for quad-bytes ( big-endian ), auto-generated. DO NOT MODIFY! */
- {
- /* 0 */ 0x00000000U, 0x6567bcb8U, 0x8bc809aaU, 0xeeafb512U, 0x5797628fU, 0x32f0de37U, 0xdc5f6b25U, 0xb938d79dU
- /* 8 */ , 0xef28b4c5U, 0x8a4f087dU, 0x64e0bd6fU, 0x018701d7U, 0xb8bfd64aU, 0xddd86af2U, 0x3377dfe0U, 0x56106358U
- /* 16 */ , 0x9f571950U, 0xfa30a5e8U, 0x149f10faU, 0x71f8ac42U, 0xc8c07bdfU, 0xada7c767U, 0x43087275U, 0x266fcecdU
- /* 24 */ , 0x707fad95U, 0x1518112dU, 0xfbb7a43fU, 0x9ed01887U, 0x27e8cf1aU, 0x428f73a2U, 0xac20c6b0U, 0xc9477a08U
- /* 32 */ , 0x3eaf32a0U, 0x5bc88e18U, 0xb5673b0aU, 0xd00087b2U, 0x6938502fU, 0x0c5fec97U, 0xe2f05985U, 0x8797e53dU
- /* 40 */ , 0xd1878665U, 0xb4e03addU, 0x5a4f8fcfU, 0x3f283377U, 0x8610e4eaU, 0xe3775852U, 0x0dd8ed40U, 0x68bf51f8U
- /* 48 */ , 0xa1f82bf0U, 0xc49f9748U, 0x2a30225aU, 0x4f579ee2U, 0xf66f497fU, 0x9308f5c7U, 0x7da740d5U, 0x18c0fc6dU
- /* 56 */ , 0x4ed09f35U, 0x2bb7238dU, 0xc518969fU, 0xa07f2a27U, 0x1947fdbaU, 0x7c204102U, 0x928ff410U, 0xf7e848a8U
- /* 64 */ , 0x3d58149bU, 0x583fa823U, 0xb6901d31U, 0xd3f7a189U, 0x6acf7614U, 0x0fa8caacU, 0xe1077fbeU, 0x8460c306U
- /* 72 */ , 0xd270a05eU, 0xb7171ce6U, 0x59b8a9f4U, 0x3cdf154cU, 0x85e7c2d1U, 0xe0807e69U, 0x0e2fcb7bU, 0x6b4877c3U
- /* 80 */ , 0xa20f0dcbU, 0xc768b173U, 0x29c70461U, 0x4ca0b8d9U, 0xf5986f44U, 0x90ffd3fcU, 0x7e5066eeU, 0x1b37da56U
- /* 88 */ , 0x4d27b90eU, 0x284005b6U, 0xc6efb0a4U, 0xa3880c1cU, 0x1ab0db81U, 0x7fd76739U, 0x9178d22bU, 0xf41f6e93U
- /* 96 */ , 0x03f7263bU, 0x66909a83U, 0x883f2f91U, 0xed589329U, 0x546044b4U, 0x3107f80cU, 0xdfa84d1eU, 0xbacff1a6U
- /* 104 */ , 0xecdf92feU, 0x89b82e46U, 0x67179b54U, 0x027027ecU, 0xbb48f071U, 0xde2f4cc9U, 0x3080f9dbU, 0x55e74563U
- /* 112 */ , 0x9ca03f6bU, 0xf9c783d3U, 0x176836c1U, 0x720f8a79U, 0xcb375de4U, 0xae50e15cU, 0x40ff544eU, 0x2598e8f6U
- /* 120 */ , 0x73888baeU, 0x16ef3716U, 0xf8408204U, 0x9d273ebcU, 0x241fe921U, 0x41785599U, 0xafd7e08bU, 0xcab05c33U
- /* 128 */ , 0x3bb659edU, 0x5ed1e555U, 0xb07e5047U, 0xd519ecffU, 0x6c213b62U, 0x094687daU, 0xe7e932c8U, 0x828e8e70U
- /* 136 */ , 0xd49eed28U, 0xb1f95190U, 0x5f56e482U, 0x3a31583aU, 0x83098fa7U, 0xe66e331fU, 0x08c1860dU, 0x6da63ab5U
- /* 144 */ , 0xa4e140bdU, 0xc186fc05U, 0x2f294917U, 0x4a4ef5afU, 0xf3762232U, 0x96119e8aU, 0x78be2b98U, 0x1dd99720U
- /* 152 */ , 0x4bc9f478U, 0x2eae48c0U, 0xc001fdd2U, 0xa566416aU, 0x1c5e96f7U, 0x79392a4fU, 0x97969f5dU, 0xf2f123e5U
- /* 160 */ , 0x05196b4dU, 0x607ed7f5U, 0x8ed162e7U, 0xebb6de5fU, 0x528e09c2U, 0x37e9b57aU, 0xd9460068U, 0xbc21bcd0U
- /* 168 */ , 0xea31df88U, 0x8f566330U, 0x61f9d622U, 0x049e6a9aU, 0xbda6bd07U, 0xd8c101bfU, 0x366eb4adU, 0x53090815U
- /* 176 */ , 0x9a4e721dU, 0xff29cea5U, 0x11867bb7U, 0x74e1c70fU, 0xcdd91092U, 0xa8beac2aU, 0x46111938U, 0x2376a580U
- /* 184 */ , 0x7566c6d8U, 0x10017a60U, 0xfeaecf72U, 0x9bc973caU, 0x22f1a457U, 0x479618efU, 0xa939adfdU, 0xcc5e1145U
- /* 192 */ , 0x06ee4d76U, 0x6389f1ceU, 0x8d2644dcU, 0xe841f864U, 0x51792ff9U, 0x341e9341U, 0xdab12653U, 0xbfd69aebU
- /* 200 */ , 0xe9c6f9b3U, 0x8ca1450bU, 0x620ef019U, 0x07694ca1U, 0xbe519b3cU, 0xdb362784U, 0x35999296U, 0x50fe2e2eU
- /* 208 */ , 0x99b95426U, 0xfcdee89eU, 0x12715d8cU, 0x7716e134U, 0xce2e36a9U, 0xab498a11U, 0x45e63f03U, 0x208183bbU
- /* 216 */ , 0x7691e0e3U, 0x13f65c5bU, 0xfd59e949U, 0x983e55f1U, 0x2106826cU, 0x44613ed4U, 0xaace8bc6U, 0xcfa9377eU
- /* 224 */ , 0x38417fd6U, 0x5d26c36eU, 0xb389767cU, 0xd6eecac4U, 0x6fd61d59U, 0x0ab1a1e1U, 0xe41e14f3U, 0x8179a84bU
- /* 232 */ , 0xd769cb13U, 0xb20e77abU, 0x5ca1c2b9U, 0x39c67e01U, 0x80fea99cU, 0xe5991524U, 0x0b36a036U, 0x6e511c8eU
- /* 240 */ , 0xa7166686U, 0xc271da3eU, 0x2cde6f2cU, 0x49b9d394U, 0xf0810409U, 0x95e6b8b1U, 0x7b490da3U, 0x1e2eb11bU
- /* 248 */ , 0x483ed243U, 0x2d596efbU, 0xc3f6dbe9U, 0xa6916751U, 0x1fa9b0ccU, 0x7ace0c74U, 0x9461b966U, 0xf10605deU
- }
- #endif
- };
-
-juint StubRoutines::ppc64::_crc32c_table[CRC32_TABLES][CRC32_COLUMN_SIZE] = {
- /* polyBits = 4394350321 0x0000000105ec76f1L, shifted = 0x82f63b78 */
- /* CRC32C table for single bytes, auto-generated. DO NOT MODIFY! */
- /* CRC32C table 0 for quad-bytes (little-endian), auto-generated. DO NOT MODIFY! */
- {
- /* 0 */ 0x00000000U, 0xf26b8303U, 0xe13b70f7U, 0x1350f3f4U, 0xc79a971fU, 0x35f1141cU, 0x26a1e7e8U, 0xd4ca64ebU
- /* 8 */ , 0x8ad958cfU, 0x78b2dbccU, 0x6be22838U, 0x9989ab3bU, 0x4d43cfd0U, 0xbf284cd3U, 0xac78bf27U, 0x5e133c24U
- /* 16 */ , 0x105ec76fU, 0xe235446cU, 0xf165b798U, 0x030e349bU, 0xd7c45070U, 0x25afd373U, 0x36ff2087U, 0xc494a384U
- /* 24 */ , 0x9a879fa0U, 0x68ec1ca3U, 0x7bbcef57U, 0x89d76c54U, 0x5d1d08bfU, 0xaf768bbcU, 0xbc267848U, 0x4e4dfb4bU
- /* 32 */ , 0x20bd8edeU, 0xd2d60dddU, 0xc186fe29U, 0x33ed7d2aU, 0xe72719c1U, 0x154c9ac2U, 0x061c6936U, 0xf477ea35U
- /* 40 */ , 0xaa64d611U, 0x580f5512U, 0x4b5fa6e6U, 0xb93425e5U, 0x6dfe410eU, 0x9f95c20dU, 0x8cc531f9U, 0x7eaeb2faU
- /* 48 */ , 0x30e349b1U, 0xc288cab2U, 0xd1d83946U, 0x23b3ba45U, 0xf779deaeU, 0x05125dadU, 0x1642ae59U, 0xe4292d5aU
- /* 56 */ , 0xba3a117eU, 0x4851927dU, 0x5b016189U, 0xa96ae28aU, 0x7da08661U, 0x8fcb0562U, 0x9c9bf696U, 0x6ef07595U
- /* 64 */ , 0x417b1dbcU, 0xb3109ebfU, 0xa0406d4bU, 0x522bee48U, 0x86e18aa3U, 0x748a09a0U, 0x67dafa54U, 0x95b17957U
- /* 72 */ , 0xcba24573U, 0x39c9c670U, 0x2a993584U, 0xd8f2b687U, 0x0c38d26cU, 0xfe53516fU, 0xed03a29bU, 0x1f682198U
- /* 80 */ , 0x5125dad3U, 0xa34e59d0U, 0xb01eaa24U, 0x42752927U, 0x96bf4dccU, 0x64d4cecfU, 0x77843d3bU, 0x85efbe38U
- /* 88 */ , 0xdbfc821cU, 0x2997011fU, 0x3ac7f2ebU, 0xc8ac71e8U, 0x1c661503U, 0xee0d9600U, 0xfd5d65f4U, 0x0f36e6f7U
- /* 96 */ , 0x61c69362U, 0x93ad1061U, 0x80fde395U, 0x72966096U, 0xa65c047dU, 0x5437877eU, 0x4767748aU, 0xb50cf789U
- /* 104 */ , 0xeb1fcbadU, 0x197448aeU, 0x0a24bb5aU, 0xf84f3859U, 0x2c855cb2U, 0xdeeedfb1U, 0xcdbe2c45U, 0x3fd5af46U
- /* 112 */ , 0x7198540dU, 0x83f3d70eU, 0x90a324faU, 0x62c8a7f9U, 0xb602c312U, 0x44694011U, 0x5739b3e5U, 0xa55230e6U
- /* 120 */ , 0xfb410cc2U, 0x092a8fc1U, 0x1a7a7c35U, 0xe811ff36U, 0x3cdb9bddU, 0xceb018deU, 0xdde0eb2aU, 0x2f8b6829U
- /* 128 */ , 0x82f63b78U, 0x709db87bU, 0x63cd4b8fU, 0x91a6c88cU, 0x456cac67U, 0xb7072f64U, 0xa457dc90U, 0x563c5f93U
- /* 136 */ , 0x082f63b7U, 0xfa44e0b4U, 0xe9141340U, 0x1b7f9043U, 0xcfb5f4a8U, 0x3dde77abU, 0x2e8e845fU, 0xdce5075cU
- /* 144 */ , 0x92a8fc17U, 0x60c37f14U, 0x73938ce0U, 0x81f80fe3U, 0x55326b08U, 0xa759e80bU, 0xb4091bffU, 0x466298fcU
- /* 152 */ , 0x1871a4d8U, 0xea1a27dbU, 0xf94ad42fU, 0x0b21572cU, 0xdfeb33c7U, 0x2d80b0c4U, 0x3ed04330U, 0xccbbc033U
- /* 160 */ , 0xa24bb5a6U, 0x502036a5U, 0x4370c551U, 0xb11b4652U, 0x65d122b9U, 0x97baa1baU, 0x84ea524eU, 0x7681d14dU
- /* 168 */ , 0x2892ed69U, 0xdaf96e6aU, 0xc9a99d9eU, 0x3bc21e9dU, 0xef087a76U, 0x1d63f975U, 0x0e330a81U, 0xfc588982U
- /* 176 */ , 0xb21572c9U, 0x407ef1caU, 0x532e023eU, 0xa145813dU, 0x758fe5d6U, 0x87e466d5U, 0x94b49521U, 0x66df1622U
- /* 184 */ , 0x38cc2a06U, 0xcaa7a905U, 0xd9f75af1U, 0x2b9cd9f2U, 0xff56bd19U, 0x0d3d3e1aU, 0x1e6dcdeeU, 0xec064eedU
- /* 192 */ , 0xc38d26c4U, 0x31e6a5c7U, 0x22b65633U, 0xd0ddd530U, 0x0417b1dbU, 0xf67c32d8U, 0xe52cc12cU, 0x1747422fU
- /* 200 */ , 0x49547e0bU, 0xbb3ffd08U, 0xa86f0efcU, 0x5a048dffU, 0x8ecee914U, 0x7ca56a17U, 0x6ff599e3U, 0x9d9e1ae0U
- /* 208 */ , 0xd3d3e1abU, 0x21b862a8U, 0x32e8915cU, 0xc083125fU, 0x144976b4U, 0xe622f5b7U, 0xf5720643U, 0x07198540U
- /* 216 */ , 0x590ab964U, 0xab613a67U, 0xb831c993U, 0x4a5a4a90U, 0x9e902e7bU, 0x6cfbad78U, 0x7fab5e8cU, 0x8dc0dd8fU
- /* 224 */ , 0xe330a81aU, 0x115b2b19U, 0x020bd8edU, 0xf0605beeU, 0x24aa3f05U, 0xd6c1bc06U, 0xc5914ff2U, 0x37faccf1U
- /* 232 */ , 0x69e9f0d5U, 0x9b8273d6U, 0x88d28022U, 0x7ab90321U, 0xae7367caU, 0x5c18e4c9U, 0x4f48173dU, 0xbd23943eU
- /* 240 */ , 0xf36e6f75U, 0x0105ec76U, 0x12551f82U, 0xe03e9c81U, 0x34f4f86aU, 0xc69f7b69U, 0xd5cf889dU, 0x27a40b9eU
- /* 248 */ , 0x79b737baU, 0x8bdcb4b9U, 0x988c474dU, 0x6ae7c44eU, 0xbe2da0a5U, 0x4c4623a6U, 0x5f16d052U, 0xad7d5351U
- }
- #ifdef CRC32_BYFOUR
- ,
- /* CRC32C table 1 for quad-bytes (little-endian), auto-generated. DO NOT MODIFY! */
- {
- /* 0 */ 0x00000000U, 0x13a29877U, 0x274530eeU, 0x34e7a899U, 0x4e8a61dcU, 0x5d28f9abU, 0x69cf5132U, 0x7a6dc945U
- /* 8 */ , 0x9d14c3b8U, 0x8eb65bcfU, 0xba51f356U, 0xa9f36b21U, 0xd39ea264U, 0xc03c3a13U, 0xf4db928aU, 0xe7790afdU
- /* 16 */ , 0x3fc5f181U, 0x2c6769f6U, 0x1880c16fU, 0x0b225918U, 0x714f905dU, 0x62ed082aU, 0x560aa0b3U, 0x45a838c4U
- /* 24 */ , 0xa2d13239U, 0xb173aa4eU, 0x859402d7U, 0x96369aa0U, 0xec5b53e5U, 0xfff9cb92U, 0xcb1e630bU, 0xd8bcfb7cU
- /* 32 */ , 0x7f8be302U, 0x6c297b75U, 0x58ced3ecU, 0x4b6c4b9bU, 0x310182deU, 0x22a31aa9U, 0x1644b230U, 0x05e62a47U
- /* 40 */ , 0xe29f20baU, 0xf13db8cdU, 0xc5da1054U, 0xd6788823U, 0xac154166U, 0xbfb7d911U, 0x8b507188U, 0x98f2e9ffU
- /* 48 */ , 0x404e1283U, 0x53ec8af4U, 0x670b226dU, 0x74a9ba1aU, 0x0ec4735fU, 0x1d66eb28U, 0x298143b1U, 0x3a23dbc6U
- /* 56 */ , 0xdd5ad13bU, 0xcef8494cU, 0xfa1fe1d5U, 0xe9bd79a2U, 0x93d0b0e7U, 0x80722890U, 0xb4958009U, 0xa737187eU
- /* 64 */ , 0xff17c604U, 0xecb55e73U, 0xd852f6eaU, 0xcbf06e9dU, 0xb19da7d8U, 0xa23f3fafU, 0x96d89736U, 0x857a0f41U
- /* 72 */ , 0x620305bcU, 0x71a19dcbU, 0x45463552U, 0x56e4ad25U, 0x2c896460U, 0x3f2bfc17U, 0x0bcc548eU, 0x186eccf9U
- /* 80 */ , 0xc0d23785U, 0xd370aff2U, 0xe797076bU, 0xf4359f1cU, 0x8e585659U, 0x9dface2eU, 0xa91d66b7U, 0xbabffec0U
- /* 88 */ , 0x5dc6f43dU, 0x4e646c4aU, 0x7a83c4d3U, 0x69215ca4U, 0x134c95e1U, 0x00ee0d96U, 0x3409a50fU, 0x27ab3d78U
- /* 96 */ , 0x809c2506U, 0x933ebd71U, 0xa7d915e8U, 0xb47b8d9fU, 0xce1644daU, 0xddb4dcadU, 0xe9537434U, 0xfaf1ec43U
- /* 104 */ , 0x1d88e6beU, 0x0e2a7ec9U, 0x3acdd650U, 0x296f4e27U, 0x53028762U, 0x40a01f15U, 0x7447b78cU, 0x67e52ffbU
- /* 112 */ , 0xbf59d487U, 0xacfb4cf0U, 0x981ce469U, 0x8bbe7c1eU, 0xf1d3b55bU, 0xe2712d2cU, 0xd69685b5U, 0xc5341dc2U
- /* 120 */ , 0x224d173fU, 0x31ef8f48U, 0x050827d1U, 0x16aabfa6U, 0x6cc776e3U, 0x7f65ee94U, 0x4b82460dU, 0x5820de7aU
- /* 128 */ , 0xfbc3faf9U, 0xe861628eU, 0xdc86ca17U, 0xcf245260U, 0xb5499b25U, 0xa6eb0352U, 0x920cabcbU, 0x81ae33bcU
- /* 136 */ , 0x66d73941U, 0x7575a136U, 0x419209afU, 0x523091d8U, 0x285d589dU, 0x3bffc0eaU, 0x0f186873U, 0x1cbaf004U
- /* 144 */ , 0xc4060b78U, 0xd7a4930fU, 0xe3433b96U, 0xf0e1a3e1U, 0x8a8c6aa4U, 0x992ef2d3U, 0xadc95a4aU, 0xbe6bc23dU
- /* 152 */ , 0x5912c8c0U, 0x4ab050b7U, 0x7e57f82eU, 0x6df56059U, 0x1798a91cU, 0x043a316bU, 0x30dd99f2U, 0x237f0185U
- /* 160 */ , 0x844819fbU, 0x97ea818cU, 0xa30d2915U, 0xb0afb162U, 0xcac27827U, 0xd960e050U, 0xed8748c9U, 0xfe25d0beU
- /* 168 */ , 0x195cda43U, 0x0afe4234U, 0x3e19eaadU, 0x2dbb72daU, 0x57d6bb9fU, 0x447423e8U, 0x70938b71U, 0x63311306U
- /* 176 */ , 0xbb8de87aU, 0xa82f700dU, 0x9cc8d894U, 0x8f6a40e3U, 0xf50789a6U, 0xe6a511d1U, 0xd242b948U, 0xc1e0213fU
- /* 184 */ , 0x26992bc2U, 0x353bb3b5U, 0x01dc1b2cU, 0x127e835bU, 0x68134a1eU, 0x7bb1d269U, 0x4f567af0U, 0x5cf4e287U
- /* 192 */ , 0x04d43cfdU, 0x1776a48aU, 0x23910c13U, 0x30339464U, 0x4a5e5d21U, 0x59fcc556U, 0x6d1b6dcfU, 0x7eb9f5b8U
- /* 200 */ , 0x99c0ff45U, 0x8a626732U, 0xbe85cfabU, 0xad2757dcU, 0xd74a9e99U, 0xc4e806eeU, 0xf00fae77U, 0xe3ad3600U
- /* 208 */ , 0x3b11cd7cU, 0x28b3550bU, 0x1c54fd92U, 0x0ff665e5U, 0x759baca0U, 0x663934d7U, 0x52de9c4eU, 0x417c0439U
- /* 216 */ , 0xa6050ec4U, 0xb5a796b3U, 0x81403e2aU, 0x92e2a65dU, 0xe88f6f18U, 0xfb2df76fU, 0xcfca5ff6U, 0xdc68c781U
- /* 224 */ , 0x7b5fdfffU, 0x68fd4788U, 0x5c1aef11U, 0x4fb87766U, 0x35d5be23U, 0x26772654U, 0x12908ecdU, 0x013216baU
- /* 232 */ , 0xe64b1c47U, 0xf5e98430U, 0xc10e2ca9U, 0xd2acb4deU, 0xa8c17d9bU, 0xbb63e5ecU, 0x8f844d75U, 0x9c26d502U
- /* 240 */ , 0x449a2e7eU, 0x5738b609U, 0x63df1e90U, 0x707d86e7U, 0x0a104fa2U, 0x19b2d7d5U, 0x2d557f4cU, 0x3ef7e73bU
- /* 248 */ , 0xd98eedc6U, 0xca2c75b1U, 0xfecbdd28U, 0xed69455fU, 0x97048c1aU, 0x84a6146dU, 0xb041bcf4U, 0xa3e32483U
- }
- ,
- /* CRC32C table 2 for quad-bytes (little-endian), auto-generated. DO NOT MODIFY! */
- {
- /* 0 */ 0x00000000U, 0xa541927eU, 0x4f6f520dU, 0xea2ec073U, 0x9edea41aU, 0x3b9f3664U, 0xd1b1f617U, 0x74f06469U
- /* 8 */ , 0x38513ec5U, 0x9d10acbbU, 0x773e6cc8U, 0xd27ffeb6U, 0xa68f9adfU, 0x03ce08a1U, 0xe9e0c8d2U, 0x4ca15aacU
- /* 16 */ , 0x70a27d8aU, 0xd5e3eff4U, 0x3fcd2f87U, 0x9a8cbdf9U, 0xee7cd990U, 0x4b3d4beeU, 0xa1138b9dU, 0x045219e3U
- /* 24 */ , 0x48f3434fU, 0xedb2d131U, 0x079c1142U, 0xa2dd833cU, 0xd62de755U, 0x736c752bU, 0x9942b558U, 0x3c032726U
- /* 32 */ , 0xe144fb14U, 0x4405696aU, 0xae2ba919U, 0x0b6a3b67U, 0x7f9a5f0eU, 0xdadbcd70U, 0x30f50d03U, 0x95b49f7dU
- /* 40 */ , 0xd915c5d1U, 0x7c5457afU, 0x967a97dcU, 0x333b05a2U, 0x47cb61cbU, 0xe28af3b5U, 0x08a433c6U, 0xade5a1b8U
- /* 48 */ , 0x91e6869eU, 0x34a714e0U, 0xde89d493U, 0x7bc846edU, 0x0f382284U, 0xaa79b0faU, 0x40577089U, 0xe516e2f7U
- /* 56 */ , 0xa9b7b85bU, 0x0cf62a25U, 0xe6d8ea56U, 0x43997828U, 0x37691c41U, 0x92288e3fU, 0x78064e4cU, 0xdd47dc32U
- /* 64 */ , 0xc76580d9U, 0x622412a7U, 0x880ad2d4U, 0x2d4b40aaU, 0x59bb24c3U, 0xfcfab6bdU, 0x16d476ceU, 0xb395e4b0U
- /* 72 */ , 0xff34be1cU, 0x5a752c62U, 0xb05bec11U, 0x151a7e6fU, 0x61ea1a06U, 0xc4ab8878U, 0x2e85480bU, 0x8bc4da75U
- /* 80 */ , 0xb7c7fd53U, 0x12866f2dU, 0xf8a8af5eU, 0x5de93d20U, 0x29195949U, 0x8c58cb37U, 0x66760b44U, 0xc337993aU
- /* 88 */ , 0x8f96c396U, 0x2ad751e8U, 0xc0f9919bU, 0x65b803e5U, 0x1148678cU, 0xb409f5f2U, 0x5e273581U, 0xfb66a7ffU
- /* 96 */ , 0x26217bcdU, 0x8360e9b3U, 0x694e29c0U, 0xcc0fbbbeU, 0xb8ffdfd7U, 0x1dbe4da9U, 0xf7908ddaU, 0x52d11fa4U
- /* 104 */ , 0x1e704508U, 0xbb31d776U, 0x511f1705U, 0xf45e857bU, 0x80aee112U, 0x25ef736cU, 0xcfc1b31fU, 0x6a802161U
- /* 112 */ , 0x56830647U, 0xf3c29439U, 0x19ec544aU, 0xbcadc634U, 0xc85da25dU, 0x6d1c3023U, 0x8732f050U, 0x2273622eU
- /* 120 */ , 0x6ed23882U, 0xcb93aafcU, 0x21bd6a8fU, 0x84fcf8f1U, 0xf00c9c98U, 0x554d0ee6U, 0xbf63ce95U, 0x1a225cebU
- /* 128 */ , 0x8b277743U, 0x2e66e53dU, 0xc448254eU, 0x6109b730U, 0x15f9d359U, 0xb0b84127U, 0x5a968154U, 0xffd7132aU
- /* 136 */ , 0xb3764986U, 0x1637dbf8U, 0xfc191b8bU, 0x595889f5U, 0x2da8ed9cU, 0x88e97fe2U, 0x62c7bf91U, 0xc7862defU
- /* 144 */ , 0xfb850ac9U, 0x5ec498b7U, 0xb4ea58c4U, 0x11abcabaU, 0x655baed3U, 0xc01a3cadU, 0x2a34fcdeU, 0x8f756ea0U
- /* 152 */ , 0xc3d4340cU, 0x6695a672U, 0x8cbb6601U, 0x29faf47fU, 0x5d0a9016U, 0xf84b0268U, 0x1265c21bU, 0xb7245065U
- /* 160 */ , 0x6a638c57U, 0xcf221e29U, 0x250cde5aU, 0x804d4c24U, 0xf4bd284dU, 0x51fcba33U, 0xbbd27a40U, 0x1e93e83eU
- /* 168 */ , 0x5232b292U, 0xf77320ecU, 0x1d5de09fU, 0xb81c72e1U, 0xccec1688U, 0x69ad84f6U, 0x83834485U, 0x26c2d6fbU
- /* 176 */ , 0x1ac1f1ddU, 0xbf8063a3U, 0x55aea3d0U, 0xf0ef31aeU, 0x841f55c7U, 0x215ec7b9U, 0xcb7007caU, 0x6e3195b4U
- /* 184 */ , 0x2290cf18U, 0x87d15d66U, 0x6dff9d15U, 0xc8be0f6bU, 0xbc4e6b02U, 0x190ff97cU, 0xf321390fU, 0x5660ab71U
- /* 192 */ , 0x4c42f79aU, 0xe90365e4U, 0x032da597U, 0xa66c37e9U, 0xd29c5380U, 0x77ddc1feU, 0x9df3018dU, 0x38b293f3U
- /* 200 */ , 0x7413c95fU, 0xd1525b21U, 0x3b7c9b52U, 0x9e3d092cU, 0xeacd6d45U, 0x4f8cff3bU, 0xa5a23f48U, 0x00e3ad36U
- /* 208 */ , 0x3ce08a10U, 0x99a1186eU, 0x738fd81dU, 0xd6ce4a63U, 0xa23e2e0aU, 0x077fbc74U, 0xed517c07U, 0x4810ee79U
- /* 216 */ , 0x04b1b4d5U, 0xa1f026abU, 0x4bdee6d8U, 0xee9f74a6U, 0x9a6f10cfU, 0x3f2e82b1U, 0xd50042c2U, 0x7041d0bcU
- /* 224 */ , 0xad060c8eU, 0x08479ef0U, 0xe2695e83U, 0x4728ccfdU, 0x33d8a894U, 0x96993aeaU, 0x7cb7fa99U, 0xd9f668e7U
- /* 232 */ , 0x9557324bU, 0x3016a035U, 0xda386046U, 0x7f79f238U, 0x0b899651U, 0xaec8042fU, 0x44e6c45cU, 0xe1a75622U
- /* 240 */ , 0xdda47104U, 0x78e5e37aU, 0x92cb2309U, 0x378ab177U, 0x437ad51eU, 0xe63b4760U, 0x0c158713U, 0xa954156dU
- /* 248 */ , 0xe5f54fc1U, 0x40b4ddbfU, 0xaa9a1dccU, 0x0fdb8fb2U, 0x7b2bebdbU, 0xde6a79a5U, 0x3444b9d6U, 0x91052ba8U
- }
- ,
- /* CRC32C table 3 for quad-bytes (little-endian), auto-generated. DO NOT MODIFY! */
- {
- /* 0 */ 0x00000000U, 0xdd45aab8U, 0xbf672381U, 0x62228939U, 0x7b2231f3U, 0xa6679b4bU, 0xc4451272U, 0x1900b8caU
- /* 8 */ , 0xf64463e6U, 0x2b01c95eU, 0x49234067U, 0x9466eadfU, 0x8d665215U, 0x5023f8adU, 0x32017194U, 0xef44db2cU
- /* 16 */ , 0xe964b13dU, 0x34211b85U, 0x560392bcU, 0x8b463804U, 0x924680ceU, 0x4f032a76U, 0x2d21a34fU, 0xf06409f7U
- /* 24 */ , 0x1f20d2dbU, 0xc2657863U, 0xa047f15aU, 0x7d025be2U, 0x6402e328U, 0xb9474990U, 0xdb65c0a9U, 0x06206a11U
- /* 32 */ , 0xd725148bU, 0x0a60be33U, 0x6842370aU, 0xb5079db2U, 0xac072578U, 0x71428fc0U, 0x136006f9U, 0xce25ac41U
- /* 40 */ , 0x2161776dU, 0xfc24ddd5U, 0x9e0654ecU, 0x4343fe54U, 0x5a43469eU, 0x8706ec26U, 0xe524651fU, 0x3861cfa7U
- /* 48 */ , 0x3e41a5b6U, 0xe3040f0eU, 0x81268637U, 0x5c632c8fU, 0x45639445U, 0x98263efdU, 0xfa04b7c4U, 0x27411d7cU
- /* 56 */ , 0xc805c650U, 0x15406ce8U, 0x7762e5d1U, 0xaa274f69U, 0xb327f7a3U, 0x6e625d1bU, 0x0c40d422U, 0xd1057e9aU
- /* 64 */ , 0xaba65fe7U, 0x76e3f55fU, 0x14c17c66U, 0xc984d6deU, 0xd0846e14U, 0x0dc1c4acU, 0x6fe34d95U, 0xb2a6e72dU
- /* 72 */ , 0x5de23c01U, 0x80a796b9U, 0xe2851f80U, 0x3fc0b538U, 0x26c00df2U, 0xfb85a74aU, 0x99a72e73U, 0x44e284cbU
- /* 80 */ , 0x42c2eedaU, 0x9f874462U, 0xfda5cd5bU, 0x20e067e3U, 0x39e0df29U, 0xe4a57591U, 0x8687fca8U, 0x5bc25610U
- /* 88 */ , 0xb4868d3cU, 0x69c32784U, 0x0be1aebdU, 0xd6a40405U, 0xcfa4bccfU, 0x12e11677U, 0x70c39f4eU, 0xad8635f6U
- /* 96 */ , 0x7c834b6cU, 0xa1c6e1d4U, 0xc3e468edU, 0x1ea1c255U, 0x07a17a9fU, 0xdae4d027U, 0xb8c6591eU, 0x6583f3a6U
- /* 104 */ , 0x8ac7288aU, 0x57828232U, 0x35a00b0bU, 0xe8e5a1b3U, 0xf1e51979U, 0x2ca0b3c1U, 0x4e823af8U, 0x93c79040U
- /* 112 */ , 0x95e7fa51U, 0x48a250e9U, 0x2a80d9d0U, 0xf7c57368U, 0xeec5cba2U, 0x3380611aU, 0x51a2e823U, 0x8ce7429bU
- /* 120 */ , 0x63a399b7U, 0xbee6330fU, 0xdcc4ba36U, 0x0181108eU, 0x1881a844U, 0xc5c402fcU, 0xa7e68bc5U, 0x7aa3217dU
- /* 128 */ , 0x52a0c93fU, 0x8fe56387U, 0xedc7eabeU, 0x30824006U, 0x2982f8ccU, 0xf4c75274U, 0x96e5db4dU, 0x4ba071f5U
- /* 136 */ , 0xa4e4aad9U, 0x79a10061U, 0x1b838958U, 0xc6c623e0U, 0xdfc69b2aU, 0x02833192U, 0x60a1b8abU, 0xbde41213U
- /* 144 */ , 0xbbc47802U, 0x6681d2baU, 0x04a35b83U, 0xd9e6f13bU, 0xc0e649f1U, 0x1da3e349U, 0x7f816a70U, 0xa2c4c0c8U
- /* 152 */ , 0x4d801be4U, 0x90c5b15cU, 0xf2e73865U, 0x2fa292ddU, 0x36a22a17U, 0xebe780afU, 0x89c50996U, 0x5480a32eU
- /* 160 */ , 0x8585ddb4U, 0x58c0770cU, 0x3ae2fe35U, 0xe7a7548dU, 0xfea7ec47U, 0x23e246ffU, 0x41c0cfc6U, 0x9c85657eU
- /* 168 */ , 0x73c1be52U, 0xae8414eaU, 0xcca69dd3U, 0x11e3376bU, 0x08e38fa1U, 0xd5a62519U, 0xb784ac20U, 0x6ac10698U
- /* 176 */ , 0x6ce16c89U, 0xb1a4c631U, 0xd3864f08U, 0x0ec3e5b0U, 0x17c35d7aU, 0xca86f7c2U, 0xa8a47efbU, 0x75e1d443U
- /* 184 */ , 0x9aa50f6fU, 0x47e0a5d7U, 0x25c22ceeU, 0xf8878656U, 0xe1873e9cU, 0x3cc29424U, 0x5ee01d1dU, 0x83a5b7a5U
- /* 192 */ , 0xf90696d8U, 0x24433c60U, 0x4661b559U, 0x9b241fe1U, 0x8224a72bU, 0x5f610d93U, 0x3d4384aaU, 0xe0062e12U
- /* 200 */ , 0x0f42f53eU, 0xd2075f86U, 0xb025d6bfU, 0x6d607c07U, 0x7460c4cdU, 0xa9256e75U, 0xcb07e74cU, 0x16424df4U
- /* 208 */ , 0x106227e5U, 0xcd278d5dU, 0xaf050464U, 0x7240aedcU, 0x6b401616U, 0xb605bcaeU, 0xd4273597U, 0x09629f2fU
- /* 216 */ , 0xe6264403U, 0x3b63eebbU, 0x59416782U, 0x8404cd3aU, 0x9d0475f0U, 0x4041df48U, 0x22635671U, 0xff26fcc9U
- /* 224 */ , 0x2e238253U, 0xf36628ebU, 0x9144a1d2U, 0x4c010b6aU, 0x5501b3a0U, 0x88441918U, 0xea669021U, 0x37233a99U
- /* 232 */ , 0xd867e1b5U, 0x05224b0dU, 0x6700c234U, 0xba45688cU, 0xa345d046U, 0x7e007afeU, 0x1c22f3c7U, 0xc167597fU
- /* 240 */ , 0xc747336eU, 0x1a0299d6U, 0x782010efU, 0xa565ba57U, 0xbc65029dU, 0x6120a825U, 0x0302211cU, 0xde478ba4U
- /* 248 */ , 0x31035088U, 0xec46fa30U, 0x8e647309U, 0x5321d9b1U, 0x4a21617bU, 0x9764cbc3U, 0xf54642faU, 0x2803e842U
- }
- ,
- /* CRC32C table 4 for quad-bytes ( big-endian ), auto-generated. DO NOT MODIFY! */
- {
- /* 0 */ 0x00000000U, 0x03836bf2U, 0xf7703be1U, 0xf4f35013U, 0x1f979ac7U, 0x1c14f135U, 0xe8e7a126U, 0xeb64cad4U
- /* 8 */ , 0xcf58d98aU, 0xccdbb278U, 0x3828e26bU, 0x3bab8999U, 0xd0cf434dU, 0xd34c28bfU, 0x27bf78acU, 0x243c135eU
- /* 16 */ , 0x6fc75e10U, 0x6c4435e2U, 0x98b765f1U, 0x9b340e03U, 0x7050c4d7U, 0x73d3af25U, 0x8720ff36U, 0x84a394c4U
- /* 24 */ , 0xa09f879aU, 0xa31cec68U, 0x57efbc7bU, 0x546cd789U, 0xbf081d5dU, 0xbc8b76afU, 0x487826bcU, 0x4bfb4d4eU
- /* 32 */ , 0xde8ebd20U, 0xdd0dd6d2U, 0x29fe86c1U, 0x2a7ded33U, 0xc11927e7U, 0xc29a4c15U, 0x36691c06U, 0x35ea77f4U
- /* 40 */ , 0x11d664aaU, 0x12550f58U, 0xe6a65f4bU, 0xe52534b9U, 0x0e41fe6dU, 0x0dc2959fU, 0xf931c58cU, 0xfab2ae7eU
- /* 48 */ , 0xb149e330U, 0xb2ca88c2U, 0x4639d8d1U, 0x45bab323U, 0xaede79f7U, 0xad5d1205U, 0x59ae4216U, 0x5a2d29e4U
- /* 56 */ , 0x7e113abaU, 0x7d925148U, 0x8961015bU, 0x8ae26aa9U, 0x6186a07dU, 0x6205cb8fU, 0x96f69b9cU, 0x9575f06eU
- /* 64 */ , 0xbc1d7b41U, 0xbf9e10b3U, 0x4b6d40a0U, 0x48ee2b52U, 0xa38ae186U, 0xa0098a74U, 0x54fada67U, 0x5779b195U
- /* 72 */ , 0x7345a2cbU, 0x70c6c939U, 0x8435992aU, 0x87b6f2d8U, 0x6cd2380cU, 0x6f5153feU, 0x9ba203edU, 0x9821681fU
- /* 80 */ , 0xd3da2551U, 0xd0594ea3U, 0x24aa1eb0U, 0x27297542U, 0xcc4dbf96U, 0xcfced464U, 0x3b3d8477U, 0x38beef85U
- /* 88 */ , 0x1c82fcdbU, 0x1f019729U, 0xebf2c73aU, 0xe871acc8U, 0x0315661cU, 0x00960deeU, 0xf4655dfdU, 0xf7e6360fU
- /* 96 */ , 0x6293c661U, 0x6110ad93U, 0x95e3fd80U, 0x96609672U, 0x7d045ca6U, 0x7e873754U, 0x8a746747U, 0x89f70cb5U
- /* 104 */ , 0xadcb1febU, 0xae487419U, 0x5abb240aU, 0x59384ff8U, 0xb25c852cU, 0xb1dfeedeU, 0x452cbecdU, 0x46afd53fU
- /* 112 */ , 0x0d549871U, 0x0ed7f383U, 0xfa24a390U, 0xf9a7c862U, 0x12c302b6U, 0x11406944U, 0xe5b33957U, 0xe63052a5U
- /* 120 */ , 0xc20c41fbU, 0xc18f2a09U, 0x357c7a1aU, 0x36ff11e8U, 0xdd9bdb3cU, 0xde18b0ceU, 0x2aebe0ddU, 0x29688b2fU
- /* 128 */ , 0x783bf682U, 0x7bb89d70U, 0x8f4bcd63U, 0x8cc8a691U, 0x67ac6c45U, 0x642f07b7U, 0x90dc57a4U, 0x935f3c56U
- /* 136 */ , 0xb7632f08U, 0xb4e044faU, 0x401314e9U, 0x43907f1bU, 0xa8f4b5cfU, 0xab77de3dU, 0x5f848e2eU, 0x5c07e5dcU
- /* 144 */ , 0x17fca892U, 0x147fc360U, 0xe08c9373U, 0xe30ff881U, 0x086b3255U, 0x0be859a7U, 0xff1b09b4U, 0xfc986246U
- /* 152 */ , 0xd8a47118U, 0xdb271aeaU, 0x2fd44af9U, 0x2c57210bU, 0xc733ebdfU, 0xc4b0802dU, 0x3043d03eU, 0x33c0bbccU
- /* 160 */ , 0xa6b54ba2U, 0xa5362050U, 0x51c57043U, 0x52461bb1U, 0xb922d165U, 0xbaa1ba97U, 0x4e52ea84U, 0x4dd18176U
- /* 168 */ , 0x69ed9228U, 0x6a6ef9daU, 0x9e9da9c9U, 0x9d1ec23bU, 0x767a08efU, 0x75f9631dU, 0x810a330eU, 0x828958fcU
- /* 176 */ , 0xc97215b2U, 0xcaf17e40U, 0x3e022e53U, 0x3d8145a1U, 0xd6e58f75U, 0xd566e487U, 0x2195b494U, 0x2216df66U
- /* 184 */ , 0x062acc38U, 0x05a9a7caU, 0xf15af7d9U, 0xf2d99c2bU, 0x19bd56ffU, 0x1a3e3d0dU, 0xeecd6d1eU, 0xed4e06ecU
- /* 192 */ , 0xc4268dc3U, 0xc7a5e631U, 0x3356b622U, 0x30d5ddd0U, 0xdbb11704U, 0xd8327cf6U, 0x2cc12ce5U, 0x2f424717U
- /* 200 */ , 0x0b7e5449U, 0x08fd3fbbU, 0xfc0e6fa8U, 0xff8d045aU, 0x14e9ce8eU, 0x176aa57cU, 0xe399f56fU, 0xe01a9e9dU
- /* 208 */ , 0xabe1d3d3U, 0xa862b821U, 0x5c91e832U, 0x5f1283c0U, 0xb4764914U, 0xb7f522e6U, 0x430672f5U, 0x40851907U
- /* 216 */ , 0x64b90a59U, 0x673a61abU, 0x93c931b8U, 0x904a5a4aU, 0x7b2e909eU, 0x78adfb6cU, 0x8c5eab7fU, 0x8fddc08dU
- /* 224 */ , 0x1aa830e3U, 0x192b5b11U, 0xedd80b02U, 0xee5b60f0U, 0x053faa24U, 0x06bcc1d6U, 0xf24f91c5U, 0xf1ccfa37U
- /* 232 */ , 0xd5f0e969U, 0xd673829bU, 0x2280d288U, 0x2103b97aU, 0xca6773aeU, 0xc9e4185cU, 0x3d17484fU, 0x3e9423bdU
- /* 240 */ , 0x756f6ef3U, 0x76ec0501U, 0x821f5512U, 0x819c3ee0U, 0x6af8f434U, 0x697b9fc6U, 0x9d88cfd5U, 0x9e0ba427U
- /* 248 */ , 0xba37b779U, 0xb9b4dc8bU, 0x4d478c98U, 0x4ec4e76aU, 0xa5a02dbeU, 0xa623464cU, 0x52d0165fU, 0x51537dadU
- }
- ,
- /* CRC32C table 5 for quad-bytes ( big-endian ), auto-generated. DO NOT MODIFY! */
- {
- /* 0 */ 0x00000000U, 0x7798a213U, 0xee304527U, 0x99a8e734U, 0xdc618a4eU, 0xabf9285dU, 0x3251cf69U, 0x45c96d7aU
- /* 8 */ , 0xb8c3149dU, 0xcf5bb68eU, 0x56f351baU, 0x216bf3a9U, 0x64a29ed3U, 0x133a3cc0U, 0x8a92dbf4U, 0xfd0a79e7U
- /* 16 */ , 0x81f1c53fU, 0xf669672cU, 0x6fc18018U, 0x1859220bU, 0x5d904f71U, 0x2a08ed62U, 0xb3a00a56U, 0xc438a845U
- /* 24 */ , 0x3932d1a2U, 0x4eaa73b1U, 0xd7029485U, 0xa09a3696U, 0xe5535becU, 0x92cbf9ffU, 0x0b631ecbU, 0x7cfbbcd8U
- /* 32 */ , 0x02e38b7fU, 0x757b296cU, 0xecd3ce58U, 0x9b4b6c4bU, 0xde820131U, 0xa91aa322U, 0x30b24416U, 0x472ae605U
- /* 40 */ , 0xba209fe2U, 0xcdb83df1U, 0x5410dac5U, 0x238878d6U, 0x664115acU, 0x11d9b7bfU, 0x8871508bU, 0xffe9f298U
- /* 48 */ , 0x83124e40U, 0xf48aec53U, 0x6d220b67U, 0x1abaa974U, 0x5f73c40eU, 0x28eb661dU, 0xb1438129U, 0xc6db233aU
- /* 56 */ , 0x3bd15addU, 0x4c49f8ceU, 0xd5e11ffaU, 0xa279bde9U, 0xe7b0d093U, 0x90287280U, 0x098095b4U, 0x7e1837a7U
- /* 64 */ , 0x04c617ffU, 0x735eb5ecU, 0xeaf652d8U, 0x9d6ef0cbU, 0xd8a79db1U, 0xaf3f3fa2U, 0x3697d896U, 0x410f7a85U
- /* 72 */ , 0xbc050362U, 0xcb9da171U, 0x52354645U, 0x25ade456U, 0x6064892cU, 0x17fc2b3fU, 0x8e54cc0bU, 0xf9cc6e18U
- /* 80 */ , 0x8537d2c0U, 0xf2af70d3U, 0x6b0797e7U, 0x1c9f35f4U, 0x5956588eU, 0x2ecefa9dU, 0xb7661da9U, 0xc0febfbaU
- /* 88 */ , 0x3df4c65dU, 0x4a6c644eU, 0xd3c4837aU, 0xa45c2169U, 0xe1954c13U, 0x960dee00U, 0x0fa50934U, 0x783dab27U
- /* 96 */ , 0x06259c80U, 0x71bd3e93U, 0xe815d9a7U, 0x9f8d7bb4U, 0xda4416ceU, 0xaddcb4ddU, 0x347453e9U, 0x43ecf1faU
- /* 104 */ , 0xbee6881dU, 0xc97e2a0eU, 0x50d6cd3aU, 0x274e6f29U, 0x62870253U, 0x151fa040U, 0x8cb74774U, 0xfb2fe567U
- /* 112 */ , 0x87d459bfU, 0xf04cfbacU, 0x69e41c98U, 0x1e7cbe8bU, 0x5bb5d3f1U, 0x2c2d71e2U, 0xb58596d6U, 0xc21d34c5U
- /* 120 */ , 0x3f174d22U, 0x488fef31U, 0xd1270805U, 0xa6bfaa16U, 0xe376c76cU, 0x94ee657fU, 0x0d46824bU, 0x7ade2058U
- /* 128 */ , 0xf9fac3fbU, 0x8e6261e8U, 0x17ca86dcU, 0x605224cfU, 0x259b49b5U, 0x5203eba6U, 0xcbab0c92U, 0xbc33ae81U
- /* 136 */ , 0x4139d766U, 0x36a17575U, 0xaf099241U, 0xd8913052U, 0x9d585d28U, 0xeac0ff3bU, 0x7368180fU, 0x04f0ba1cU
- /* 144 */ , 0x780b06c4U, 0x0f93a4d7U, 0x963b43e3U, 0xe1a3e1f0U, 0xa46a8c8aU, 0xd3f22e99U, 0x4a5ac9adU, 0x3dc26bbeU
- /* 152 */ , 0xc0c81259U, 0xb750b04aU, 0x2ef8577eU, 0x5960f56dU, 0x1ca99817U, 0x6b313a04U, 0xf299dd30U, 0x85017f23U
- /* 160 */ , 0xfb194884U, 0x8c81ea97U, 0x15290da3U, 0x62b1afb0U, 0x2778c2caU, 0x50e060d9U, 0xc94887edU, 0xbed025feU
- /* 168 */ , 0x43da5c19U, 0x3442fe0aU, 0xadea193eU, 0xda72bb2dU, 0x9fbbd657U, 0xe8237444U, 0x718b9370U, 0x06133163U
- /* 176 */ , 0x7ae88dbbU, 0x0d702fa8U, 0x94d8c89cU, 0xe3406a8fU, 0xa68907f5U, 0xd111a5e6U, 0x48b942d2U, 0x3f21e0c1U
- /* 184 */ , 0xc22b9926U, 0xb5b33b35U, 0x2c1bdc01U, 0x5b837e12U, 0x1e4a1368U, 0x69d2b17bU, 0xf07a564fU, 0x87e2f45cU
- /* 192 */ , 0xfd3cd404U, 0x8aa47617U, 0x130c9123U, 0x64943330U, 0x215d5e4aU, 0x56c5fc59U, 0xcf6d1b6dU, 0xb8f5b97eU
- /* 200 */ , 0x45ffc099U, 0x3267628aU, 0xabcf85beU, 0xdc5727adU, 0x999e4ad7U, 0xee06e8c4U, 0x77ae0ff0U, 0x0036ade3U
- /* 208 */ , 0x7ccd113bU, 0x0b55b328U, 0x92fd541cU, 0xe565f60fU, 0xa0ac9b75U, 0xd7343966U, 0x4e9cde52U, 0x39047c41U
- /* 216 */ , 0xc40e05a6U, 0xb396a7b5U, 0x2a3e4081U, 0x5da6e292U, 0x186f8fe8U, 0x6ff72dfbU, 0xf65fcacfU, 0x81c768dcU
- /* 224 */ , 0xffdf5f7bU, 0x8847fd68U, 0x11ef1a5cU, 0x6677b84fU, 0x23bed535U, 0x54267726U, 0xcd8e9012U, 0xba163201U
- /* 232 */ , 0x471c4be6U, 0x3084e9f5U, 0xa92c0ec1U, 0xdeb4acd2U, 0x9b7dc1a8U, 0xece563bbU, 0x754d848fU, 0x02d5269cU
- /* 240 */ , 0x7e2e9a44U, 0x09b63857U, 0x901edf63U, 0xe7867d70U, 0xa24f100aU, 0xd5d7b219U, 0x4c7f552dU, 0x3be7f73eU
- /* 248 */ , 0xc6ed8ed9U, 0xb1752ccaU, 0x28ddcbfeU, 0x5f4569edU, 0x1a8c0497U, 0x6d14a684U, 0xf4bc41b0U, 0x8324e3a3U
- }
- ,
- /* CRC32C table 6 for quad-bytes ( big-endian ), auto-generated. DO NOT MODIFY! */
- {
- /* 0 */ 0x00000000U, 0x7e9241a5U, 0x0d526f4fU, 0x73c02eeaU, 0x1aa4de9eU, 0x64369f3bU, 0x17f6b1d1U, 0x6964f074U
- /* 8 */ , 0xc53e5138U, 0xbbac109dU, 0xc86c3e77U, 0xb6fe7fd2U, 0xdf9a8fa6U, 0xa108ce03U, 0xd2c8e0e9U, 0xac5aa14cU
- /* 16 */ , 0x8a7da270U, 0xf4efe3d5U, 0x872fcd3fU, 0xf9bd8c9aU, 0x90d97ceeU, 0xee4b3d4bU, 0x9d8b13a1U, 0xe3195204U
- /* 24 */ , 0x4f43f348U, 0x31d1b2edU, 0x42119c07U, 0x3c83dda2U, 0x55e72dd6U, 0x2b756c73U, 0x58b54299U, 0x2627033cU
- /* 32 */ , 0x14fb44e1U, 0x6a690544U, 0x19a92baeU, 0x673b6a0bU, 0x0e5f9a7fU, 0x70cddbdaU, 0x030df530U, 0x7d9fb495U
- /* 40 */ , 0xd1c515d9U, 0xaf57547cU, 0xdc977a96U, 0xa2053b33U, 0xcb61cb47U, 0xb5f38ae2U, 0xc633a408U, 0xb8a1e5adU
- /* 48 */ , 0x9e86e691U, 0xe014a734U, 0x93d489deU, 0xed46c87bU, 0x8422380fU, 0xfab079aaU, 0x89705740U, 0xf7e216e5U
- /* 56 */ , 0x5bb8b7a9U, 0x252af60cU, 0x56ead8e6U, 0x28789943U, 0x411c6937U, 0x3f8e2892U, 0x4c4e0678U, 0x32dc47ddU
- /* 64 */ , 0xd98065c7U, 0xa7122462U, 0xd4d20a88U, 0xaa404b2dU, 0xc324bb59U, 0xbdb6fafcU, 0xce76d416U, 0xb0e495b3U
- /* 72 */ , 0x1cbe34ffU, 0x622c755aU, 0x11ec5bb0U, 0x6f7e1a15U, 0x061aea61U, 0x7888abc4U, 0x0b48852eU, 0x75dac48bU
- /* 80 */ , 0x53fdc7b7U, 0x2d6f8612U, 0x5eafa8f8U, 0x203de95dU, 0x49591929U, 0x37cb588cU, 0x440b7666U, 0x3a9937c3U
- /* 88 */ , 0x96c3968fU, 0xe851d72aU, 0x9b91f9c0U, 0xe503b865U, 0x8c674811U, 0xf2f509b4U, 0x8135275eU, 0xffa766fbU
- /* 96 */ , 0xcd7b2126U, 0xb3e96083U, 0xc0294e69U, 0xbebb0fccU, 0xd7dfffb8U, 0xa94dbe1dU, 0xda8d90f7U, 0xa41fd152U
- /* 104 */ , 0x0845701eU, 0x76d731bbU, 0x05171f51U, 0x7b855ef4U, 0x12e1ae80U, 0x6c73ef25U, 0x1fb3c1cfU, 0x6121806aU
- /* 112 */ , 0x47068356U, 0x3994c2f3U, 0x4a54ec19U, 0x34c6adbcU, 0x5da25dc8U, 0x23301c6dU, 0x50f03287U, 0x2e627322U
- /* 120 */ , 0x8238d26eU, 0xfcaa93cbU, 0x8f6abd21U, 0xf1f8fc84U, 0x989c0cf0U, 0xe60e4d55U, 0x95ce63bfU, 0xeb5c221aU
- /* 128 */ , 0x4377278bU, 0x3de5662eU, 0x4e2548c4U, 0x30b70961U, 0x59d3f915U, 0x2741b8b0U, 0x5481965aU, 0x2a13d7ffU
- /* 136 */ , 0x864976b3U, 0xf8db3716U, 0x8b1b19fcU, 0xf5895859U, 0x9ceda82dU, 0xe27fe988U, 0x91bfc762U, 0xef2d86c7U
- /* 144 */ , 0xc90a85fbU, 0xb798c45eU, 0xc458eab4U, 0xbacaab11U, 0xd3ae5b65U, 0xad3c1ac0U, 0xdefc342aU, 0xa06e758fU
- /* 152 */ , 0x0c34d4c3U, 0x72a69566U, 0x0166bb8cU, 0x7ff4fa29U, 0x16900a5dU, 0x68024bf8U, 0x1bc26512U, 0x655024b7U
- /* 160 */ , 0x578c636aU, 0x291e22cfU, 0x5ade0c25U, 0x244c4d80U, 0x4d28bdf4U, 0x33bafc51U, 0x407ad2bbU, 0x3ee8931eU
- /* 168 */ , 0x92b23252U, 0xec2073f7U, 0x9fe05d1dU, 0xe1721cb8U, 0x8816ecccU, 0xf684ad69U, 0x85448383U, 0xfbd6c226U
- /* 176 */ , 0xddf1c11aU, 0xa36380bfU, 0xd0a3ae55U, 0xae31eff0U, 0xc7551f84U, 0xb9c75e21U, 0xca0770cbU, 0xb495316eU
- /* 184 */ , 0x18cf9022U, 0x665dd187U, 0x159dff6dU, 0x6b0fbec8U, 0x026b4ebcU, 0x7cf90f19U, 0x0f3921f3U, 0x71ab6056U
- /* 192 */ , 0x9af7424cU, 0xe46503e9U, 0x97a52d03U, 0xe9376ca6U, 0x80539cd2U, 0xfec1dd77U, 0x8d01f39dU, 0xf393b238U
- /* 200 */ , 0x5fc91374U, 0x215b52d1U, 0x529b7c3bU, 0x2c093d9eU, 0x456dcdeaU, 0x3bff8c4fU, 0x483fa2a5U, 0x36ade300U
- /* 208 */ , 0x108ae03cU, 0x6e18a199U, 0x1dd88f73U, 0x634aced6U, 0x0a2e3ea2U, 0x74bc7f07U, 0x077c51edU, 0x79ee1048U
- /* 216 */ , 0xd5b4b104U, 0xab26f0a1U, 0xd8e6de4bU, 0xa6749feeU, 0xcf106f9aU, 0xb1822e3fU, 0xc24200d5U, 0xbcd04170U
- /* 224 */ , 0x8e0c06adU, 0xf09e4708U, 0x835e69e2U, 0xfdcc2847U, 0x94a8d833U, 0xea3a9996U, 0x99fab77cU, 0xe768f6d9U
- /* 232 */ , 0x4b325795U, 0x35a01630U, 0x466038daU, 0x38f2797fU, 0x5196890bU, 0x2f04c8aeU, 0x5cc4e644U, 0x2256a7e1U
- /* 240 */ , 0x0471a4ddU, 0x7ae3e578U, 0x0923cb92U, 0x77b18a37U, 0x1ed57a43U, 0x60473be6U, 0x1387150cU, 0x6d1554a9U
- /* 248 */ , 0xc14ff5e5U, 0xbfddb440U, 0xcc1d9aaaU, 0xb28fdb0fU, 0xdbeb2b7bU, 0xa5796adeU, 0xd6b94434U, 0xa82b0591U
- }
- ,
- /* CRC32C table 7 for quad-bytes ( big-endian ), auto-generated. DO NOT MODIFY! */
- {
- /* 0 */ 0x00000000U, 0xb8aa45ddU, 0x812367bfU, 0x39892262U, 0xf331227bU, 0x4b9b67a6U, 0x721245c4U, 0xcab80019U
- /* 8 */ , 0xe66344f6U, 0x5ec9012bU, 0x67402349U, 0xdfea6694U, 0x1552668dU, 0xadf82350U, 0x94710132U, 0x2cdb44efU
- /* 16 */ , 0x3db164e9U, 0x851b2134U, 0xbc920356U, 0x0438468bU, 0xce804692U, 0x762a034fU, 0x4fa3212dU, 0xf70964f0U
- /* 24 */ , 0xdbd2201fU, 0x637865c2U, 0x5af147a0U, 0xe25b027dU, 0x28e30264U, 0x904947b9U, 0xa9c065dbU, 0x116a2006U
- /* 32 */ , 0x8b1425d7U, 0x33be600aU, 0x0a374268U, 0xb29d07b5U, 0x782507acU, 0xc08f4271U, 0xf9066013U, 0x41ac25ceU
- /* 40 */ , 0x6d776121U, 0xd5dd24fcU, 0xec54069eU, 0x54fe4343U, 0x9e46435aU, 0x26ec0687U, 0x1f6524e5U, 0xa7cf6138U
- /* 48 */ , 0xb6a5413eU, 0x0e0f04e3U, 0x37862681U, 0x8f2c635cU, 0x45946345U, 0xfd3e2698U, 0xc4b704faU, 0x7c1d4127U
- /* 56 */ , 0x50c605c8U, 0xe86c4015U, 0xd1e56277U, 0x694f27aaU, 0xa3f727b3U, 0x1b5d626eU, 0x22d4400cU, 0x9a7e05d1U
- /* 64 */ , 0xe75fa6abU, 0x5ff5e376U, 0x667cc114U, 0xded684c9U, 0x146e84d0U, 0xacc4c10dU, 0x954de36fU, 0x2de7a6b2U
- /* 72 */ , 0x013ce25dU, 0xb996a780U, 0x801f85e2U, 0x38b5c03fU, 0xf20dc026U, 0x4aa785fbU, 0x732ea799U, 0xcb84e244U
- /* 80 */ , 0xdaeec242U, 0x6244879fU, 0x5bcda5fdU, 0xe367e020U, 0x29dfe039U, 0x9175a5e4U, 0xa8fc8786U, 0x1056c25bU
- /* 88 */ , 0x3c8d86b4U, 0x8427c369U, 0xbdaee10bU, 0x0504a4d6U, 0xcfbca4cfU, 0x7716e112U, 0x4e9fc370U, 0xf63586adU
- /* 96 */ , 0x6c4b837cU, 0xd4e1c6a1U, 0xed68e4c3U, 0x55c2a11eU, 0x9f7aa107U, 0x27d0e4daU, 0x1e59c6b8U, 0xa6f38365U
- /* 104 */ , 0x8a28c78aU, 0x32828257U, 0x0b0ba035U, 0xb3a1e5e8U, 0x7919e5f1U, 0xc1b3a02cU, 0xf83a824eU, 0x4090c793U
- /* 112 */ , 0x51fae795U, 0xe950a248U, 0xd0d9802aU, 0x6873c5f7U, 0xa2cbc5eeU, 0x1a618033U, 0x23e8a251U, 0x9b42e78cU
- /* 120 */ , 0xb799a363U, 0x0f33e6beU, 0x36bac4dcU, 0x8e108101U, 0x44a88118U, 0xfc02c4c5U, 0xc58be6a7U, 0x7d21a37aU
- /* 128 */ , 0x3fc9a052U, 0x8763e58fU, 0xbeeac7edU, 0x06408230U, 0xccf88229U, 0x7452c7f4U, 0x4ddbe596U, 0xf571a04bU
- /* 136 */ , 0xd9aae4a4U, 0x6100a179U, 0x5889831bU, 0xe023c6c6U, 0x2a9bc6dfU, 0x92318302U, 0xabb8a160U, 0x1312e4bdU
- /* 144 */ , 0x0278c4bbU, 0xbad28166U, 0x835ba304U, 0x3bf1e6d9U, 0xf149e6c0U, 0x49e3a31dU, 0x706a817fU, 0xc8c0c4a2U
- /* 152 */ , 0xe41b804dU, 0x5cb1c590U, 0x6538e7f2U, 0xdd92a22fU, 0x172aa236U, 0xaf80e7ebU, 0x9609c589U, 0x2ea38054U
- /* 160 */ , 0xb4dd8585U, 0x0c77c058U, 0x35fee23aU, 0x8d54a7e7U, 0x47eca7feU, 0xff46e223U, 0xc6cfc041U, 0x7e65859cU
- /* 168 */ , 0x52bec173U, 0xea1484aeU, 0xd39da6ccU, 0x6b37e311U, 0xa18fe308U, 0x1925a6d5U, 0x20ac84b7U, 0x9806c16aU
- /* 176 */ , 0x896ce16cU, 0x31c6a4b1U, 0x084f86d3U, 0xb0e5c30eU, 0x7a5dc317U, 0xc2f786caU, 0xfb7ea4a8U, 0x43d4e175U
- /* 184 */ , 0x6f0fa59aU, 0xd7a5e047U, 0xee2cc225U, 0x568687f8U, 0x9c3e87e1U, 0x2494c23cU, 0x1d1de05eU, 0xa5b7a583U
- /* 192 */ , 0xd89606f9U, 0x603c4324U, 0x59b56146U, 0xe11f249bU, 0x2ba72482U, 0x930d615fU, 0xaa84433dU, 0x122e06e0U
- /* 200 */ , 0x3ef5420fU, 0x865f07d2U, 0xbfd625b0U, 0x077c606dU, 0xcdc46074U, 0x756e25a9U, 0x4ce707cbU, 0xf44d4216U
- /* 208 */ , 0xe5276210U, 0x5d8d27cdU, 0x640405afU, 0xdcae4072U, 0x1616406bU, 0xaebc05b6U, 0x973527d4U, 0x2f9f6209U
- /* 216 */ , 0x034426e6U, 0xbbee633bU, 0x82674159U, 0x3acd0484U, 0xf075049dU, 0x48df4140U, 0x71566322U, 0xc9fc26ffU
- /* 224 */ , 0x5382232eU, 0xeb2866f3U, 0xd2a14491U, 0x6a0b014cU, 0xa0b30155U, 0x18194488U, 0x219066eaU, 0x993a2337U
- /* 232 */ , 0xb5e167d8U, 0x0d4b2205U, 0x34c20067U, 0x8c6845baU, 0x46d045a3U, 0xfe7a007eU, 0xc7f3221cU, 0x7f5967c1U
- /* 240 */ , 0x6e3347c7U, 0xd699021aU, 0xef102078U, 0x57ba65a5U, 0x9d0265bcU, 0x25a82061U, 0x1c210203U, 0xa48b47deU
- /* 248 */ , 0x88500331U, 0x30fa46ecU, 0x0973648eU, 0xb1d92153U, 0x7b61214aU, 0xc3cb6497U, 0xfa4246f5U, 0x42e80328U
- }
- #endif
- };
-
-juint* StubRoutines::ppc64::_crc_constants = NULL;
-juint* StubRoutines::ppc64::_crc32c_constants = NULL;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp
--- a/src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1815,25 +1815,23 @@
// R15_esp is callers operand stack pointer, i.e. it points to the parameters.
const Register argP = R15_esp;
const Register crc = R3_ARG1; // crc value
- const Register data = R4_ARG2; // address of java byte value (kernel_crc32 needs address)
- const Register dataLen = R5_ARG3; // source data len (1 byte). Not used because calling the single-byte emitter.
- const Register table = R6_ARG4; // address of crc32 table
- const Register tmp = dataLen; // Reuse unused len register to show we don't actually need a separate tmp here.
+ const Register data = R4_ARG2;
+ const Register table = R5_ARG3; // address of crc32 table
BLOCK_COMMENT("CRC32_update {");
// Arguments are reversed on java expression stack
#ifdef VM_LITTLE_ENDIAN
- __ addi(data, argP, 0+1*wordSize); // (stack) address of byte value. Emitter expects address, not value.
+ int data_offs = 0+1*wordSize; // (stack) address of byte value. Emitter expects address, not value.
// Being passed as an int, the single byte is at offset +0.
#else
- __ addi(data, argP, 3+1*wordSize); // (stack) address of byte value. Emitter expects address, not value.
+ int data_offs = 3+1*wordSize; // (stack) address of byte value. Emitter expects address, not value.
// Being passed from java as an int, the single byte is at offset +3.
#endif
- __ lwz(crc, 2*wordSize, argP); // Current crc state, zero extend to 64 bit to have a clean register.
-
+ __ lwz(crc, 2*wordSize, argP); // Current crc state, zero extend to 64 bit to have a clean register.
+ __ lbz(data, data_offs, argP); // Byte from buffer, zero-extended.
__ load_const_optimized(table, StubRoutines::crc_table_addr(), R0);
- __ kernel_crc32_singleByte(crc, data, dataLen, table, tmp, true);
+ __ kernel_crc32_singleByteReg(crc, data, table, true);
// Restore caller sp for c2i case (from compiled) and for resized sender frame (from interpreted).
__ resize_frame_absolute(R21_sender_SP, R11_scratch1, R0);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/s390/frame_s390.inline.hpp
--- a/src/hotspot/cpu/s390/frame_s390.inline.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/s390/frame_s390.inline.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -111,14 +111,6 @@
return _fp;
}
-// Return true if this frame is younger (more recent activation) than
-// the frame represented by id.
-inline bool frame::is_younger(intptr_t* id) const {
- assert(this->id() != NULL && id != NULL, "NULL frame id");
- // Stack grows towards smaller addresses on z/Architecture.
- return this->id() < id;
-}
-
// Return true if this frame is older (less recent activation) than
// the frame represented by id.
inline bool frame::is_older(intptr_t* id) const {
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/sparc/frame_sparc.inline.hpp
--- a/src/hotspot/cpu/sparc/frame_sparc.inline.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/sparc/frame_sparc.inline.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -57,11 +57,6 @@
// frame.
inline intptr_t* frame::id(void) const { return unextended_sp(); }
-// Relationals on frames based
-// Return true if the frame is younger (more recent activation) than the frame represented by id
-inline bool frame::is_younger(intptr_t* id) const { assert(this->id() != NULL && id != NULL, "NULL frame id");
- return this->id() < id ; }
-
// Return true if the frame is older (less recent activation) than the frame represented by id
inline bool frame::is_older(intptr_t* id) const { assert(this->id() != NULL && id != NULL, "NULL frame id");
return this->id() > id ; }
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/x86/frame_x86.inline.hpp
--- a/src/hotspot/cpu/x86/frame_x86.inline.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/x86/frame_x86.inline.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -133,11 +133,6 @@
// frame.
inline intptr_t* frame::id(void) const { return unextended_sp(); }
-// Relationals on frames based
-// Return true if the frame is younger (more recent activation) than the frame represented by id
-inline bool frame::is_younger(intptr_t* id) const { assert(this->id() != NULL && id != NULL, "NULL frame id");
- return this->id() < id ; }
-
// Return true if the frame is older (less recent activation) than the frame represented by id
inline bool frame::is_older(intptr_t* id) const { assert(this->id() != NULL && id != NULL, "NULL frame id");
return this->id() > id ; }
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp
--- a/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -592,64 +592,19 @@
#ifndef _LP64
void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm,
Register res, Address addr, Register oldval, Register newval,
- bool exchange, bool encode, Register tmp1, Register tmp2) {
+ bool exchange, Register tmp1, Register tmp2) {
// Shenandoah has no 32-bit version for this.
Unimplemented();
}
#else
void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm,
Register res, Address addr, Register oldval, Register newval,
- bool exchange, bool encode, Register tmp1, Register tmp2) {
- if (!ShenandoahCASBarrier) {
-#ifdef _LP64
- if (UseCompressedOops) {
- if (encode) {
- __ encode_heap_oop(oldval);
- __ mov(rscratch1, newval);
- __ encode_heap_oop(rscratch1);
- newval = rscratch1;
- }
- if (os::is_MP()) {
- __ lock();
- }
- // oldval (rax) is implicitly used by this instruction
- __ cmpxchgl(newval, addr);
- } else
-#endif
- {
- if (os::is_MP()) {
- __ lock();
- }
- __ cmpxchgptr(newval, addr);
- }
-
- if (!exchange) {
- assert(res != NULL, "need result register");
- __ setb(Assembler::equal, res);
- __ movzbl(res, res);
- }
- return;
- }
-
+ bool exchange, Register tmp1, Register tmp2) {
assert(ShenandoahCASBarrier, "Should only be used when CAS barrier is enabled");
assert(oldval == rax, "must be in rax for implicit use in cmpxchg");
Label retry, done;
- // Apply storeval barrier to newval.
- if (encode) {
- storeval_barrier(masm, newval, tmp1);
- }
-
- if (UseCompressedOops) {
- if (encode) {
- __ encode_heap_oop(oldval);
- __ mov(rscratch1, newval);
- __ encode_heap_oop(rscratch1);
- newval = rscratch1;
- }
- }
-
// Remember oldval for retry logic below
if (UseCompressedOops) {
__ movl(tmp1, oldval);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.hpp
--- a/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -64,7 +64,6 @@
void write_barrier(MacroAssembler* masm, Register dst);
void write_barrier_impl(MacroAssembler* masm, Register dst);
- void storeval_barrier(MacroAssembler* masm, Register dst, Register tmp);
void storeval_barrier_impl(MacroAssembler* masm, Register dst, Register tmp);
address generate_shenandoah_wb(StubCodeGenerator* cgen);
@@ -75,6 +74,7 @@
public:
static address shenandoah_wb();
+ void storeval_barrier(MacroAssembler* masm, Register dst, Register tmp);
#ifdef COMPILER1
void gen_pre_barrier_stub(LIR_Assembler* ce, ShenandoahPreBarrierStub* stub);
void gen_write_barrier_stub(LIR_Assembler* ce, ShenandoahWriteBarrierStub* stub);
@@ -83,7 +83,7 @@
void cmpxchg_oop(MacroAssembler* masm,
Register res, Address addr, Register oldval, Register newval,
- bool exchange, bool encode, Register tmp1, Register tmp2);
+ bool exchange, Register tmp1, Register tmp2);
virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
Register src, Register dst, Register count);
virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetC1_x86.cpp
--- a/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetC1_x86.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetC1_x86.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -28,20 +28,36 @@
#include "gc/shenandoah/shenandoahBarrierSetAssembler.hpp"
#include "gc/shenandoah/c1/shenandoahBarrierSetC1.hpp"
+#define __ masm->masm()->
+
void LIR_OpShenandoahCompareAndSwap::emit_code(LIR_Assembler* masm) {
Register addr = _addr->as_register_lo();
Register newval = _new_value->as_register();
Register cmpval = _cmp_value->as_register();
Register tmp1 = _tmp1->as_register();
Register tmp2 = _tmp2->as_register();
+ Register result = result_opr()->as_register();
assert(cmpval == rax, "wrong register");
assert(newval != NULL, "new val must be register");
assert(cmpval != newval, "cmp and new values must be in different registers");
assert(cmpval != addr, "cmp and addr must be in different registers");
assert(newval != addr, "new value and addr must be in different registers");
- ShenandoahBarrierSet::assembler()->cmpxchg_oop(masm->masm(), NULL, Address(addr, 0), cmpval, newval, true, true, tmp1, tmp2);
+
+ // Apply storeval barrier to newval.
+ ShenandoahBarrierSet::assembler()->storeval_barrier(masm->masm(), newval, tmp1);
+
+ if (UseCompressedOops) {
+ __ encode_heap_oop(cmpval);
+ __ mov(rscratch1, newval);
+ __ encode_heap_oop(rscratch1);
+ newval = rscratch1;
+ }
+
+ ShenandoahBarrierSet::assembler()->cmpxchg_oop(masm->masm(), result, Address(addr, 0), cmpval, newval, false, tmp1, tmp2);
}
+#undef __
+
#ifdef ASSERT
#define __ gen->lir(__FILE__, __LINE__)->
#else
@@ -63,12 +79,9 @@
LIR_Opr t1 = gen->new_register(T_OBJECT);
LIR_Opr t2 = gen->new_register(T_OBJECT);
LIR_Opr addr = access.resolved_addr()->as_address_ptr()->base();
-
- __ append(new LIR_OpShenandoahCompareAndSwap(addr, cmp_value.result(), new_value.result(), t1, t2, LIR_OprFact::illegalOpr));
+ LIR_Opr result = gen->new_register(T_INT);
- LIR_Opr result = gen->new_register(T_INT);
- __ cmove(lir_cond_equal, LIR_OprFact::intConst(1), LIR_OprFact::intConst(0),
- result, T_INT);
+ __ append(new LIR_OpShenandoahCompareAndSwap(addr, cmp_value.result(), new_value.result(), t1, t2, result));
return result;
}
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/x86/gc/shenandoah/shenandoah_x86_64.ad
--- a/src/hotspot/cpu/x86/gc/shenandoah/shenandoah_x86_64.ad Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/x86/gc/shenandoah/shenandoah_x86_64.ad Tue Jan 29 09:38:31 2019 -0500
@@ -83,7 +83,7 @@
ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm,
$res$$Register, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
false, // swap
- false, $tmp1$$Register, $tmp2$$Register
+ $tmp1$$Register, $tmp2$$Register
);
%}
ins_pipe( pipe_cmpxchg );
@@ -104,7 +104,7 @@
ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm,
$res$$Register, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
false, // swap
- false, $tmp1$$Register, $tmp2$$Register
+ $tmp1$$Register, $tmp2$$Register
);
%}
ins_pipe( pipe_cmpxchg );
@@ -123,7 +123,7 @@
ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm,
NULL, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
true, // exchange
- false, $tmp1$$Register, $tmp2$$Register
+ $tmp1$$Register, $tmp2$$Register
);
%}
ins_pipe( pipe_cmpxchg );
@@ -145,7 +145,7 @@
ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm,
NULL, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
true, // exchange
- false, $tmp1$$Register, $tmp2$$Register
+ $tmp1$$Register, $tmp2$$Register
);
%}
ins_pipe( pipe_cmpxchg );
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp
--- a/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -37,8 +37,9 @@
#include "gc/z/c1/zBarrierSetC1.hpp"
#endif // COMPILER1
-#undef __
-#define __ masm->
+ZBarrierSetAssembler::ZBarrierSetAssembler() :
+ _load_barrier_slow_stub(),
+ _load_barrier_weak_slow_stub() {}
#ifdef PRODUCT
#define BLOCK_COMMENT(str) /* nothing */
@@ -46,6 +47,9 @@
#define BLOCK_COMMENT(str) __ block_comment(str)
#endif
+#undef __
+#define __ masm->
+
static void call_vm(MacroAssembler* masm,
address entry_point,
Register arg0,
@@ -274,20 +278,21 @@
Register ref = stub->ref()->as_register();
Register ref_addr = noreg;
+ Register tmp = noreg;
- if (stub->ref_addr()->is_register()) {
+ if (stub->tmp()->is_valid()) {
+ // Load address into tmp register
+ ce->leal(stub->ref_addr(), stub->tmp());
+ ref_addr = tmp = stub->tmp()->as_pointer_register();
+ } else {
// Address already in register
- ref_addr = stub->ref_addr()->as_pointer_register();
- } else {
- // Load address into tmp register
- ce->leal(stub->ref_addr(), stub->tmp(), stub->patch_code(), stub->patch_info());
- ref_addr = stub->tmp()->as_pointer_register();
+ ref_addr = stub->ref_addr()->as_address_ptr()->base()->as_pointer_register();
}
assert_different_registers(ref, ref_addr, noreg);
- // Save rax unless it is the result register
- if (ref != rax) {
+ // Save rax unless it is the result or tmp register
+ if (ref != rax && tmp != rax) {
__ push(rax);
}
@@ -301,9 +306,13 @@
// Verify result
__ verify_oop(rax, "Bad oop");
- // Restore rax unless it is the result register
+ // Move result into place
if (ref != rax) {
__ movptr(ref, rax);
+ }
+
+ // Restore rax unless it is the result or tmp register
+ if (ref != rax && tmp != rax) {
__ pop(rax);
}
@@ -461,3 +470,11 @@
barrier_stubs_init_inner("zgc_load_barrier_stubs", ON_STRONG_OOP_REF, _load_barrier_slow_stub);
barrier_stubs_init_inner("zgc_load_barrier_weak_stubs", ON_WEAK_OOP_REF, _load_barrier_weak_slow_stub);
}
+
+address ZBarrierSetAssembler::load_barrier_slow_stub(Register reg) {
+ return _load_barrier_slow_stub[reg->encoding()];
+}
+
+address ZBarrierSetAssembler::load_barrier_weak_slow_stub(Register reg) {
+ return _load_barrier_weak_slow_stub[reg->encoding()];
+}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.hpp
--- a/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -33,16 +33,12 @@
#endif // COMPILER1
class ZBarrierSetAssembler : public ZBarrierSetAssemblerBase {
+private:
address _load_barrier_slow_stub[RegisterImpl::number_of_registers];
address _load_barrier_weak_slow_stub[RegisterImpl::number_of_registers];
public:
- ZBarrierSetAssembler() :
- _load_barrier_slow_stub(),
- _load_barrier_weak_slow_stub() {}
-
- address load_barrier_slow_stub(Register reg) { return _load_barrier_slow_stub[reg->encoding()]; }
- address load_barrier_weak_slow_stub(Register reg) { return _load_barrier_weak_slow_stub[reg->encoding()]; }
+ ZBarrierSetAssembler();
virtual void load_at(MacroAssembler* masm,
DecoratorSet decorators,
@@ -87,6 +83,9 @@
#endif // COMPILER1
virtual void barrier_stubs_init();
+
+ address load_barrier_slow_stub(Register reg);
+ address load_barrier_weak_slow_stub(Register reg);
};
#endif // CPU_X86_GC_Z_ZBARRIERSETASSEMBLER_X86_HPP
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/x86/gc/z/z_x86_64.ad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/cpu/x86/gc/z/z_x86_64.ad Tue Jan 29 09:38:31 2019 -0500
@@ -0,0 +1,155 @@
+//
+// Copyright (c) 2015, 2019, 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.
+//
+
+source %{
+
+#include "gc/z/zBarrierSetAssembler.hpp"
+
+static void z_load_barrier_slow_reg(MacroAssembler& _masm, Register dst, Address src, bool weak) {
+ assert(dst != r12, "Invalid register");
+ assert(dst != r15, "Invalid register");
+ assert(dst != rsp, "Invalid register");
+
+ const address stub = weak ? ZBarrierSet::assembler()->load_barrier_weak_slow_stub(dst)
+ : ZBarrierSet::assembler()->load_barrier_slow_stub(dst);
+ __ lea(dst, src);
+ __ call(RuntimeAddress(stub));
+}
+
+%}
+
+// For XMM and YMM enabled processors
+instruct zLoadBarrierSlowRegXmmAndYmm(rRegP dst, memory src, rFlagsReg cr,
+ rxmm0 x0, rxmm1 x1, rxmm2 x2,rxmm3 x3,
+ rxmm4 x4, rxmm5 x5, rxmm6 x6, rxmm7 x7,
+ rxmm8 x8, rxmm9 x9, rxmm10 x10, rxmm11 x11,
+ rxmm12 x12, rxmm13 x13, rxmm14 x14, rxmm15 x15) %{
+
+ match(Set dst (LoadBarrierSlowReg src));
+ predicate(UseAVX <= 2);
+
+ effect(DEF dst, KILL cr,
+ KILL x0, KILL x1, KILL x2, KILL x3,
+ KILL x4, KILL x5, KILL x6, KILL x7,
+ KILL x8, KILL x9, KILL x10, KILL x11,
+ KILL x12, KILL x13, KILL x14, KILL x15);
+
+ format %{ "zLoadBarrierSlowRegXmmAndYmm $dst, $src" %}
+
+ ins_encode %{
+ z_load_barrier_slow_reg(_masm, $dst$$Register, $src$$Address, false /* weak */);
+ %}
+
+ ins_pipe(pipe_slow);
+%}
+
+// For ZMM enabled processors
+instruct zLoadBarrierSlowRegZmm(rRegP dst, memory src, rFlagsReg cr,
+ rxmm0 x0, rxmm1 x1, rxmm2 x2,rxmm3 x3,
+ rxmm4 x4, rxmm5 x5, rxmm6 x6, rxmm7 x7,
+ rxmm8 x8, rxmm9 x9, rxmm10 x10, rxmm11 x11,
+ rxmm12 x12, rxmm13 x13, rxmm14 x14, rxmm15 x15,
+ rxmm16 x16, rxmm17 x17, rxmm18 x18, rxmm19 x19,
+ rxmm20 x20, rxmm21 x21, rxmm22 x22, rxmm23 x23,
+ rxmm24 x24, rxmm25 x25, rxmm26 x26, rxmm27 x27,
+ rxmm28 x28, rxmm29 x29, rxmm30 x30, rxmm31 x31) %{
+
+ match(Set dst (LoadBarrierSlowReg src));
+ predicate(UseAVX == 3);
+
+ effect(DEF dst, KILL cr,
+ KILL x0, KILL x1, KILL x2, KILL x3,
+ KILL x4, KILL x5, KILL x6, KILL x7,
+ KILL x8, KILL x9, KILL x10, KILL x11,
+ KILL x12, KILL x13, KILL x14, KILL x15,
+ KILL x16, KILL x17, KILL x18, KILL x19,
+ KILL x20, KILL x21, KILL x22, KILL x23,
+ KILL x24, KILL x25, KILL x26, KILL x27,
+ KILL x28, KILL x29, KILL x30, KILL x31);
+
+ format %{ "zLoadBarrierSlowRegZmm $dst, $src" %}
+
+ ins_encode %{
+ z_load_barrier_slow_reg(_masm, $dst$$Register, $src$$Address, false /* weak */);
+ %}
+
+ ins_pipe(pipe_slow);
+%}
+
+// For XMM and YMM enabled processors
+instruct zLoadBarrierWeakSlowRegXmmAndYmm(rRegP dst, memory src, rFlagsReg cr,
+ rxmm0 x0, rxmm1 x1, rxmm2 x2,rxmm3 x3,
+ rxmm4 x4, rxmm5 x5, rxmm6 x6, rxmm7 x7,
+ rxmm8 x8, rxmm9 x9, rxmm10 x10, rxmm11 x11,
+ rxmm12 x12, rxmm13 x13, rxmm14 x14, rxmm15 x15) %{
+
+ match(Set dst (LoadBarrierWeakSlowReg src));
+ predicate(UseAVX <= 2);
+
+ effect(DEF dst, KILL cr,
+ KILL x0, KILL x1, KILL x2, KILL x3,
+ KILL x4, KILL x5, KILL x6, KILL x7,
+ KILL x8, KILL x9, KILL x10, KILL x11,
+ KILL x12, KILL x13, KILL x14, KILL x15);
+
+ format %{ "zLoadBarrierWeakSlowRegXmmAndYmm $dst, $src" %}
+
+ ins_encode %{
+ z_load_barrier_slow_reg(_masm, $dst$$Register, $src$$Address, true /* weak */);
+ %}
+
+ ins_pipe(pipe_slow);
+%}
+
+// For ZMM enabled processors
+instruct zLoadBarrierWeakSlowRegZmm(rRegP dst, memory src, rFlagsReg cr,
+ rxmm0 x0, rxmm1 x1, rxmm2 x2,rxmm3 x3,
+ rxmm4 x4, rxmm5 x5, rxmm6 x6, rxmm7 x7,
+ rxmm8 x8, rxmm9 x9, rxmm10 x10, rxmm11 x11,
+ rxmm12 x12, rxmm13 x13, rxmm14 x14, rxmm15 x15,
+ rxmm16 x16, rxmm17 x17, rxmm18 x18, rxmm19 x19,
+ rxmm20 x20, rxmm21 x21, rxmm22 x22, rxmm23 x23,
+ rxmm24 x24, rxmm25 x25, rxmm26 x26, rxmm27 x27,
+ rxmm28 x28, rxmm29 x29, rxmm30 x30, rxmm31 x31) %{
+
+ match(Set dst (LoadBarrierWeakSlowReg src));
+ predicate(UseAVX == 3);
+
+ effect(DEF dst, KILL cr,
+ KILL x0, KILL x1, KILL x2, KILL x3,
+ KILL x4, KILL x5, KILL x6, KILL x7,
+ KILL x8, KILL x9, KILL x10, KILL x11,
+ KILL x12, KILL x13, KILL x14, KILL x15,
+ KILL x16, KILL x17, KILL x18, KILL x19,
+ KILL x20, KILL x21, KILL x22, KILL x23,
+ KILL x24, KILL x25, KILL x26, KILL x27,
+ KILL x28, KILL x29, KILL x30, KILL x31);
+
+ format %{ "zLoadBarrierWeakSlowRegZmm $dst, $src" %}
+
+ ins_encode %{
+ z_load_barrier_slow_reg(_masm, $dst$$Register, $src$$Address, true /* weak */);
+ %}
+
+ ins_pipe(pipe_slow);
+%}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/x86/stubGenerator_x86_32.cpp
--- a/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2019, 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
@@ -3709,8 +3709,6 @@
// Round to nearest, 24-bit mode, exceptions masked
StubRoutines::_fpu_cntrl_wrd_24 = 0x007F;
// Round to nearest, 64-bit mode, exceptions masked
- StubRoutines::_fpu_cntrl_wrd_64 = 0x037F;
- // Round to nearest, 64-bit mode, exceptions masked
StubRoutines::_mxcsr_std = 0x1F80;
// Note: the following two constants are 80-bit values
// layout is critical for correct loading by FPU.
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/x86/stubGenerator_x86_64.cpp
--- a/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, 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
@@ -5721,8 +5721,6 @@
// Round to nearest, 24-bit mode, exceptions masked
StubRoutines::_fpu_cntrl_wrd_24 = 0x007F;
// Round to nearest, 64-bit mode, exceptions masked
- StubRoutines::_fpu_cntrl_wrd_64 = 0x037F;
- // Round to nearest, 64-bit mode, exceptions masked
StubRoutines::_mxcsr_std = 0x1F80;
// Note: the following two constants are 80-bit values
// layout is critical for correct loading by FPU.
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/x86/x86.ad
--- a/src/hotspot/cpu/x86/x86.ad Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/x86/x86.ad Tue Jan 29 09:38:31 2019 -0500
@@ -1638,6 +1638,7 @@
// Cheap to find it by looking for screwy base.
if (adr->is_AddP() &&
!adr->in(AddPNode::Base)->is_top() &&
+ LP64_ONLY( off->get_long() == (int) (off->get_long()) && ) // immL32
// Are there other uses besides address expressions?
!is_visited(adr)) {
address_visited.set(adr->_idx); // Flag as address_visited
diff -r b50715adf242 -r cf2b4754174d src/hotspot/cpu/x86/x86_64.ad
--- a/src/hotspot/cpu/x86/x86_64.ad Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/cpu/x86/x86_64.ad Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
//
-// Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+// Copyright (c) 2003, 2019, 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
@@ -526,12 +526,6 @@
%}
-source_hpp %{
-#if INCLUDE_ZGC
-#include "gc/z/zBarrierSetAssembler.hpp"
-#endif
-%}
-
//----------SOURCE BLOCK-------------------------------------------------------
// This is a block of C++ code which provides values, functions, and
// definitions necessary in the rest of the architecture description
@@ -12711,170 +12705,6 @@
ins_pipe(pipe_jmp);
%}
-//
-// Execute ZGC load barrier (strong) slow path
-//
-
-// For XMM and YMM enabled processors
-instruct loadBarrierSlowRegXmmAndYmm(rRegP dst, memory mem, rFlagsReg cr,
- rxmm0 x0, rxmm1 x1, rxmm2 x2,rxmm3 x3,
- rxmm4 x4, rxmm5 x5, rxmm6 x6, rxmm7 x7,
- rxmm8 x8, rxmm9 x9, rxmm10 x10, rxmm11 x11,
- rxmm12 x12, rxmm13 x13, rxmm14 x14, rxmm15 x15) %{
-
- match(Set dst (LoadBarrierSlowReg mem));
- predicate(UseAVX <= 2);
-
- effect(DEF dst, KILL cr,
- KILL x0, KILL x1, KILL x2, KILL x3,
- KILL x4, KILL x5, KILL x6, KILL x7,
- KILL x8, KILL x9, KILL x10, KILL x11,
- KILL x12, KILL x13, KILL x14, KILL x15);
-
- format %{"LoadBarrierSlowRegXmmAndYmm $dst, $mem" %}
- ins_encode %{
-#if INCLUDE_ZGC
- Register d = $dst$$Register;
- ZBarrierSetAssembler* bs = (ZBarrierSetAssembler*)BarrierSet::barrier_set()->barrier_set_assembler();
-
- assert(d != r12, "Can't be R12!");
- assert(d != r15, "Can't be R15!");
- assert(d != rsp, "Can't be RSP!");
-
- __ lea(d, $mem$$Address);
- __ call(RuntimeAddress(bs->load_barrier_slow_stub(d)));
-#else
- ShouldNotReachHere();
-#endif
- %}
- ins_pipe(pipe_slow);
-%}
-
-// For ZMM enabled processors
-instruct loadBarrierSlowRegZmm(rRegP dst, memory mem, rFlagsReg cr,
- rxmm0 x0, rxmm1 x1, rxmm2 x2,rxmm3 x3,
- rxmm4 x4, rxmm5 x5, rxmm6 x6, rxmm7 x7,
- rxmm8 x8, rxmm9 x9, rxmm10 x10, rxmm11 x11,
- rxmm12 x12, rxmm13 x13, rxmm14 x14, rxmm15 x15,
- rxmm16 x16, rxmm17 x17, rxmm18 x18, rxmm19 x19,
- rxmm20 x20, rxmm21 x21, rxmm22 x22, rxmm23 x23,
- rxmm24 x24, rxmm25 x25, rxmm26 x26, rxmm27 x27,
- rxmm28 x28, rxmm29 x29, rxmm30 x30, rxmm31 x31) %{
-
- match(Set dst (LoadBarrierSlowReg mem));
- predicate(UseAVX == 3);
-
- effect(DEF dst, KILL cr,
- KILL x0, KILL x1, KILL x2, KILL x3,
- KILL x4, KILL x5, KILL x6, KILL x7,
- KILL x8, KILL x9, KILL x10, KILL x11,
- KILL x12, KILL x13, KILL x14, KILL x15,
- KILL x16, KILL x17, KILL x18, KILL x19,
- KILL x20, KILL x21, KILL x22, KILL x23,
- KILL x24, KILL x25, KILL x26, KILL x27,
- KILL x28, KILL x29, KILL x30, KILL x31);
-
- format %{"LoadBarrierSlowRegZmm $dst, $mem" %}
- ins_encode %{
-#if INCLUDE_ZGC
- Register d = $dst$$Register;
- ZBarrierSetAssembler* bs = (ZBarrierSetAssembler*)BarrierSet::barrier_set()->barrier_set_assembler();
-
- assert(d != r12, "Can't be R12!");
- assert(d != r15, "Can't be R15!");
- assert(d != rsp, "Can't be RSP!");
-
- __ lea(d, $mem$$Address);
- __ call(RuntimeAddress(bs->load_barrier_slow_stub(d)));
-#else
- ShouldNotReachHere();
-#endif
- %}
- ins_pipe(pipe_slow);
-%}
-
-//
-// Execute ZGC load barrier (weak) slow path
-//
-
-// For XMM and YMM enabled processors
-instruct loadBarrierWeakSlowRegXmmAndYmm(rRegP dst, memory mem, rFlagsReg cr,
- rxmm0 x0, rxmm1 x1, rxmm2 x2,rxmm3 x3,
- rxmm4 x4, rxmm5 x5, rxmm6 x6, rxmm7 x7,
- rxmm8 x8, rxmm9 x9, rxmm10 x10, rxmm11 x11,
- rxmm12 x12, rxmm13 x13, rxmm14 x14, rxmm15 x15) %{
-
- match(Set dst (LoadBarrierWeakSlowReg mem));
- predicate(UseAVX <= 2);
-
- effect(DEF dst, KILL cr,
- KILL x0, KILL x1, KILL x2, KILL x3,
- KILL x4, KILL x5, KILL x6, KILL x7,
- KILL x8, KILL x9, KILL x10, KILL x11,
- KILL x12, KILL x13, KILL x14, KILL x15);
-
- format %{"LoadBarrierWeakSlowRegXmmAndYmm $dst, $mem" %}
- ins_encode %{
-#if INCLUDE_ZGC
- Register d = $dst$$Register;
- ZBarrierSetAssembler* bs = (ZBarrierSetAssembler*)BarrierSet::barrier_set()->barrier_set_assembler();
-
- assert(d != r12, "Can't be R12!");
- assert(d != r15, "Can't be R15!");
- assert(d != rsp, "Can't be RSP!");
-
- __ lea(d,$mem$$Address);
- __ call(RuntimeAddress(bs->load_barrier_weak_slow_stub(d)));
-#else
- ShouldNotReachHere();
-#endif
- %}
- ins_pipe(pipe_slow);
-%}
-
-// For ZMM enabled processors
-instruct loadBarrierWeakSlowRegZmm(rRegP dst, memory mem, rFlagsReg cr,
- rxmm0 x0, rxmm1 x1, rxmm2 x2,rxmm3 x3,
- rxmm4 x4, rxmm5 x5, rxmm6 x6, rxmm7 x7,
- rxmm8 x8, rxmm9 x9, rxmm10 x10, rxmm11 x11,
- rxmm12 x12, rxmm13 x13, rxmm14 x14, rxmm15 x15,
- rxmm16 x16, rxmm17 x17, rxmm18 x18, rxmm19 x19,
- rxmm20 x20, rxmm21 x21, rxmm22 x22, rxmm23 x23,
- rxmm24 x24, rxmm25 x25, rxmm26 x26, rxmm27 x27,
- rxmm28 x28, rxmm29 x29, rxmm30 x30, rxmm31 x31) %{
-
- match(Set dst (LoadBarrierWeakSlowReg mem));
- predicate(UseAVX == 3);
-
- effect(DEF dst, KILL cr,
- KILL x0, KILL x1, KILL x2, KILL x3,
- KILL x4, KILL x5, KILL x6, KILL x7,
- KILL x8, KILL x9, KILL x10, KILL x11,
- KILL x12, KILL x13, KILL x14, KILL x15,
- KILL x16, KILL x17, KILL x18, KILL x19,
- KILL x20, KILL x21, KILL x22, KILL x23,
- KILL x24, KILL x25, KILL x26, KILL x27,
- KILL x28, KILL x29, KILL x30, KILL x31);
-
- format %{"LoadBarrierWeakSlowRegZmm $dst, $mem" %}
- ins_encode %{
-#if INCLUDE_ZGC
- Register d = $dst$$Register;
- ZBarrierSetAssembler* bs = (ZBarrierSetAssembler*)BarrierSet::barrier_set()->barrier_set_assembler();
-
- assert(d != r12, "Can't be R12!");
- assert(d != r15, "Can't be R15!");
- assert(d != rsp, "Can't be RSP!");
-
- __ lea(d,$mem$$Address);
- __ call(RuntimeAddress(bs->load_barrier_weak_slow_stub(d)));
-#else
- ShouldNotReachHere();
-#endif
- %}
- ins_pipe(pipe_slow);
-%}
-
// ============================================================================
// This name is KNOWN by the ADLC and cannot be changed.
// The ADLC forces a 'TypeRawPtr::BOTTOM' output type
diff -r b50715adf242 -r cf2b4754174d src/hotspot/os/bsd/os_bsd.cpp
--- a/src/hotspot/os/bsd/os_bsd.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/os/bsd/os_bsd.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -2565,7 +2565,7 @@
// managed to send the signal and switch to SUSPEND_REQUEST, now wait for SUSPENDED
while (true) {
- if (sr_semaphore.timedwait(0, 2 * NANOSECS_PER_MILLISEC)) {
+ if (sr_semaphore.timedwait(2)) {
break;
} else {
// timeout
@@ -2599,7 +2599,7 @@
while (true) {
if (sr_notify(osthread) == 0) {
- if (sr_semaphore.timedwait(0, 2 * NANOSECS_PER_MILLISEC)) {
+ if (sr_semaphore.timedwait(2)) {
if (osthread->sr.is_running()) {
return;
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/os/bsd/semaphore_bsd.cpp
--- a/src/hotspot/os/bsd/semaphore_bsd.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/os/bsd/semaphore_bsd.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -24,6 +24,7 @@
#include "precompiled/precompiled.hpp"
#include "semaphore_bsd.hpp"
+#include "runtime/os.hpp"
#include "utilities/debug.hpp"
#include
@@ -65,29 +66,27 @@
assert(ret == KERN_SUCCESS, "Failed to wait on semaphore");
}
-int64_t OSXSemaphore::currenttime() {
- struct timeval tv;
- gettimeofday(&tv, NULL);
- return (tv.tv_sec * NANOSECS_PER_SEC) + (tv.tv_usec * 1000);
+bool OSXSemaphore::trywait() {
+ return timedwait(0);
}
-bool OSXSemaphore::trywait() {
- return timedwait(0, 0);
-}
-
-bool OSXSemaphore::timedwait(unsigned int sec, int nsec) {
+bool OSXSemaphore::timedwait(int64_t millis) {
kern_return_t kr = KERN_ABORTED;
+
+ // kernel semaphores take a relative timeout
mach_timespec_t waitspec;
- waitspec.tv_sec = sec;
- waitspec.tv_nsec = nsec;
+ int secs = millis / MILLIUNITS;
+ int nsecs = (millis % MILLIUNITS) * NANOSECS_PER_MILLISEC;
+ waitspec.tv_sec = secs;
+ waitspec.tv_nsec = nsecs;
- int64_t starttime = currenttime();
+ int64_t starttime = os::javaTimeMillis() * NANOSECS_PER_MILLISEC;
kr = semaphore_timedwait(_semaphore, waitspec);
while (kr == KERN_ABORTED) {
- int64_t totalwait = (sec * NANOSECS_PER_SEC) + nsec;
-
- int64_t current = currenttime();
+ // reduce the timout and try again
+ int64_t totalwait = millis * NANOSECS_PER_MILLISEC;
+ int64_t current = os::javaTimeMillis() * NANOSECS_PER_MILLISEC;
int64_t passedtime = current - starttime;
if (passedtime >= totalwait) {
diff -r b50715adf242 -r cf2b4754174d src/hotspot/os/bsd/semaphore_bsd.hpp
--- a/src/hotspot/os/bsd/semaphore_bsd.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/os/bsd/semaphore_bsd.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -50,10 +50,9 @@
void wait();
bool trywait();
- bool timedwait(unsigned int sec, int nsec);
- private:
- static int64_t currenttime();
+ // wait until the given relative time elapses
+ bool timedwait(int64_t millis);
};
typedef OSXSemaphore SemaphoreImpl;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/os/linux/os_linux.cpp
--- a/src/hotspot/os/linux/os_linux.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/os/linux/os_linux.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -2436,26 +2436,6 @@
return CAST_FROM_FN_PTR(void*, UserHandler);
}
-static struct timespec create_semaphore_timespec(unsigned int sec, int nsec) {
- struct timespec ts;
- // Semaphore's are always associated with CLOCK_REALTIME
- os::Posix::clock_gettime(CLOCK_REALTIME, &ts);
- // see os_posix.cpp for discussion on overflow checking
- if (sec >= MAX_SECS) {
- ts.tv_sec += MAX_SECS;
- ts.tv_nsec = 0;
- } else {
- ts.tv_sec += sec;
- ts.tv_nsec += nsec;
- if (ts.tv_nsec >= NANOSECS_PER_SEC) {
- ts.tv_nsec -= NANOSECS_PER_SEC;
- ++ts.tv_sec; // note: this must be <= max_secs
- }
- }
-
- return ts;
-}
-
extern "C" {
typedef void (*sa_handler_t)(int);
typedef void (*sa_sigaction_t)(int, siginfo_t *, void *);
@@ -4327,7 +4307,7 @@
// managed to send the signal and switch to SUSPEND_REQUEST, now wait for SUSPENDED
while (true) {
- if (sr_semaphore.timedwait(create_semaphore_timespec(0, 2 * NANOSECS_PER_MILLISEC))) {
+ if (sr_semaphore.timedwait(2)) {
break;
} else {
// timeout
@@ -4361,7 +4341,7 @@
while (true) {
if (sr_notify(osthread) == 0) {
- if (sr_semaphore.timedwait(create_semaphore_timespec(0, 2 * NANOSECS_PER_MILLISEC))) {
+ if (sr_semaphore.timedwait(2)) {
if (osthread->sr.is_running()) {
return;
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/os/posix/os_posix.cpp
--- a/src/hotspot/os/posix/os_posix.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/os/posix/os_posix.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1619,11 +1619,9 @@
}
}
-
-// Shared pthread_mutex/cond based PlatformEvent implementation.
-// Not currently usable by Solaris.
-
-#ifndef SOLARIS
+// Shared clock/time and other supporting routines for pthread_mutex/cond
+// initialization. This is enabled on Solaris but only some of the clock/time
+// functionality is actually used there.
// Shared condattr object for use with relative timed-waits. Will be associated
// with CLOCK_MONOTONIC if available to avoid issues with time-of-day changes,
@@ -1661,11 +1659,11 @@
// This means we have clockid_t, clock_gettime et al and CLOCK_MONOTONIC
-static int (*_clock_gettime)(clockid_t, struct timespec *);
-static int (*_clock_getres)(clockid_t, struct timespec *);
-static int (*_pthread_condattr_setclock)(pthread_condattr_t *, clockid_t);
+static int (*_clock_gettime)(clockid_t, struct timespec *) = NULL;
+static int (*_clock_getres)(clockid_t, struct timespec *) = NULL;
+static int (*_pthread_condattr_setclock)(pthread_condattr_t *, clockid_t) = NULL;
-static bool _use_clock_monotonic_condattr;
+static bool _use_clock_monotonic_condattr = false;
// Exported clock functionality
@@ -1707,9 +1705,6 @@
handle = RTLD_DEFAULT;
}
- _clock_gettime = NULL;
- _clock_getres = NULL;
-
int (*clock_getres_func)(clockid_t, struct timespec*) =
(int(*)(clockid_t, struct timespec*))dlsym(handle, "clock_getres");
int (*clock_gettime_func)(clockid_t, struct timespec*) =
@@ -1736,8 +1731,6 @@
// 2. Check for pthread_condattr_setclock support.
- _pthread_condattr_setclock = NULL;
-
// libpthread is already loaded.
int (*condattr_setclock_func)(pthread_condattr_t*, clockid_t) =
(int (*)(pthread_condattr_t*, clockid_t))dlsym(RTLD_DEFAULT,
@@ -1750,6 +1743,7 @@
pthread_init_common();
+#ifndef SOLARIS
int status;
if (_pthread_condattr_setclock != NULL && _clock_gettime != NULL) {
if ((status = _pthread_condattr_setclock(_condAttr, CLOCK_MONOTONIC)) != 0) {
@@ -1763,18 +1757,20 @@
} else {
_use_clock_monotonic_condattr = true;
}
- } else {
- _use_clock_monotonic_condattr = false;
}
+#endif // !SOLARIS
+
}
void os::Posix::init_2(void) {
+#ifndef SOLARIS
log_info(os)("Use of CLOCK_MONOTONIC is%s supported",
(_clock_gettime != NULL ? "" : " not"));
log_info(os)("Use of pthread_condattr_setclock is%s supported",
(_pthread_condattr_setclock != NULL ? "" : " not"));
log_info(os)("Relative timed-wait using pthread_cond_timedwait is associated with %s",
_use_clock_monotonic_condattr ? "CLOCK_MONOTONIC" : "the default clock");
+#endif // !SOLARIS
}
#else // !SUPPORTS_CLOCK_MONOTONIC
@@ -1784,30 +1780,25 @@
}
void os::Posix::init_2(void) {
+#ifndef SOLARIS
log_info(os)("Use of CLOCK_MONOTONIC is not supported");
log_info(os)("Use of pthread_condattr_setclock is not supported");
log_info(os)("Relative timed-wait using pthread_cond_timedwait is associated with the default clock");
+#endif // !SOLARIS
}
#endif // SUPPORTS_CLOCK_MONOTONIC
-os::PlatformEvent::PlatformEvent() {
- int status = pthread_cond_init(_cond, _condAttr);
- assert_status(status == 0, status, "cond_init");
- status = pthread_mutex_init(_mutex, _mutexAttr);
- assert_status(status == 0, status, "mutex_init");
- _event = 0;
- _nParked = 0;
-}
-
// Utility to convert the given timeout to an absolute timespec
-// (based on the appropriate clock) to use with pthread_cond_timewait.
+// (based on the appropriate clock) to use with pthread_cond_timewait,
+// and sem_timedwait().
// The clock queried here must be the clock used to manage the
-// timeout of the condition variable.
+// timeout of the condition variable or semaphore.
//
// The passed in timeout value is either a relative time in nanoseconds
// or an absolute time in milliseconds. A relative timeout will be
-// associated with CLOCK_MONOTONIC if available; otherwise, or if absolute,
+// associated with CLOCK_MONOTONIC if available, unless the real-time clock
+// is explicitly requested; otherwise, or if absolute,
// the default time-of-day clock will be used.
// Given time is a 64-bit value and the time_t used in the timespec is
@@ -1824,7 +1815,7 @@
// Calculate a new absolute time that is "timeout" nanoseconds from "now".
// "unit" indicates the unit of "now_part_sec" (may be nanos or micros depending
-// on which clock is being used).
+// on which clock API is being used).
static void calc_rel_time(timespec* abstime, jlong timeout, jlong now_sec,
jlong now_part_sec, jlong unit) {
time_t max_secs = now_sec + MAX_SECS;
@@ -1849,6 +1840,7 @@
// Unpack the given deadline in milliseconds since the epoch, into the given timespec.
// The current time in seconds is also passed in to enforce an upper bound as discussed above.
+// This is only used with gettimeofday, when clock_gettime is not available.
static void unpack_abs_time(timespec* abstime, jlong deadline, jlong now_sec) {
time_t max_secs = now_sec + MAX_SECS;
@@ -1865,7 +1857,18 @@
}
}
-static void to_abstime(timespec* abstime, jlong timeout, bool isAbsolute) {
+static jlong millis_to_nanos(jlong millis) {
+ // We have to watch for overflow when converting millis to nanos,
+ // but if millis is that large then we will end up limiting to
+ // MAX_SECS anyway, so just do that here.
+ if (millis / MILLIUNITS > MAX_SECS) {
+ millis = jlong(MAX_SECS) * MILLIUNITS;
+ }
+ return millis * (NANOUNITS / MILLIUNITS);
+}
+
+static void to_abstime(timespec* abstime, jlong timeout,
+ bool isAbsolute, bool isRealtime) {
DEBUG_ONLY(int max_secs = MAX_SECS;)
if (timeout < 0) {
@@ -1874,9 +1877,14 @@
#ifdef SUPPORTS_CLOCK_MONOTONIC
- if (_use_clock_monotonic_condattr && !isAbsolute) {
+ clockid_t clock = CLOCK_MONOTONIC;
+ // need to ensure we have a runtime check for clock_gettime support
+ if (!isAbsolute && _clock_gettime != NULL) {
+ if (!_use_clock_monotonic_condattr || isRealtime) {
+ clock = CLOCK_REALTIME;
+ }
struct timespec now;
- int status = _clock_gettime(CLOCK_MONOTONIC, &now);
+ int status = _clock_gettime(clock, &now);
assert_status(status == 0, status, "clock_gettime");
calc_rel_time(abstime, timeout, now.tv_sec, now.tv_nsec, NANOUNITS);
DEBUG_ONLY(max_secs += now.tv_sec;)
@@ -1906,6 +1914,19 @@
assert(abstime->tv_nsec < NANOUNITS, "tv_nsec >= NANOUNITS");
}
+// Create an absolute time 'millis' milliseconds in the future, using the
+// real-time (time-of-day) clock. Used by PosixSemaphore.
+void os::Posix::to_RTC_abstime(timespec* abstime, int64_t millis) {
+ to_abstime(abstime, millis_to_nanos(millis),
+ false /* not absolute */,
+ true /* use real-time clock */);
+}
+
+// Shared pthread_mutex/cond based PlatformEvent implementation.
+// Not currently usable by Solaris.
+
+#ifndef SOLARIS
+
// PlatformEvent
//
// Assumption:
@@ -1921,6 +1942,15 @@
// Having three states allows for some detection of bad usage - see
// comments on unpark().
+os::PlatformEvent::PlatformEvent() {
+ int status = pthread_cond_init(_cond, _condAttr);
+ assert_status(status == 0, status, "cond_init");
+ status = pthread_mutex_init(_mutex, _mutexAttr);
+ assert_status(status == 0, status, "mutex_init");
+ _event = 0;
+ _nParked = 0;
+}
+
void os::PlatformEvent::park() { // AKA "down()"
// Transitions for _event:
// -1 => -1 : illegal
@@ -1982,13 +2012,7 @@
if (v == 0) { // Do this the hard way by blocking ...
struct timespec abst;
- // We have to watch for overflow when converting millis to nanos,
- // but if millis is that large then we will end up limiting to
- // MAX_SECS anyway, so just do that here.
- if (millis / MILLIUNITS > MAX_SECS) {
- millis = jlong(MAX_SECS) * MILLIUNITS;
- }
- to_abstime(&abst, millis * (NANOUNITS / MILLIUNITS), false);
+ to_abstime(&abst, millis_to_nanos(millis), false, false);
int ret = OS_TIMEOUT;
int status = pthread_mutex_lock(_mutex);
@@ -2106,7 +2130,7 @@
return;
}
if (time > 0) {
- to_abstime(&absTime, time, isAbsolute);
+ to_abstime(&absTime, time, isAbsolute, false);
}
// Enter safepoint region
diff -r b50715adf242 -r cf2b4754174d src/hotspot/os/posix/os_posix.hpp
--- a/src/hotspot/os/posix/os_posix.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/os/posix/os_posix.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -132,6 +132,8 @@
static bool supports_monotonic_clock() { return false; }
#endif
+
+ static void to_RTC_abstime(timespec* abstime, int64_t millis);
};
/*
diff -r b50715adf242 -r cf2b4754174d src/hotspot/os/posix/semaphore_posix.cpp
--- a/src/hotspot/os/posix/semaphore_posix.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/os/posix/semaphore_posix.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -79,6 +79,12 @@
return ret == 0;
}
+bool PosixSemaphore::timedwait(int64_t millis) {
+ struct timespec ts;
+ os::Posix::to_RTC_abstime(&ts, millis);
+ return timedwait(ts);
+}
+
bool PosixSemaphore::timedwait(struct timespec ts) {
while (true) {
int result = sem_timedwait(&_semaphore, &ts);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/os/posix/semaphore_posix.hpp
--- a/src/hotspot/os/posix/semaphore_posix.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/os/posix/semaphore_posix.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -45,7 +45,10 @@
void wait();
bool trywait();
+ // wait until the given absolute time is reached
bool timedwait(struct timespec ts);
+ // wait until the given relative time elapses
+ bool timedwait(int64_t millis);
};
typedef PosixSemaphore SemaphoreImpl;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/os/solaris/os_solaris.cpp
--- a/src/hotspot/os/solaris/os_solaris.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/os/solaris/os_solaris.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -2011,13 +2011,6 @@
return CAST_FROM_FN_PTR(void*, UserHandler);
}
-static struct timespec create_semaphore_timespec(unsigned int sec, int nsec) {
- struct timespec ts;
- unpackTime(&ts, false, (sec * NANOSECS_PER_SEC) + nsec);
-
- return ts;
-}
-
extern "C" {
typedef void (*sa_handler_t)(int);
typedef void (*sa_sigaction_t)(int, siginfo_t *, void *);
@@ -3493,7 +3486,7 @@
// managed to send the signal and switch to SUSPEND_REQUEST, now wait for SUSPENDED
while (true) {
- if (sr_semaphore.timedwait(create_semaphore_timespec(0, 2000 * NANOSECS_PER_MILLISEC))) {
+ if (sr_semaphore.timedwait(2000)) {
break;
} else {
// timeout
@@ -3527,7 +3520,7 @@
while (true) {
if (sr_notify(osthread) == 0) {
- if (sr_semaphore.timedwait(create_semaphore_timespec(0, 2 * NANOSECS_PER_MILLISEC))) {
+ if (sr_semaphore.timedwait(2)) {
if (osthread->sr.is_running()) {
return;
}
@@ -4112,6 +4105,9 @@
Solaris::_pthread_setname_np = // from 11.3
(Solaris::pthread_setname_np_func_t)dlsym(handle, "pthread_setname_np");
}
+
+ // Shared Posix initialization
+ os::Posix::init();
}
// To install functions for atexit system call
@@ -4218,6 +4214,9 @@
// Init pset_loadavg function pointer
init_pset_getloadavg_ptr();
+ // Shared Posix initialization
+ os::Posix::init_2();
+
return JNI_OK;
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/c1/c1_LIRAssembler.hpp
--- a/src/hotspot/share/c1/c1_LIRAssembler.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/c1/c1_LIRAssembler.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -240,7 +240,7 @@
void align_call(LIR_Code code);
void negate(LIR_Opr left, LIR_Opr dest, LIR_Opr tmp = LIR_OprFact::illegalOpr);
- void leal(LIR_Opr src, LIR_Opr dest, LIR_PatchCode patch_code, CodeEmitInfo* info);
+ void leal(LIR_Opr src, LIR_Opr dest, LIR_PatchCode patch_code = lir_patch_none, CodeEmitInfo* info = NULL);
void rt_call(LIR_Opr result, address dest, const LIR_OprList* args, LIR_Opr tmp, CodeEmitInfo* info);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/ci/ciArray.hpp
--- a/src/hotspot/share/ci/ciArray.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/ci/ciArray.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -73,7 +73,6 @@
// What kind of ciObject is this?
bool is_array() { return true; }
- bool is_java_object() { return true; }
};
#endif // SHARE_CI_CIARRAY_HPP
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/ci/ciCallProfile.hpp
--- a/src/hotspot/share/ci/ciCallProfile.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/ci/ciCallProfile.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -79,17 +79,6 @@
assert(i < _limit, "out of Call Profile MorphismLimit");
return _receiver[i];
}
-
- // Rescale the current profile based on the incoming scale
- ciCallProfile rescale(double scale) {
- assert(scale >= 0 && scale <= 1.0, "out of range");
- ciCallProfile call = *this;
- call._count = (int)(call._count * scale);
- for (int i = 0; i < _morphism; i++) {
- call._receiver_count[i] = (int)(call._receiver_count[i] * scale);
- }
- return call;
- }
};
#endif // SHARE_CI_CICALLPROFILE_HPP
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/ci/ciCallSite.cpp
--- a/src/hotspot/share/ci/ciCallSite.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/ci/ciCallSite.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2019, 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
@@ -32,12 +32,6 @@
bool ciCallSite::is_constant_call_site() {
return klass()->is_subclass_of(CURRENT_ENV->ConstantCallSite_klass());
}
-bool ciCallSite::is_mutable_call_site() {
- return klass()->is_subclass_of(CURRENT_ENV->MutableCallSite_klass());
-}
-bool ciCallSite::is_volatile_call_site() {
- return klass()->is_subclass_of(CURRENT_ENV->VolatileCallSite_klass());
-}
// ------------------------------------------------------------------
// ciCallSite::get_target
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/ci/ciCallSite.hpp
--- a/src/hotspot/share/ci/ciCallSite.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/ci/ciCallSite.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -38,8 +38,6 @@
bool is_call_site() const { return true; }
bool is_constant_call_site();
- bool is_mutable_call_site();
- bool is_volatile_call_site();
// Return the target MethodHandle of this CallSite.
ciMethodHandle* get_target() const;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/ci/ciEnv.cpp
--- a/src/hotspot/share/ci/ciEnv.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/ci/ciEnv.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -915,8 +915,15 @@
return JavaThread::current()->thread_state() == _thread_in_vm;
}
+bool ciEnv::system_dictionary_modification_counter_changed_locked() {
+ assert_locked_or_safepoint(Compile_lock);
+ return _system_dictionary_modification_counter != SystemDictionary::number_of_modifications();
+}
+
bool ciEnv::system_dictionary_modification_counter_changed() {
- return _system_dictionary_modification_counter != SystemDictionary::number_of_modifications();
+ VM_ENTRY_MARK;
+ MutexLocker ml(Compile_lock, THREAD); // lock with safepoint check
+ return system_dictionary_modification_counter_changed_locked();
}
// ------------------------------------------------------------------
@@ -927,7 +934,7 @@
void ciEnv::validate_compile_task_dependencies(ciMethod* target) {
if (failing()) return; // no need for further checks
- bool counter_changed = system_dictionary_modification_counter_changed();
+ bool counter_changed = system_dictionary_modification_counter_changed_locked();
Dependencies::DepType result = dependencies()->validate_dependencies(_task, counter_changed);
if (result != Dependencies::end_marker) {
if (result == Dependencies::call_site_target_value) {
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/ci/ciEnv.hpp
--- a/src/hotspot/share/ci/ciEnv.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/ci/ciEnv.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -292,6 +292,8 @@
// respect to method dependencies (e.g. concurrent class loading).
void validate_compile_task_dependencies(ciMethod* target);
+ // Call internally when Compile_lock is already held.
+ bool system_dictionary_modification_counter_changed_locked();
public:
enum {
MethodCompilable,
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/ci/ciMethodData.cpp
--- a/src/hotspot/share/ci/ciMethodData.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/ci/ciMethodData.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -208,15 +208,17 @@
// Snapshot the data -- actually, take an approximate snapshot of
// the data. Any concurrently executing threads may be changing the
// data as we copy it.
- Copy::disjoint_words((HeapWord*) mdo,
- (HeapWord*) &_orig,
- sizeof(_orig) / HeapWordSize);
+ Copy::disjoint_words_atomic((HeapWord*) mdo,
+ (HeapWord*) &_orig,
+ sizeof(_orig) / HeapWordSize);
Arena* arena = CURRENT_ENV->arena();
_data_size = mdo->data_size();
_extra_data_size = mdo->extra_data_size();
int total_size = _data_size + _extra_data_size;
_data = (intptr_t *) arena->Amalloc(total_size);
- Copy::disjoint_words((HeapWord*) mdo->data_base(), (HeapWord*) _data, total_size / HeapWordSize);
+ Copy::disjoint_words_atomic((HeapWord*) mdo->data_base(),
+ (HeapWord*) _data,
+ total_size / HeapWordSize);
// Traverse the profile data, translating any oops into their
// ci equivalents.
@@ -535,10 +537,6 @@
set_bits(_eflags, f);
}
-void ciMethodData::clear_eflag(MethodData::EscapeFlag f) {
- clear_bits(_eflags, f);
-}
-
bool ciMethodData::eflag_set(MethodData::EscapeFlag f) const {
return mask_bits(_eflags, f) != 0;
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/ci/ciMethodData.hpp
--- a/src/hotspot/share/ci/ciMethodData.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/ci/ciMethodData.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -271,11 +271,6 @@
}
}
- intptr_t argument_type(int i) const {
- assert(has_arguments(), "no arg type profiling data");
- return args()->type(i);
- }
-
ciKlass* valid_argument_type(int i) const {
assert(has_arguments(), "no arg type profiling data");
return args()->valid_type(i);
@@ -315,11 +310,6 @@
ciBranchData(DataLayout* layout) : BranchData(layout) {};
};
-class ciArrayData : public ArrayData {
-public:
- ciArrayData(DataLayout* layout) : ArrayData(layout) {};
-};
-
class ciMultiBranchData : public MultiBranchData {
public:
ciMultiBranchData(DataLayout* layout) : MultiBranchData(layout) {};
@@ -471,10 +461,6 @@
ciArgInfoData *arg_info() const;
- address data_base() const {
- return (address) _data;
- }
-
void prepare_metadata();
void load_extra_data();
ciProfileData* bci_to_extra_data(int bci, ciMethod* m, bool& two_free_slots);
@@ -574,7 +560,6 @@
void update_escape_info();
void set_eflag(MethodData::EscapeFlag f);
- void clear_eflag(MethodData::EscapeFlag f);
bool eflag_set(MethodData::EscapeFlag f) const;
void set_arg_local(int i);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/ci/ciNullObject.hpp
--- a/src/hotspot/share/ci/ciNullObject.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/ci/ciNullObject.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -42,9 +42,6 @@
void print_impl(outputStream* st);
public:
- // Is this ciObject a Java Language Object? That is,
- // is the ciObject an instance or an array
- bool is_java_object() { return true; }
// What kind of ciObject is this?
bool is_null_object() const { return true; }
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/ci/ciObject.hpp
--- a/src/hotspot/share/ci/ciObject.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/ci/ciObject.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -115,7 +115,6 @@
// What kind of ciObject is this?
virtual bool is_null_object() const { return false; }
virtual bool is_call_site() const { return false; }
- virtual bool is_cpcache() const { return false; }
virtual bool is_instance() { return false; }
virtual bool is_member_name() const { return false; }
virtual bool is_method_handle() const { return false; }
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/ci/ciStreams.cpp
--- a/src/hotspot/share/ci/ciStreams.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/ci/ciStreams.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2019, 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
@@ -224,14 +224,6 @@
}
// ------------------------------------------------------------------
-// ciBytecodeStream::get_constant_cache_index
-// Return the CP cache index, or -1 if there isn't any.
-int ciBytecodeStream::get_constant_cache_index() const {
- // work-alike for Bytecode_loadconstant::cache_index()
- return has_cache_index() ? get_constant_raw_index() : -1;
-}
-
-// ------------------------------------------------------------------
// ciBytecodeStream::get_constant
//
// If this bytecode is one of the ldc variants, get the referenced
@@ -318,19 +310,6 @@
}
// ------------------------------------------------------------------
-// ciBytecodeStream::get_field_signature_index
-//
-// Get the constant pool index of the signature of the field
-// referenced by the current bytecode. Used for generating
-// deoptimization information.
-int ciBytecodeStream::get_field_signature_index() {
- VM_ENTRY_MARK;
- ConstantPool* cpool = _holder->get_instanceKlass()->constants();
- int nt_index = cpool->name_and_type_ref_index_at(get_field_index());
- return cpool->signature_ref_index_at(nt_index);
-}
-
-// ------------------------------------------------------------------
// ciBytecodeStream::get_method_index
//
// If this is a method invocation bytecode, get the constant pool
@@ -474,13 +453,3 @@
)
}
-// ------------------------------------------------------------------
-// ciBytecodeStream::get_resolved_references
-ciObjArray* ciBytecodeStream::get_resolved_references() {
- VM_ENTRY_MARK;
- // Get the constant pool.
- ConstantPool* cpool = _holder->get_instanceKlass()->constants();
-
- // Create a resolved references array and return it.
- return CURRENT_ENV->get_object(cpool->resolved_references())->as_obj_array();
- }
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/ci/ciStreams.hpp
--- a/src/hotspot/share/ci/ciStreams.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/ci/ciStreams.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -70,12 +70,6 @@
_start = _pc = base; _end = base + size;
}
- void assert_wide(bool require_wide) const {
- if (require_wide)
- { assert(is_wide(), "must be a wide instruction"); }
- else { assert(!is_wide(), "must not be a wide instruction"); }
- }
-
Bytecode bytecode() const { return Bytecode(this, _bc_start); }
Bytecode next_bytecode() const { return Bytecode(this, _pc); }
@@ -155,10 +149,6 @@
return bytecode().get_index_u1(cur_bc_raw());
}
- int get_index_u1_cpcache() const {
- return bytecode().get_index_u1_cpcache(cur_bc_raw());
- }
-
// Get a byte index following this bytecode.
// If prefixed with a wide bytecode, get a wide index.
int get_index() const {
@@ -218,16 +208,12 @@
int get_int_table( int index ) const {
return Bytes::get_Java_u4((address)&_table_base[index]); }
- // For tableswitch - get length of offset part
- int get_tableswitch_length() { return get_int_table(2)-get_int_table(1)+1; }
-
int get_dest_table( int index ) const {
return cur_bci() + get_int_table(index); }
// --- Constant pool access ---
int get_constant_raw_index() const;
int get_constant_pool_index() const;
- int get_constant_cache_index() const;
int get_field_index();
int get_method_index();
@@ -255,7 +241,6 @@
ciInstanceKlass* get_declared_field_holder();
int get_field_holder_index();
- int get_field_signature_index();
ciMethod* get_method(bool& will_link, ciSignature* *declared_signature_result);
bool has_appendix();
@@ -266,8 +251,6 @@
int get_method_holder_index();
int get_method_signature_index(const constantPoolHandle& cpool);
- // Get the resolved references arrays from the constant pool
- ciObjArray* get_resolved_references();
};
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/ci/ciTypeFlow.cpp
--- a/src/hotspot/share/ci/ciTypeFlow.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/ci/ciTypeFlow.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2019, 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
@@ -2427,22 +2427,6 @@
}
// ------------------------------------------------------------------
-// ciTypeFlow::PostOrderLoops::next
-//
-// Advance to next loop tree using a postorder, left-to-right traversal.
-void ciTypeFlow::PostorderLoops::next() {
- assert(!done(), "must not be done.");
- if (_current->sibling() != NULL) {
- _current = _current->sibling();
- while (_current->child() != NULL) {
- _current = _current->child();
- }
- } else {
- _current = _current->parent();
- }
-}
-
-// ------------------------------------------------------------------
// ciTypeFlow::PreOrderLoops::next
//
// Advance to next loop tree using a preorder, left-to-right traversal.
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/ci/ciTypeFlow.hpp
--- a/src/hotspot/share/ci/ciTypeFlow.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/ci/ciTypeFlow.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -765,22 +765,6 @@
void print(outputStream* st = tty, int indent = 0) const PRODUCT_RETURN;
};
- // Postorder iteration over the loop tree.
- class PostorderLoops : public StackObj {
- private:
- Loop* _root;
- Loop* _current;
- public:
- PostorderLoops(Loop* root) : _root(root), _current(root) {
- while (_current->child() != NULL) {
- _current = _current->child();
- }
- }
- bool done() { return _current == NULL; } // Finished iterating?
- void next(); // Advance to next loop
- Loop* current() { return _current; } // Return current loop.
- };
-
// Preorder iteration over the loop tree.
class PreorderLoops : public StackObj {
private:
@@ -857,7 +841,6 @@
int start_block_num() const { return 0; }
Block* rpo_at(int rpo) const { assert(0 <= rpo && rpo < block_count(), "out of bounds");
return _block_map[rpo]; }
- int next_pre_order() { return _next_pre_order; }
int inc_next_pre_order() { return _next_pre_order++; }
private:
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/ci/ciUtilities.cpp
--- a/src/hotspot/share/ci/ciUtilities.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/ci/ciUtilities.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2019, 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
@@ -42,13 +42,6 @@
}
// ------------------------------------------------------------------
-// basictype_to_char
-const char basictype_to_char(BasicType t) {
- char c = type2char(t);
- return c ? c : 'X';
-}
-
-// ------------------------------------------------------------------
// card_table_base
jbyte *ci_card_table_address() {
BarrierSet* bs = BarrierSet::barrier_set();
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/ci/ciUtilities.hpp
--- a/src/hotspot/share/ci/ciUtilities.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/ci/ciUtilities.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -49,7 +49,6 @@
}
const char* basictype_to_str(BasicType t);
-const char basictype_to_char(BasicType t);
jbyte *ci_card_table_address();
template T ci_card_table_address_as() {
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/classfile/classFileParser.cpp
--- a/src/hotspot/share/classfile/classFileParser.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/classfile/classFileParser.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -2120,12 +2120,7 @@
if (!privileged) break; // only allow in privileged code
return _method_LambdaForm_Compiled;
}
- case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_LambdaForm_Hidden_signature): {
- if (_location != _in_method) break; // only allow for methods
- if (!privileged) break; // only allow in privileged code
- return _method_Hidden;
- }
- case vmSymbols::VM_SYMBOL_ENUM_NAME(java_security_AccessController_Hidden_signature): {
+ case vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_internal_vm_annotation_Hidden_signature): {
if (_location != _in_method) break; // only allow for methods
if (!privileged) break; // only allow in privileged code
return _method_Hidden;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/classfile/classLoader.cpp
--- a/src/hotspot/share/classfile/classLoader.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/classfile/classLoader.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -1724,7 +1724,7 @@
{
MutexLocker ml(Module_lock, THREAD);
- ModuleEntry* jb_module = null_cld_modules->locked_create_entry_or_null(Handle(),
+ ModuleEntry* jb_module = null_cld_modules->locked_create_entry(Handle(),
false, vmSymbols::java_base(), NULL, NULL, null_cld);
if (jb_module == NULL) {
vm_exit_during_initialization("Unable to create ModuleEntry for " JAVA_BASE_NAME);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/classfile/defaultMethods.cpp
--- a/src/hotspot/share/classfile/defaultMethods.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/classfile/defaultMethods.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, 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
@@ -988,7 +988,7 @@
for (int index = 0; index < new_size; index++ ) {
total_default_methods->at_put(index, new_methods->at(index));
}
- Method::sort_methods(total_default_methods, false, false);
+ Method::sort_methods(total_default_methods, /*set_idnums=*/false);
klass->set_default_methods(total_default_methods);
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/classfile/javaClasses.cpp
--- a/src/hotspot/share/classfile/javaClasses.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/classfile/javaClasses.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -578,7 +578,7 @@
}
int java_lang_String::utf8_length(oop java_string, typeArrayOop value) {
- assert(oopDesc::equals_raw(value, java_lang_String::value(java_string)),
+ assert(oopDesc::equals(value, java_lang_String::value(java_string)),
"value must be same as java_lang_String::value(java_string)");
int length = java_lang_String::length(java_string, value);
if (length == 0) {
@@ -610,7 +610,7 @@
}
char* java_lang_String::as_utf8_string(oop java_string, typeArrayOop value, char* buf, int buflen) {
- assert(oopDesc::equals_raw(value, java_lang_String::value(java_string)),
+ assert(oopDesc::equals(value, java_lang_String::value(java_string)),
"value must be same as java_lang_String::value(java_string)");
int length = java_lang_String::length(java_string, value);
bool is_latin1 = java_lang_String::is_latin1(java_string);
@@ -642,7 +642,7 @@
}
char* java_lang_String::as_utf8_string(oop java_string, typeArrayOop value, int start, int len, char* buf, int buflen) {
- assert(oopDesc::equals_raw(value, java_lang_String::value(java_string)),
+ assert(oopDesc::equals(value, java_lang_String::value(java_string)),
"value must be same as java_lang_String::value(java_string)");
assert(start + len <= java_lang_String::length(java_string), "just checking");
bool is_latin1 = java_lang_String::is_latin1(java_string);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/classfile/javaClasses.inline.hpp
--- a/src/hotspot/share/classfile/javaClasses.inline.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/classfile/javaClasses.inline.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -74,7 +74,7 @@
int java_lang_String::length(oop java_string, typeArrayOop value) {
assert(initialized, "Must be initialized");
assert(is_instance(java_string), "must be java_string");
- assert(oopDesc::equals_raw(value, java_lang_String::value(java_string)),
+ assert(oopDesc::equals(value, java_lang_String::value(java_string)),
"value must be same as java_lang_String::value(java_string)");
if (value == NULL) {
return 0;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/classfile/moduleEntry.cpp
--- a/src/hotspot/share/classfile/moduleEntry.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/classfile/moduleEntry.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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
@@ -398,23 +398,22 @@
Hashtable::add_entry(index, (HashtableEntry*)new_entry);
}
-ModuleEntry* ModuleEntryTable::locked_create_entry_or_null(Handle module_handle,
- bool is_open,
- Symbol* module_name,
- Symbol* module_version,
- Symbol* module_location,
- ClassLoaderData* loader_data) {
- assert(module_name != NULL, "ModuleEntryTable locked_create_entry_or_null should never be called for unnamed module.");
+// Create an entry in the class loader's module_entry_table. It is the
+// caller's responsibility to ensure that the entry has not already been
+// created.
+ModuleEntry* ModuleEntryTable::locked_create_entry(Handle module_handle,
+ bool is_open,
+ Symbol* module_name,
+ Symbol* module_version,
+ Symbol* module_location,
+ ClassLoaderData* loader_data) {
+ assert(module_name != NULL, "ModuleEntryTable locked_create_entry should never be called for unnamed module.");
assert(Module_lock->owned_by_self(), "should have the Module_lock");
- // Check if module already exists.
- if (lookup_only(module_name) != NULL) {
- return NULL;
- } else {
- ModuleEntry* entry = new_entry(compute_hash(module_name), module_handle, is_open, module_name,
- module_version, module_location, loader_data);
- add_entry(index_for(module_name), entry);
- return entry;
- }
+ assert(lookup_only(module_name) == NULL, "Module already exists");
+ ModuleEntry* entry = new_entry(compute_hash(module_name), module_handle, is_open, module_name,
+ module_version, module_location, loader_data);
+ add_entry(index_for(module_name), entry);
+ return entry;
}
// lookup_only by Symbol* to find a ModuleEntry.
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/classfile/moduleEntry.hpp
--- a/src/hotspot/share/classfile/moduleEntry.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/classfile/moduleEntry.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -236,14 +236,14 @@
return (ModuleEntry*)Hashtable::bucket(i);
}
- // Create module in loader's module entry table, if already exists then
- // return null. Assume Module_lock has been locked by caller.
- ModuleEntry* locked_create_entry_or_null(Handle module_handle,
- bool is_open,
- Symbol* module_name,
- Symbol* module_version,
- Symbol* module_location,
- ClassLoaderData* loader_data);
+ // Create module in loader's module entry table. Assume Module_lock
+ // has been locked by caller.
+ ModuleEntry* locked_create_entry(Handle module_handle,
+ bool is_open,
+ Symbol* module_name,
+ Symbol* module_version,
+ Symbol* module_location,
+ ClassLoaderData* loader_data);
// Only lookup module within loader's module entry table. The table read is lock-free.
ModuleEntry* lookup_only(Symbol* name);
@@ -253,7 +253,10 @@
// Special handling for java.base
static ModuleEntry* javabase_moduleEntry() { return _javabase_module; }
- static void set_javabase_moduleEntry(ModuleEntry* java_base) { _javabase_module = java_base; }
+ static void set_javabase_moduleEntry(ModuleEntry* java_base) {
+ assert(_javabase_module == NULL, "_javabase_module is already defined");
+ _javabase_module = java_base;
+ }
static bool javabase_defined() { return ((_javabase_module != NULL) &&
(_javabase_module->module() != NULL)); }
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/classfile/modules.cpp
--- a/src/hotspot/share/classfile/modules.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/classfile/modules.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+* Copyright (c) 2016, 2019, 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
@@ -206,13 +206,12 @@
package_table->verify_javabase_packages(pkg_list);
// loop through and add any new packages for java.base
- PackageEntry* pkg;
for (int x = 0; x < pkg_list->length(); x++) {
// Some of java.base's packages were added early in bootstrapping, ignore duplicates.
- if (package_table->lookup_only(pkg_list->at(x)) == NULL) {
- pkg = package_table->locked_create_entry_or_null(pkg_list->at(x), ModuleEntryTable::javabase_moduleEntry());
- assert(pkg != NULL, "Unable to create a " JAVA_BASE_NAME " package entry");
- }
+ package_table->locked_create_entry_if_not_exist(pkg_list->at(x),
+ ModuleEntryTable::javabase_moduleEntry());
+ assert(package_table->locked_lookup_only(pkg_list->at(x)) != NULL,
+ "Unable to create a " JAVA_BASE_NAME " package entry");
// Unable to have a GrowableArray of TempNewSymbol. Must decrement the refcount of
// the Symbol* that was created above for each package. The refcount was incremented
// by SymbolTable::new_symbol and as well by the PackageEntry creation.
@@ -388,7 +387,7 @@
// Check that none of the packages exist in the class loader's package table.
for (int x = 0; x < pkg_list->length(); x++) {
- existing_pkg = package_table->lookup_only(pkg_list->at(x));
+ existing_pkg = package_table->locked_lookup_only(pkg_list->at(x));
if (existing_pkg != NULL) {
// This could be because the module was already defined. If so,
// report that error instead of the package error.
@@ -402,20 +401,17 @@
// Add the module and its packages.
if (!dupl_modules && existing_pkg == NULL) {
- // Create the entry for this module in the class loader's module entry table.
- ModuleEntry* module_entry = module_table->locked_create_entry_or_null(module_handle,
+ if (module_table->lookup_only(module_symbol) == NULL) {
+ // Create the entry for this module in the class loader's module entry table.
+ ModuleEntry* module_entry = module_table->locked_create_entry(module_handle,
(is_open == JNI_TRUE), module_symbol,
version_symbol, location_symbol, loader_data);
+ assert(module_entry != NULL, "module_entry creation failed");
- if (module_entry == NULL) {
- dupl_modules = true;
- } else {
// Add the packages.
assert(pkg_list->length() == 0 || package_table != NULL, "Bad package table");
- PackageEntry* pkg;
for (int y = 0; y < pkg_list->length(); y++) {
- pkg = package_table->locked_create_entry_or_null(pkg_list->at(y), module_entry);
- assert(pkg != NULL, "Unable to create a module's package entry");
+ package_table->locked_create_entry(pkg_list->at(y), module_entry);
// Unable to have a GrowableArray of TempNewSymbol. Must decrement the refcount of
// the Symbol* that was created above for each package. The refcount was incremented
@@ -425,6 +421,8 @@
// Store pointer to ModuleEntry record in java.lang.Module object.
java_lang_Module::set_module_entry(module_handle(), module_entry);
+ } else {
+ dupl_modules = true;
}
}
} // Release the lock
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/classfile/packageEntry.cpp
--- a/src/hotspot/share/classfile/packageEntry.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/classfile/packageEntry.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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
@@ -211,23 +211,28 @@
Hashtable::add_entry(index, (HashtableEntry*)new_entry);
}
-// Create package in loader's package entry table and return the entry.
-// If entry already exists, return null. Assume Module lock was taken by caller.
-PackageEntry* PackageEntryTable::locked_create_entry_or_null(Symbol* name, ModuleEntry* module) {
+// Create package entry in loader's package entry table. Assume Module lock
+// was taken by caller.
+void PackageEntryTable::locked_create_entry(Symbol* name, ModuleEntry* module) {
assert(Module_lock->owned_by_self(), "should have the Module_lock");
- // Check if package already exists. Return NULL if it does.
- if (lookup_only(name) != NULL) {
- return NULL;
- } else {
- PackageEntry* entry = new_entry(compute_hash(name), name, module);
- add_entry(index_for(name), entry);
- return entry;
+ assert(locked_lookup_only(name) == NULL, "Package entry already exists");
+ PackageEntry* entry = new_entry(compute_hash(name), name, module);
+ add_entry(index_for(name), entry);
+}
+
+// Create package entry in loader's package entry table if it does not already
+// exist. Assume Module lock was taken by caller.
+void PackageEntryTable::locked_create_entry_if_not_exist(Symbol* name, ModuleEntry* module) {
+ assert(Module_lock->owned_by_self(), "should have the Module_lock");
+ // Check if package entry already exists. If not, create it.
+ if (locked_lookup_only(name) == NULL) {
+ locked_create_entry(name, module);
}
}
PackageEntry* PackageEntryTable::lookup(Symbol* name, ModuleEntry* module) {
MutexLocker ml(Module_lock);
- PackageEntry* p = lookup_only(name);
+ PackageEntry* p = locked_lookup_only(name);
if (p != NULL) {
return p;
} else {
@@ -239,7 +244,13 @@
}
PackageEntry* PackageEntryTable::lookup_only(Symbol* name) {
- MutexLockerEx ml(Module_lock->owned_by_self() ? NULL : Module_lock);
+ assert(!Module_lock->owned_by_self(), "should not have the Module_lock - use locked_lookup_only");
+ MutexLockerEx ml(Module_lock);
+ return locked_lookup_only(name);
+}
+
+PackageEntry* PackageEntryTable::locked_lookup_only(Symbol* name) {
+ assert(Module_lock->owned_by_self(), "should have the Module_lock");
int index = index_for(name);
for (PackageEntry* p = bucket(index); p != NULL; p = p->next()) {
if (p->name()->fast_compare(name) == 0) {
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/classfile/packageEntry.hpp
--- a/src/hotspot/share/classfile/packageEntry.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/classfile/packageEntry.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -246,16 +246,26 @@
return (PackageEntry*)Hashtable::bucket(i);
}
- // Create package in loader's package entry table and return the entry.
- // If entry already exists, return null. Assume Module lock was taken by caller.
- PackageEntry* locked_create_entry_or_null(Symbol* name, ModuleEntry* module);
+ // Create package entry in loader's package entry table. Assume Module
+ // lock was taken by caller.
+ void locked_create_entry(Symbol* name, ModuleEntry* module);
- // lookup Package with loader's package entry table, if not found add
+ // Create package entry in loader's package entry table if it does not
+ // already exist. Assume Module lock was taken by caller.
+ void locked_create_entry_if_not_exist(Symbol* name, ModuleEntry* module);
+
+ // Lookup Package with loader's package entry table, add it if not found.
+ // This will acquire the Module lock.
PackageEntry* lookup(Symbol* name, ModuleEntry* module);
// Only lookup Package within loader's package entry table.
+ // This will acquire the Module lock.
PackageEntry* lookup_only(Symbol* Package);
+ // Only lookup Package within loader's package entry table. Assume Module lock
+ // was taken by caller.
+ PackageEntry* locked_lookup_only(Symbol* Package);
+
void verify_javabase_packages(GrowableArray *pkg_list);
// purge dead weak references out of exported list
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/classfile/stringTable.cpp
--- a/src/hotspot/share/classfile/stringTable.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/classfile/stringTable.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -376,68 +376,11 @@
} while(true);
}
-// GC support
-class StringTableIsAliveCounter : public BoolObjectClosure {
- BoolObjectClosure* _real_boc;
- public:
- size_t _count;
- size_t _count_total;
- StringTableIsAliveCounter(BoolObjectClosure* boc) : _real_boc(boc), _count(0),
- _count_total(0) {}
- bool do_object_b(oop obj) {
- bool ret = _real_boc->do_object_b(obj);
- if (!ret) {
- ++_count;
- }
- ++_count_total;
- return ret;
- }
-};
-
-void StringTable::unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f,
- size_t* processed, size_t* removed) {
- DoNothingClosure dnc;
- assert(is_alive != NULL, "No closure");
- StringTableIsAliveCounter stiac(is_alive);
- OopClosure* tmp = f != NULL ? f : &dnc;
-
- StringTable::the_table()->_weak_handles->weak_oops_do(&stiac, tmp);
-
- // This is the serial case without ParState.
- // Just set the correct number and check for a cleaning phase.
- the_table()->_uncleaned_items_count = stiac._count;
- StringTable::the_table()->check_concurrent_work();
-
- if (processed != NULL) {
- *processed = stiac._count_total;
- }
- if (removed != NULL) {
- *removed = stiac._count;
- }
-}
-
void StringTable::oops_do(OopClosure* f) {
assert(f != NULL, "No closure");
StringTable::the_table()->_weak_handles->oops_do(f);
}
-void StringTable::possibly_parallel_unlink(
- OopStorage::ParState* _par_state_string, BoolObjectClosure* cl,
- size_t* processed, size_t* removed)
-{
- DoNothingClosure dnc;
- assert(cl != NULL, "No closure");
- StringTableIsAliveCounter stiac(cl);
-
- _par_state_string->weak_oops_do(&stiac, &dnc);
-
- // Accumulate the dead strings.
- the_table()->add_items_to_clean(stiac._count);
-
- *processed = stiac._count_total;
- *removed = stiac._count;
-}
-
void StringTable::possibly_parallel_oops_do(
OopStorage::ParState*
_par_state_string, OopClosure* f)
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/classfile/stringTable.hpp
--- a/src/hotspot/share/classfile/stringTable.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/classfile/stringTable.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -128,20 +128,10 @@
the_table()->add_items_to_clean(ndead);
}
- // Delete pointers to otherwise-unreachable objects.
- static void unlink(BoolObjectClosure* cl) {
- unlink_or_oops_do(cl);
- }
- static void unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f = NULL,
- size_t* processed = NULL, size_t* removed = NULL);
-
// Serially invoke "f->do_oop" on the locations of all oops in the table.
static void oops_do(OopClosure* f);
// Possibly parallel versions of the above
- static void possibly_parallel_unlink(
- OopStorage::ParState* par_state_string,
- BoolObjectClosure* cl, size_t* processed, size_t* removed);
static void possibly_parallel_oops_do(
OopStorage::ParState* par_state_string,
OopClosure* f);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/classfile/vmSymbols.hpp
--- a/src/hotspot/share/classfile/vmSymbols.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/classfile/vmSymbols.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -278,9 +278,10 @@
\
/* Intrinsic Annotation (JDK 9 and above) */ \
template(jdk_internal_HotSpotIntrinsicCandidate_signature, "Ljdk/internal/HotSpotIntrinsicCandidate;") \
+ template(jdk_internal_vm_annotation_DontInline_signature, "Ljdk/internal/vm/annotation/DontInline;") \
template(jdk_internal_vm_annotation_ForceInline_signature, "Ljdk/internal/vm/annotation/ForceInline;") \
- template(jdk_internal_vm_annotation_DontInline_signature, "Ljdk/internal/vm/annotation/DontInline;") \
- template(jdk_internal_vm_annotation_Stable_signature, "Ljdk/internal/vm/annotation/Stable;") \
+ template(jdk_internal_vm_annotation_Hidden_signature, "Ljdk/internal/vm/annotation/Hidden;") \
+ template(jdk_internal_vm_annotation_Stable_signature, "Ljdk/internal/vm/annotation/Stable;") \
\
/* Support for JSR 292 & invokedynamic (JDK 1.7 and above) */ \
template(java_lang_invoke_CallSite, "java/lang/invoke/CallSite") \
@@ -304,9 +305,7 @@
template(java_lang_invoke_LambdaForm, "java/lang/invoke/LambdaForm") \
template(java_lang_invoke_InjectedProfile_signature, "Ljava/lang/invoke/InjectedProfile;") \
template(java_lang_invoke_LambdaForm_Compiled_signature, "Ljava/lang/invoke/LambdaForm$Compiled;") \
- template(java_lang_invoke_LambdaForm_Hidden_signature, "Ljava/lang/invoke/LambdaForm$Hidden;") \
template(java_lang_invoke_MethodHandleNatives_CallSiteContext_signature, "Ljava/lang/invoke/MethodHandleNatives$CallSiteContext;") \
- template(java_security_AccessController_Hidden_signature, "Ljava/security/AccessController$Hidden;") \
/* internal up-calls made only by the JVM, via class sun.invoke.MethodHandleNatives: */ \
template(findMethodHandleType_name, "findMethodHandleType") \
template(findMethodHandleType_signature, "(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/invoke/MethodType;") \
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/code/nmethod.cpp
--- a/src/hotspot/share/code/nmethod.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/code/nmethod.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1100,7 +1100,11 @@
"must be at safepoint");
// Unregister must be done before the state change
- Universe::heap()->unregister_nmethod(this);
+ {
+ MutexLockerEx ml(SafepointSynchronize::is_at_safepoint() ? NULL : CodeCache_lock,
+ Mutex::_no_safepoint_check_flag);
+ Universe::heap()->unregister_nmethod(this);
+ }
// Log the unloading.
log_state_change();
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/cms/cmsHeap.cpp
--- a/src/hotspot/share/gc/cms/cmsHeap.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/cms/cmsHeap.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -225,15 +225,11 @@
ScanningOption so,
bool only_strong_roots,
OopsInGenClosure* root_closure,
- CLDClosure* cld_closure,
- OopStorage::ParState* par_state_string) {
+ CLDClosure* cld_closure) {
MarkingCodeBlobClosure mark_code_closure(root_closure, !CodeBlobToOopClosure::FixRelocations);
CLDClosure* weak_cld_closure = only_strong_roots ? NULL : cld_closure;
process_roots(scope, so, root_closure, cld_closure, weak_cld_closure, &mark_code_closure);
- if (!only_strong_roots) {
- process_string_table_roots(scope, root_closure, par_state_string);
- }
if (young_gen_as_roots &&
_process_strong_tasks->try_claim_task(GCH_PS_younger_gens)) {
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/cms/cmsHeap.hpp
--- a/src/hotspot/share/gc/cms/cmsHeap.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/cms/cmsHeap.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -91,8 +91,7 @@
ScanningOption so,
bool only_strong_roots,
OopsInGenClosure* root_closure,
- CLDClosure* cld_closure,
- OopStorage::ParState* par_state_string = NULL);
+ CLDClosure* cld_closure);
GCMemoryManager* old_manager() const { return _old_manager; }
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp
--- a/src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -4333,8 +4333,7 @@
GenCollectedHeap::ScanningOption(_collector->CMSCollector::roots_scanning_options()),
_collector->should_unload_classes(),
&par_mri_cl,
- &cld_closure,
- &_par_state_string);
+ &cld_closure);
assert(_collector->should_unload_classes()
|| (_collector->CMSCollector::roots_scanning_options() & GenCollectedHeap::SO_AllCodeCache),
@@ -4464,8 +4463,7 @@
GenCollectedHeap::ScanningOption(_collector->CMSCollector::roots_scanning_options()),
_collector->should_unload_classes(),
&par_mrias_cl,
- NULL, // The dirty klasses will be handled below
- &_par_state_string);
+ NULL); // The dirty klasses will be handled below
assert(_collector->should_unload_classes()
|| (_collector->CMSCollector::roots_scanning_options() & GenCollectedHeap::SO_AllCodeCache),
@@ -5277,12 +5275,6 @@
// Clean up unreferenced symbols in symbol table.
SymbolTable::unlink();
}
-
- {
- GCTraceTime(Debug, gc, phases) t("Scrub String Table", _gc_timer_cm);
- // Delete entries for dead interned strings.
- StringTable::unlink(&_is_alive_closure);
- }
}
// Restore any preserved marks as a result of mark stack or
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/cms/parNewGeneration.cpp
--- a/src/hotspot/share/gc/cms/parNewGeneration.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/cms/parNewGeneration.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -606,8 +606,7 @@
heap->young_process_roots(_strong_roots_scope,
&par_scan_state.to_space_root_closure(),
&par_scan_state.older_gen_closure(),
- &cld_scan_closure,
- &_par_state_string);
+ &cld_scan_closure);
par_scan_state.end_strong_roots();
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/g1/dirtyCardQueue.cpp
--- a/src/hotspot/share/gc/g1/dirtyCardQueue.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/g1/dirtyCardQueue.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -25,6 +25,7 @@
#include "precompiled.hpp"
#include "gc/g1/dirtyCardQueue.hpp"
#include "gc/g1/g1CollectedHeap.inline.hpp"
+#include "gc/g1/g1FreeIdSet.hpp"
#include "gc/g1/g1RemSet.hpp"
#include "gc/g1/g1ThreadLocalData.hpp"
#include "gc/g1/heapRegionRemSet.hpp"
@@ -55,72 +56,6 @@
}
};
-// Represents a set of free small integer ids.
-class FreeIdSet : public CHeapObj {
- enum {
- end_of_list = UINT_MAX,
- claimed = UINT_MAX - 1
- };
-
- uint _size;
- Monitor* _mon;
-
- uint* _ids;
- uint _hd;
- uint _waiters;
- uint _claimed;
-
-public:
- FreeIdSet(uint size, Monitor* mon);
- ~FreeIdSet();
-
- // Returns an unclaimed parallel id (waiting for one to be released if
- // necessary).
- uint claim_par_id();
-
- void release_par_id(uint id);
-};
-
-FreeIdSet::FreeIdSet(uint size, Monitor* mon) :
- _size(size), _mon(mon), _hd(0), _waiters(0), _claimed(0)
-{
- guarantee(size != 0, "must be");
- _ids = NEW_C_HEAP_ARRAY(uint, size, mtGC);
- for (uint i = 0; i < size - 1; i++) {
- _ids[i] = i+1;
- }
- _ids[size-1] = end_of_list; // end of list.
-}
-
-FreeIdSet::~FreeIdSet() {
- FREE_C_HEAP_ARRAY(uint, _ids);
-}
-
-uint FreeIdSet::claim_par_id() {
- MutexLockerEx x(_mon, Mutex::_no_safepoint_check_flag);
- while (_hd == end_of_list) {
- _waiters++;
- _mon->wait(Mutex::_no_safepoint_check_flag);
- _waiters--;
- }
- uint res = _hd;
- _hd = _ids[res];
- _ids[res] = claimed; // For debugging.
- _claimed++;
- return res;
-}
-
-void FreeIdSet::release_par_id(uint id) {
- MutexLockerEx x(_mon, Mutex::_no_safepoint_check_flag);
- assert(_ids[id] == claimed, "Precondition.");
- _ids[id] = _hd;
- _hd = id;
- _claimed--;
- if (_waiters > 0) {
- _mon->notify_all();
- }
-}
-
DirtyCardQueue::DirtyCardQueue(DirtyCardQueueSet* qset, bool permanent) :
// Dirty card queues are always active, so we create them with their
// active field set to true.
@@ -144,6 +79,10 @@
_all_active = true;
}
+DirtyCardQueueSet::~DirtyCardQueueSet() {
+ delete _free_ids;
+}
+
// Determines how many mutator threads can process the buffers in parallel.
uint DirtyCardQueueSet::num_par_ids() {
return (uint)os::initial_active_processor_count();
@@ -156,7 +95,7 @@
PtrQueueSet::initialize(cbl_mon, allocator);
_shared_dirty_card_queue.set_lock(lock);
if (init_free_ids) {
- _free_ids = new FreeIdSet(num_par_ids(), cbl_mon);
+ _free_ids = new G1FreeIdSet(0, num_par_ids());
}
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/g1/dirtyCardQueue.hpp
--- a/src/hotspot/share/gc/g1/dirtyCardQueue.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/g1/dirtyCardQueue.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -28,8 +28,8 @@
#include "gc/shared/ptrQueue.hpp"
#include "memory/allocation.hpp"
-class FreeIdSet;
class DirtyCardQueueSet;
+class G1FreeIdSet;
class JavaThread;
class Monitor;
@@ -103,8 +103,7 @@
bool mut_process_buffer(BufferNode* node);
- // Protected by the _cbl_mon.
- FreeIdSet* _free_ids;
+ G1FreeIdSet* _free_ids;
// The number of completed buffers processed by mutator and rs thread,
// respectively.
@@ -118,6 +117,7 @@
public:
DirtyCardQueueSet(bool notify_when_complete = true);
+ ~DirtyCardQueueSet();
void initialize(Monitor* cbl_mon,
BufferNode::Allocator* allocator,
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/g1/g1CollectedHeap.cpp
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -3362,24 +3362,54 @@
void G1CollectedHeap::complete_cleaning(BoolObjectClosure* is_alive,
bool class_unloading_occurred) {
- uint n_workers = workers()->active_workers();
-
- G1StringDedupUnlinkOrOopsDoClosure dedup_closure(is_alive, NULL, false);
- ParallelCleaningTask g1_unlink_task(is_alive, &dedup_closure, n_workers, class_unloading_occurred);
- workers()->run_task(&g1_unlink_task);
+ uint num_workers = workers()->active_workers();
+ ParallelCleaningTask unlink_task(is_alive, num_workers, class_unloading_occurred, false);
+ workers()->run_task(&unlink_task);
}
-void G1CollectedHeap::partial_cleaning(BoolObjectClosure* is_alive,
- bool process_strings,
- bool process_string_dedup) {
- if (!process_strings && !process_string_dedup) {
- // Nothing to clean.
- return;
+// Clean string dedup data structures.
+// Ideally we would prefer to use a StringDedupCleaningTask here, but we want to
+// record the durations of the phases. Hence the almost-copy.
+class G1StringDedupCleaningTask : public AbstractGangTask {
+ BoolObjectClosure* _is_alive;
+ OopClosure* _keep_alive;
+ G1GCPhaseTimes* _phase_times;
+
+public:
+ G1StringDedupCleaningTask(BoolObjectClosure* is_alive,
+ OopClosure* keep_alive,
+ G1GCPhaseTimes* phase_times) :
+ AbstractGangTask("Partial Cleaning Task"),
+ _is_alive(is_alive),
+ _keep_alive(keep_alive),
+ _phase_times(phase_times)
+ {
+ assert(G1StringDedup::is_enabled(), "String deduplication disabled.");
+ StringDedup::gc_prologue(true);
}
- G1StringDedupUnlinkOrOopsDoClosure dedup_closure(is_alive, NULL, false);
- StringCleaningTask g1_unlink_task(is_alive, process_string_dedup ? &dedup_closure : NULL, process_strings);
- workers()->run_task(&g1_unlink_task);
+ ~G1StringDedupCleaningTask() {
+ StringDedup::gc_epilogue();
+ }
+
+ void work(uint worker_id) {
+ StringDedupUnlinkOrOopsDoClosure cl(_is_alive, _keep_alive);
+ {
+ G1GCParPhaseTimesTracker x(_phase_times, G1GCPhaseTimes::StringDedupQueueFixup, worker_id);
+ StringDedupQueue::unlink_or_oops_do(&cl);
+ }
+ {
+ G1GCParPhaseTimesTracker x(_phase_times, G1GCPhaseTimes::StringDedupTableFixup, worker_id);
+ StringDedupTable::unlink_or_oops_do(&cl, worker_id);
+ }
+ }
+};
+
+void G1CollectedHeap::string_dedup_cleaning(BoolObjectClosure* is_alive,
+ OopClosure* keep_alive,
+ G1GCPhaseTimes* phase_times) {
+ G1StringDedupCleaningTask cl(is_alive, keep_alive, phase_times);
+ workers()->run_task(&cl);
}
class G1RedirtyLoggedCardsTask : public AbstractGangTask {
@@ -3911,11 +3941,6 @@
// not copied during the pause.
process_discovered_references(per_thread_states);
- // FIXME
- // CM's reference processing also cleans up the string table.
- // Should we do that here also? We could, but it is a serial operation
- // and could significantly increase the pause time.
-
G1STWIsAliveClosure is_alive(this);
G1KeepAliveClosure keep_alive(this);
@@ -3923,12 +3948,12 @@
g1_policy()->phase_times()->weak_phase_times());
if (G1StringDedup::is_enabled()) {
- double fixup_start = os::elapsedTime();
-
- G1StringDedup::unlink_or_oops_do(&is_alive, &keep_alive, true, g1_policy()->phase_times());
-
- double fixup_time_ms = (os::elapsedTime() - fixup_start) * 1000.0;
- g1_policy()->phase_times()->record_string_dedup_fixup_time(fixup_time_ms);
+ double string_dedup_time_ms = os::elapsedTime();
+
+ string_dedup_cleaning(&is_alive, &keep_alive, g1_policy()->phase_times());
+
+ double string_cleanup_time_ms = (os::elapsedTime() - string_dedup_time_ms) * 1000.0;
+ g1_policy()->phase_times()->record_string_deduplication_time(string_cleanup_time_ms);
}
if (evacuation_failed()) {
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/g1/g1CollectedHeap.hpp
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -1332,14 +1332,12 @@
// after a full GC.
void rebuild_strong_code_roots();
- // Partial cleaning used when class unloading is disabled.
- // Let the caller choose what structures to clean out:
- // - StringTable
- // - StringDeduplication structures
- void partial_cleaning(BoolObjectClosure* is_alive, bool unlink_strings, bool unlink_string_dedup);
+ // Partial cleaning of VM internal data structures.
+ void string_dedup_cleaning(BoolObjectClosure* is_alive,
+ OopClosure* keep_alive,
+ G1GCPhaseTimes* phase_times = NULL);
- // Complete cleaning used when class unloading is enabled.
- // Cleans out all structures handled by partial_cleaning and also the CodeCache.
+ // Performs cleaning of data structures after class unloading.
void complete_cleaning(BoolObjectClosure* is_alive, bool class_unloading_occurred);
// Redirty logged cards in the refinement queue.
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/g1/g1ConcurrentMark.cpp
--- a/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1655,11 +1655,9 @@
GCTraceTime(Debug, gc, phases) debug("Class Unloading", _gc_timer_cm);
bool purged_classes = SystemDictionary::do_unloading(_gc_timer_cm);
_g1h->complete_cleaning(&g1_is_alive, purged_classes);
- } else {
- GCTraceTime(Debug, gc, phases) debug("Cleanup", _gc_timer_cm);
- // No need to clean string table as it is treated as strong roots when
- // class unloading is disabled.
- _g1h->partial_cleaning(&g1_is_alive, false, G1StringDedup::is_enabled());
+ } else if (StringDedup::is_enabled()) {
+ GCTraceTime(Debug, gc, phases) debug("String Deduplication", _gc_timer_cm);
+ _g1h->string_dedup_cleaning(&g1_is_alive, NULL);
}
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/g1/g1FreeIdSet.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/g1/g1FreeIdSet.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2019, 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.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "gc/g1/g1FreeIdSet.hpp"
+#include "memory/allocation.inline.hpp"
+#include "runtime/atomic.hpp"
+#include "utilities/debug.hpp"
+#include "utilities/globalDefinitions.hpp"
+#include "utilities/macros.hpp"
+
+G1FreeIdSet::G1FreeIdSet(uint start, uint size) :
+ _sem(size), // counting semaphore for available ids
+ _next(NULL), // array of "next" indices
+ _start(start), // first id value
+ _size(size), // number of available ids
+ _head_index_mask(0), // mask for extracting index from a _head value.
+ _head(0) // low part: index; high part: update counter
+{
+ assert(size != 0, "precondition");
+ assert(start <= (UINT_MAX - size),
+ "start (%u) + size (%u) overflow: ", start, size);
+ // 2^shift must be greater than size. Equal is not permitted, because
+ // size is the "end of list" value, and can be the index part of _head.
+ uint shift = log2_intptr((uintptr_t)size) + 1;
+ assert(shift <= (BitsPerWord / 2), "excessive size %u", size);
+ _head_index_mask = (uintx(1) << shift) - 1;
+ assert(size <= _head_index_mask, "invariant");
+ _next = NEW_C_HEAP_ARRAY(uint, size, mtGC);
+ for (uint i = 0; i < size; ++i) {
+ _next[i] = i + 1;
+ }
+}
+
+G1FreeIdSet::~G1FreeIdSet() {
+ FREE_C_HEAP_ARRAY(uint, _next);
+}
+
+uint G1FreeIdSet::head_index(uintx head) const {
+ return head & _head_index_mask;
+}
+
+uintx G1FreeIdSet::make_head(uint index, uintx old_head) const {
+ // Include incremented old update counter to avoid ABA problem.
+ return index | ((old_head & ~_head_index_mask) + 1 + _head_index_mask);
+}
+
+const uint Claimed = UINT_MAX;
+
+uint G1FreeIdSet::claim_par_id() {
+ _sem.wait();
+ // Semaphore gate permits passage by no more than the number of
+ // available ids, so there must be one that we can claim. But there
+ // may be multiple threads trying to claim ids at the same time.
+ uintx old_head = Atomic::load(&_head);
+ uint index;
+ while (true) {
+ index = head_index(old_head);
+ assert(index < _size, "invariant");
+ uintx new_head = make_head(_next[index], old_head);
+ new_head = Atomic::cmpxchg(new_head, &_head, old_head);
+ if (new_head == old_head) break;
+ old_head = new_head;
+ }
+ DEBUG_ONLY(_next[index] = Claimed;)
+ return _start + index;
+}
+
+void G1FreeIdSet::release_par_id(uint id) {
+ uint index = id - _start;
+ assert(index < _size, "invalid id %u", id);
+ assert(_next[index] == Claimed, "precondition");
+ uintx old_head = Atomic::load(&_head);
+ while (true) {
+ _next[index] = head_index(old_head);
+ uintx new_head = make_head(index, old_head);
+ new_head = Atomic::cmpxchg(new_head, &_head, old_head);
+ if (new_head == old_head) break;
+ old_head = new_head;
+ }
+ // Now that id has been released, permit another thread through the gate.
+ _sem.signal();
+}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/g1/g1FreeIdSet.hpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/g1/g1FreeIdSet.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2019, 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.
+ *
+ */
+
+#ifndef SHARE_GC_G1_G1FREEIDSET_HPP
+#define SHARE_GC_G1_G1FREEIDSET_HPP
+
+#include "memory/allocation.hpp"
+#include "runtime/semaphore.hpp"
+#include "utilities/globalDefinitions.hpp"
+
+// Represents a set of small integer ids, from which elements can be
+// temporarily allocated for exclusive use. The ids are in a
+// contiguous range from 'start' to 'start + size'. Used to obtain a
+// distinct worker_id value for a mutator thread that doesn't normally
+// have such an id.
+class G1FreeIdSet : public CHeapObj {
+ Semaphore _sem;
+ uint* _next;
+ uint _start;
+ uint _size;
+ uintx _head_index_mask;
+ volatile uintx _head;
+
+ uint head_index(uintx head) const;
+ uintx make_head(uint index, uintx old_head) const;
+
+ // Noncopyable.
+ G1FreeIdSet(const G1FreeIdSet&);
+ G1FreeIdSet& operator=(const G1FreeIdSet&);
+
+public:
+ G1FreeIdSet(uint start, uint size);
+ ~G1FreeIdSet();
+
+ // Returns an unclaimed parallel id (waiting for one to be released if
+ // necessary). Must not safepoint while holding a claimed id.
+ uint claim_par_id();
+
+ void release_par_id(uint id);
+
+ struct TestSupport; // For unit test access.
+};
+
+#endif // SHARE_GC_G1_G1FREEIDSET_HPP
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/g1/g1FullCollector.cpp
--- a/src/hotspot/share/gc/g1/g1FullCollector.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1FullCollector.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -224,10 +224,10 @@
// Unload classes and purge the SystemDictionary.
bool purged_class = SystemDictionary::do_unloading(scope()->timer());
_heap->complete_cleaning(&_is_alive, purged_class);
- } else {
- GCTraceTime(Debug, gc, phases) debug("Phase 1: String and Symbol Tables Cleanup", scope()->timer());
- // If no class unloading just clean out strings.
- _heap->partial_cleaning(&_is_alive, true, G1StringDedup::is_enabled());
+ } else if (G1StringDedup::is_enabled()) {
+ GCTraceTime(Debug, gc, phases) debug("Phase 1: String Dedup Cleanup", scope()->timer());
+ // If no class unloading just clean out string deduplication data.
+ _heap->string_dedup_cleaning(&_is_alive, NULL);
}
scope()->tracer()->report_object_count_after_gc(&_is_alive);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/g1/g1FullGCAdjustTask.cpp
--- a/src/hotspot/share/gc/g1/g1FullGCAdjustTask.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1FullGCAdjustTask.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -86,7 +86,7 @@
_weak_proc_task(collector->workers()),
_hrclaimer(collector->workers()),
_adjust(),
- _adjust_string_dedup(NULL, &_adjust, G1StringDedup::is_enabled()) {
+ _string_dedup_cleaning_task(NULL, &_adjust, false) {
// Need cleared claim bits for the roots processing
ClassLoaderDataGraph::clear_claimed_marks();
}
@@ -110,15 +110,10 @@
CLDToOopClosure adjust_cld(&_adjust, ClassLoaderData::_claim_strong);
CodeBlobToOopClosure adjust_code(&_adjust, CodeBlobToOopClosure::FixRelocations);
- _root_processor.process_all_roots(
- &_adjust,
- &adjust_cld,
- &adjust_code);
+ _root_processor.process_all_roots(&_adjust, &adjust_cld, &adjust_code);
- // Adjust string dedup if enabled.
- if (G1StringDedup::is_enabled()) {
- G1StringDedup::parallel_unlink(&_adjust_string_dedup, worker_id);
- }
+ // Adjust string dedup data structures.
+ _string_dedup_cleaning_task.work(worker_id);
// Now adjust pointers region by region
G1AdjustRegionClosure blk(collector()->mark_bitmap(), worker_id);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/g1/g1FullGCAdjustTask.hpp
--- a/src/hotspot/share/gc/g1/g1FullGCAdjustTask.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1FullGCAdjustTask.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -30,6 +30,7 @@
#include "gc/g1/g1RootProcessor.hpp"
#include "gc/g1/g1StringDedup.hpp"
#include "gc/g1/heapRegionManager.hpp"
+#include "gc/shared/parallelCleaning.hpp"
#include "gc/shared/weakProcessorPhaseTimes.hpp"
#include "gc/shared/weakProcessor.hpp"
#include "utilities/ticks.hpp"
@@ -42,7 +43,7 @@
WeakProcessor::Task _weak_proc_task;
HeapRegionClaimer _hrclaimer;
G1AdjustClosure _adjust;
- G1StringDedupUnlinkOrOopsDoClosure _adjust_string_dedup;
+ StringDedupCleaningTask _string_dedup_cleaning_task;
public:
G1FullGCAdjustTask(G1FullCollector* collector);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/g1/g1FullGCMarkTask.cpp
--- a/src/hotspot/share/gc/g1/g1FullGCMarkTask.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1FullGCMarkTask.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -49,15 +49,13 @@
MarkingCodeBlobClosure code_closure(marker->mark_closure(), !CodeBlobToOopClosure::FixRelocations);
if (ClassUnloading) {
- _root_processor.process_strong_roots(
- marker->mark_closure(),
- marker->cld_closure(),
- &code_closure);
+ _root_processor.process_strong_roots(marker->mark_closure(),
+ marker->cld_closure(),
+ &code_closure);
} else {
- _root_processor.process_all_roots_no_string_table(
- marker->mark_closure(),
- marker->cld_closure(),
- &code_closure);
+ _root_processor.process_all_roots(marker->mark_closure(),
+ marker->cld_closure(),
+ &code_closure);
}
// Mark stack is populated, now process and drain it.
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp
--- a/src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -53,7 +53,6 @@
// Root scanning phases
_gc_par_phases[ThreadRoots] = new WorkerDataArray(max_gc_threads, "Thread Roots (ms):");
- _gc_par_phases[StringTableRoots] = new WorkerDataArray(max_gc_threads, "StringTable Roots (ms):");
_gc_par_phases[UniverseRoots] = new WorkerDataArray(max_gc_threads, "Universe Roots (ms):");
_gc_par_phases[JNIRoots] = new WorkerDataArray(max_gc_threads, "JNI Handles Roots (ms):");
_gc_par_phases[ObjectSynchronizerRoots] = new WorkerDataArray(max_gc_threads, "ObjectSynchronizer Roots (ms):");
@@ -136,7 +135,7 @@
_cur_strong_code_root_purge_time_ms = 0.0;
_cur_evac_fail_recalc_used = 0.0;
_cur_evac_fail_remove_self_forwards = 0.0;
- _cur_string_dedup_fixup_time_ms = 0.0;
+ _cur_string_deduplication_time_ms = 0.0;
_cur_prepare_tlab_time_ms = 0.0;
_cur_resize_tlab_time_ms = 0.0;
_cur_derived_pointer_table_update_time_ms = 0.0;
@@ -290,12 +289,12 @@
}
}
-void G1GCPhaseTimes::debug_phase(WorkerDataArray* phase) const {
+void G1GCPhaseTimes::debug_phase(WorkerDataArray* phase, uint extra_indent) const {
LogTarget(Debug, gc, phases) lt;
if (lt.is_enabled()) {
ResourceMark rm;
LogStream ls(lt);
- log_phase(phase, 2, &ls, true);
+ log_phase(phase, 2 + extra_indent, &ls, true);
}
}
@@ -417,7 +416,7 @@
_recorded_total_free_cset_time_ms +
_cur_fast_reclaim_humongous_time_ms +
_cur_expand_heap_time_ms +
- _cur_string_dedup_fixup_time_ms;
+ _cur_string_deduplication_time_ms;
info_time("Post Evacuate Collection Set", sum_ms);
@@ -430,9 +429,9 @@
_weak_phase_times.log_print(2);
if (G1StringDedup::is_enabled()) {
- debug_time("String Dedup Fixup", _cur_string_dedup_fixup_time_ms);
- debug_phase(_gc_par_phases[StringDedupQueueFixup]);
- debug_phase(_gc_par_phases[StringDedupTableFixup]);
+ debug_time("String Deduplication", _cur_string_deduplication_time_ms);
+ debug_phase(_gc_par_phases[StringDedupQueueFixup], 1);
+ debug_phase(_gc_par_phases[StringDedupTableFixup], 1);
}
if (G1CollectedHeap::heap()->evacuation_failed()) {
@@ -497,7 +496,6 @@
"GCWorkerStart",
"ExtRootScan",
"ThreadRoots",
- "StringTableRoots",
"UniverseRoots",
"JNIRoots",
"ObjectSynchronizerRoots",
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/g1/g1GCPhaseTimes.hpp
--- a/src/hotspot/share/gc/g1/g1GCPhaseTimes.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1GCPhaseTimes.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -48,7 +48,6 @@
GCWorkerStart,
ExtRootScan,
ThreadRoots,
- StringTableRoots,
UniverseRoots,
JNIRoots,
ObjectSynchronizerRoots,
@@ -104,8 +103,6 @@
private:
// Markers for grouping the phases in the GCPhases enum above
static const int GCMainParPhasesLast = GCWorkerEnd;
- static const int StringDedupPhasesFirst = StringDedupQueueFixup;
- static const int StringDedupPhasesLast = StringDedupTableFixup;
WorkerDataArray* _gc_par_phases[GCParPhasesSentinel];
@@ -134,7 +131,7 @@
double _cur_evac_fail_recalc_used;
double _cur_evac_fail_remove_self_forwards;
- double _cur_string_dedup_fixup_time_ms;
+ double _cur_string_deduplication_time_ms;
double _cur_prepare_tlab_time_ms;
double _cur_resize_tlab_time_ms;
@@ -187,7 +184,7 @@
void details(T* phase, const char* indent) const;
void log_phase(WorkerDataArray* phase, uint indent, outputStream* out, bool print_sum) const;
- void debug_phase(WorkerDataArray* phase) const;
+ void debug_phase(WorkerDataArray* phase, uint extra_indent = 0) const;
void trace_phase(WorkerDataArray* phase, bool print_sum = true) const;
void info_time(const char* name, double value) const;
@@ -272,8 +269,8 @@
_cur_evac_fail_remove_self_forwards = ms;
}
- void record_string_dedup_fixup_time(double ms) {
- _cur_string_dedup_fixup_time_ms = ms;
+ void record_string_deduplication_time(double ms) {
+ _cur_string_deduplication_time_ms = ms;
}
void record_ref_proc_time(double ms) {
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/g1/g1HeapVerifier.cpp
--- a/src/hotspot/share/gc/g1/g1HeapVerifier.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1HeapVerifier.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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
@@ -490,9 +490,7 @@
{
G1RootProcessor root_processor(_g1h, 1);
- root_processor.process_all_roots(&rootsCl,
- &cldCl,
- &blobsCl);
+ root_processor.process_all_roots(&rootsCl, &cldCl, &blobsCl);
}
bool failures = rootsCl.failures() || codeRootsCl.failures();
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/g1/g1RootProcessor.cpp
--- a/src/hotspot/share/gc/g1/g1RootProcessor.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1RootProcessor.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -90,7 +90,6 @@
}
process_vm_roots(closures, phase_times, worker_i);
- process_string_table_roots(closures, phase_times, worker_i);
{
// Now the CM ref_processor roots.
@@ -188,34 +187,17 @@
void G1RootProcessor::process_all_roots(OopClosure* oops,
CLDClosure* clds,
- CodeBlobClosure* blobs,
- bool process_string_table) {
+ CodeBlobClosure* blobs) {
AllRootsClosures closures(oops, clds);
process_java_roots(&closures, NULL, 0);
process_vm_roots(&closures, NULL, 0);
- if (process_string_table) {
- process_string_table_roots(&closures, NULL, 0);
- }
process_code_cache_roots(blobs, NULL, 0);
_process_strong_tasks.all_tasks_completed(n_workers());
}
-void G1RootProcessor::process_all_roots(OopClosure* oops,
- CLDClosure* clds,
- CodeBlobClosure* blobs) {
- process_all_roots(oops, clds, blobs, true);
-}
-
-void G1RootProcessor::process_all_roots_no_string_table(OopClosure* oops,
- CLDClosure* clds,
- CodeBlobClosure* blobs) {
- assert(!ClassUnloading, "Should only be used when class unloading is disabled");
- process_all_roots(oops, clds, blobs, false);
-}
-
void G1RootProcessor::process_java_roots(G1RootClosures* closures,
G1GCPhaseTimes* phase_times,
uint worker_i) {
@@ -295,16 +277,6 @@
}
}
-void G1RootProcessor::process_string_table_roots(G1RootClosures* closures,
- G1GCPhaseTimes* phase_times,
- uint worker_i) {
- assert(closures->weak_oops() != NULL, "Should only be called when all roots are processed");
- G1GCParPhaseTimesTracker x(phase_times, G1GCPhaseTimes::StringTableRoots, worker_i);
- // All threads execute the following. A specific chunk of buckets
- // from the StringTable are the individual tasks.
- StringTable::possibly_parallel_oops_do(&_par_state_string, closures->weak_oops());
-}
-
void G1RootProcessor::process_code_cache_roots(CodeBlobClosure* code_closure,
G1GCPhaseTimes* phase_times,
uint worker_i) {
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/g1/g1RootProcessor.hpp
--- a/src/hotspot/share/gc/g1/g1RootProcessor.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1RootProcessor.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -75,11 +75,6 @@
void worker_has_discovered_all_strong_classes();
void wait_until_all_strong_classes_discovered();
- void process_all_roots(OopClosure* oops,
- CLDClosure* clds,
- CodeBlobClosure* blobs,
- bool process_string_table);
-
void process_java_roots(G1RootClosures* closures,
G1GCPhaseTimes* phase_times,
uint worker_i);
@@ -88,10 +83,6 @@
G1GCPhaseTimes* phase_times,
uint worker_i);
- void process_string_table_roots(G1RootClosures* closures,
- G1GCPhaseTimes* phase_times,
- uint worker_i);
-
void process_code_cache_roots(CodeBlobClosure* code_closure,
G1GCPhaseTimes* phase_times,
uint worker_i);
@@ -101,7 +92,7 @@
// Apply correct closures from pss to the strongly and weakly reachable roots in the system
// in a single pass.
- // Record and report timing measurements for sub phases using the worker_i
+ // Record and report timing measurements for sub phases using worker_id.
void evacuate_roots(G1ParScanThreadState* pss, uint worker_id);
// Apply oops, clds and blobs to all strongly reachable roots in the system
@@ -114,13 +105,6 @@
CLDClosure* clds,
CodeBlobClosure* blobs);
- // Apply oops, clds and blobs to strongly and weakly reachable roots in the system,
- // the only thing different from process_all_roots is that we skip the string table
- // to avoid keeping every string live when doing class unloading.
- void process_all_roots_no_string_table(OopClosure* oops,
- CLDClosure* clds,
- CodeBlobClosure* blobs);
-
// Number of worker threads used by the root processor.
uint n_workers() const;
};
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/g1/g1StringDedup.cpp
--- a/src/hotspot/share/gc/g1/g1StringDedup.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1StringDedup.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -89,53 +89,3 @@
}
}
-void G1StringDedup::oops_do(OopClosure* keep_alive) {
- assert(is_enabled(), "String deduplication not enabled");
- unlink_or_oops_do(NULL, keep_alive, true /* allow_resize_and_rehash */);
-}
-
-void G1StringDedup::parallel_unlink(G1StringDedupUnlinkOrOopsDoClosure* unlink, uint worker_id) {
- assert(is_enabled(), "String deduplication not enabled");
- StringDedupQueue::unlink_or_oops_do(unlink);
- StringDedupTable::unlink_or_oops_do(unlink, worker_id);
-}
-
-//
-// Task for parallel unlink_or_oops_do() operation on the deduplication queue
-// and table.
-//
-class G1StringDedupUnlinkOrOopsDoTask : public AbstractGangTask {
-private:
- G1StringDedupUnlinkOrOopsDoClosure _cl;
- G1GCPhaseTimes* _phase_times;
-
-public:
- G1StringDedupUnlinkOrOopsDoTask(BoolObjectClosure* is_alive,
- OopClosure* keep_alive,
- bool allow_resize_and_rehash,
- G1GCPhaseTimes* phase_times) :
- AbstractGangTask("G1StringDedupUnlinkOrOopsDoTask"),
- _cl(is_alive, keep_alive, allow_resize_and_rehash), _phase_times(phase_times) { }
-
- virtual void work(uint worker_id) {
- {
- G1GCParPhaseTimesTracker x(_phase_times, G1GCPhaseTimes::StringDedupQueueFixup, worker_id);
- StringDedupQueue::unlink_or_oops_do(&_cl);
- }
- {
- G1GCParPhaseTimesTracker x(_phase_times, G1GCPhaseTimes::StringDedupTableFixup, worker_id);
- StringDedupTable::unlink_or_oops_do(&_cl, worker_id);
- }
- }
-};
-
-void G1StringDedup::unlink_or_oops_do(BoolObjectClosure* is_alive,
- OopClosure* keep_alive,
- bool allow_resize_and_rehash,
- G1GCPhaseTimes* phase_times) {
- assert(is_enabled(), "String deduplication not enabled");
-
- G1StringDedupUnlinkOrOopsDoTask task(is_alive, keep_alive, allow_resize_and_rehash, phase_times);
- G1CollectedHeap* g1h = G1CollectedHeap::heap();
- g1h->workers()->run_task(&task);
-}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/g1/g1StringDedup.hpp
--- a/src/hotspot/share/gc/g1/g1StringDedup.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1StringDedup.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -78,35 +78,6 @@
static void enqueue_from_mark(oop java_string, uint worker_id);
static void enqueue_from_evacuation(bool from_young, bool to_young,
unsigned int queue, oop java_string);
-
- static void oops_do(OopClosure* keep_alive);
- static void parallel_unlink(G1StringDedupUnlinkOrOopsDoClosure* unlink, uint worker_id);
- static void unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* keep_alive,
- bool allow_resize_and_rehash, G1GCPhaseTimes* phase_times = NULL);
-};
-
-//
-// This closure encapsulates the state and the closures needed when scanning
-// the deduplication queue and table during the unlink_or_oops_do() operation.
-// A single instance of this closure is created and then shared by all worker
-// threads participating in the scan.
-//
-class G1StringDedupUnlinkOrOopsDoClosure : public StringDedupUnlinkOrOopsDoClosure {
-public:
- G1StringDedupUnlinkOrOopsDoClosure(BoolObjectClosure* is_alive,
- OopClosure* keep_alive,
- bool allow_resize_and_rehash) :
- StringDedupUnlinkOrOopsDoClosure(is_alive, keep_alive) {
- if (G1StringDedup::is_enabled()) {
- G1StringDedup::gc_prologue(allow_resize_and_rehash);
- }
- }
-
- ~G1StringDedupUnlinkOrOopsDoClosure() {
- if (G1StringDedup::is_enabled()) {
- G1StringDedup::gc_epilogue();
- }
- }
};
#endif // SHARE_GC_G1_G1STRINGDEDUP_HPP
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/parallel/psMarkSweep.cpp
--- a/src/hotspot/share/gc/parallel/psMarkSweep.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/parallel/psMarkSweep.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -567,12 +567,6 @@
}
{
- GCTraceTime(Debug, gc, phases) t("Scrub String Table", _gc_timer);
- // Delete entries for dead interned strings.
- StringTable::unlink(is_alive_closure());
- }
-
- {
GCTraceTime(Debug, gc, phases) t("Scrub Symbol Table", _gc_timer);
// Clean up unreferenced symbols in symbol table.
SymbolTable::unlink();
@@ -630,7 +624,6 @@
CodeBlobToOopClosure adjust_from_blobs(adjust_pointer_closure(), CodeBlobToOopClosure::FixRelocations);
CodeCache::blobs_do(&adjust_from_blobs);
AOTLoader::oops_do(adjust_pointer_closure());
- StringTable::oops_do(adjust_pointer_closure());
ref_processor()->weak_oops_do(adjust_pointer_closure());
PSScavenge::reference_processor()->weak_oops_do(adjust_pointer_closure());
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/parallel/psParallelCompact.cpp
--- a/src/hotspot/share/gc/parallel/psParallelCompact.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/parallel/psParallelCompact.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2019, 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
@@ -2185,12 +2185,6 @@
}
{
- GCTraceTime(Debug, gc, phases) t("Scrub String Table", &_gc_timer);
- // Delete entries for dead interned strings.
- StringTable::unlink(is_alive_closure());
- }
-
- {
GCTraceTime(Debug, gc, phases) t("Scrub Symbol Table", &_gc_timer);
// Clean up unreferenced symbols in symbol table.
SymbolTable::unlink();
@@ -2226,7 +2220,6 @@
CodeBlobToOopClosure adjust_from_blobs(&oop_closure, CodeBlobToOopClosure::FixRelocations);
CodeCache::blobs_do(&adjust_from_blobs);
AOTLoader::oops_do(&oop_closure);
- StringTable::oops_do(&oop_closure);
ref_processor()->weak_oops_do(&oop_closure);
// Roots were visited so references into the young gen in roots
// may have been scanned. Process them also.
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/parallel/psScavenge.cpp
--- a/src/hotspot/share/gc/parallel/psScavenge.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/parallel/psScavenge.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2019, 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
@@ -430,12 +430,6 @@
WeakProcessor::weak_oops_do(&_is_alive_closure, &root_closure);
}
- {
- GCTraceTime(Debug, gc, phases) tm("Scrub String Table", &_gc_timer);
- // Unlink any dead interned Strings and process the remaining live ones.
- StringTable::unlink_or_oops_do(&_is_alive_closure, &root_closure);
- }
-
// Verify that usage of root_closure didn't copy any objects.
assert(promotion_manager->stacks_empty(),"stacks should be empty at this point");
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/serial/genMarkSweep.cpp
--- a/src/hotspot/share/gc/serial/genMarkSweep.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/serial/genMarkSweep.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -240,12 +240,6 @@
}
{
- GCTraceTime(Debug, gc, phases) t("Scrub String Table", gc_timer());
- // Delete entries for dead interned strings.
- StringTable::unlink(&is_alive);
- }
-
- {
GCTraceTime(Debug, gc, phases) t("Scrub Symbol Table", gc_timer());
// Clean up unreferenced symbols in symbol table.
SymbolTable::unlink();
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shared/c1/barrierSetC1.cpp
--- a/src/hotspot/share/gc/shared/c1/barrierSetC1.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shared/c1/barrierSetC1.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -62,9 +62,13 @@
if (resolve_in_register) {
LIR_Opr resolved_addr = gen->new_pointer_register();
- __ leal(addr_opr, resolved_addr);
- resolved_addr = LIR_OprFact::address(new LIR_Address(resolved_addr, access.type()));
- return resolved_addr;
+ if (needs_patching) {
+ __ leal(addr_opr, resolved_addr, lir_patch_normal, access.patch_emit_info());
+ access.clear_decorators(C1_NEEDS_PATCHING);
+ } else {
+ __ leal(addr_opr, resolved_addr);
+ }
+ return LIR_OprFact::address(new LIR_Address(resolved_addr, access.type()));
} else {
return addr_opr;
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shared/c1/barrierSetC1.hpp
--- a/src/hotspot/share/gc/shared/c1/barrierSetC1.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shared/c1/barrierSetC1.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -92,17 +92,18 @@
load_offset();
}
- LIRGenerator* gen() const { return _gen; }
- CodeEmitInfo*& patch_emit_info() { return _patch_emit_info; }
- CodeEmitInfo*& access_emit_info() { return _access_emit_info; }
- LIRAddressOpr& base() { return _base; }
- LIRAddressOpr& offset() { return _offset; }
- BasicType type() const { return _type; }
- LIR_Opr resolved_addr() const { return _resolved_addr; }
- void set_resolved_addr(LIR_Opr addr) { _resolved_addr = addr; }
- bool is_oop() const { return _type == T_ARRAY || _type == T_OBJECT; }
- DecoratorSet decorators() const { return _decorators; }
- bool is_raw() const { return (_decorators & AS_RAW) != 0; }
+ LIRGenerator* gen() const { return _gen; }
+ CodeEmitInfo*& patch_emit_info() { return _patch_emit_info; }
+ CodeEmitInfo*& access_emit_info() { return _access_emit_info; }
+ LIRAddressOpr& base() { return _base; }
+ LIRAddressOpr& offset() { return _offset; }
+ BasicType type() const { return _type; }
+ LIR_Opr resolved_addr() const { return _resolved_addr; }
+ void set_resolved_addr(LIR_Opr addr) { _resolved_addr = addr; }
+ bool is_oop() const { return _type == T_ARRAY || _type == T_OBJECT; }
+ DecoratorSet decorators() const { return _decorators; }
+ void clear_decorators(DecoratorSet ds) { _decorators &= ~ds; }
+ bool is_raw() const { return (_decorators & AS_RAW) != 0; }
};
// The BarrierSetC1 class is the main entry point for the GC backend of the Access API in C1.
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shared/genCollectedHeap.cpp
--- a/src/hotspot/share/gc/shared/genCollectedHeap.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shared/genCollectedHeap.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2019, 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
@@ -849,33 +849,14 @@
}
}
-void GenCollectedHeap::process_string_table_roots(StrongRootsScope* scope,
- OopClosure* root_closure,
- OopStorage::ParState* par_state_string) {
- assert(root_closure != NULL, "Must be set");
- // All threads execute the following. A specific chunk of buckets
- // from the StringTable are the individual tasks.
-
- // Either we should be single threaded or have a ParState
- assert((scope->n_threads() <= 1) || par_state_string != NULL, "Parallel but no ParState");
-
- if (scope->n_threads() > 1) {
- StringTable::possibly_parallel_oops_do(par_state_string, root_closure);
- } else {
- StringTable::oops_do(root_closure);
- }
-}
-
void GenCollectedHeap::young_process_roots(StrongRootsScope* scope,
OopsInGenClosure* root_closure,
OopsInGenClosure* old_gen_closure,
- CLDClosure* cld_closure,
- OopStorage::ParState* par_state_string) {
+ CLDClosure* cld_closure) {
MarkingCodeBlobClosure mark_code_closure(root_closure, CodeBlobToOopClosure::FixRelocations);
process_roots(scope, SO_ScavengeCodeCache, root_closure,
cld_closure, cld_closure, &mark_code_closure);
- process_string_table_roots(scope, root_closure, par_state_string);
if (_process_strong_tasks->try_claim_task(GCH_PS_younger_gens)) {
root_closure->reset_generation();
@@ -895,19 +876,11 @@
ScanningOption so,
bool only_strong_roots,
OopsInGenClosure* root_closure,
- CLDClosure* cld_closure,
- OopStorage::ParState* par_state_string) {
+ CLDClosure* cld_closure) {
MarkingCodeBlobClosure mark_code_closure(root_closure, is_adjust_phase);
CLDClosure* weak_cld_closure = only_strong_roots ? NULL : cld_closure;
process_roots(scope, so, root_closure, cld_closure, weak_cld_closure, &mark_code_closure);
- if (is_adjust_phase) {
- // We never treat the string table as roots during marking
- // for the full gc, so we only need to process it during
- // the adjust phase.
- process_string_table_roots(scope, root_closure, par_state_string);
- }
-
_process_strong_tasks->all_tasks_completed(scope->n_threads());
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shared/genCollectedHeap.hpp
--- a/src/hotspot/share/gc/shared/genCollectedHeap.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shared/genCollectedHeap.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -400,10 +400,6 @@
CLDClosure* weak_cld_closure,
CodeBlobToOopClosure* code_roots);
- void process_string_table_roots(StrongRootsScope* scope,
- OopClosure* root_closure,
- OopStorage::ParState* par_state_string);
-
// Accessor for memory state verification support
NOT_PRODUCT(
virtual size_t skip_header_HeapWords() { return 0; }
@@ -416,16 +412,14 @@
void young_process_roots(StrongRootsScope* scope,
OopsInGenClosure* root_closure,
OopsInGenClosure* old_gen_closure,
- CLDClosure* cld_closure,
- OopStorage::ParState* par_state_string = NULL);
+ CLDClosure* cld_closure);
void full_process_roots(StrongRootsScope* scope,
bool is_adjust_phase,
ScanningOption so,
bool only_strong_roots,
OopsInGenClosure* root_closure,
- CLDClosure* cld_closure,
- OopStorage::ParState* par_state_string = NULL);
+ CLDClosure* cld_closure);
// Apply "root_closure" to all the weak roots of the system.
// These include JNI weak roots, string table,
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shared/owstTaskTerminator.cpp
--- a/src/hotspot/share/gc/shared/owstTaskTerminator.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shared/owstTaskTerminator.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
*
* 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
@@ -38,15 +38,17 @@
// Single worker, done
if (_n_threads == 1) {
_offered_termination = 1;
+ assert(!peek_in_queue_set(), "Precondition");
return true;
}
_blocker->lock_without_safepoint_check();
+ _offered_termination++;
// All arrived, done
- _offered_termination++;
if (_offered_termination == _n_threads) {
_blocker->notify_all();
_blocker->unlock();
+ assert(!peek_in_queue_set(), "Precondition");
return true;
}
@@ -59,6 +61,7 @@
if (do_spin_master_work(terminator)) {
assert(_offered_termination == _n_threads, "termination condition");
+ assert(!peek_in_queue_set(), "Precondition");
return true;
} else {
_blocker->lock_without_safepoint_check();
@@ -68,12 +71,14 @@
if (_offered_termination == _n_threads) {
_blocker->unlock();
+ assert(!peek_in_queue_set(), "Precondition");
return true;
}
}
size_t tasks = tasks_in_queue_set();
if (exit_termination(tasks, terminator)) {
+ assert_lock_strong(_blocker);
_offered_termination--;
_blocker->unlock();
return false;
@@ -153,19 +158,24 @@
_total_peeks++;
#endif
size_t tasks = tasks_in_queue_set();
- if (exit_termination(tasks, terminator)) {
+ bool exit = exit_termination(tasks, terminator);
+ {
MonitorLockerEx locker(_blocker, Mutex::_no_safepoint_check_flag);
- if (tasks >= _offered_termination - 1) {
- locker.notify_all();
- } else {
- for (; tasks > 1; tasks--) {
- locker.notify();
+ // Termination condition reached
+ if (_offered_termination == _n_threads) {
+ _spin_master = NULL;
+ return true;
+ } else if (exit) {
+ if (tasks >= _offered_termination - 1) {
+ locker.notify_all();
+ } else {
+ for (; tasks > 1; tasks--) {
+ locker.notify();
+ }
}
+ _spin_master = NULL;
+ return false;
}
- _spin_master = NULL;
- return false;
- } else if (_offered_termination == _n_threads) {
- return true;
}
}
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shared/owstTaskTerminator.hpp
--- a/src/hotspot/share/gc/shared/owstTaskTerminator.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shared/owstTaskTerminator.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
*
* 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
@@ -55,6 +55,7 @@
}
virtual ~OWSTTaskTerminator() {
+ assert(_spin_master == NULL, "Should have been reset");
assert(_blocker != NULL, "Can not be NULL");
delete _blocker;
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shared/parallelCleaning.cpp
--- a/src/hotspot/share/gc/shared/parallelCleaning.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shared/parallelCleaning.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -31,48 +31,35 @@
#include "memory/resourceArea.hpp"
#include "logging/log.hpp"
-StringCleaningTask::StringCleaningTask(BoolObjectClosure* is_alive, StringDedupUnlinkOrOopsDoClosure* dedup_closure, bool process_strings) :
- AbstractGangTask("String Unlinking"),
- _is_alive(is_alive),
- _dedup_closure(dedup_closure),
- _par_state_string(StringTable::weak_storage()),
- _initial_string_table_size((int) StringTable::the_table()->table_size()),
- _process_strings(process_strings), _strings_processed(0), _strings_removed(0) {
+StringDedupCleaningTask::StringDedupCleaningTask(BoolObjectClosure* is_alive,
+ OopClosure* keep_alive,
+ bool resize_table) :
+ AbstractGangTask("String Dedup Cleaning"),
+ _dedup_closure(is_alive, keep_alive) {
- if (process_strings) {
- StringTable::reset_dead_counter();
+ if (StringDedup::is_enabled()) {
+ StringDedup::gc_prologue(resize_table);
}
}
-StringCleaningTask::~StringCleaningTask() {
- log_info(gc, stringtable)(
- "Cleaned string table, "
- "strings: " SIZE_FORMAT " processed, " SIZE_FORMAT " removed",
- strings_processed(), strings_removed());
- if (_process_strings) {
- StringTable::finish_dead_counter();
+StringDedupCleaningTask::~StringDedupCleaningTask() {
+ if (StringDedup::is_enabled()) {
+ StringDedup::gc_epilogue();
}
}
-void StringCleaningTask::work(uint worker_id) {
- size_t strings_processed = 0;
- size_t strings_removed = 0;
- if (_process_strings) {
- StringTable::possibly_parallel_unlink(&_par_state_string, _is_alive, &strings_processed, &strings_removed);
- Atomic::add(strings_processed, &_strings_processed);
- Atomic::add(strings_removed, &_strings_removed);
- }
- if (_dedup_closure != NULL) {
- StringDedup::parallel_unlink(_dedup_closure, worker_id);
+void StringDedupCleaningTask::work(uint worker_id) {
+ if (StringDedup::is_enabled()) {
+ StringDedup::parallel_unlink(&_dedup_closure, worker_id);
}
}
CodeCacheUnloadingTask::CodeCacheUnloadingTask(uint num_workers, BoolObjectClosure* is_alive, bool unloading_occurred) :
- _unloading_scope(is_alive),
- _unloading_occurred(unloading_occurred),
- _num_workers(num_workers),
- _first_nmethod(NULL),
- _claimed_nmethod(NULL) {
+ _unloading_scope(is_alive),
+ _unloading_occurred(unloading_occurred),
+ _num_workers(num_workers),
+ _first_nmethod(NULL),
+ _claimed_nmethod(NULL) {
// Get first alive nmethod
CompiledMethodIterator iter(CompiledMethodIterator::only_alive);
if(iter.next()) {
@@ -175,10 +162,12 @@
}
ParallelCleaningTask::ParallelCleaningTask(BoolObjectClosure* is_alive,
- StringDedupUnlinkOrOopsDoClosure* dedup_closure, uint num_workers, bool unloading_occurred) :
+ uint num_workers,
+ bool unloading_occurred,
+ bool resize_dedup_table) :
AbstractGangTask("Parallel Cleaning"),
_unloading_occurred(unloading_occurred),
- _string_task(is_alive, StringDedup::is_enabled() ? dedup_closure : NULL, true),
+ _string_dedup_task(is_alive, NULL, resize_dedup_table),
_code_cache_task(num_workers, is_alive, unloading_occurred),
_klass_cleaning_task() {
}
@@ -188,8 +177,8 @@
// Do first pass of code cache cleaning.
_code_cache_task.work(worker_id);
- // Clean the Strings and Symbols.
- _string_task.work(worker_id);
+ // Clean the string dedup data structures.
+ _string_dedup_task.work(worker_id);
// Clean all klasses that were not unloaded.
// The weak metadata in klass doesn't need to be
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shared/parallelCleaning.hpp
--- a/src/hotspot/share/gc/shared/parallelCleaning.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shared/parallelCleaning.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -33,27 +33,14 @@
class ParallelCleaningTask;
-class StringCleaningTask : public AbstractGangTask {
-private:
- BoolObjectClosure* _is_alive;
- StringDedupUnlinkOrOopsDoClosure * const _dedup_closure;
-
- OopStorage::ParState _par_state_string;
-
- int _initial_string_table_size;
-
- bool _process_strings;
- volatile size_t _strings_processed;
- volatile size_t _strings_removed;
+class StringDedupCleaningTask : public AbstractGangTask {
+ StringDedupUnlinkOrOopsDoClosure _dedup_closure;
public:
- StringCleaningTask(BoolObjectClosure* is_alive, StringDedupUnlinkOrOopsDoClosure* dedup_closure, bool process_strings);
- ~StringCleaningTask();
+ StringDedupCleaningTask(BoolObjectClosure* is_alive, OopClosure* keep_alive, bool resize_table);
+ ~StringDedupCleaningTask();
void work(uint worker_id);
-
- size_t strings_processed() const { return _strings_processed; }
- size_t strings_removed() const { return _strings_removed; }
};
class CodeCacheUnloadingTask {
@@ -100,18 +87,21 @@
void work();
};
-// To minimize the remark pause times, the tasks below are done in parallel.
+// Do cleanup of some weakly held data in the same parallel task.
+// Assumes a non-moving context.
class ParallelCleaningTask : public AbstractGangTask {
private:
- bool _unloading_occurred;
- StringCleaningTask _string_task;
- CodeCacheUnloadingTask _code_cache_task;
- KlassCleaningTask _klass_cleaning_task;
+ bool _unloading_occurred;
+ StringDedupCleaningTask _string_dedup_task;
+ CodeCacheUnloadingTask _code_cache_task;
+ KlassCleaningTask _klass_cleaning_task;
public:
// The constructor is run in the VMThread.
- ParallelCleaningTask(BoolObjectClosure* is_alive, StringDedupUnlinkOrOopsDoClosure* dedup_closure,
- uint num_workers, bool unloading_occurred);
+ ParallelCleaningTask(BoolObjectClosure* is_alive,
+ uint num_workers,
+ bool unloading_occurred,
+ bool resize_dedup_table);
void work(uint worker_id);
};
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shared/stringdedup/stringDedup.cpp
--- a/src/hotspot/share/gc/shared/stringdedup/stringDedup.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shared/stringdedup/stringDedup.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -53,7 +53,6 @@
StringDedupTable::deduplicate(java_string, &dummy);
}
-
void StringDedup::parallel_unlink(StringDedupUnlinkOrOopsDoClosure* unlink, uint worker_id) {
assert(is_enabled(), "String deduplication not enabled");
StringDedupQueue::unlink_or_oops_do(unlink);
@@ -80,5 +79,8 @@
StringDedupUnlinkOrOopsDoClosure::StringDedupUnlinkOrOopsDoClosure(BoolObjectClosure* is_alive,
OopClosure* keep_alive) :
- _is_alive(is_alive), _keep_alive(keep_alive) {
+ _always_true(),
+ _do_nothing(),
+ _is_alive(is_alive != NULL ? is_alive : &_always_true),
+ _keep_alive(keep_alive != NULL ? keep_alive : &_do_nothing) {
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shared/stringdedup/stringDedup.hpp
--- a/src/hotspot/share/gc/shared/stringdedup/stringDedup.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shared/stringdedup/stringDedup.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -113,30 +113,18 @@
// the deduplication queue and table during the unlink_or_oops_do() operation.
//
class StringDedupUnlinkOrOopsDoClosure : public StackObj {
-private:
+ AlwaysTrueClosure _always_true;
+ DoNothingClosure _do_nothing;
BoolObjectClosure* _is_alive;
OopClosure* _keep_alive;
public:
StringDedupUnlinkOrOopsDoClosure(BoolObjectClosure* is_alive,
- OopClosure* keep_alive);
+ OopClosure* keep_alive);
- // Applies and returns the result from the is_alive closure, or
- // returns true if no such closure was provided.
- bool is_alive(oop o) {
- if (_is_alive != NULL) {
- return _is_alive->do_object_b(o);
- }
- return true;
- }
+ bool is_alive(oop o) { return _is_alive->do_object_b(o); }
- // Applies the keep_alive closure, or does nothing if no such
- // closure was provided.
- void keep_alive(oop* p) {
- if (_keep_alive != NULL) {
- _keep_alive->do_oop(p);
- }
- }
+ void keep_alive(oop* p) { _keep_alive->do_oop(p); }
};
#endif // SHARE_GC_SHARED_STRINGDEDUP_STRINGDEDUP_HPP
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shared/taskqueue.cpp
--- a/src/hotspot/share/gc/shared/taskqueue.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shared/taskqueue.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -118,6 +118,11 @@
_queue_set(queue_set),
_offered_termination(0) {}
+ParallelTaskTerminator::~ParallelTaskTerminator() {
+ assert(_offered_termination == 0 || !peek_in_queue_set(), "Precondition");
+ assert(_offered_termination == 0 || _offered_termination == _n_threads, "Terminated or aborted" );
+}
+
bool ParallelTaskTerminator::peek_in_queue_set() {
return _queue_set->peek();
}
@@ -162,6 +167,7 @@
assert(_offered_termination <= _n_threads, "Invariant");
// Are all threads offering termination?
if (_offered_termination == _n_threads) {
+ assert(!peek_in_queue_set(), "Precondition");
return true;
} else {
// Look for more work.
@@ -211,9 +217,7 @@
#endif
if (peek_in_queue_set() ||
(terminator != NULL && terminator->should_exit_termination())) {
- Atomic::dec(&_offered_termination);
- assert(_offered_termination < _n_threads, "Invariant");
- return false;
+ return complete_or_exit_termination();
}
}
}
@@ -229,6 +233,23 @@
}
#endif
+bool ParallelTaskTerminator::complete_or_exit_termination() {
+ // If termination is ever reached, terminator should stay in such state,
+ // so that all threads see the same state
+ uint current_offered = _offered_termination;
+ uint expected_value;
+ do {
+ if (current_offered == _n_threads) {
+ assert(!peek_in_queue_set(), "Precondition");
+ return true;
+ }
+ expected_value = current_offered;
+ } while ((current_offered = Atomic::cmpxchg(current_offered - 1, &_offered_termination, current_offered)) != expected_value);
+
+ assert(_offered_termination < _n_threads, "Invariant");
+ return false;
+}
+
void ParallelTaskTerminator::reset_for_reuse() {
if (_offered_termination != 0) {
assert(_offered_termination == _n_threads,
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shared/taskqueue.hpp
--- a/src/hotspot/share/gc/shared/taskqueue.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shared/taskqueue.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -451,7 +451,10 @@
protected:
uint _n_threads;
TaskQueueSetSuper* _queue_set;
+
+ DEFINE_PAD_MINUS_SIZE(0, DEFAULT_CACHE_LINE_SIZE, 0);
volatile uint _offered_termination;
+ DEFINE_PAD_MINUS_SIZE(1, DEFAULT_CACHE_LINE_SIZE, sizeof(volatile uint));
#ifdef TRACESPINNING
static uint _total_yields;
@@ -464,11 +467,18 @@
virtual void yield();
void sleep(uint millis);
+ // Called when exiting termination is requested.
+ // When the request is made, terminator may have already terminated
+ // (e.g. all threads are arrived and offered termination). In this case,
+ // it should ignore the request and complete the termination.
+ // Return true if termination is completed. Otherwise, return false.
+ bool complete_or_exit_termination();
public:
// "n_threads" is the number of threads to be terminated. "queue_set" is a
// queue sets of work queues of other threads.
ParallelTaskTerminator(uint n_threads, TaskQueueSetSuper* queue_set);
+ virtual ~ParallelTaskTerminator();
// The current thread has no work, and is ready to terminate if everyone
// else is. If returns "true", all threads are terminated. If returns
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shared/weakProcessor.cpp
--- a/src/hotspot/share/gc/shared/weakProcessor.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shared/weakProcessor.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -23,9 +23,9 @@
*/
#include "precompiled.hpp"
+#include "classfile/stringTable.hpp"
#include "gc/shared/oopStorage.inline.hpp"
#include "gc/shared/oopStorageParState.inline.hpp"
-#include "gc/shared/weakProcessor.hpp"
#include "gc/shared/weakProcessor.inline.hpp"
#include "gc/shared/weakProcessorPhases.hpp"
#include "gc/shared/weakProcessorPhaseTimes.hpp"
@@ -35,13 +35,19 @@
#include "utilities/macros.hpp"
void WeakProcessor::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* keep_alive) {
+ StringTable::reset_dead_counter();
+ CountingIsAliveClosure cl(is_alive);
FOR_EACH_WEAK_PROCESSOR_PHASE(phase) {
if (WeakProcessorPhases::is_serial(phase)) {
- WeakProcessorPhases::processor(phase)(is_alive, keep_alive);
+ WeakProcessorPhases::processor(phase)(&cl, keep_alive);
} else {
- WeakProcessorPhases::oop_storage(phase)->weak_oops_do(is_alive, keep_alive);
+ WeakProcessorPhases::oop_storage(phase)->weak_oops_do(&cl, keep_alive);
+ }
+ if (WeakProcessorPhases::is_stringtable(phase)) {
+ StringTable::inc_dead_counter(cl.num_dead());
}
}
+ StringTable::finish_dead_counter();
}
void WeakProcessor::oops_do(OopClosure* closure) {
@@ -93,6 +99,7 @@
OopStorage* storage = WeakProcessorPhases::oop_storage(phase);
new (states++) StorageState(storage, _nworkers);
}
+ StringTable::reset_dead_counter();
}
WeakProcessor::Task::Task(uint nworkers) :
@@ -122,6 +129,7 @@
}
FREE_C_HEAP_ARRAY(StorageState, _storage_states);
}
+ StringTable::finish_dead_counter();
}
void WeakProcessor::GangTask::work(uint worker_id) {
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shared/weakProcessor.inline.hpp
--- a/src/hotspot/share/gc/shared/weakProcessor.inline.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shared/weakProcessor.inline.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -25,6 +25,7 @@
#ifndef SHARE_GC_SHARED_WEAKPROCESSOR_INLINE_HPP
#define SHARE_GC_SHARED_WEAKPROCESSOR_INLINE_HPP
+#include "classfile/stringTable.hpp"
#include "gc/shared/oopStorage.inline.hpp"
#include "gc/shared/oopStorageParState.inline.hpp"
#include "gc/shared/weakProcessor.hpp"
@@ -36,6 +37,27 @@
class BoolObjectClosure;
class OopClosure;
+template
+class CountingIsAliveClosure : public BoolObjectClosure {
+ T* _inner;
+
+ size_t _num_dead;
+ size_t _num_total;
+
+public:
+ CountingIsAliveClosure(T* cl) : _inner(cl), _num_dead(0), _num_total(0) { }
+
+ virtual bool do_object_b(oop obj) {
+ bool result = _inner->do_object_b(obj);
+ _num_dead += !result;
+ _num_total++;
+ return result;
+ }
+
+ size_t num_dead() const { return _num_dead; }
+ size_t num_total() const { return _num_total; }
+};
+
template
void WeakProcessor::Task::work(uint worker_id,
IsAlive* is_alive,
@@ -45,16 +67,26 @@
worker_id, _nworkers);
FOR_EACH_WEAK_PROCESSOR_PHASE(phase) {
+ CountingIsAliveClosure cl(is_alive);
if (WeakProcessorPhases::is_serial(phase)) {
uint serial_index = WeakProcessorPhases::serial_index(phase);
if (_serial_phases_done.try_claim_task(serial_index)) {
WeakProcessorPhaseTimeTracker pt(_phase_times, phase);
- WeakProcessorPhases::processor(phase)(is_alive, keep_alive);
+ WeakProcessorPhases::processor(phase)(&cl, keep_alive);
+ if (_phase_times != NULL) {
+ _phase_times->record_phase_items(phase, cl.num_dead(), cl.num_total());
+ }
}
} else {
WeakProcessorPhaseTimeTracker pt(_phase_times, phase, worker_id);
uint storage_index = WeakProcessorPhases::oop_storage_index(phase);
- _storage_states[storage_index].weak_oops_do(is_alive, keep_alive);
+ _storage_states[storage_index].weak_oops_do(&cl, keep_alive);
+ if (_phase_times != NULL) {
+ _phase_times->record_worker_items(worker_id, phase, cl.num_dead(), cl.num_total());
+ }
+ }
+ if (WeakProcessorPhases::is_stringtable(phase)) {
+ StringTable::inc_dead_counter(cl.num_dead());
}
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shared/weakProcessorPhaseTimes.cpp
--- a/src/hotspot/share/gc/shared/weakProcessorPhaseTimes.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shared/weakProcessorPhaseTimes.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -49,6 +49,7 @@
#ifdef ASSERT
static bool is_initialized_time(double t) { return t >= 0.0; }
+static bool is_initialized_items(size_t i) { return i != 0; }
#endif // ASSERT
static void reset_times(double* times, size_t ntimes) {
@@ -57,28 +58,43 @@
}
}
+static void reset_items(size_t* items, size_t nitems) {
+ for (size_t i = 0; i < nitems; ++i) {
+ items[i] = 0;
+ }
+}
+
WeakProcessorPhaseTimes::WeakProcessorPhaseTimes(uint max_threads) :
_max_threads(max_threads),
_active_workers(0),
_total_time_sec(uninitialized_time),
- _worker_phase_times_sec()
+ _worker_data(),
+ _worker_dead_items(),
+ _worker_total_items()
{
assert(_max_threads > 0, "max_threads must not be zero");
reset_times(_phase_times_sec, ARRAY_SIZE(_phase_times_sec));
+ reset_items(_phase_dead_items, ARRAY_SIZE(_phase_dead_items));
+ reset_items(_phase_total_items, ARRAY_SIZE(_phase_total_items));
if (_max_threads > 1) {
- WorkerDataArray** wpt = _worker_phase_times_sec;
+ WorkerDataArray** wpt = _worker_data;
FOR_EACH_WEAK_PROCESSOR_OOP_STORAGE_PHASE(phase) {
const char* description = WeakProcessorPhases::description(phase);
- *wpt++ = new WorkerDataArray(_max_threads, description);
+ *wpt = new WorkerDataArray(_max_threads, description);
+ (*wpt)->link_thread_work_items(new WorkerDataArray(_max_threads, "Dead"), DeadItems);
+ (*wpt)->link_thread_work_items(new WorkerDataArray(_max_threads, "Total"), TotalItems);
+ wpt++;
}
}
}
WeakProcessorPhaseTimes::~WeakProcessorPhaseTimes() {
- for (size_t i = 0; i < ARRAY_SIZE(_worker_phase_times_sec); ++i) {
- delete _worker_phase_times_sec[i];
+ for (size_t i = 0; i < ARRAY_SIZE(_worker_data); ++i) {
+ delete _worker_data[i];
+ delete _worker_dead_items[i];
+ delete _worker_total_items[i];
}
}
@@ -100,9 +116,11 @@
_active_workers = 0;
_total_time_sec = uninitialized_time;
reset_times(_phase_times_sec, ARRAY_SIZE(_phase_times_sec));
+ reset_items(_phase_dead_items, ARRAY_SIZE(_phase_dead_items));
+ reset_items(_phase_total_items, ARRAY_SIZE(_phase_total_items));
if (_max_threads > 1) {
- for (size_t i = 0; i < ARRAY_SIZE(_worker_phase_times_sec); ++i) {
- _worker_phase_times_sec[i]->reset();
+ for (size_t i = 0; i < ARRAY_SIZE(_worker_data); ++i) {
+ _worker_data[i]->reset();
}
}
}
@@ -129,10 +147,20 @@
_phase_times_sec[phase_index(phase)] = time_sec;
}
+void WeakProcessorPhaseTimes::record_phase_items(WeakProcessorPhase phase, size_t num_dead, size_t num_total) {
+ uint p = phase_index(phase);
+ assert(!is_initialized_items(_phase_dead_items[p]),
+ "Already set dead items for phase %u", p);
+ assert(!is_initialized_items(_phase_total_items[p]),
+ "Already set total items for phase %u", p);
+ _phase_dead_items[p] = num_dead;
+ _phase_total_items[p] = num_total;
+}
+
WorkerDataArray* WeakProcessorPhaseTimes::worker_data(WeakProcessorPhase phase) const {
assert_oop_storage_phase(phase);
assert(active_workers() > 1, "No worker data when single-threaded");
- return _worker_phase_times_sec[WeakProcessorPhases::oop_storage_index(phase)];
+ return _worker_data[WeakProcessorPhases::oop_storage_index(phase)];
}
double WeakProcessorPhaseTimes::worker_time_sec(uint worker_id, WeakProcessorPhase phase) const {
@@ -155,6 +183,18 @@
}
}
+void WeakProcessorPhaseTimes::record_worker_items(uint worker_id,
+ WeakProcessorPhase phase,
+ size_t num_dead,
+ size_t num_total) {
+ if (active_workers() == 1) {
+ record_phase_items(phase, num_dead, num_total);
+ } else {
+ worker_data(phase)->set_or_add_thread_work_item(worker_id, num_dead, DeadItems);
+ worker_data(phase)->set_or_add_thread_work_item(worker_id, num_total, TotalItems);
+ }
+}
+
static double elapsed_time_sec(Ticks start_time, Ticks end_time) {
return (end_time - start_time).seconds();
}
@@ -223,6 +263,16 @@
indent_str(indent),
WeakProcessorPhases::description(phase),
phase_time_sec(phase) * MILLIUNITS);
+
+ log_debug(gc, phases)("%s%s: " SIZE_FORMAT,
+ indent_str(indent + 1),
+ "Dead",
+ _phase_dead_items[phase_index(phase)]);
+
+ log_debug(gc, phases)("%s%s: " SIZE_FORMAT,
+ indent_str(indent + 1),
+ "Total",
+ _phase_total_items[phase_index(phase)]);
}
void WeakProcessorPhaseTimes::log_mt_phase_summary(WeakProcessorPhase phase,
@@ -231,27 +281,36 @@
LogStream ls(lt);
ls.print("%s", indents[indent]);
worker_data(phase)->print_summary_on(&ls, true);
+ log_mt_phase_details(worker_data(phase), indent + 1);
+
+ for (uint i = 0; i < worker_data(phase)->MaxThreadWorkItems; i++) {
+ WorkerDataArray* work_items = worker_data(phase)->thread_work_items(i);
+ if (work_items != NULL) {
+ ls.print("%s", indents[indent + 1]);
+ work_items->print_summary_on(&ls, true);
+ log_mt_phase_details(work_items, indent + 1);
+ }
+ }
}
-void WeakProcessorPhaseTimes::log_mt_phase_details(WeakProcessorPhase phase,
+template
+void WeakProcessorPhaseTimes::log_mt_phase_details(WorkerDataArray* data,
uint indent) const {
LogTarget(Trace, gc, phases) lt;
- LogStream ls(lt);
- ls.print("%s", indents[indent]);
- worker_data(phase)->print_details_on(&ls);
+ if (lt.is_enabled()) {
+ LogStream ls(lt);
+ ls.print("%s", indents[indent]);
+ data->print_details_on(&ls);
+ }
}
void WeakProcessorPhaseTimes::log_print_phases(uint indent) const {
if (log_is_enabled(Debug, gc, phases)) {
- bool details_enabled = log_is_enabled(Trace, gc, phases);
FOR_EACH_WEAK_PROCESSOR_PHASE(phase) {
if (is_serial_phase(phase) || (active_workers() == 1)) {
log_st_phase(phase, indent);
} else {
log_mt_phase_summary(phase, indent);
- if (details_enabled) {
- log_mt_phase_details(phase, indent + 1);
- }
}
}
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shared/weakProcessorPhaseTimes.hpp
--- a/src/hotspot/share/gc/shared/weakProcessorPhaseTimes.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shared/weakProcessorPhaseTimes.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -33,6 +33,10 @@
template class WorkerDataArray;
class WeakProcessorPhaseTimes : public CHeapObj {
+ enum {
+ DeadItems,
+ TotalItems
+ };
uint _max_threads;
uint _active_workers;
@@ -43,15 +47,20 @@
// processed by multiple threads are unused, as are entries for
// unexecuted phases.
double _phase_times_sec[WeakProcessorPhases::phase_count];
+ size_t _phase_dead_items[WeakProcessorPhases::phase_count];
+ size_t _phase_total_items[WeakProcessorPhases::phase_count];
- // Per-worker times, if multiple threads used and the phase was executed.
- WorkerDataArray* _worker_phase_times_sec[WeakProcessorPhases::oop_storage_phase_count];
+ // Per-worker times and linked items, if multiple threads used and the phase was executed.
+ WorkerDataArray* _worker_data[WeakProcessorPhases::oop_storage_phase_count];
+ WorkerDataArray* _worker_dead_items[WeakProcessorPhases::oop_storage_phase_count];
+ WorkerDataArray* _worker_total_items[WeakProcessorPhases::oop_storage_phase_count];
WorkerDataArray* worker_data(WeakProcessorPhase phase) const;
void log_st_phase(WeakProcessorPhase phase, uint indent) const;
void log_mt_phase_summary(WeakProcessorPhase phase, uint indent) const;
- void log_mt_phase_details(WeakProcessorPhase phase, uint indent) const;
+ template
+ void log_mt_phase_details(WorkerDataArray* data, uint indent) const;
public:
WeakProcessorPhaseTimes(uint max_threads);
@@ -67,7 +76,9 @@
void record_total_time_sec(double time_sec);
void record_phase_time_sec(WeakProcessorPhase phase, double time_sec);
+ void record_phase_items(WeakProcessorPhase phase, size_t num_dead, size_t num_total);
void record_worker_time_sec(uint worker_id, WeakProcessorPhase phase, double time_sec);
+ void record_worker_items(uint worker_id, WeakProcessorPhase phase, size_t num_dead, size_t num_total);
void reset();
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shared/weakProcessorPhases.cpp
--- a/src/hotspot/share/gc/shared/weakProcessorPhases.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shared/weakProcessorPhases.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -23,6 +23,7 @@
*/
#include "precompiled.hpp"
+#include "classfile/stringTable.hpp"
#include "classfile/systemDictionary.hpp"
#include "gc/shared/weakProcessorPhases.hpp"
#include "runtime/jniHandles.hpp"
@@ -78,6 +79,7 @@
JVMTI_ONLY(case jvmti: return "JVMTI weak processing";)
JFR_ONLY(case jfr: return "JFR weak processing";)
case jni: return "JNI weak processing";
+ case stringtable: return "StringTable weak processing";
case vm: return "VM weak processing";
default:
ShouldNotReachHere();
@@ -98,9 +100,14 @@
OopStorage* WeakProcessorPhases::oop_storage(Phase phase) {
switch (phase) {
case jni: return JNIHandles::weak_global_handles();
+ case stringtable: return StringTable::weak_storage();
case vm: return SystemDictionary::vm_weak_oop_storage();
default:
ShouldNotReachHere();
return NULL;
}
}
+
+bool WeakProcessorPhases::is_stringtable(Phase phase) {
+ return phase == stringtable;
+}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shared/weakProcessorPhases.hpp
--- a/src/hotspot/share/gc/shared/weakProcessorPhases.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shared/weakProcessorPhases.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -44,6 +44,7 @@
// OopStorage phases.
jni,
+ stringtable,
vm
};
@@ -65,6 +66,8 @@
static const char* description(Phase phase);
static Processor processor(Phase phase); // Precondition: is_serial(phase)
static OopStorage* oop_storage(Phase phase); // Precondition: is_oop_storage(phase)
+
+ static bool is_stringtable(Phase phase);
};
typedef WeakProcessorPhases::Phase WeakProcessorPhase;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp
--- a/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -777,11 +777,19 @@
if (adr->bottom_type()->is_ptr_to_narrowoop()) {
Node *newval_enc = kit->gvn().transform(new EncodePNode(new_val, new_val->bottom_type()->make_narrowoop()));
Node *oldval_enc = kit->gvn().transform(new EncodePNode(expected_val, expected_val->bottom_type()->make_narrowoop()));
- load_store = kit->gvn().transform(new ShenandoahCompareAndExchangeNNode(kit->control(), mem, adr, newval_enc, oldval_enc, adr_type, value_type->make_narrowoop(), mo));
+ if (ShenandoahCASBarrier) {
+ load_store = kit->gvn().transform(new ShenandoahCompareAndExchangeNNode(kit->control(), mem, adr, newval_enc, oldval_enc, adr_type, value_type->make_narrowoop(), mo));
+ } else {
+ load_store = kit->gvn().transform(new CompareAndExchangeNNode(kit->control(), mem, adr, newval_enc, oldval_enc, adr_type, value_type->make_narrowoop(), mo));
+ }
} else
#endif
{
- load_store = kit->gvn().transform(new ShenandoahCompareAndExchangePNode(kit->control(), mem, adr, new_val, expected_val, adr_type, value_type->is_oopptr(), mo));
+ if (ShenandoahCASBarrier) {
+ load_store = kit->gvn().transform(new ShenandoahCompareAndExchangePNode(kit->control(), mem, adr, new_val, expected_val, adr_type, value_type->is_oopptr(), mo));
+ } else {
+ load_store = kit->gvn().transform(new CompareAndExchangePNode(kit->control(), mem, adr, new_val, expected_val, adr_type, value_type->is_oopptr(), mo));
+ }
}
access.set_raw_access(load_store);
@@ -815,18 +823,34 @@
if (adr->bottom_type()->is_ptr_to_narrowoop()) {
Node *newval_enc = kit->gvn().transform(new EncodePNode(new_val, new_val->bottom_type()->make_narrowoop()));
Node *oldval_enc = kit->gvn().transform(new EncodePNode(expected_val, expected_val->bottom_type()->make_narrowoop()));
- if (is_weak_cas) {
- load_store = kit->gvn().transform(new ShenandoahWeakCompareAndSwapNNode(kit->control(), mem, adr, newval_enc, oldval_enc, mo));
+ if (ShenandoahCASBarrier) {
+ if (is_weak_cas) {
+ load_store = kit->gvn().transform(new ShenandoahWeakCompareAndSwapNNode(kit->control(), mem, adr, newval_enc, oldval_enc, mo));
+ } else {
+ load_store = kit->gvn().transform(new ShenandoahCompareAndSwapNNode(kit->control(), mem, adr, newval_enc, oldval_enc, mo));
+ }
} else {
- load_store = kit->gvn().transform(new ShenandoahCompareAndSwapNNode(kit->control(), mem, adr, newval_enc, oldval_enc, mo));
+ if (is_weak_cas) {
+ load_store = kit->gvn().transform(new WeakCompareAndSwapNNode(kit->control(), mem, adr, newval_enc, oldval_enc, mo));
+ } else {
+ load_store = kit->gvn().transform(new CompareAndSwapNNode(kit->control(), mem, adr, newval_enc, oldval_enc, mo));
+ }
}
} else
#endif
{
- if (is_weak_cas) {
- load_store = kit->gvn().transform(new ShenandoahWeakCompareAndSwapPNode(kit->control(), mem, adr, new_val, expected_val, mo));
+ if (ShenandoahCASBarrier) {
+ if (is_weak_cas) {
+ load_store = kit->gvn().transform(new ShenandoahWeakCompareAndSwapPNode(kit->control(), mem, adr, new_val, expected_val, mo));
+ } else {
+ load_store = kit->gvn().transform(new ShenandoahCompareAndSwapPNode(kit->control(), mem, adr, new_val, expected_val, mo));
+ }
} else {
- load_store = kit->gvn().transform(new ShenandoahCompareAndSwapPNode(kit->control(), mem, adr, new_val, expected_val, mo));
+ if (is_weak_cas) {
+ load_store = kit->gvn().transform(new WeakCompareAndSwapPNode(kit->control(), mem, adr, new_val, expected_val, mo));
+ } else {
+ load_store = kit->gvn().transform(new CompareAndSwapPNode(kit->control(), mem, adr, new_val, expected_val, mo));
+ }
}
}
access.set_raw_access(load_store);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp
--- a/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1024,6 +1024,9 @@
"sha512_implCompressMB",
{ { TypeFunc::Parms, ShenandoahLoad }, { TypeFunc::Parms+1, ShenandoahStore }, { -1, ShenandoahNone },
{ -1, ShenandoahNone}, { -1, ShenandoahNone}, { -1, ShenandoahNone} },
+ "encodeBlock",
+ { { TypeFunc::Parms, ShenandoahLoad }, { TypeFunc::Parms+3, ShenandoahStore }, { -1, ShenandoahNone },
+ { -1, ShenandoahNone}, { -1, ShenandoahNone}, { -1, ShenandoahNone} },
};
if (call->is_call_to_arraycopystub()) {
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1923,8 +1923,7 @@
ShenandoahPhaseTimings::full_gc_purge_par :
ShenandoahPhaseTimings::purge_par);
uint active = _workers->active_workers();
- StringDedupUnlinkOrOopsDoClosure dedup_cl(is_alive, NULL);
- ParallelCleaningTask unlink_task(is_alive, &dedup_cl, active, purged_class);
+ ParallelCleaningTask unlink_task(is_alive, active, purged_class, true);
_workers->run_task(&unlink_task);
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.cpp
--- a/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -78,7 +78,6 @@
WeakProcessor::oops_do(oops);
ObjectSynchronizer::oops_do(oops);
SystemDictionary::oops_do(oops);
- StringTable::oops_do(oops);
if (ShenandoahStringDedup::is_enabled()) {
ShenandoahStringDedup::oops_do_slow(oops);
@@ -209,13 +208,6 @@
ObjectSynchronizer::oops_do(strong_roots);
}
}
-
- // All threads execute the following. A specific chunk of buckets
- // from the StringTable are the individual tasks.
- if (weak_roots != NULL) {
- ShenandoahWorkerTimingsTracker timer(worker_times, ShenandoahPhaseTimings::StringTableRoots, worker_id);
- StringTable::possibly_parallel_oops_do(&_par_state_string, weak_roots);
- }
}
uint ShenandoahRootProcessor::n_workers() const {
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/z/c1/zBarrierSetC1.cpp
--- a/src/hotspot/share/gc/z/c1/zBarrierSetC1.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/z/c1/zBarrierSetC1.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -36,24 +36,17 @@
_ref_addr(access.resolved_addr()),
_ref(ref),
_tmp(LIR_OprFact::illegalOpr),
- _patch_info(access.patch_emit_info()),
_runtime_stub(runtime_stub) {
+ assert(_ref_addr->is_address(), "Must be an address");
+ assert(_ref->is_register(), "Must be a register");
+
// Allocate tmp register if needed
- if (!_ref_addr->is_register()) {
- assert(_ref_addr->is_address(), "Must be an address");
- if (_ref_addr->as_address_ptr()->index()->is_valid() ||
- _ref_addr->as_address_ptr()->disp() != 0) {
- // Has index or displacement, need tmp register to load address into
- _tmp = access.gen()->new_pointer_register();
- } else {
- // No index or displacement, address available in base register
- _ref_addr = _ref_addr->as_address_ptr()->base();
- }
+ if (_ref_addr->as_address_ptr()->index()->is_valid() ||
+ _ref_addr->as_address_ptr()->disp() != 0) {
+ // Has index or displacement, need tmp register to load address into
+ _tmp = access.gen()->new_pointer_register();
}
-
- assert(_ref->is_register(), "Must be a register");
- assert(_ref_addr->is_register() != _tmp->is_register(), "Only one should be a register");
}
DecoratorSet ZLoadBarrierStubC1::decorators() const {
@@ -72,28 +65,14 @@
return _tmp;
}
-LIR_PatchCode ZLoadBarrierStubC1::patch_code() const {
- return (_decorators & C1_NEEDS_PATCHING) != 0 ? lir_patch_normal : lir_patch_none;
-}
-
-CodeEmitInfo*& ZLoadBarrierStubC1::patch_info() {
- return _patch_info;
-}
-
address ZLoadBarrierStubC1::runtime_stub() const {
return _runtime_stub;
}
void ZLoadBarrierStubC1::visit(LIR_OpVisitState* visitor) {
- if (_patch_info != NULL) {
- visitor->do_slow_case(_patch_info);
- } else {
- visitor->do_slow_case();
- }
-
+ visitor->do_slow_case();
visitor->do_input(_ref_addr);
visitor->do_output(_ref);
-
if (_tmp->is_valid()) {
visitor->do_temp(_tmp);
}
@@ -174,6 +153,14 @@
__ branch_destination(stub->continuation());
}
+LIR_Opr ZBarrierSetC1::resolve_address(LIRAccess& access, bool resolve_in_register) {
+ // We must resolve in register when patching. This is to avoid
+ // having a patch area in the load barrier stub, since the call
+ // into the runtime to patch will not have the proper oop map.
+ const bool patch_before_barrier = barrier_needed(access) && (access.decorators() & C1_NEEDS_PATCHING) != 0;
+ return BarrierSetC1::resolve_address(access, resolve_in_register || patch_before_barrier);
+}
+
#undef __
void ZBarrierSetC1::load_at_resolved(LIRAccess& access, LIR_Opr result) {
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/z/c1/zBarrierSetC1.hpp
--- a/src/hotspot/share/gc/z/c1/zBarrierSetC1.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/z/c1/zBarrierSetC1.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -32,12 +32,11 @@
class ZLoadBarrierStubC1 : public CodeStub {
private:
- DecoratorSet _decorators;
- LIR_Opr _ref_addr;
- LIR_Opr _ref;
- LIR_Opr _tmp;
- CodeEmitInfo* _patch_info;
- address _runtime_stub;
+ DecoratorSet _decorators;
+ LIR_Opr _ref_addr;
+ LIR_Opr _ref;
+ LIR_Opr _tmp;
+ address _runtime_stub;
public:
ZLoadBarrierStubC1(LIRAccess& access, LIR_Opr ref, address runtime_stub);
@@ -46,8 +45,6 @@
LIR_Opr ref() const;
LIR_Opr ref_addr() const;
LIR_Opr tmp() const;
- LIR_PatchCode patch_code() const;
- CodeEmitInfo*& patch_info();
address runtime_stub() const;
virtual void emit_code(LIR_Assembler* ce);
@@ -67,6 +64,7 @@
void load_barrier(LIRAccess& access, LIR_Opr result) const;
protected:
+ virtual LIR_Opr resolve_address(LIRAccess& access, bool resolve_in_register);
virtual void load_at_resolved(LIRAccess& access, LIR_Opr result);
virtual LIR_Opr atomic_xchg_at_resolved(LIRAccess& access, LIRItem& value);
virtual LIR_Opr atomic_cmpxchg_at_resolved(LIRAccess& access, LIRItem& cmp_value, LIRItem& new_value);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp
--- a/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -37,8 +37,8 @@
#include "gc/z/zThreadLocalData.hpp"
#include "gc/z/zBarrierSetRuntime.hpp"
-ZBarrierSetC2State::ZBarrierSetC2State(Arena* comp_arena)
- : _load_barrier_nodes(new (comp_arena) GrowableArray(comp_arena, 8, 0, NULL)) {}
+ZBarrierSetC2State::ZBarrierSetC2State(Arena* comp_arena) :
+ _load_barrier_nodes(new (comp_arena) GrowableArray(comp_arena, 8, 0, NULL)) {}
int ZBarrierSetC2State::load_barrier_count() const {
return _load_barrier_nodes->length();
@@ -123,7 +123,7 @@
void ZBarrierSetC2::find_dominating_barriers(PhaseIterGVN& igvn) {
// Look for dominating barriers on the same address only once all
- // other loop opts are over: loop opts may cause a safepoint to be
+ // other loop opts are over. Loop opts may cause a safepoint to be
// inserted between a barrier and its dominating barrier.
Compile* C = Compile::current();
ZBarrierSetC2* bs = (ZBarrierSetC2*)BarrierSet::barrier_set()->barrier_set_c2();
@@ -1010,8 +1010,6 @@
assert(is_gc_barrier_node(result_phi), "sanity");
assert(step_over_gc_barrier(result_phi) == in_val, "sanity");
-
- return;
}
bool ZBarrierSetC2::expand_barriers(Compile* C, PhaseIterGVN& igvn) const {
@@ -1036,7 +1034,9 @@
}
expand_loadbarrier_node(¯o, n);
assert(s->load_barrier_count() < load_barrier_count, "must have deleted a node from load barrier list");
- if (C->failing()) return true;
+ if (C->failing()) {
+ return true;
+ }
}
while (s->load_barrier_count() > 0) {
int load_barrier_count = s->load_barrier_count();
@@ -1045,12 +1045,17 @@
assert(!n->can_be_eliminated(), "should have been processed already");
expand_loadbarrier_node(¯o, n);
assert(s->load_barrier_count() < load_barrier_count, "must have deleted a node from load barrier list");
- if (C->failing()) return true;
+ if (C->failing()) {
+ return true;
+ }
}
igvn.set_delay_transform(false);
igvn.optimize();
- if (C->failing()) return true;
+ if (C->failing()) {
+ return true;
+ }
}
+
return false;
}
@@ -1061,31 +1066,33 @@
Compile* C = Compile::current();
LoadBarrierNode* lb2 = lb->has_dominating_barrier(phase, false, last_round);
- if (lb2 != NULL) {
- if (lb->in(LoadBarrierNode::Oop) != lb2->in(LoadBarrierNode::Oop)) {
- assert(lb->in(LoadBarrierNode::Address) == lb2->in(LoadBarrierNode::Address), "");
- igvn.replace_input_of(lb, LoadBarrierNode::Similar, lb2->proj_out(LoadBarrierNode::Oop));
- C->set_major_progress();
- } else {
- // That transformation may cause the Similar edge on dominated load barriers to be invalid
- lb->fix_similar_in_uses(&igvn);
+ if (lb2 == NULL) {
+ return false;
+ }
+
+ if (lb->in(LoadBarrierNode::Oop) != lb2->in(LoadBarrierNode::Oop)) {
+ assert(lb->in(LoadBarrierNode::Address) == lb2->in(LoadBarrierNode::Address), "Invalid address");
+ igvn.replace_input_of(lb, LoadBarrierNode::Similar, lb2->proj_out(LoadBarrierNode::Oop));
+ C->set_major_progress();
+ return false;
+ }
- Node* val = lb->proj_out(LoadBarrierNode::Oop);
- assert(lb2->has_true_uses(), "");
- assert(lb2->in(LoadBarrierNode::Oop) == lb->in(LoadBarrierNode::Oop), "");
+ // That transformation may cause the Similar edge on dominated load barriers to be invalid
+ lb->fix_similar_in_uses(&igvn);
- phase->lazy_update(lb, lb->in(LoadBarrierNode::Control));
- phase->lazy_replace(lb->proj_out(LoadBarrierNode::Control), lb->in(LoadBarrierNode::Control));
- igvn.replace_node(val, lb2->proj_out(LoadBarrierNode::Oop));
+ Node* val = lb->proj_out(LoadBarrierNode::Oop);
+ assert(lb2->has_true_uses(), "Invalid uses");
+ assert(lb2->in(LoadBarrierNode::Oop) == lb->in(LoadBarrierNode::Oop), "Invalid oop");
+ phase->lazy_update(lb, lb->in(LoadBarrierNode::Control));
+ phase->lazy_replace(lb->proj_out(LoadBarrierNode::Control), lb->in(LoadBarrierNode::Control));
+ igvn.replace_node(val, lb2->proj_out(LoadBarrierNode::Oop));
- return true;
- }
- }
- return false;
+ return true;
}
static Node* find_dominating_memory(PhaseIdealLoop* phase, Node* mem, Node* dom, int i) {
assert(dom->is_Region() || i == -1, "");
+
Node* m = mem;
while(phase->is_dominator(dom, phase->has_ctrl(m) ? phase->get_ctrl(m) : m->in(0))) {
if (m->is_Mem()) {
@@ -1111,6 +1118,7 @@
ShouldNotReachHere();
}
}
+
return m;
}
@@ -1390,35 +1398,33 @@
return false;
}
-static void optimize_load_barrier(PhaseIdealLoop* phase, LoadBarrierNode* lb, bool last_round) {
- Compile* C = Compile::current();
+void ZBarrierSetC2::loop_optimize_gc_barrier(PhaseIdealLoop* phase, Node* node, bool last_round) {
+ if (!Compile::current()->directive()->ZOptimizeLoadBarriersOption) {
+ return;
+ }
- if (!C->directive()->ZOptimizeLoadBarriersOption) {
+ if (!node->is_LoadBarrier()) {
+ return;
+ }
+
+ if (!node->as_LoadBarrier()->has_true_uses()) {
return;
}
- if (lb->has_true_uses()) {
- if (replace_with_dominating_barrier(phase, lb, last_round)) {
- return;
- }
-
- if (split_barrier_thru_phi(phase, lb)) {
- return;
- }
+ if (replace_with_dominating_barrier(phase, node->as_LoadBarrier(), last_round)) {
+ return;
+ }
- if (move_out_of_loop(phase, lb)) {
- return;
- }
+ if (split_barrier_thru_phi(phase, node->as_LoadBarrier())) {
+ return;
+ }
- if (common_barriers(phase, lb)) {
- return;
- }
+ if (move_out_of_loop(phase, node->as_LoadBarrier())) {
+ return;
}
-}
-void ZBarrierSetC2::loop_optimize_gc_barrier(PhaseIdealLoop* phase, Node* node, bool last_round) {
- if (node->is_LoadBarrier()) {
- optimize_load_barrier(phase, node->as_LoadBarrier(), last_round);
+ if (common_barriers(phase, node->as_LoadBarrier())) {
+ return;
}
}
@@ -1453,26 +1459,23 @@
}
bool ZBarrierSetC2::final_graph_reshaping(Compile* compile, Node* n, uint opcode) const {
- bool handled;
- switch (opcode) {
- case Op_LoadBarrierSlowReg:
- case Op_LoadBarrierWeakSlowReg:
+ if (opcode != Op_LoadBarrierSlowReg &&
+ opcode != Op_LoadBarrierWeakSlowReg) {
+ return false;
+ }
+
#ifdef ASSERT
- if (VerifyOptoOopOffsets) {
- MemNode* mem = n->as_Mem();
- // Check to see if address types have grounded out somehow.
- const TypeInstPtr* tp = mem->in(MemNode::Address)->bottom_type()->isa_instptr();
- ciInstanceKlass* k = tp->klass()->as_instance_klass();
- bool oop_offset_is_sane = k->contains_field_offset(tp->offset());
- assert(!tp || oop_offset_is_sane, "");
- }
+ if (VerifyOptoOopOffsets) {
+ MemNode* mem = n->as_Mem();
+ // Check to see if address types have grounded out somehow.
+ const TypeInstPtr* tp = mem->in(MemNode::Address)->bottom_type()->isa_instptr();
+ ciInstanceKlass* k = tp->klass()->as_instance_klass();
+ bool oop_offset_is_sane = k->contains_field_offset(tp->offset());
+ assert(!tp || oop_offset_is_sane, "");
+ }
#endif
- handled = true;
- break;
- default:
- handled = false;
- }
- return handled;
+
+ return true;
}
bool ZBarrierSetC2::matcher_find_shared_visit(Matcher* matcher, Matcher::MStack& mstack, Node* n, uint opcode, bool& mem_op, int& mem_addr_idx) const {
@@ -1483,6 +1486,7 @@
mem_addr_idx = TypeFunc::Parms + 1;
return true;
}
+
return false;
}
@@ -1606,37 +1610,35 @@
case Op_LoadBarrierWeakSlowReg:
conn_graph->add_objload_to_connection_graph(n, delayed_worklist);
return true;
+
case Op_Proj:
- if (n->as_Proj()->_con == LoadBarrierNode::Oop && n->in(0)->is_LoadBarrier()) {
- conn_graph->add_local_var_and_edge(n, PointsToNode::NoEscape, n->in(0)->in(LoadBarrierNode::Oop),
- delayed_worklist);
- return true;
+ if (n->as_Proj()->_con != LoadBarrierNode::Oop || !n->in(0)->is_LoadBarrier()) {
+ return false;
}
- default:
- break;
+ conn_graph->add_local_var_and_edge(n, PointsToNode::NoEscape, n->in(0)->in(LoadBarrierNode::Oop), delayed_worklist);
+ return true;
}
+
return false;
}
bool ZBarrierSetC2::escape_add_final_edges(ConnectionGraph* conn_graph, PhaseGVN* gvn, Node* n, uint opcode) const {
switch (opcode) {
case Op_LoadBarrierSlowReg:
- case Op_LoadBarrierWeakSlowReg: {
- const Type *t = gvn->type(n);
- if (t->make_ptr() != NULL) {
- Node *adr = n->in(MemNode::Address);
- conn_graph->add_local_var_and_edge(n, PointsToNode::NoEscape, adr, NULL);
- return true;
+ case Op_LoadBarrierWeakSlowReg:
+ if (gvn->type(n)->make_ptr() == NULL) {
+ return false;
}
- }
- case Op_Proj: {
- if (n->as_Proj()->_con == LoadBarrierNode::Oop && n->in(0)->is_LoadBarrier()) {
- conn_graph->add_local_var_and_edge(n, PointsToNode::NoEscape, n->in(0)->in(LoadBarrierNode::Oop), NULL);
- return true;
+ conn_graph->add_local_var_and_edge(n, PointsToNode::NoEscape, n->in(MemNode::Address), NULL);
+ return true;
+
+ case Op_Proj:
+ if (n->as_Proj()->_con != LoadBarrierNode::Oop || !n->in(0)->is_LoadBarrier()) {
+ return false;
}
- }
- default:
- break;
+ conn_graph->add_local_var_and_edge(n, PointsToNode::NoEscape, n->in(0)->in(LoadBarrierNode::Oop), NULL);
+ return true;
}
+
return false;
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp
--- a/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -31,7 +31,7 @@
class LoadBarrierNode : public MultiNode {
private:
- bool _weak;
+ bool _weak; // On strong or weak oop reference
bool _writeback; // Controls if the barrier writes the healed oop back to memory
// A swap on a memory location must never write back the healed oop
bool _oop_reload_allowed; // Controls if the barrier are allowed to reload the oop from memory
@@ -104,8 +104,8 @@
const TypePtr *at,
const TypePtr* t,
MemOrd mo,
- ControlDependency control_dependency = DependsOnlyOnTest)
- : LoadPNode(c, mem, adr, at, t, mo, control_dependency) {
+ ControlDependency control_dependency = DependsOnlyOnTest) :
+ LoadPNode(c, mem, adr, at, t, mo, control_dependency) {
init_class_id(Class_LoadBarrierSlowReg);
}
@@ -128,8 +128,8 @@
const TypePtr *at,
const TypePtr* t,
MemOrd mo,
- ControlDependency control_dependency = DependsOnlyOnTest)
- : LoadPNode(c, mem, adr, at, t, mo, control_dependency) {
+ ControlDependency control_dependency = DependsOnlyOnTest) :
+ LoadPNode(c, mem, adr, at, t, mo, control_dependency) {
init_class_id(Class_LoadBarrierWeakSlowReg);
}
@@ -221,7 +221,6 @@
virtual bool escape_add_to_con_graph(ConnectionGraph* conn_graph, PhaseGVN* gvn, Unique_Node_List* delayed_worklist, Node* n, uint opcode) const;
virtual bool escape_add_final_edges(ConnectionGraph* conn_graph, PhaseGVN* gvn, Node* n, uint opcode) const;
-
};
#endif // SHARE_GC_Z_C2_ZBARRIERSETC2_HPP
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/z/zDriver.cpp
--- a/src/hotspot/share/gc/z/zDriver.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/z/zDriver.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -24,7 +24,6 @@
#include "precompiled.hpp"
#include "gc/shared/gcId.hpp"
#include "gc/shared/gcLocker.hpp"
-#include "gc/shared/gcVMOperations.hpp"
#include "gc/shared/isGCActiveMark.hpp"
#include "gc/z/zCollectedHeap.hpp"
#include "gc/z/zDriver.hpp"
@@ -45,7 +44,6 @@
static const ZStatPhaseConcurrent ZPhaseConcurrentProcessNonStrongReferences("Concurrent Process Non-Strong References");
static const ZStatPhaseConcurrent ZPhaseConcurrentResetRelocationSet("Concurrent Reset Relocation Set");
static const ZStatPhaseConcurrent ZPhaseConcurrentDestroyDetachedPages("Concurrent Destroy Detached Pages");
-static const ZStatPhasePause ZPhasePauseVerify("Pause Verify");
static const ZStatPhaseConcurrent ZPhaseConcurrentSelectRelocationSet("Concurrent Select Relocation Set");
static const ZStatPhaseConcurrent ZPhaseConcurrentPrepareRelocationSet("Concurrent Prepare Relocation Set");
static const ZStatPhasePause ZPhasePauseRelocateStart("Pause Relocate Start");
@@ -53,41 +51,26 @@
static const ZStatCriticalPhase ZCriticalPhaseGCLockerStall("GC Locker Stall", false /* verbose */);
static const ZStatSampler ZSamplerJavaThreads("System", "Java Threads", ZStatUnitThreads);
-class ZOperationClosure : public StackObj {
+class VM_ZOperation : public VM_Operation {
+private:
+ const uint _gc_id;
+ bool _gc_locked;
+ bool _success;
+
public:
- virtual const char* name() const = 0;
+ VM_ZOperation() :
+ _gc_id(GCId::current()),
+ _gc_locked(false),
+ _success(false) {}
virtual bool needs_inactive_gc_locker() const {
- // An inactive GC locker is needed in operations where we change the good
- // mask or move objects. Changing the good mask will invalidate all oops,
+ // An inactive GC locker is needed in operations where we change the bad
+ // mask or move objects. Changing the bad mask will invalidate all oops,
// which makes it conceptually the same thing as moving all objects.
return false;
}
virtual bool do_operation() = 0;
-};
-
-class VM_ZOperation : public VM_Operation {
-private:
- ZOperationClosure* _cl;
- uint _gc_id;
- bool _gc_locked;
- bool _success;
-
-public:
- VM_ZOperation(ZOperationClosure* cl) :
- _cl(cl),
- _gc_id(GCId::current()),
- _gc_locked(false),
- _success(false) {}
-
- virtual VMOp_Type type() const {
- return VMOp_ZOperation;
- }
-
- virtual const char* name() const {
- return _cl->name();
- }
virtual bool doit_prologue() {
Heap_lock->lock();
@@ -95,31 +78,28 @@
}
virtual void doit() {
- assert(SafepointSynchronize::is_at_safepoint(), "Should be at safepoint");
-
- ZStatSample(ZSamplerJavaThreads, Threads::number_of_threads());
-
- // JVMTI support
- SvcGCMarker sgcm(SvcGCMarker::CONCURRENT);
+ // Abort if GC locker state is incompatible
+ if (needs_inactive_gc_locker() && GCLocker::check_active_before_gc()) {
+ _gc_locked = true;
+ return;
+ }
- // Setup GC id
- GCIdMark gcid(_gc_id);
+ // Setup GC id and active marker
+ GCIdMark gc_id_mark(_gc_id);
+ IsGCActiveMark gc_active_mark;
- if (_cl->needs_inactive_gc_locker() && GCLocker::check_active_before_gc()) {
- // GC locker is active, bail out
- _gc_locked = true;
- } else {
- // Execute operation
- IsGCActiveMark mark;
- _success = _cl->do_operation();
- }
+ // Execute operation
+ _success = do_operation();
+
+ // Update statistics
+ ZStatSample(ZSamplerJavaThreads, Threads::number_of_threads());
}
virtual void doit_epilogue() {
Heap_lock->unlock();
}
- bool gc_locked() {
+ bool gc_locked() const {
return _gc_locked;
}
@@ -169,10 +149,10 @@
return false;
}
-class ZMarkStartClosure : public ZOperationClosure {
+class VM_ZMarkStart : public VM_ZOperation {
public:
- virtual const char* name() const {
- return "ZMarkStart";
+ virtual VMOp_Type type() const {
+ return VMOp_ZMarkStart;
}
virtual bool needs_inactive_gc_locker() const {
@@ -198,37 +178,23 @@
}
};
-class ZMarkEndClosure : public ZOperationClosure {
+class VM_ZMarkEnd : public VM_ZOperation {
public:
- virtual const char* name() const {
- return "ZMarkEnd";
+ virtual VMOp_Type type() const {
+ return VMOp_ZMarkEnd;
}
virtual bool do_operation() {
ZStatTimer timer(ZPhasePauseMarkEnd);
ZServiceabilityMarkEndTracer tracer;
-
return ZHeap::heap()->mark_end();
}
};
-class ZVerifyClosure : public ZOperationClosure {
+class VM_ZRelocateStart : public VM_ZOperation {
public:
- virtual const char* name() const {
- return "ZVerify";
- }
-
- virtual bool do_operation() {
- ZStatTimer timer(ZPhasePauseVerify);
- Universe::verify();
- return true;
- }
-};
-
-class ZRelocateStartClosure : public ZOperationClosure {
-public:
- virtual const char* name() const {
- return "ZRelocateStart";
+ virtual VMOp_Type type() const {
+ return VMOp_ZRelocateStart;
}
virtual bool needs_inactive_gc_locker() const {
@@ -238,7 +204,6 @@
virtual bool do_operation() {
ZStatTimer timer(ZPhasePauseRelocateStart);
ZServiceabilityRelocateStartTracer tracer;
-
ZHeap::heap()->relocate_start();
return true;
}
@@ -251,24 +216,6 @@
create_and_start();
}
-bool ZDriver::vm_operation(ZOperationClosure* cl) {
- for (;;) {
- VM_ZOperation op(cl);
- VMThread::execute(&op);
- if (op.gc_locked()) {
- // Wait for GC to become unlocked and restart the VM operation
- ZStatTimer timer(ZCriticalPhaseGCLockerStall);
- _gc_locker_port.wait();
- continue;
- }
-
- // Notify VM operation completed
- _gc_locker_port.ack();
-
- return op.success();
- }
-}
-
void ZDriver::collect(GCCause::Cause cause) {
switch (cause) {
case GCCause::_wb_young_gc:
@@ -306,19 +253,96 @@
}
}
-GCCause::Cause ZDriver::start_gc_cycle() {
- // Wait for GC request
- return _gc_cycle_port.receive();
+template
+bool ZDriver::pause() {
+ for (;;) {
+ T op;
+ VMThread::execute(&op);
+ if (op.gc_locked()) {
+ // Wait for GC to become unlocked and restart the VM operation
+ ZStatTimer timer(ZCriticalPhaseGCLockerStall);
+ _gc_locker_port.wait();
+ continue;
+ }
+
+ // Notify VM operation completed
+ _gc_locker_port.ack();
+
+ return op.success();
+ }
+}
+
+void ZDriver::pause_mark_start() {
+ pause();
+}
+
+void ZDriver::concurrent_mark() {
+ ZStatTimer timer(ZPhaseConcurrentMark);
+ ZHeap::heap()->mark(true /* initial */);
+}
+
+bool ZDriver::pause_mark_end() {
+ return pause();
+}
+
+void ZDriver::concurrent_mark_continue() {
+ ZStatTimer timer(ZPhaseConcurrentMarkContinue);
+ ZHeap::heap()->mark(false /* initial */);
+}
+
+void ZDriver::concurrent_process_non_strong_references() {
+ ZStatTimer timer(ZPhaseConcurrentProcessNonStrongReferences);
+ ZHeap::heap()->process_non_strong_references();
}
-class ZDriverCycleScope : public StackObj {
+void ZDriver::concurrent_reset_relocation_set() {
+ ZStatTimer timer(ZPhaseConcurrentResetRelocationSet);
+ ZHeap::heap()->reset_relocation_set();
+}
+
+void ZDriver::concurrent_destroy_detached_pages() {
+ ZStatTimer timer(ZPhaseConcurrentDestroyDetachedPages);
+ ZHeap::heap()->destroy_detached_pages();
+}
+
+void ZDriver::pause_verify() {
+ if (VerifyBeforeGC || VerifyDuringGC || VerifyAfterGC) {
+ VM_Verify op;
+ VMThread::execute(&op);
+ }
+}
+
+void ZDriver::concurrent_select_relocation_set() {
+ ZStatTimer timer(ZPhaseConcurrentSelectRelocationSet);
+ ZHeap::heap()->select_relocation_set();
+}
+
+void ZDriver::concurrent_prepare_relocation_set() {
+ ZStatTimer timer(ZPhaseConcurrentPrepareRelocationSet);
+ ZHeap::heap()->prepare_relocation_set();
+}
+
+void ZDriver::pause_relocate_start() {
+ pause();
+}
+
+void ZDriver::concurrent_relocate() {
+ ZStatTimer timer(ZPhaseConcurrentRelocated);
+ ZHeap::heap()->relocate();
+}
+
+void ZDriver::check_out_of_memory() {
+ ZHeap::heap()->check_out_of_memory();
+}
+
+class ZDriverGCScope : public StackObj {
private:
GCIdMark _gc_id;
GCCauseSetter _gc_cause_setter;
ZStatTimer _timer;
public:
- ZDriverCycleScope(GCCause::Cause cause) :
+ ZDriverGCScope(GCCause::Cause cause) :
_gc_id(),
_gc_cause_setter(ZCollectedHeap::heap(), cause),
_timer(ZPhaseCycle) {
@@ -326,7 +350,7 @@
ZStatCycle::at_start();
}
- ~ZDriverCycleScope() {
+ ~ZDriverGCScope() {
// Calculate boost factor
const double boost_factor = (double)ZHeap::heap()->nconcurrent_worker_threads() /
(double)ZHeap::heap()->nconcurrent_no_boost_worker_threads();
@@ -339,96 +363,63 @@
}
};
-void ZDriver::run_gc_cycle(GCCause::Cause cause) {
- ZDriverCycleScope scope(cause);
+void ZDriver::gc(GCCause::Cause cause) {
+ ZDriverGCScope scope(cause);
// Phase 1: Pause Mark Start
- {
- ZMarkStartClosure cl;
- vm_operation(&cl);
- }
+ pause_mark_start();
// Phase 2: Concurrent Mark
- {
- ZStatTimer timer(ZPhaseConcurrentMark);
- ZHeap::heap()->mark(true /* initial */);
- }
+ concurrent_mark();
// Phase 3: Pause Mark End
- {
- ZMarkEndClosure cl;
- while (!vm_operation(&cl)) {
- // Phase 3.5: Concurrent Mark Continue
- ZStatTimer timer(ZPhaseConcurrentMarkContinue);
- ZHeap::heap()->mark(false /* initial */);
- }
+ while (!pause_mark_end()) {
+ // Phase 3.5: Concurrent Mark Continue
+ concurrent_mark_continue();
}
// Phase 4: Concurrent Process Non-Strong References
- {
- ZStatTimer timer(ZPhaseConcurrentProcessNonStrongReferences);
- ZHeap::heap()->process_non_strong_references();
- }
+ concurrent_process_non_strong_references();
// Phase 5: Concurrent Reset Relocation Set
- {
- ZStatTimer timer(ZPhaseConcurrentResetRelocationSet);
- ZHeap::heap()->reset_relocation_set();
- }
+ concurrent_reset_relocation_set();
// Phase 6: Concurrent Destroy Detached Pages
- {
- ZStatTimer timer(ZPhaseConcurrentDestroyDetachedPages);
- ZHeap::heap()->destroy_detached_pages();
- }
+ concurrent_destroy_detached_pages();
// Phase 7: Pause Verify
- if (VerifyBeforeGC || VerifyDuringGC || VerifyAfterGC) {
- ZVerifyClosure cl;
- vm_operation(&cl);
- }
+ pause_verify();
// Phase 8: Concurrent Select Relocation Set
- {
- ZStatTimer timer(ZPhaseConcurrentSelectRelocationSet);
- ZHeap::heap()->select_relocation_set();
- }
+ concurrent_select_relocation_set();
// Phase 9: Concurrent Prepare Relocation Set
- {
- ZStatTimer timer(ZPhaseConcurrentPrepareRelocationSet);
- ZHeap::heap()->prepare_relocation_set();
- }
+ concurrent_prepare_relocation_set();
// Phase 10: Pause Relocate Start
- {
- ZRelocateStartClosure cl;
- vm_operation(&cl);
- }
+ pause_relocate_start();
// Phase 11: Concurrent Relocate
- {
- ZStatTimer timer(ZPhaseConcurrentRelocated);
- ZHeap::heap()->relocate();
- }
-}
-
-void ZDriver::end_gc_cycle() {
- // Notify GC cycle completed
- _gc_cycle_port.ack();
-
- // Check for out of memory condition
- ZHeap::heap()->check_out_of_memory();
+ concurrent_relocate();
}
void ZDriver::run_service() {
// Main loop
while (!should_terminate()) {
- const GCCause::Cause cause = start_gc_cycle();
- if (cause != GCCause::_no_gc) {
- run_gc_cycle(cause);
- end_gc_cycle();
+ // Wait for GC request
+ const GCCause::Cause cause = _gc_cycle_port.receive();
+ if (cause == GCCause::_no_gc) {
+ continue;
}
+
+ // Run GC
+ gc(cause);
+
+ // Notify GC completed
+ _gc_cycle_port.ack();
+
+ // Check for out of memory condition
+ check_out_of_memory();
}
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/z/zDriver.hpp
--- a/src/hotspot/share/gc/z/zDriver.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/z/zDriver.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -28,18 +28,31 @@
#include "gc/shared/gcCause.hpp"
#include "gc/z/zMessagePort.hpp"
-class ZOperationClosure;
+class VM_ZOperation;
class ZDriver : public ConcurrentGCThread {
private:
ZMessagePort _gc_cycle_port;
ZRendezvousPort _gc_locker_port;
- bool vm_operation(ZOperationClosure* cl);
+ template bool pause();
- GCCause::Cause start_gc_cycle();
- void run_gc_cycle(GCCause::Cause cause);
- void end_gc_cycle();
+ void pause_mark_start();
+ void concurrent_mark();
+ bool pause_mark_end();
+ void concurrent_mark_continue();
+ void concurrent_process_non_strong_references();
+ void concurrent_reset_relocation_set();
+ void concurrent_destroy_detached_pages();
+ void pause_verify();
+ void concurrent_select_relocation_set();
+ void concurrent_prepare_relocation_set();
+ void pause_relocate_start();
+ void concurrent_relocate();
+
+ void check_out_of_memory();
+
+ void gc(GCCause::Cause cause);
protected:
virtual void run_service();
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/z/zNMethodTable.cpp
--- a/src/hotspot/share/gc/z/zNMethodTable.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/z/zNMethodTable.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -264,21 +264,17 @@
}
}
-bool ZNMethodTable::unregister_entry(ZNMethodTableEntry* table, size_t size, nmethod* nm) {
+void ZNMethodTable::unregister_entry(ZNMethodTableEntry* table, size_t size, nmethod* nm) {
if (size == 0) {
// Table is empty
- return false;
+ return;
}
size_t index = first_index(nm, size);
for (;;) {
const ZNMethodTableEntry table_entry = table[index];
-
- if (!table_entry.registered() && !table_entry.unregistered()) {
- // Entry not found
- return false;
- }
+ assert(table_entry.registered() || table_entry.unregistered(), "Entry not found");
if (table_entry.registered() && table_entry.method() == nm) {
// Remove entry
@@ -287,7 +283,7 @@
// Destroy GC data
ZNMethodData::destroy(gc_data(nm));
set_gc_data(nm, NULL);
- return true;
+ return;
}
index = next_index(index, size);
@@ -451,8 +447,6 @@
return;
}
- assert(CodeCache_lock->owned_by_self(), "Lock must be held");
-
while (_iter_table != NULL) {
MutexUnlockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
os::naked_short_sleep(1);
@@ -460,6 +454,7 @@
}
void ZNMethodTable::unregister_nmethod(nmethod* nm) {
+ assert(CodeCache_lock->owned_by_self(), "Lock must be held");
ResourceMark rm;
sweeper_wait_for_iteration();
@@ -467,14 +462,9 @@
log_unregister(nm);
// Remove entry
- if (unregister_entry(_table, _size, nm)) {
- // Entry was unregistered. When unregister_entry() instead returns
- // false the nmethod was not in the table (because it didn't have
- // any oops) so we do not want to decrease the number of registered
- // entries in that case.
- _nregistered--;
- _nunregistered++;
- }
+ unregister_entry(_table, _size, nm);
+ _nunregistered++;
+ _nregistered--;
}
void ZNMethodTable::disarm_nmethod(nmethod* nm) {
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/z/zNMethodTable.hpp
--- a/src/hotspot/share/gc/z/zNMethodTable.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/z/zNMethodTable.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -57,7 +57,7 @@
static void sweeper_wait_for_iteration();
static bool register_entry(ZNMethodTableEntry* table, size_t size, ZNMethodTableEntry entry);
- static bool unregister_entry(ZNMethodTableEntry* table, size_t size, nmethod* nm);
+ static void unregister_entry(ZNMethodTableEntry* table, size_t size, nmethod* nm);
static void rebuild(size_t new_size);
static void rebuild_if_needed();
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/z/zReferenceProcessor.cpp
--- a/src/hotspot/share/gc/z/zReferenceProcessor.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/z/zReferenceProcessor.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -39,45 +39,11 @@
static const ZStatSubPhase ZSubPhaseConcurrentReferencesProcess("Concurrent References Process");
static const ZStatSubPhase ZSubPhaseConcurrentReferencesEnqueue("Concurrent References Enqueue");
-ZReferenceProcessor::ZReferenceProcessor(ZWorkers* workers) :
- _workers(workers),
- _soft_reference_policy(NULL),
- _encountered_count(),
- _discovered_count(),
- _enqueued_count(),
- _discovered_list(NULL),
- _pending_list(NULL),
- _pending_list_tail(_pending_list.addr()) {}
-
-void ZReferenceProcessor::set_soft_reference_policy(bool clear) {
- static AlwaysClearPolicy always_clear_policy;
- static LRUMaxHeapPolicy lru_max_heap_policy;
-
- if (clear) {
- log_info(gc, ref)("Clearing All Soft References");
- _soft_reference_policy = &always_clear_policy;
- } else {
- _soft_reference_policy = &lru_max_heap_policy;
- }
-
- _soft_reference_policy->setup();
+static ReferenceType reference_type(oop reference) {
+ return InstanceKlass::cast(reference->klass())->reference_type();
}
-void ZReferenceProcessor::update_soft_reference_clock() const {
- const jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC;
- java_lang_ref_SoftReference::set_clock(now);
-}
-
-bool ZReferenceProcessor::is_inactive_final_reference(oop obj, ReferenceType type) const {
- // A non-null next field for a FinalReference means the reference is inactive.
- return (type == REF_FINAL) && (java_lang_ref_Reference::next(obj) != NULL);
-}
-
-ReferenceType ZReferenceProcessor::reference_type(oop obj) const {
- return InstanceKlass::cast(obj->klass())->reference_type();
-}
-
-const char* ZReferenceProcessor::reference_type_name(ReferenceType type) const {
+static const char* reference_type_name(ReferenceType type) {
switch (type) {
case REF_SOFT:
return "Soft";
@@ -97,53 +63,134 @@
}
}
-volatile oop* ZReferenceProcessor::reference_referent_addr(oop obj) const {
- return (volatile oop*)java_lang_ref_Reference::referent_addr_raw(obj);
+static volatile oop* reference_referent_addr(oop reference) {
+ return (volatile oop*)java_lang_ref_Reference::referent_addr_raw(reference);
+}
+
+static oop reference_referent(oop reference) {
+ return *reference_referent_addr(reference);
+}
+
+static void reference_set_referent(oop reference, oop referent) {
+ java_lang_ref_Reference::set_referent_raw(reference, referent);
+}
+
+static oop* reference_discovered_addr(oop reference) {
+ return (oop*)java_lang_ref_Reference::discovered_addr_raw(reference);
+}
+
+static oop reference_discovered(oop reference) {
+ return *reference_discovered_addr(reference);
+}
+
+static void reference_set_discovered(oop reference, oop discovered) {
+ java_lang_ref_Reference::set_discovered_raw(reference, discovered);
+}
+
+static oop* reference_next_addr(oop reference) {
+ return (oop*)java_lang_ref_Reference::next_addr_raw(reference);
+}
+
+static oop reference_next(oop reference) {
+ return *reference_next_addr(reference);
+}
+
+static void reference_set_next(oop reference, oop next) {
+ java_lang_ref_Reference::set_next_raw(reference, next);
+}
+
+static void soft_reference_update_clock() {
+ const jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC;
+ java_lang_ref_SoftReference::set_clock(now);
}
-oop ZReferenceProcessor::reference_referent(oop obj) const {
- return *reference_referent_addr(obj);
+ZReferenceProcessor::ZReferenceProcessor(ZWorkers* workers) :
+ _workers(workers),
+ _soft_reference_policy(NULL),
+ _encountered_count(),
+ _discovered_count(),
+ _enqueued_count(),
+ _discovered_list(NULL),
+ _pending_list(NULL),
+ _pending_list_tail(_pending_list.addr()) {}
+
+void ZReferenceProcessor::set_soft_reference_policy(bool clear) {
+ static AlwaysClearPolicy always_clear_policy;
+ static LRUMaxHeapPolicy lru_max_heap_policy;
+
+ if (clear) {
+ log_info(gc, ref)("Clearing All SoftReferences");
+ _soft_reference_policy = &always_clear_policy;
+ } else {
+ _soft_reference_policy = &lru_max_heap_policy;
+ }
+
+ _soft_reference_policy->setup();
}
-bool ZReferenceProcessor::is_referent_strongly_alive_or_null(oop obj, ReferenceType type) const {
- // Check if the referent is strongly alive or null, in which case we don't want to
- // discover the reference. It can only be null if the application called
- // Reference.enqueue() or Reference.clear().
- //
+bool ZReferenceProcessor::is_inactive(oop reference, oop referent, ReferenceType type) const {
+ if (type == REF_FINAL) {
+ // A FinalReference is inactive if its next field is non-null. An application can't
+ // call enqueue() or clear() on a FinalReference.
+ return reference_next(reference) != NULL;
+ } else {
+ // A non-FinalReference is inactive if the referent is null. The referent can only
+ // be null if the application called Reference.enqueue() or Reference.clear().
+ return referent == NULL;
+ }
+}
+
+bool ZReferenceProcessor::is_strongly_live(oop referent) const {
+ return ZHeap::heap()->is_object_strongly_live(ZOop::to_address(referent));
+}
+
+bool ZReferenceProcessor::is_softly_live(oop reference, ReferenceType type) const {
+ if (type != REF_SOFT) {
+ // Not a SoftReference
+ return false;
+ }
+
+ // Ask SoftReference policy
+ const jlong clock = java_lang_ref_SoftReference::clock();
+ assert(clock != 0, "Clock not initialized");
+ assert(_soft_reference_policy != NULL, "Policy not initialized");
+ return !_soft_reference_policy->should_clear_reference(reference, clock);
+}
+
+bool ZReferenceProcessor::should_discover(oop reference, ReferenceType type) const {
+ volatile oop* const referent_addr = reference_referent_addr(reference);
+ const oop referent = ZBarrier::weak_load_barrier_on_oop_field(referent_addr);
+
+ if (is_inactive(reference, referent, type)) {
+ return false;
+ }
+
+ if (is_strongly_live(referent)) {
+ return false;
+ }
+
+ if (is_softly_live(reference, type)) {
+ return false;
+ }
+
// PhantomReferences with finalizable marked referents should technically not have
// to be discovered. However, InstanceRefKlass::oop_oop_iterate_ref_processing()
// does not know about the finalizable mark concept, and will therefore mark
// referents in non-discovered PhantomReferences as strongly live. To prevent
// this, we always discover PhantomReferences with finalizable marked referents.
// They will automatically be dropped during the reference processing phase.
-
- volatile oop* const p = reference_referent_addr(obj);
- const oop o = ZBarrier::weak_load_barrier_on_oop_field(p);
- return o == NULL || ZHeap::heap()->is_object_strongly_live(ZOop::to_address(o));
+ return true;
}
-bool ZReferenceProcessor::is_referent_softly_alive(oop obj, ReferenceType type) const {
- if (type != REF_SOFT) {
- // Not a soft reference
- return false;
- }
-
- // Ask soft reference policy
- const jlong clock = java_lang_ref_SoftReference::clock();
- assert(clock != 0, "Clock not initialized");
- assert(_soft_reference_policy != NULL, "Policy not initialized");
- return !_soft_reference_policy->should_clear_reference(obj, clock);
-}
-
-bool ZReferenceProcessor::should_drop_reference(oop obj, ReferenceType type) const {
+bool ZReferenceProcessor::should_drop(oop reference, ReferenceType type) const {
// This check is racing with a call to Reference.clear() from the application.
// If the application clears the reference after this check it will still end
// up on the pending list, and there's nothing we can do about that without
// changing the Reference.clear() API. This check is also racing with a call
// to Reference.enqueue() from the application, which is unproblematic, since
// the application wants the reference to be enqueued anyway.
- const oop o = reference_referent(obj);
- if (o == NULL) {
+ const oop referent = reference_referent(reference);
+ if (referent == NULL) {
// Reference has been cleared, by a call to Reference.enqueue()
// or Reference.clear() from the application, which means we
// should drop the reference.
@@ -153,22 +200,14 @@
// Check if the referent is still alive, in which case we should
// drop the reference.
if (type == REF_PHANTOM) {
- return ZBarrier::is_alive_barrier_on_phantom_oop(o);
+ return ZBarrier::is_alive_barrier_on_phantom_oop(referent);
} else {
- return ZBarrier::is_alive_barrier_on_weak_oop(o);
+ return ZBarrier::is_alive_barrier_on_weak_oop(referent);
}
}
-bool ZReferenceProcessor::should_mark_referent(ReferenceType type) const {
- // Referents of final references (and its reachable sub graph) are
- // always marked finalizable during discovery. This avoids the problem
- // of later having to mark those objects if the referent is still final
- // reachable during processing.
- return type == REF_FINAL;
-}
-
-void ZReferenceProcessor::keep_referent_alive(oop obj, ReferenceType type) const {
- volatile oop* const p = reference_referent_addr(obj);
+void ZReferenceProcessor::keep_alive(oop reference, ReferenceType type) const {
+ volatile oop* const p = reference_referent_addr(reference);
if (type == REF_PHANTOM) {
ZBarrier::keep_alive_barrier_on_phantom_oop_field(p);
} else {
@@ -176,82 +215,86 @@
}
}
-bool ZReferenceProcessor::discover_reference(oop obj, ReferenceType type) {
+void ZReferenceProcessor::make_inactive(oop reference, ReferenceType type) const {
+ if (type == REF_FINAL) {
+ // Don't clear referent. It is needed by the Finalizer thread to make the call
+ // to finalize(). A FinalReference is instead made inactive by self-looping the
+ // next field. An application can't call FinalReference.enqueue(), so there is
+ // no race to worry about when setting the next field.
+ assert(reference_next(reference) == NULL, "Already inactive");
+ reference_set_next(reference, reference);
+ } else {
+ // Clear referent
+ reference_set_referent(reference, NULL);
+ }
+}
+
+void ZReferenceProcessor::discover(oop reference, ReferenceType type) {
+ log_trace(gc, ref)("Discovered Reference: " PTR_FORMAT " (%s)", p2i(reference), reference_type_name(type));
+
+ // Update statistics
+ _discovered_count.get()[type]++;
+
+ if (type == REF_FINAL) {
+ // Mark referent (and its reachable subgraph) finalizable. This avoids
+ // the problem of later having to mark those objects if the referent is
+ // still final reachable during processing.
+ volatile oop* const referent_addr = reference_referent_addr(reference);
+ ZBarrier::mark_barrier_on_oop_field(referent_addr, true /* finalizable */);
+ }
+
+ // Add reference to discovered list
+ assert(reference_discovered(reference) == NULL, "Already discovered");
+ oop* const list = _discovered_list.addr();
+ reference_set_discovered(reference, *list);
+ *list = reference;
+}
+
+bool ZReferenceProcessor::discover_reference(oop reference, ReferenceType type) {
if (!RegisterReferences) {
// Reference processing disabled
return false;
}
- log_trace(gc, ref)("Encountered Reference: " PTR_FORMAT " (%s)", p2i(obj), reference_type_name(type));
+ log_trace(gc, ref)("Encountered Reference: " PTR_FORMAT " (%s)", p2i(reference), reference_type_name(type));
// Update statistics
_encountered_count.get()[type]++;
- if (is_referent_strongly_alive_or_null(obj, type) ||
- is_inactive_final_reference(obj, type) ||
- is_referent_softly_alive(obj, type)) {
+ if (!should_discover(reference, type)) {
// Not discovered
return false;
}
- discover(obj, type);
+ discover(reference, type);
// Discovered
return true;
}
-void ZReferenceProcessor::discover(oop obj, ReferenceType type) {
- log_trace(gc, ref)("Discovered Reference: " PTR_FORMAT " (%s)", p2i(obj), reference_type_name(type));
-
- // Update statistics
- _discovered_count.get()[type]++;
-
- // Mark referent finalizable
- if (should_mark_referent(type)) {
- oop* const referent_addr = (oop*)java_lang_ref_Reference::referent_addr_raw(obj);
- ZBarrier::mark_barrier_on_oop_field(referent_addr, true /* finalizable */);
- }
-
- // Add reference to discovered list
- assert(java_lang_ref_Reference::discovered(obj) == NULL, "Already discovered");
- oop* const list = _discovered_list.addr();
- java_lang_ref_Reference::set_discovered(obj, *list);
- *list = obj;
-}
-
-oop ZReferenceProcessor::drop(oop obj, ReferenceType type) {
- log_trace(gc, ref)("Dropped Reference: " PTR_FORMAT " (%s)", p2i(obj), reference_type_name(type));
+oop ZReferenceProcessor::drop(oop reference, ReferenceType type) {
+ log_trace(gc, ref)("Dropped Reference: " PTR_FORMAT " (%s)", p2i(reference), reference_type_name(type));
// Keep referent alive
- keep_referent_alive(obj, type);
+ keep_alive(reference, type);
// Unlink and return next in list
- const oop next = java_lang_ref_Reference::discovered(obj);
- java_lang_ref_Reference::set_discovered(obj, NULL);
+ const oop next = reference_discovered(reference);
+ reference_set_discovered(reference, NULL);
return next;
}
-oop* ZReferenceProcessor::keep(oop obj, ReferenceType type) {
- log_trace(gc, ref)("Enqueued Reference: " PTR_FORMAT " (%s)", p2i(obj), reference_type_name(type));
+oop* ZReferenceProcessor::keep(oop reference, ReferenceType type) {
+ log_trace(gc, ref)("Enqueued Reference: " PTR_FORMAT " (%s)", p2i(reference), reference_type_name(type));
// Update statistics
_enqueued_count.get()[type]++;
- if (type != REF_FINAL) {
- // Clear referent
- java_lang_ref_Reference::set_referent(obj, NULL);
- } else {
- // For a FinalReference, don't clear the referent, because it is
- // needed for the finalize call. Instead, make the reference
- // inactive by self-looping the 'next' field. FinalReference
- // doesn't allow Reference.enqueue, so there's no race to worry
- // about when setting 'next'.
- assert(java_lang_ref_Reference::next(obj) == NULL, "enqueued FinalReference");
- java_lang_ref_Reference::set_next_raw(obj, obj);
- }
+ // Make reference inactive
+ make_inactive(reference, type);
// Return next in list
- return (oop*)java_lang_ref_Reference::discovered_addr_raw(obj);
+ return reference_discovered_addr(reference);
}
void ZReferenceProcessor::work() {
@@ -260,13 +303,13 @@
oop* p = list;
while (*p != NULL) {
- const oop obj = *p;
- const ReferenceType type = reference_type(obj);
+ const oop reference = *p;
+ const ReferenceType type = reference_type(reference);
- if (should_drop_reference(obj, type)) {
- *p = drop(obj, type);
+ if (should_drop(reference, type)) {
+ *p = drop(reference, type);
} else {
- p = keep(obj, type);
+ p = keep(reference, type);
}
}
@@ -390,8 +433,8 @@
ZReferenceProcessorTask task(this);
_workers->run_concurrent(&task);
- // Update soft reference clock
- update_soft_reference_clock();
+ // Update SoftReference clock
+ soft_reference_update_clock();
// Collect, log and trace statistics
collect_statistics();
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/z/zReferenceProcessor.hpp
--- a/src/hotspot/share/gc/z/zReferenceProcessor.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/z/zReferenceProcessor.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -46,22 +46,19 @@
ZContended _pending_list;
oop* _pending_list_tail;
- void update_soft_reference_clock() const;
+ bool is_inactive(oop reference, oop referent, ReferenceType type) const;
+ bool is_strongly_live(oop referent) const;
+ bool is_softly_live(oop reference, ReferenceType type) const;
- ReferenceType reference_type(oop obj) const;
- const char* reference_type_name(ReferenceType type) const;
- volatile oop* reference_referent_addr(oop obj) const;
- oop reference_referent(oop obj) const;
- bool is_inactive_final_reference(oop obj, ReferenceType type) const;
- bool is_referent_strongly_alive_or_null(oop obj, ReferenceType type) const;
- bool is_referent_softly_alive(oop obj, ReferenceType type) const;
- bool should_drop_reference(oop obj, ReferenceType type) const;
- bool should_mark_referent(ReferenceType type) const;
- void keep_referent_alive(oop obj, ReferenceType type) const;
+ bool should_discover(oop reference, ReferenceType type) const;
+ bool should_drop(oop reference, ReferenceType type) const;
+ void keep_alive(oop reference, ReferenceType type) const;
+ void make_inactive(oop reference, ReferenceType type) const;
- void discover(oop obj, ReferenceType type);
- oop drop(oop obj, ReferenceType type);
- oop* keep(oop obj, ReferenceType type);
+ void discover(oop reference, ReferenceType type);
+
+ oop drop(oop reference, ReferenceType type);
+ oop* keep(oop reference, ReferenceType type);
bool is_empty() const;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/gc/z/zServiceability.hpp
--- a/src/hotspot/share/gc/z/zServiceability.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/gc/z/zServiceability.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -25,6 +25,7 @@
#define SHARE_GC_Z_ZSERVICEABILITY_HPP
#include "gc/shared/collectorCounters.hpp"
+#include "gc/shared/gcVMOperations.hpp"
#include "memory/allocation.hpp"
#include "services/memoryManager.hpp"
#include "services/memoryPool.hpp"
@@ -88,12 +89,14 @@
template
class ZServiceabilityTracer : public StackObj {
private:
+ SvcGCMarker _svc_gc_marker;
ZServiceabilityMemoryUsageTracker _memory_usage_tracker;
ZServiceabilityManagerStatsTracer _manager_stats_tracer;
ZServiceabilityCountersTracer _counters_tracer;
public:
ZServiceabilityTracer() :
+ _svc_gc_marker(SvcGCMarker::CONCURRENT),
_memory_usage_tracker(),
_manager_stats_tracer(IsGCStart, IsGCEnd),
_counters_tracer() {}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/interpreter/bytecodeStream.hpp
--- a/src/hotspot/share/interpreter/bytecodeStream.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/interpreter/bytecodeStream.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -211,7 +211,6 @@
return _code;
}
- bool is_active_breakpoint() const { return Bytecodes::is_active_breakpoint_at(bcp()); }
Bytecodes::Code code() const { return _code; }
// Unsigned indices, widening
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/interpreter/bytecodeTracer.cpp
--- a/src/hotspot/share/interpreter/bytecodeTracer.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/interpreter/bytecodeTracer.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -225,7 +225,6 @@
int ilimit = constants->length();
Bytecodes::Code code = raw_code();
- ConstantPoolCache* cache = NULL;
if (Bytecodes::uses_cp_cache(code)) {
bool okay = true;
switch (code) {
@@ -256,8 +255,7 @@
bool BytecodePrinter::check_cp_cache_index(int i, int& cp_index, outputStream* st) {
ConstantPool* constants = method()->constants();
- int ilimit = constants->length(), climit = 0;
- Bytecodes::Code code = raw_code();
+ int climit = 0;
ConstantPoolCache* cache = constants->cache();
// If rewriter hasn't run, the index is the cp_index
@@ -307,7 +305,6 @@
bool BytecodePrinter::check_invokedynamic_index(int i, int& cp_index, outputStream* st) {
- ConstantPool* constants = method()->constants();
assert(ConstantPool::is_invokedynamic_index(i), "not secondary index?");
i = ConstantPool::decode_invokedynamic_index(i) + ConstantPool::CPCACHE_INDEX_TAG;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/interpreter/bytecodes.hpp
--- a/src/hotspot/share/interpreter/bytecodes.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/interpreter/bytecodes.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -380,7 +380,6 @@
static Code code_or_bp_at(address bcp) { return (Code)cast(*bcp); }
static Code code_at(Method* method, int bci);
- static bool is_active_breakpoint_at(address bcp) { return (Code)*bcp == _breakpoint; }
// find a bytecode, behind a breakpoint if necessary:
static Code non_breakpoint_code_at(const Method* method, address bcp);
@@ -405,18 +404,12 @@
// if 'end' is provided, it indicates the end of the code buffer which
// should not be read past when parsing.
static int special_length_at(Bytecodes::Code code, address bcp, address end = NULL);
- static int special_length_at(Method* method, address bcp, address end = NULL) { return special_length_at(code_at(method, bcp), bcp, end); }
static int raw_special_length_at(address bcp, address end = NULL);
static int length_for_code_at(Bytecodes::Code code, address bcp) { int l = length_for(code); return l > 0 ? l : special_length_at(code, bcp); }
static int length_at (Method* method, address bcp) { return length_for_code_at(code_at(method, bcp), bcp); }
static int java_length_at (Method* method, address bcp) { return length_for_code_at(java_code_at(method, bcp), bcp); }
static bool is_java_code (Code code) { return 0 <= code && code < number_of_java_codes; }
- static bool is_aload (Code code) { return (code == _aload || code == _aload_0 || code == _aload_1
- || code == _aload_2 || code == _aload_3); }
- static bool is_astore (Code code) { return (code == _astore || code == _astore_0 || code == _astore_1
- || code == _astore_2 || code == _astore_3); }
-
static bool is_store_into_local(Code code){ return (_istore <= code && code <= _astore_3); }
static bool is_const (Code code) { return (_aconst_null <= code && code <= _ldc2_w); }
static bool is_zero_const (Code code) { return (code == _aconst_null || code == _iconst_0
@@ -433,7 +426,6 @@
assert(code == (u_char)code, "must be a byte");
return _flags[code + (is_wide ? (1<> number_of_noncount_bits; }
- int get_InvocationLimit() const { return InterpreterInvocationLimit >> number_of_noncount_bits; }
- int get_BackwardBranchLimit() const { return InterpreterBackwardBranchLimit >> number_of_noncount_bits; }
- int get_ProfileLimit() const { return InterpreterProfileLimit >> number_of_noncount_bits; }
-
#ifdef CC_INTERP
// Test counter using scaled limits like the asm interpreter would do rather than doing
// the shifts to normalize the counter.
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/interpreter/linkResolver.cpp
--- a/src/hotspot/share/interpreter/linkResolver.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/interpreter/linkResolver.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -710,15 +710,16 @@
stringStream ss;
const char* failed_type_name = failed_type_symbol->as_klass_external_name();
- ss.print("loader constraint violation: when resolving field"
- " \"%s\" of type %s, the class loader %s of the current class, "
- "%s, and the class loader %s for the field's defining "
- "type, %s, have different Class objects for type %s (%s; %s)",
+ ss.print("loader constraint violation: when resolving field \"%s\" of type %s, "
+ "the class loader %s of the current class, %s, "
+ "and the class loader %s for the field's defining %s, %s, "
+ "have different Class objects for type %s (%s; %s)",
field->as_C_string(),
failed_type_name,
current_klass->class_loader_data()->loader_name_and_id(),
current_klass->external_name(),
sel_klass->class_loader_data()->loader_name_and_id(),
+ sel_klass->external_kind(),
sel_klass->external_name(),
failed_type_name,
current_klass->class_in_module_of_loader(false, true),
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/jvmci/jvmciEnv.cpp
--- a/src/hotspot/share/jvmci/jvmciEnv.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/jvmci/jvmciEnv.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2019, 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
@@ -63,9 +63,30 @@
{
// Get Jvmti capabilities under lock to get consistent values.
MutexLocker mu(JvmtiThreadState_lock);
- _jvmti_can_hotswap_or_post_breakpoint = JvmtiExport::can_hotswap_or_post_breakpoint();
- _jvmti_can_access_local_variables = JvmtiExport::can_access_local_variables();
- _jvmti_can_post_on_exceptions = JvmtiExport::can_post_on_exceptions();
+ _jvmti_can_hotswap_or_post_breakpoint = JvmtiExport::can_hotswap_or_post_breakpoint() ? 1 : 0;
+ _jvmti_can_access_local_variables = JvmtiExport::can_access_local_variables() ? 1 : 0;
+ _jvmti_can_post_on_exceptions = JvmtiExport::can_post_on_exceptions() ? 1 : 0;
+ _jvmti_can_pop_frame = JvmtiExport::can_pop_frame() ? 1 : 0;
+}
+
+bool JVMCIEnv::jvmti_state_changed() const {
+ if (!jvmti_can_access_local_variables() &&
+ JvmtiExport::can_access_local_variables()) {
+ return true;
+ }
+ if (!jvmti_can_hotswap_or_post_breakpoint() &&
+ JvmtiExport::can_hotswap_or_post_breakpoint()) {
+ return true;
+ }
+ if (!jvmti_can_post_on_exceptions() &&
+ JvmtiExport::can_post_on_exceptions()) {
+ return true;
+ }
+ if (!jvmti_can_pop_frame() &&
+ JvmtiExport::can_pop_frame()) {
+ return true;
+ }
+ return false;
}
// ------------------------------------------------------------------
@@ -413,11 +434,9 @@
JVMCIEnv::CodeInstallResult JVMCIEnv::validate_compile_task_dependencies(Dependencies* dependencies, Handle compiled_code,
JVMCIEnv* env, char** failure_detail) {
// If JVMTI capabilities were enabled during compile, the compilation is invalidated.
- if (env != NULL) {
- if (!env->_jvmti_can_hotswap_or_post_breakpoint && JvmtiExport::can_hotswap_or_post_breakpoint()) {
- *failure_detail = (char*) "Hotswapping or breakpointing was enabled during compilation";
- return JVMCIEnv::dependencies_failed;
- }
+ if (env != NULL && env->jvmti_state_changed()) {
+ *failure_detail = (char*) "Jvmti state change during compilation invalidated dependencies";
+ return JVMCIEnv::dependencies_failed;
}
// Dependencies must be checked when the system dictionary changes
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/jvmci/jvmciEnv.hpp
--- a/src/hotspot/share/jvmci/jvmciEnv.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/jvmci/jvmciEnv.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -105,10 +105,13 @@
// Specifies if _failure_reason is on the C heap.
bool _failure_reason_on_C_heap;
- // Cache JVMTI state
- bool _jvmti_can_hotswap_or_post_breakpoint;
- bool _jvmti_can_access_local_variables;
- bool _jvmti_can_post_on_exceptions;
+ // Cache JVMTI state. Defined as bytes so that reading them from Java
+ // via Unsafe is well defined (the C++ type for bool is implementation
+ // defined and may not be the same as a Java boolean).
+ jbyte _jvmti_can_hotswap_or_post_breakpoint;
+ jbyte _jvmti_can_access_local_variables;
+ jbyte _jvmti_can_post_on_exceptions;
+ jbyte _jvmti_can_pop_frame;
// Implementation methods for loading and constant pool access.
static Klass* get_klass_by_name_impl(Klass* accessing_klass,
@@ -147,6 +150,12 @@
public:
CompileTask* task() { return _task; }
+ bool jvmti_state_changed() const;
+ bool jvmti_can_hotswap_or_post_breakpoint() const { return _jvmti_can_hotswap_or_post_breakpoint != 0; }
+ bool jvmti_can_access_local_variables() const { return _jvmti_can_access_local_variables != 0; }
+ bool jvmti_can_post_on_exceptions() const { return _jvmti_can_post_on_exceptions != 0; }
+ bool jvmti_can_pop_frame() const { return _jvmti_can_pop_frame != 0; }
+
const char* failure_reason() { return _failure_reason; }
bool failure_reason_on_C_heap() { return _failure_reason_on_C_heap; }
bool retryable() { return _retryable; }
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/jvmci/vmStructs_jvmci.cpp
--- a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -182,13 +182,17 @@
nonstatic_field(JavaThread, _pending_failed_speculation, long) \
nonstatic_field(JavaThread, _pending_transfer_to_interpreter, bool) \
nonstatic_field(JavaThread, _jvmci_counters, jlong*) \
+ nonstatic_field(JavaThread, _should_post_on_exceptions_flag, int) \
nonstatic_field(JavaThread, _reserved_stack_activation, address) \
\
static_field(java_lang_Class, _klass_offset, int) \
static_field(java_lang_Class, _array_klass_offset, int) \
\
nonstatic_field(JVMCIEnv, _task, CompileTask*) \
- nonstatic_field(JVMCIEnv, _jvmti_can_hotswap_or_post_breakpoint, bool) \
+ nonstatic_field(JVMCIEnv, _jvmti_can_hotswap_or_post_breakpoint, jbyte) \
+ nonstatic_field(JVMCIEnv, _jvmti_can_access_local_variables, jbyte) \
+ nonstatic_field(JVMCIEnv, _jvmti_can_post_on_exceptions, jbyte) \
+ nonstatic_field(JVMCIEnv, _jvmti_can_pop_frame, jbyte) \
\
nonstatic_field(InvocationCounter, _counter, unsigned int) \
\
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/libadt/set.cpp
--- a/src/hotspot/share/libadt/set.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/libadt/set.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -35,22 +35,8 @@
//-------------------------Virtual Functions-----------------------------------
// These functions MUST be implemented by the inheriting class.
-class SparseSet;
-/* Removed for MCC BUG
- Set::operator const SparseSet*() const { assert(0); return NULL; } */
-const SparseSet *Set::asSparseSet() const { assert(0); return NULL; }
class VectorSet;
-/* Removed for MCC BUG
- Set::operator const VectorSet*() const { assert(0); return NULL; } */
const VectorSet *Set::asVectorSet() const { assert(0); return NULL; }
-class ListSet;
-/* Removed for MCC BUG
- Set::operator const ListSet*() const { assert(0); return NULL; } */
-const ListSet *Set::asListSet() const { assert(0); return NULL; }
-class CoSet;
-/* Removed for MCC BUG
- Set::operator const CoSet*() const { assert(0); return NULL; } */
-const CoSet *Set::asCoSet() const { assert(0); return NULL; }
//------------------------------setstr-----------------------------------------
// Create a string with a printable representation of a set.
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/libadt/set.hpp
--- a/src/hotspot/share/libadt/set.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/libadt/set.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -164,9 +164,6 @@
virtual int operator <=(const Set &s) const=0;
int operator >=(const Set &s) const { return s <= *this; }
- // Return any member of the Set. Undefined if the Set is empty.
- virtual uint getelem(void) const=0;
-
// Clear all the elements in the Set
virtual void Clear(void)=0;
@@ -188,15 +185,7 @@
virtual int parse(const char *s);
// Convert a generic Set to a specific Set
- /* Removed for MCC BUG
- virtual operator const SparseSet* (void) const;
- virtual operator const VectorSet* (void) const;
- virtual operator const ListSet * (void) const;
- virtual operator const CoSet * (void) const; */
- virtual const SparseSet *asSparseSet(void) const;
virtual const VectorSet *asVectorSet(void) const;
- virtual const ListSet *asListSet (void) const;
- virtual const CoSet *asCoSet (void) const;
// Hash the set. Sets of different types but identical elements will NOT
// hash the same. Same set type, same elements WILL hash the same.
@@ -204,16 +193,11 @@
protected:
friend class SetI;
- friend class CoSet;
virtual class SetI_ *iterate(uint&) const=0;
// Need storeage for the set
Arena *_set_arena;
};
-typedef Set&((*Set_Constructor)(Arena *arena));
-extern Set &ListSet_Construct(Arena *arena);
-extern Set &VectorSet_Construct(Arena *arena);
-extern Set &SparseSet_Construct(Arena *arena);
//------------------------------Iteration--------------------------------------
// Loop thru all elements of the set, setting "elem" to the element numbers
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/libadt/vectset.cpp
--- a/src/hotspot/share/libadt/vectset.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/libadt/vectset.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -60,12 +60,6 @@
data[1] = 0;
}
-//------------------------------Construct--------------------------------------
-Set &VectorSet_Construct(Arena *arena)
-{
- return *(new VectorSet(arena));
-}
-
//------------------------------operator=--------------------------------------
Set &VectorSet::operator = (const Set &set)
{
@@ -293,20 +287,6 @@
return ((data[word] & mask))!=0; // Return the sense of the bit
}
-//------------------------------getelem----------------------------------------
-// Get any element from the set.
-uint VectorSet::getelem(void) const
-{
- uint i; // Exit value of loop
- for( i=0; i>=1 );
- return (i<<5)+j;
-}
-
//------------------------------Clear------------------------------------------
// Clear a set
void VectorSet::Clear(void)
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/libadt/vectset.hpp
--- a/src/hotspot/share/libadt/vectset.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/libadt/vectset.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -95,7 +95,6 @@
int disjoint (const Set &s) const; // True if sets are disjoint
int operator [](uint elem) const; // Test for membership
- uint getelem(void) const; // Return a random element
void Clear(void); // Clear a set
uint Size(void) const; // Number of elements in the Set.
void Sort(void); // Sort before iterating
@@ -110,7 +109,6 @@
// Expose internals for speed-critical fast iterators
uint word_size() const { return size; }
- uint32_t* EXPOSE() const { return data; }
// Fast inlined "test and set". Replaces the idiom:
// if( visited[idx] ) return;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/logging/logPrefix.hpp
--- a/src/hotspot/share/logging/logPrefix.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/logging/logPrefix.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -79,7 +79,6 @@
LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, ref, start)) \
LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, reloc)) \
LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, start)) \
- LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, stringtable)) \
LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, symboltable)) \
LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, sweep)) \
LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, task)) \
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/memory/binaryTreeDictionary.hpp
--- a/src/hotspot/share/memory/binaryTreeDictionary.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/memory/binaryTreeDictionary.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -120,7 +120,6 @@
// node to point to the new node.
TreeList* remove_chunk_replace_if_needed(TreeChunk* tc);
// See FreeList.
- void return_chunk_at_head(TreeChunk* tc);
void return_chunk_at_tail(TreeChunk* tc);
};
@@ -236,7 +235,6 @@
size_t num_free_blocks() const;
size_t tree_height() const;
size_t tree_height_helper(TreeList* tl) const;
- size_t total_nodes_in_tree(TreeList* tl) const;
size_t total_nodes_helper(TreeList* tl) const;
public:
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/memory/binaryTreeDictionary.inline.hpp
--- a/src/hotspot/share/memory/binaryTreeDictionary.inline.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/memory/binaryTreeDictionary.inline.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -245,35 +245,6 @@
assert(tail() == NULL || tail()->next() == NULL, "list invariant");
}
-// Add this chunk at the head of the list. "At the head of the list"
-// is defined to be after the chunk pointer to by head(). This is
-// because the TreeList is embedded in the first TreeChunk in the
-// list. See the definition of TreeChunk.
-template
-void TreeList::return_chunk_at_head(TreeChunk* chunk) {
- assert(chunk->list() == this, "list should be set for chunk");
- assert(head() != NULL, "The tree list is embedded in the first chunk");
- assert(chunk != NULL, "returning NULL chunk");
- // This is expensive for metaspace
- assert(!FLSVerifyDictionary || !this->verify_chunk_in_free_list(chunk), "Double entry");
- assert(head() == NULL || head()->prev() == NULL, "list invariant");
- assert(tail() == NULL || tail()->next() == NULL, "list invariant");
-
- Chunk_t* fc = head()->next();
- if (fc != NULL) {
- chunk->link_after(fc);
- } else {
- assert(tail() == NULL, "List is inconsistent");
- this->link_tail(chunk);
- }
- head()->link_after(chunk);
- assert(!head() || size() == head()->size(), "Wrong sized chunk in list");
- FreeList_t::increment_count();
- debug_only(this->increment_returned_bytes_by(chunk->size()*sizeof(HeapWord));)
- assert(head() == NULL || head()->prev() == NULL, "list invariant");
- assert(tail() == NULL || tail()->next() == NULL, "list invariant");
-}
-
template
void TreeChunk::assert_is_mangled() const {
assert((ZapUnusedHeapArea &&
@@ -799,11 +770,6 @@
total_nodes_helper(tl->right());
}
-template
-size_t BinaryTreeDictionary::total_nodes_in_tree(TreeList* tl) const {
- return total_nodes_helper(root());
-}
-
// Searches the tree for a chunk that ends at the
// specified address.
template
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/memory/heapShared.hpp
--- a/src/hotspot/share/memory/heapShared.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/memory/heapShared.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -191,9 +191,6 @@
static void verify_subgraph_from(oop orig_obj) PRODUCT_RETURN;
static KlassSubGraphInfo* get_subgraph_info(Klass *k);
- static int num_of_subgraph_infos();
-
- static void build_archived_subgraph_info_records(int num_records);
static void init_subgraph_entry_fields(ArchivableStaticFieldInfo fields[],
int num, Thread* THREAD);
@@ -321,10 +318,6 @@
inline static bool is_archived_object(oop p) NOT_CDS_JAVA_HEAP_RETURN_(false);
- static void archive_java_heap_objects() NOT_CDS_JAVA_HEAP_RETURN;
-
- static char* read_archived_subgraph_infos(char* buffer) NOT_CDS_JAVA_HEAP_RETURN_(buffer);
- static void write_archived_subgraph_infos() NOT_CDS_JAVA_HEAP_RETURN;
static void initialize_from_archived_subgraph(Klass* k) NOT_CDS_JAVA_HEAP_RETURN;
// NarrowOops stored in the CDS archive may use a different encoding scheme
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/memory/metaspace.cpp
--- a/src/hotspot/share/memory/metaspace.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/memory/metaspace.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, 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
@@ -873,19 +873,6 @@
return vsn;
}
-bool MetaspaceUtils::is_in_committed(const void* p) {
-#if INCLUDE_CDS
- if (UseSharedSpaces) {
- for (int idx = MetaspaceShared::ro; idx <= MetaspaceShared::mc; idx++) {
- if (FileMapInfo::current_info()->is_in_shared_region(p, idx)) {
- return true;
- }
- }
- }
-#endif
- return find_enclosing_virtual_space(p) != NULL;
-}
-
bool MetaspaceUtils::is_range_in_committed(const void* from, const void* to) {
#if INCLUDE_CDS
if (UseSharedSpaces) {
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/memory/metaspace.hpp
--- a/src/hotspot/share/memory/metaspace.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/memory/metaspace.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -333,7 +333,6 @@
// Utils to check if a pointer or range is part of a committed metaspace region
// without acquiring any locks.
static metaspace::VirtualSpaceNode* find_enclosing_virtual_space(const void* p);
- static bool is_in_committed(const void* p);
static bool is_range_in_committed(const void* from, const void* to);
public:
@@ -387,9 +386,6 @@
}
static size_t min_chunk_size_words();
- static size_t min_chunk_size_bytes() {
- return min_chunk_size_words() * BytesPerWord;
- }
// Flags for print_report().
enum ReportFlag {
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/memory/metaspaceShared.cpp
--- a/src/hotspot/share/memory/metaspaceShared.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/memory/metaspaceShared.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -218,10 +218,6 @@
return _ro_region.allocate(num_bytes);
}
-char* MetaspaceShared::read_only_space_top() {
- return _ro_region.top();
-}
-
void MetaspaceShared::initialize_runtime_shared_and_meta_spaces() {
assert(UseSharedSpaces, "Must be called when UseSharedSpaces is enabled");
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/memory/metaspaceShared.hpp
--- a/src/hotspot/share/memory/metaspaceShared.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/memory/metaspaceShared.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -168,14 +168,11 @@
static bool try_link_class(InstanceKlass* ik, TRAPS);
static void link_and_cleanup_shared_classes(TRAPS);
- static void check_shared_class_loader_type(InstanceKlass* ik);
// Allocate a block of memory from the "mc", "ro", or "rw" regions.
static char* misc_code_space_alloc(size_t num_bytes);
static char* read_only_space_alloc(size_t num_bytes);
- static char* read_only_space_top();
-
template
static Array* new_ro_array(int length) {
#if INCLUDE_CDS
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/memory/universe.cpp
--- a/src/hotspot/share/memory/universe.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/memory/universe.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -1286,14 +1286,6 @@
#endif // PRODUCT
-void Universe::compute_verify_oop_data() {
- verify_oop_mask();
- verify_oop_bits();
- verify_mark_mask();
- verify_mark_bits();
-}
-
-
void LatestMethodCache::init(Klass* k, Method* m) {
if (!UseSharedSpaces) {
_klass = k;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/memory/universe.hpp
--- a/src/hotspot/share/memory/universe.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/memory/universe.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -258,7 +258,6 @@
static uintptr_t _verify_oop_bits;
static void calculate_verify_data(HeapWord* low_boundary, HeapWord* high_boundary) PRODUCT_RETURN;
- static void compute_verify_oop_data();
public:
// Known classes in the VM
@@ -392,8 +391,6 @@
};
static NARROW_OOP_MODE narrow_oop_mode();
static const char* narrow_oop_mode_to_string(NARROW_OOP_MODE mode);
- static char* preferred_heap_base(size_t heap_size, size_t alignment, NARROW_OOP_MODE mode);
- static char* preferred_metaspace_base(size_t heap_size, NARROW_OOP_MODE mode);
static address narrow_oop_base() { return _narrow_oop._base; }
// Test whether bits of addr and possible offsets into the heap overlap.
static bool is_disjoint_heap_base_address(address addr) {
@@ -416,10 +413,8 @@
// For UseCompressedClassPointers
static address narrow_klass_base() { return _narrow_klass._base; }
- static bool is_narrow_klass_base(void* addr) { return (narrow_klass_base() == (address)addr); }
static uint64_t narrow_klass_range() { return _narrow_klass_range; }
static int narrow_klass_shift() { return _narrow_klass._shift; }
- static bool narrow_klass_use_implicit_null_checks() { return _narrow_klass._use_implicit_null_checks; }
static address* narrow_ptrs_base_addr() { return &_narrow_ptrs_base; }
static void set_narrow_ptrs_base(address a) { _narrow_ptrs_base = a; }
@@ -441,7 +436,6 @@
static ReservedSpace reserve_heap(size_t heap_size, size_t alignment);
// Historic gc information
- static size_t get_heap_capacity_at_last_gc() { return _heap_capacity_at_last_gc; }
static size_t get_heap_free_at_last_gc() { return _heap_capacity_at_last_gc - _heap_used_at_last_gc; }
static size_t get_heap_used_at_last_gc() { return _heap_used_at_last_gc; }
static void update_heap_info_at_gc();
@@ -517,25 +511,4 @@
static int base_vtable_size() { return _base_vtable_size; }
};
-class DeferredObjAllocEvent : public CHeapObj {
- private:
- oop _oop;
- size_t _bytesize;
- jint _arena_id;
-
- public:
- DeferredObjAllocEvent(const oop o, const size_t s, const jint id) {
- _oop = o;
- _bytesize = s;
- _arena_id = id;
- }
-
- ~DeferredObjAllocEvent() {
- }
-
- jint arena_id() { return _arena_id; }
- size_t bytesize() { return _bytesize; }
- oop get_oop() { return _oop; }
-};
-
#endif // SHARE_MEMORY_UNIVERSE_HPP
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/memory/virtualspace.cpp
--- a/src/hotspot/share/memory/virtualspace.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/memory/virtualspace.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -266,11 +266,6 @@
}
-size_t ReservedSpace::allocation_align_size_down(size_t size) {
- return align_down(size, os::vm_allocation_granularity());
-}
-
-
void ReservedSpace::release() {
if (is_reserved()) {
char *real_base = _base - _noaccess_prefix;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/memory/virtualspace.hpp
--- a/src/hotspot/share/memory/virtualspace.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/memory/virtualspace.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -88,7 +88,6 @@
static size_t page_align_size_up(size_t size);
static size_t page_align_size_down(size_t size);
static size_t allocation_align_size_up(size_t size);
- static size_t allocation_align_size_down(size_t size);
bool contains(const void* p) const {
return (base() <= ((char*)p)) && (((char*)p) < (base() + size()));
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/oops/compiledICHolder.hpp
--- a/src/hotspot/share/oops/compiledICHolder.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/oops/compiledICHolder.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -65,9 +65,6 @@
Klass* holder_klass() const { return _holder_klass; }
Metadata* holder_metadata() const { return _holder_metadata; }
- void set_holder_metadata(Metadata* m) { _holder_metadata = m; }
- void set_holder_klass(Klass* k) { _holder_klass = k; }
-
static int holder_metadata_offset() { return offset_of(CompiledICHolder, _holder_metadata); }
static int holder_klass_offset() { return offset_of(CompiledICHolder, _holder_klass); }
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/oops/method.cpp
--- a/src/hotspot/share/oops/method.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/oops/method.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -1604,12 +1604,12 @@
// This is only done during class loading, so it is OK to assume method_idnum matches the methods() array
// default_methods also uses this without the ordering for fast find_method
-void Method::sort_methods(Array* methods, bool idempotent, bool set_idnums) {
+void Method::sort_methods(Array* methods, bool set_idnums) {
int length = methods->length();
if (length > 1) {
{
NoSafepointVerifier nsv;
- QuickSort::sort(methods->data(), length, method_comparator, idempotent);
+ QuickSort::sort(methods->data(), length, method_comparator, /*idempotent=*/false);
}
// Reset method ordering
if (set_idnums) {
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/oops/method.hpp
--- a/src/hotspot/share/oops/method.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/oops/method.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -969,7 +969,7 @@
#endif
// Helper routine used for method sorting
- static void sort_methods(Array* methods, bool idempotent = false, bool set_idnums = true);
+ static void sort_methods(Array* methods, bool set_idnums = true);
// Deallocation function for redefine classes or if an error occurs
void deallocate_contents(ClassLoaderData* loader_data);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/opto/callGenerator.cpp
--- a/src/hotspot/share/opto/callGenerator.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/opto/callGenerator.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2019, 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
@@ -46,9 +46,17 @@
return TypeFunc::make(method());
}
-bool CallGenerator::is_inlined_method_handle_intrinsic(JVMState* jvms, ciMethod* callee) {
- ciMethod* symbolic_info = jvms->method()->get_method_at_bci(jvms->bci());
- return symbolic_info->is_method_handle_intrinsic() && !callee->is_method_handle_intrinsic();
+bool CallGenerator::is_inlined_method_handle_intrinsic(JVMState* jvms, ciMethod* m) {
+ return is_inlined_method_handle_intrinsic(jvms->method(), jvms->bci(), m);
+}
+
+bool CallGenerator::is_inlined_method_handle_intrinsic(ciMethod* caller, int bci, ciMethod* m) {
+ ciMethod* symbolic_info = caller->get_method_at_bci(bci);
+ return is_inlined_method_handle_intrinsic(symbolic_info, m);
+}
+
+bool CallGenerator::is_inlined_method_handle_intrinsic(ciMethod* symbolic_info, ciMethod* m) {
+ return symbolic_info->is_method_handle_intrinsic() && !m->is_method_handle_intrinsic();
}
//-----------------------------ParseGenerator---------------------------------
@@ -90,7 +98,6 @@
// Grab signature for matching/allocation
#ifdef ASSERT
if (parser.tf() != (parser.depth() == 1 ? C->tf() : tf())) {
- MutexLockerEx ml(Compile_lock, Mutex::_no_safepoint_check_flag);
assert(C->env()->system_dictionary_modification_counter_changed(),
"Must invalidate if TypeFuncs differ");
}
@@ -889,7 +896,8 @@
const TypeOopPtr* arg_type = arg->bottom_type()->isa_oopptr();
const Type* sig_type = TypeOopPtr::make_from_klass(signature->accessing_klass());
if (arg_type != NULL && !arg_type->higher_equal(sig_type)) {
- Node* cast_obj = gvn.transform(new CheckCastPPNode(kit.control(), arg, sig_type));
+ const Type* recv_type = arg_type->join_speculative(sig_type); // keep speculative part
+ Node* cast_obj = gvn.transform(new CheckCastPPNode(kit.control(), arg, recv_type));
kit.set_argument(0, cast_obj);
}
}
@@ -901,7 +909,8 @@
const TypeOopPtr* arg_type = arg->bottom_type()->isa_oopptr();
const Type* sig_type = TypeOopPtr::make_from_klass(t->as_klass());
if (arg_type != NULL && !arg_type->higher_equal(sig_type)) {
- Node* cast_obj = gvn.transform(new CheckCastPPNode(kit.control(), arg, sig_type));
+ const Type* narrowed_arg_type = arg_type->join_speculative(sig_type); // keep speculative part
+ Node* cast_obj = gvn.transform(new CheckCastPPNode(kit.control(), arg, narrowed_arg_type));
kit.set_argument(receiver_skip + j, cast_obj);
}
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/opto/callGenerator.hpp
--- a/src/hotspot/share/opto/callGenerator.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/opto/callGenerator.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -176,6 +176,8 @@
}
static bool is_inlined_method_handle_intrinsic(JVMState* jvms, ciMethod* m);
+ static bool is_inlined_method_handle_intrinsic(ciMethod* caller, int bci, ciMethod* m);
+ static bool is_inlined_method_handle_intrinsic(ciMethod* symbolic_info, ciMethod* m);
};
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/opto/callnode.cpp
--- a/src/hotspot/share/opto/callnode.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/opto/callnode.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -967,6 +967,21 @@
return CallNode::cmp(call) && _method == call._method &&
_override_symbolic_info == call._override_symbolic_info;
}
+#ifdef ASSERT
+bool CallJavaNode::validate_symbolic_info() const {
+ if (method() == NULL) {
+ return true; // call into runtime or uncommon trap
+ }
+ ciMethod* symbolic_info = jvms()->method()->get_method_at_bci(_bci);
+ ciMethod* callee = method();
+ if (symbolic_info->is_method_handle_intrinsic() && !callee->is_method_handle_intrinsic()) {
+ assert(override_symbolic_info(), "should be set");
+ }
+ assert(ciMethod::is_consistent_info(symbolic_info, callee), "inconsistent info");
+ return true;
+}
+#endif
+
#ifndef PRODUCT
void CallJavaNode::dump_spec(outputStream *st) const {
if( _method ) _method->print_short_name(st);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/opto/callnode.hpp
--- a/src/hotspot/share/opto/callnode.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/opto/callnode.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -683,6 +683,8 @@
void set_override_symbolic_info(bool f) { _override_symbolic_info = f; }
bool override_symbolic_info() const { return _override_symbolic_info; }
+ DEBUG_ONLY( bool validate_symbolic_info() const; )
+
#ifndef PRODUCT
virtual void dump_spec(outputStream *st) const;
virtual void dump_compact_spec(outputStream *st) const;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/opto/chaitin.cpp
--- a/src/hotspot/share/opto/chaitin.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/opto/chaitin.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -749,14 +749,6 @@
LRG& lrg = lrgs(vreg);
if (vreg) { // No vreg means un-allocable (e.g. memory)
- // Collect has-copy bit
- if (idx) {
- lrg._has_copy = 1;
- uint clidx = _lrg_map.live_range_id(n->in(idx));
- LRG& copy_src = lrgs(clidx);
- copy_src._has_copy = 1;
- }
-
// Check for float-vs-int live range (used in register-pressure
// calculations)
const Type *n_type = n->bottom_type();
@@ -775,6 +767,17 @@
}
#ifndef PRODUCT
+ // Collect bits not used by product code, but which may be useful for
+ // debugging.
+
+ // Collect has-copy bit
+ if (idx) {
+ lrg._has_copy = 1;
+ uint clidx = _lrg_map.live_range_id(n->in(idx));
+ LRG& copy_src = lrgs(clidx);
+ copy_src._has_copy = 1;
+ }
+
if (trace_spilling() && lrg._def != NULL) {
// collect defs for MultiDef printing
if (lrg._defs == NULL) {
@@ -1109,8 +1112,6 @@
#endif
}
-#define REGISTER_CONSTRAINED 16
-
// Compute cost/area ratio, in case we spill. Build the lo-degree list.
void PhaseChaitin::cache_lrg_info( ) {
Compile::TracePhase tp("chaitinCacheLRG", &timers[_t_chaitinCacheLRG]);
@@ -1145,56 +1146,6 @@
}
}
-// Simplify the IFG by removing LRGs of low degree that have NO copies
-void PhaseChaitin::Pre_Simplify( ) {
-
- // Warm up the lo-degree no-copy list
- int lo_no_copy = 0;
- for (uint i = 1; i < _lrg_map.max_lrg_id(); i++) {
- if ((lrgs(i).lo_degree() && !lrgs(i)._has_copy) ||
- !lrgs(i).alive() ||
- lrgs(i)._must_spill) {
- lrgs(i)._next = lo_no_copy;
- lo_no_copy = i;
- }
- }
-
- while( lo_no_copy ) {
- uint lo = lo_no_copy;
- lo_no_copy = lrgs(lo)._next;
- int size = lrgs(lo).num_regs();
-
- // Put the simplified guy on the simplified list.
- lrgs(lo)._next = _simplified;
- _simplified = lo;
-
- // Yank this guy from the IFG.
- IndexSet *adj = _ifg->remove_node( lo );
-
- // If any neighbors' degrees fall below their number of
- // allowed registers, then put that neighbor on the low degree
- // list. Note that 'degree' can only fall and 'numregs' is
- // unchanged by this action. Thus the two are equal at most once,
- // so LRGs hit the lo-degree worklists at most once.
- IndexSetIterator elements(adj);
- uint neighbor;
- while ((neighbor = elements.next()) != 0) {
- LRG *n = &lrgs(neighbor);
- assert( _ifg->effective_degree(neighbor) == n->degree(), "" );
-
- // Check for just becoming of-low-degree
- if( n->just_lo_degree() && !n->_has_copy ) {
- assert(!(*_ifg->_yanked)[neighbor],"Cannot move to lo degree twice");
- // Put on lo-degree list
- n->_next = lo_no_copy;
- lo_no_copy = neighbor;
- }
- }
- } // End of while lo-degree no_copy worklist not empty
-
- // No more lo-degree no-copy live ranges to simplify
-}
-
// Simplify the IFG by removing LRGs of low degree.
void PhaseChaitin::Simplify( ) {
Compile::TracePhase tp("chaitinSimplify", &timers[_t_chaitinSimplify]);
@@ -1616,18 +1567,6 @@
return spill_reg-LRG::SPILL_REG; // Return number of spills
}
-// Copy 'was_spilled'-edness from the source Node to the dst Node.
-void PhaseChaitin::copy_was_spilled( Node *src, Node *dst ) {
- if( _spilled_once.test(src->_idx) ) {
- _spilled_once.set(dst->_idx);
- lrgs(_lrg_map.find(dst))._was_spilled1 = 1;
- if( _spilled_twice.test(src->_idx) ) {
- _spilled_twice.set(dst->_idx);
- lrgs(_lrg_map.find(dst))._was_spilled2 = 1;
- }
- }
-}
-
// Set the 'spilled_once' or 'spilled_twice' flag on a node.
void PhaseChaitin::set_was_spilled( Node *n ) {
if( _spilled_once.test_set(n->_idx) )
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/opto/chaitin.hpp
--- a/src/hotspot/share/opto/chaitin.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/opto/chaitin.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -35,12 +35,11 @@
#include "opto/regmask.hpp"
#include "opto/machnode.hpp"
-class LoopTree;
class Matcher;
class PhaseCFG;
class PhaseLive;
class PhaseRegAlloc;
-class PhaseChaitin;
+class PhaseChaitin;
#define OPTO_DEBUG_SPLIT_FREQ BLOCK_FREQUENCY(0.001)
#define OPTO_LRG_HIGH_FREQ BLOCK_FREQUENCY(0.25)
@@ -136,7 +135,6 @@
void Insert( OptoReg::Name reg ) { _mask.Insert(reg); debug_only(_msize_valid=0;) }
void Remove( OptoReg::Name reg ) { _mask.Remove(reg); debug_only(_msize_valid=0;) }
- void clear_to_pairs() { _mask.clear_to_pairs(); debug_only(_msize_valid=0;) }
void clear_to_sets() { _mask.clear_to_sets(_num_regs); debug_only(_msize_valid=0;) }
// Number of registers this live range uses when it colors
@@ -237,9 +235,6 @@
// Add edge between a and b. Returns true if actually addded.
int add_edge( uint a, uint b );
- // Add edge between a and everything in the vector
- void add_vector( uint a, IndexSet *vec );
-
// Test for edge existance
int test_edge( uint a, uint b ) const;
@@ -401,7 +396,6 @@
PhaseLive *_live; // Liveness, used in the interference graph
PhaseIFG *_ifg; // Interference graph (for original chunk)
- Node_List **_lrg_nodes; // Array of node; lists for lrgs which spill
VectorSet _spilled_once; // Nodes that have been spilled
VectorSet _spilled_twice; // Nodes that have been spilled twice
@@ -496,8 +490,7 @@
void de_ssa();
// Add edge between reg and everything in the vector.
- // Same as _ifg->add_vector(reg,live) EXCEPT use the RegMask
- // information to trim the set of interferences. Return the
+ // Use the RegMask information to trim the set of interferences. Return the
// count of edges added.
void interfere_with_live(uint lid, IndexSet* liveout);
#ifdef ASSERT
@@ -666,17 +659,9 @@
// coalescing, it should Simplify. This call sets the was-lo-degree bit.
void set_was_low();
- // Split live-ranges that must spill due to register conflicts (as opposed
- // to capacity spills). Typically these are things def'd in a register
- // and used on the stack or vice-versa.
- void pre_spill();
-
// Init LRG caching of degree, numregs. Init lo_degree list.
void cache_lrg_info( );
- // Simplify the IFG by removing LRGs of low degree with no copies
- void Pre_Simplify();
-
// Simplify the IFG by removing LRGs of low degree
void Simplify();
@@ -692,8 +677,6 @@
// Return new number of live ranges
uint Split(uint maxlrg, ResourceArea* split_arena);
- // Copy 'was_spilled'-edness from one Node to another.
- void copy_was_spilled( Node *src, Node *dst );
// Set the 'spilled_once' or 'spilled_twice' flag on a node.
void set_was_spilled( Node *n );
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/opto/compile.cpp
--- a/src/hotspot/share/opto/compile.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/opto/compile.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -2188,13 +2188,16 @@
// They were inserted during parsing (see add_safepoint()) to make
// infinite loops without calls or exceptions visible to root, i.e.,
// useful.
-void Compile::remove_root_to_sfpts_edges() {
+void Compile::remove_root_to_sfpts_edges(PhaseIterGVN& igvn) {
Node *r = root();
if (r != NULL) {
for (uint i = r->req(); i < r->len(); ++i) {
Node *n = r->in(i);
if (n != NULL && n->is_SafePoint()) {
r->rm_prec(i);
+ if (n->outcnt() == 0) {
+ igvn.remove_dead_node(n);
+ }
--i;
}
}
@@ -2263,7 +2266,7 @@
// Now that all inlining is over, cut edge from root to loop
// safepoints
- remove_root_to_sfpts_edges();
+ remove_root_to_sfpts_edges(igvn);
// Remove the speculative part of types and clean up the graph from
// the extra CastPP nodes whose only purpose is to carry them. Do
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/opto/compile.hpp
--- a/src/hotspot/share/opto/compile.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/opto/compile.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -1088,7 +1088,7 @@
void inline_string_calls(bool parse_time);
void inline_boxing_calls(PhaseIterGVN& igvn);
bool optimize_loops(PhaseIterGVN& igvn, LoopOptsMode mode);
- void remove_root_to_sfpts_edges();
+ void remove_root_to_sfpts_edges(PhaseIterGVN& igvn);
// Matching, CFG layout, allocation, code generation
PhaseCFG* cfg() { return _cfg; }
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/opto/convertnode.cpp
--- a/src/hotspot/share/opto/convertnode.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/opto/convertnode.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -393,7 +393,11 @@
assert(rxlo == (int)rxlo && rxhi == (int)rxhi, "x should not overflow");
assert(rylo == (int)rylo && ryhi == (int)ryhi, "y should not overflow");
Node* cx = phase->C->constrained_convI2L(phase, x, TypeInt::make(rxlo, rxhi, widen), NULL);
+ Node *hook = new Node(1);
+ hook->init_req(0, cx); // Add a use to cx to prevent him from dying
Node* cy = phase->C->constrained_convI2L(phase, y, TypeInt::make(rylo, ryhi, widen), NULL);
+ hook->del_req(0); // Just yank bogus edge
+ hook->destruct();
switch (op) {
case Op_AddI: return new AddLNode(cx, cy);
case Op_SubI: return new SubLNode(cx, cy);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/opto/doCall.cpp
--- a/src/hotspot/share/opto/doCall.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/opto/doCall.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -202,9 +202,9 @@
}
// Try using the type profile.
- if (call_does_dispatch && site_count > 0 && receiver_count > 0) {
+ if (call_does_dispatch && site_count > 0 && UseTypeProfile) {
// The major receiver's count >= TypeProfileMajorReceiverPercent of site_count.
- bool have_major_receiver = (100.*profile.receiver_prob(0) >= (float)TypeProfileMajorReceiverPercent);
+ bool have_major_receiver = profile.has_receiver(0) && (100.*profile.receiver_prob(0) >= (float)TypeProfileMajorReceiverPercent);
ciMethod* receiver_method = NULL;
int morphism = profile.morphism();
@@ -258,8 +258,9 @@
}
}
CallGenerator* miss_cg;
- Deoptimization::DeoptReason reason = morphism == 2 ?
- Deoptimization::Reason_bimorphic : Deoptimization::reason_class_check(speculative_receiver_type != NULL);
+ Deoptimization::DeoptReason reason = (morphism == 2
+ ? Deoptimization::Reason_bimorphic
+ : Deoptimization::reason_class_check(speculative_receiver_type != NULL));
if ((morphism == 1 || (morphism == 2 && next_hit_cg != NULL)) &&
!too_many_traps(caller, bci, reason)
) {
@@ -281,8 +282,8 @@
miss_cg = CallGenerator::for_predicted_call(profile.receiver(1), miss_cg, next_hit_cg, PROB_MAX);
}
if (miss_cg != NULL) {
- trace_type_profile(C, jvms->method(), jvms->depth() - 1, jvms->bci(), receiver_method, profile.receiver(0), site_count, receiver_count);
ciKlass* k = speculative_receiver_type != NULL ? speculative_receiver_type : profile.receiver(0);
+ trace_type_profile(C, jvms->method(), jvms->depth() - 1, jvms->bci(), receiver_method, k, site_count, receiver_count);
float hit_prob = speculative_receiver_type != NULL ? 1.0 : profile.receiver_prob(0);
CallGenerator* cg = CallGenerator::for_predicted_call(k, miss_cg, hit_cg, hit_prob);
if (cg != NULL) return cg;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/opto/ifg.cpp
--- a/src/hotspot/share/opto/ifg.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/opto/ifg.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -67,20 +67,6 @@
return _adjs[a].insert( b );
}
-// Add an edge between 'a' and everything in the vector.
-void PhaseIFG::add_vector( uint a, IndexSet *vec ) {
- // IFG is triangular, so do the inserts where 'a' < 'b'.
- assert( !_is_square, "only on triangular" );
- IndexSet *adjs_a = &_adjs[a];
- if( !vec->count() ) return;
-
- IndexSetIterator elements(vec);
- uint neighbor;
- while ((neighbor = elements.next()) != 0) {
- add_edge( a, neighbor );
- }
-}
-
// Is there an edge between a and b?
int PhaseIFG::test_edge( uint a, uint b ) const {
// Sort a and b, so that a is larger
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/opto/library_call.cpp
--- a/src/hotspot/share/opto/library_call.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/opto/library_call.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -3850,6 +3850,13 @@
method, bci());
slow_call->set_optimized_virtual(true);
}
+ if (CallGenerator::is_inlined_method_handle_intrinsic(this->method(), bci(), callee())) {
+ // To be able to issue a direct call (optimized virtual or virtual)
+ // and skip a call to MH.linkTo*/invokeBasic adapter, additional information
+ // about the method being invoked should be attached to the call site to
+ // make resolution logic work (see SharedRuntime::resolve_{virtual,opt_virtual}_call_C).
+ slow_call->set_override_symbolic_info(true);
+ }
set_arguments_for_java_call(slow_call);
set_edges_for_java_call(slow_call);
return slow_call;
@@ -6267,6 +6274,11 @@
Node* dp = argument(5);
Node* isURL = argument(6);
+ src = must_be_not_null(src, true);
+ src = access_resolve(src, ACCESS_READ);
+ dest = must_be_not_null(dest, true);
+ dest = access_resolve(dest, ACCESS_WRITE);
+
Node* src_start = array_element_address(src, intcon(0), T_BYTE);
assert(src_start, "source array is NULL");
Node* dest_start = array_element_address(dest, intcon(0), T_BYTE);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/opto/matcher.cpp
--- a/src/hotspot/share/opto/matcher.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/opto/matcher.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1170,6 +1170,7 @@
if( mcall->is_MachCallJava() ) {
MachCallJavaNode *mcall_java = mcall->as_MachCallJava();
const CallJavaNode *call_java = call->as_CallJava();
+ assert(call_java->validate_symbolic_info(), "inconsistent info");
method = call_java->method();
mcall_java->_method = method;
mcall_java->_bci = call_java->_bci;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/opto/memnode.cpp
--- a/src/hotspot/share/opto/memnode.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/opto/memnode.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1532,10 +1532,14 @@
Node* address = in(MemNode::Address);
bool progress = false;
+ bool addr_mark = ((phase->type(address)->isa_oopptr() || phase->type(address)->isa_narrowoop()) &&
+ phase->type(address)->is_ptr()->offset() == oopDesc::mark_offset_in_bytes());
+
// Skip up past a SafePoint control. Cannot do this for Stores because
// pointer stores & cardmarks must stay on the same side of a SafePoint.
if( ctrl != NULL && ctrl->Opcode() == Op_SafePoint &&
- phase->C->get_alias_index(phase->type(address)->is_ptr()) != Compile::AliasIdxRaw ) {
+ phase->C->get_alias_index(phase->type(address)->is_ptr()) != Compile::AliasIdxRaw &&
+ !addr_mark ) {
ctrl = ctrl->in(0);
set_req(MemNode::Control,ctrl);
progress = true;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/opto/parse1.cpp
--- a/src/hotspot/share/opto/parse1.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/opto/parse1.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -524,7 +524,6 @@
if (depth() == 1) {
assert(C->is_osr_compilation() == this->is_osr_parse(), "OSR in sync");
if (C->tf() != tf()) {
- MutexLockerEx ml(Compile_lock, Mutex::_no_safepoint_check_flag);
assert(C->env()->system_dictionary_modification_counter_changed(),
"Must invalidate if TypeFuncs differ");
}
@@ -1041,7 +1040,6 @@
// not compilable. Just using an assertion instead would be dangerous
// as this could lead to an infinite compile loop in non-debug builds.
{
- MutexLockerEx ml(Compile_lock, Mutex::_no_safepoint_check_flag);
if (C->env()->system_dictionary_modification_counter_changed()) {
C->record_failure(C2Compiler::retry_class_loading_during_parsing());
} else {
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/opto/regmask.cpp
--- a/src/hotspot/share/opto/regmask.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/opto/regmask.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -28,68 +28,10 @@
#include "opto/matcher.hpp"
#include "opto/node.hpp"
#include "opto/regmask.hpp"
+#include "utilities/population_count.hpp"
#define RM_SIZE _RM_SIZE /* a constant private to the class RegMask */
-//-------------Non-zero bit search methods used by RegMask---------------------
-// Find lowest 1, or return 32 if empty
-int find_lowest_bit( uint32_t mask ) {
- int n = 0;
- if( (mask & 0xffff) == 0 ) {
- mask >>= 16;
- n += 16;
- }
- if( (mask & 0xff) == 0 ) {
- mask >>= 8;
- n += 8;
- }
- if( (mask & 0xf) == 0 ) {
- mask >>= 4;
- n += 4;
- }
- if( (mask & 0x3) == 0 ) {
- mask >>= 2;
- n += 2;
- }
- if( (mask & 0x1) == 0 ) {
- mask >>= 1;
- n += 1;
- }
- if( mask == 0 ) {
- n = 32;
- }
- return n;
-}
-
-// Find highest 1, or return 32 if empty
-int find_hihghest_bit( uint32_t mask ) {
- int n = 0;
- if( mask > 0xffff ) {
- mask >>= 16;
- n += 16;
- }
- if( mask > 0xff ) {
- mask >>= 8;
- n += 8;
- }
- if( mask > 0xf ) {
- mask >>= 4;
- n += 4;
- }
- if( mask > 0x3 ) {
- mask >>= 2;
- n += 2;
- }
- if( mask > 0x1 ) {
- mask >>= 1;
- n += 1;
- }
- if( mask == 0 ) {
- n = 32;
- }
- return n;
-}
-
//------------------------------dump-------------------------------------------
#ifndef PRODUCT
@@ -140,21 +82,6 @@
return 1;
}
-//------------------------------find_first_pair--------------------------------
-// Find the lowest-numbered register pair in the mask. Return the
-// HIGHEST register number in the pair, or BAD if no pairs.
-OptoReg::Name RegMask::find_first_pair() const {
- verify_pairs();
- for( int i = 0; i < RM_SIZE; i++ ) {
- if( _A[i] ) { // Found some bits
- int bit = _A[i] & -_A[i]; // Extract low bit
- // Convert to bit number, return hi bit in pair
- return OptoReg::Name((i<<_LogWordBits)+find_lowest_bit(bit)+1);
- }
- }
- return OptoReg::Bad;
-}
-
//------------------------------ClearToPairs-----------------------------------
// Clear out partial bits; leave only bit pairs
void RegMask::clear_to_pairs() {
@@ -167,18 +94,6 @@
verify_pairs();
}
-//------------------------------SmearToPairs-----------------------------------
-// Smear out partial bits; leave only bit pairs
-void RegMask::smear_to_pairs() {
- for( int i = 0; i < RM_SIZE; i++ ) {
- int bits = _A[i];
- bits |= ((bits & 0x55555555)<<1); // Smear lo bit hi per pair
- bits |= ((bits & 0xAAAAAAAA)>>1); // Smear hi bit lo per pair
- _A[i] = bits;
- }
- verify_pairs();
-}
-
//------------------------------is_aligned_pairs-------------------------------
bool RegMask::is_aligned_pairs() const {
// Assert that the register mask contains only bit pairs.
@@ -389,14 +304,10 @@
//------------------------------Size-------------------------------------------
// Compute size of register mask in bits
uint RegMask::Size() const {
- extern uint8_t bitsInByte[BITS_IN_BYTE_ARRAY_SIZE];
uint sum = 0;
- for( int i = 0; i < RM_SIZE; i++ )
- sum +=
- bitsInByte[(_A[i]>>24) & 0xff] +
- bitsInByte[(_A[i]>>16) & 0xff] +
- bitsInByte[(_A[i]>> 8) & 0xff] +
- bitsInByte[ _A[i] & 0xff];
+ for (int i = 0; i < RM_SIZE; i++) {
+ sum += population_count(_A[i]);
+ }
return sum;
}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/opto/regmask.hpp
--- a/src/hotspot/share/opto/regmask.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/opto/regmask.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -27,6 +27,8 @@
#include "code/vmreg.hpp"
#include "opto/optoreg.hpp"
+#include "utilities/count_leading_zeros.hpp"
+#include "utilities/count_trailing_zeros.hpp"
// Some fun naming (textual) substitutions:
//
@@ -45,10 +47,14 @@
// numregs in chaitin ==> proper degree in chaitin
//-------------Non-zero bit search methods used by RegMask---------------------
-// Find lowest 1, or return 32 if empty
-int find_lowest_bit( uint32_t mask );
-// Find highest 1, or return 32 if empty
-int find_hihghest_bit( uint32_t mask );
+// Find lowest 1, undefined if empty/0
+static int find_lowest_bit(uint32_t mask) {
+ return count_trailing_zeros(mask);
+}
+// Find highest 1, undefined if empty/0
+static int find_highest_bit(uint32_t mask) {
+ return count_leading_zeros(mask) ^ 31;
+}
//------------------------------RegMask----------------------------------------
// The ADL file describes how to print the machine-specific registers, as well
@@ -170,18 +176,11 @@
FORALL_BODY
# undef BODY
{ base = OptoReg::Bad; bits = 1<<0; }
- return OptoReg::Name(base + find_hihghest_bit(bits));
+ return OptoReg::Name(base + find_highest_bit(bits));
}
- // Find the lowest-numbered register pair in the mask. Return the
- // HIGHEST register number in the pair, or BAD if no pairs.
- // Assert that the mask contains only bit pairs.
- OptoReg::Name find_first_pair() const;
-
// Clear out partial bits; leave only aligned adjacent bit pairs.
void clear_to_pairs();
- // Smear out partial bits; leave only aligned adjacent bit pairs.
- void smear_to_pairs();
// Verify that the mask contains only aligned adjacent bit pairs
void verify_pairs() const { assert( is_aligned_pairs(), "mask is not aligned, adjacent pairs" ); }
// Test that the mask contains only aligned adjacent bit pairs
@@ -218,9 +217,6 @@
// Test that the mask contains only aligned adjacent bit sets
bool is_aligned_sets(const int size) const;
- // mask is a set of misaligned registers
- bool is_misaligned_set(int size) const { return (int)Size()==size && !is_aligned_sets(size);}
-
// Test for a single adjacent set
int is_bound_set(const int size) const;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/prims/jni.cpp
--- a/src/hotspot/share/prims/jni.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/prims/jni.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -2591,9 +2591,10 @@
ret = JNIHandles::make_local(env, a->obj_at(index));
return ret;
} else {
- char buf[jintAsStringSize];
- sprintf(buf, "%d", index);
- THROW_MSG_0(vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), buf);
+ ResourceMark rm(THREAD);
+ stringStream ss;
+ ss.print("Index %d out of bounds for length %d", index, a->length());
+ THROW_MSG_0(vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), ss.as_string());
}
JNI_END
@@ -2624,9 +2625,10 @@
THROW_MSG(vmSymbols::java_lang_ArrayStoreException(), ss.as_string());
}
} else {
- char buf[jintAsStringSize];
- sprintf(buf, "%d", index);
- THROW_MSG(vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), buf);
+ ResourceMark rm(THREAD);
+ stringStream ss;
+ ss.print("Index %d out of bounds for length %d", index, a->length());
+ THROW_MSG(vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), ss.as_string());
}
JNI_END
@@ -2801,6 +2803,19 @@
, HOTSPOT_JNI_RELEASEDOUBLEARRAYELEMENTS_ENTRY(env, array, (double *) buf, mode),
HOTSPOT_JNI_RELEASEDOUBLEARRAYELEMENTS_RETURN())
+static void check_bounds(jsize start, jsize copy_len, jsize array_len, TRAPS) {
+ ResourceMark rm(THREAD);
+ if (copy_len < 0) {
+ stringStream ss;
+ ss.print("Length %d is negative", copy_len);
+ THROW_MSG(vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), ss.as_string());
+ } else if (start < 0 || (start > array_len - copy_len)) {
+ stringStream ss;
+ ss.print("Array region %d.." INT64_FORMAT " out of bounds for length %d",
+ start, (int64_t)start+(int64_t)copy_len, array_len);
+ THROW_MSG(vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), ss.as_string());
+ }
+}
#define DEFINE_GETSCALARARRAYREGION(ElementTag,ElementType,Result, Tag \
, EntryProbe, ReturnProbe); \
@@ -2814,12 +2829,9 @@
EntryProbe; \
DT_VOID_RETURN_MARK(Get##Result##ArrayRegion); \
typeArrayOop src = typeArrayOop(JNIHandles::resolve_non_null(array)); \
- if (start < 0 || len < 0 || (start > src->length() - len)) { \
- THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \
- } else { \
- if (len > 0) { \
- ArrayAccess<>::arraycopy_to_native(src, typeArrayOopDesc::element_offset(start), buf, len); \
- } \
+ check_bounds(start, len, src->length(), CHECK); \
+ if (len > 0) { \
+ ArrayAccess<>::arraycopy_to_native(src, typeArrayOopDesc::element_offset(start), buf, len); \
} \
JNI_END
@@ -2861,12 +2873,9 @@
EntryProbe; \
DT_VOID_RETURN_MARK(Set##Result##ArrayRegion); \
typeArrayOop dst = typeArrayOop(JNIHandles::resolve_non_null(array)); \
- if (start < 0 || len < 0 || (start > dst->length() - len)) { \
- THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \
- } else { \
- if (len > 0) { \
- ArrayAccess<>::arraycopy_from_native(buf, dst, typeArrayOopDesc::element_offset(start), len); \
- } \
+ check_bounds(start, len, dst->length(), CHECK); \
+ if (len > 0) { \
+ ArrayAccess<>::arraycopy_from_native(buf, dst, typeArrayOopDesc::element_offset(start), len); \
} \
JNI_END
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/prims/jvmtiImpl.hpp
--- a/src/hotspot/share/prims/jvmtiImpl.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/prims/jvmtiImpl.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -297,25 +297,11 @@
// lazily create _jvmti_breakpoints and _breakpoint_list
static JvmtiBreakpoints& get_jvmti_breakpoints();
- // quickly test whether the bcp matches a cached breakpoint in the list
- static inline bool is_breakpoint(address bcp);
-
static void oops_do(OopClosure* f);
static void metadata_do(void f(Metadata*)) NOT_JVMTI_RETURN;
static void gc_epilogue();
};
-// quickly test whether the bcp matches a cached breakpoint in the list
-bool JvmtiCurrentBreakpoints::is_breakpoint(address bcp) {
- address *bps = get_breakpoint_list();
- if (bps == NULL) return false;
- for ( ; (*bps) != NULL; bps++) {
- if ((*bps) == bcp) return true;
- }
- return false;
-}
-
-
///////////////////////////////////////////////////////////////
//
// class VM_ChangeBreakpoints
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/prims/methodHandles.cpp
--- a/src/hotspot/share/prims/methodHandles.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/prims/methodHandles.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2019, 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
@@ -968,7 +968,6 @@
bool search_superc = ((match_flags & SEARCH_SUPERCLASSES) != 0);
bool search_intfc = ((match_flags & SEARCH_INTERFACES) != 0);
bool local_only = !(search_superc | search_intfc);
- bool classes_only = false;
if (name != NULL) {
if (name->utf8_length() == 0) return 0; // a match is not possible
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/prims/methodHandles.hpp
--- a/src/hotspot/share/prims/methodHandles.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/prims/methodHandles.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -67,7 +67,6 @@
static oop init_MemberName(Handle mname_h, Handle target_h, TRAPS); // compute vmtarget/vmindex from target
static oop init_field_MemberName(Handle mname_h, fieldDescriptor& fd, bool is_setter = false);
static oop init_method_MemberName(Handle mname_h, CallInfo& info);
- static int method_ref_kind(Method* m, bool do_dispatch_if_possible = true);
static int find_MemberNames(Klass* k, Symbol* name, Symbol* sig,
int mflags, Klass* caller,
int skip, objArrayHandle results, TRAPS);
@@ -148,8 +147,6 @@
static Bytecodes::Code signature_polymorphic_intrinsic_bytecode(vmIntrinsics::ID id);
- static int get_named_constant(int which, Handle name_box, TRAPS);
-
public:
static Symbol* lookup_signature(oop type_str, bool polymorphic, TRAPS); // use TempNewSymbol
static Symbol* lookup_basic_type_signature(Symbol* sig, bool keep_last_arg, TRAPS); // use TempNewSymbol
@@ -158,11 +155,6 @@
}
static bool is_basic_type_signature(Symbol* sig);
- static Symbol* lookup_method_type(Symbol* msig, Handle mtype, TRAPS);
-
- static void print_as_method_type_on(outputStream* st, Symbol* sig) {
- print_as_basic_type_signature_on(st, sig, true, true);
- }
static void print_as_basic_type_signature_on(outputStream* st, Symbol* sig, bool keep_arrays = false, bool keep_basic_names = false);
// decoding CONSTANT_MethodHandle constants
@@ -188,13 +180,6 @@
assert(ref_kind_is_valid(ref_kind), "");
return (ref_kind & 1) != 0;
}
- static bool ref_kind_is_static(int ref_kind) {
- return !ref_kind_has_receiver(ref_kind) && (ref_kind != JVM_REF_newInvokeSpecial);
- }
- static bool ref_kind_does_dispatch(int ref_kind) {
- return (ref_kind == JVM_REF_invokeVirtual ||
- ref_kind == JVM_REF_invokeInterface);
- }
static int ref_kind_to_flags(int ref_kind);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/prims/whitebox.cpp
--- a/src/hotspot/share/prims/whitebox.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/prims/whitebox.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, 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
@@ -93,6 +93,9 @@
#include "services/memTracker.hpp"
#include "utilities/nativeCallStack.hpp"
#endif // INCLUDE_NMT
+#if INCLUDE_AOT
+#include "aot/aotLoader.hpp"
+#endif // INCLUDE_AOT
#ifdef LINUX
#include "osContainer_linux.hpp"
@@ -2118,6 +2121,14 @@
return (jint) SystemDictionary::pd_cache_table()->removed_entries_count();
WB_END
+WB_ENTRY(jint, WB_AotLibrariesCount(JNIEnv* env, jobject o))
+ jint result = 0;
+#if INCLUDE_AOT
+ result = (jint) AOTLoader::heaps_count();
+#endif
+ return result;
+WB_END
+
#define CC (char*)
static JNINativeMethod methods[] = {
@@ -2350,6 +2361,7 @@
{CC"disableElfSectionCache", CC"()V", (void*)&WB_DisableElfSectionCache },
{CC"resolvedMethodRemovedCount", CC"()I", (void*)&WB_ResolvedMethodRemovedCount },
{CC"protectionDomainRemovedCount", CC"()I", (void*)&WB_ProtectionDomainRemovedCount },
+ {CC"aotLibrariesCount", CC"()I", (void*)&WB_AotLibrariesCount },
};
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/runtime/arguments.cpp
--- a/src/hotspot/share/runtime/arguments.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/runtime/arguments.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -328,10 +328,6 @@
_agentList.add(agentLib);
}
-void Arguments::add_loaded_agent(const char* name, char* options, bool absolute_path, void* os_lib) {
- _agentList.add(new AgentLibrary(name, options, absolute_path, os_lib));
-}
-
// Return TRUE if option matches 'property', or 'property=', or 'property.'.
static bool matches_property_suffix(const char* option, const char* property, size_t len) {
return ((strncmp(option, property, len) == 0) &&
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/runtime/arguments.hpp
--- a/src/hotspot/share/runtime/arguments.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/runtime/arguments.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -346,7 +346,6 @@
// Late-binding agents not started via arguments
static void add_loaded_agent(AgentLibrary *agentLib);
- static void add_loaded_agent(const char* name, char* options, bool absolute_path, void* os_lib);
// Operation modi
static Mode _mode;
@@ -368,7 +367,6 @@
static bool _UseOnStackReplacement;
static bool _BackgroundCompilation;
static bool _ClipInlining;
- static bool _CIDynamicCompilePriority;
static intx _Tier3InvokeNotifyFreqLog;
static intx _Tier4InvocationThreshold;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/runtime/deoptimization.cpp
--- a/src/hotspot/share/runtime/deoptimization.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/runtime/deoptimization.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -1284,36 +1284,6 @@
}
-void Deoptimization::revoke_biases_of_monitors(CodeBlob* cb) {
- if (!UseBiasedLocking) {
- return;
- }
-
- assert(SafepointSynchronize::is_at_safepoint(), "must only be called from safepoint");
- GrowableArray* objects_to_revoke = new GrowableArray();
- for (JavaThreadIteratorWithHandle jtiwh; JavaThread *jt = jtiwh.next(); ) {
- if (jt->has_last_Java_frame()) {
- StackFrameStream sfs(jt, true);
- while (!sfs.is_done()) {
- frame* cur = sfs.current();
- if (cb->contains(cur->pc())) {
- vframe* vf = vframe::new_vframe(cur, sfs.register_map(), jt);
- compiledVFrame* cvf = compiledVFrame::cast(vf);
- // Revoke monitors' biases in all scopes
- while (!cvf->is_top()) {
- collect_monitors(cvf, objects_to_revoke);
- cvf = compiledVFrame::cast(cvf->sender());
- }
- collect_monitors(cvf, objects_to_revoke);
- }
- sfs.next();
- }
- }
- }
- BiasedLocking::revoke_at_safepoint(objects_to_revoke);
-}
-
-
void Deoptimization::deoptimize_single_frame(JavaThread* thread, frame fr, Deoptimization::DeoptReason reason) {
assert(fr.can_be_deoptimized(), "checking frame type");
@@ -2300,11 +2270,6 @@
return _deoptimization_hist[Reason_none][0][0];
}
-jint Deoptimization::deoptimization_count(DeoptReason reason) {
- assert(reason >= 0 && reason < Reason_LIMIT, "oob");
- return _deoptimization_hist[reason][0][0];
-}
-
void Deoptimization::print_statistics() {
juint total = total_deoptimization_count();
juint account = total;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/runtime/deoptimization.hpp
--- a/src/hotspot/share/runtime/deoptimization.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/runtime/deoptimization.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -154,9 +154,6 @@
// Helper function to revoke biases of all monitors in frame if UseBiasedLocking
// is enabled
static void revoke_biases_of_monitors(JavaThread* thread, frame fr, RegisterMap* map);
- // Helper function to revoke biases of all monitors in frames
- // executing in a particular CodeBlob if UseBiasedLocking is enabled
- static void revoke_biases_of_monitors(CodeBlob* cb);
#if COMPILER2_OR_JVMCI
JVMCI_ONLY(public:)
@@ -420,7 +417,6 @@
int trap_request);
static jint total_deoptimization_count();
- static jint deoptimization_count(DeoptReason reason);
// JVMTI PopFrame support
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/runtime/frame.cpp
--- a/src/hotspot/share/runtime/frame.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/runtime/frame.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -368,29 +368,6 @@
return result;
}
-// Note: called by profiler - NOT for current thread
-frame frame::profile_find_Java_sender_frame(JavaThread *thread) {
-// If we don't recognize this frame, walk back up the stack until we do
- RegisterMap map(thread, false);
- frame first_java_frame = frame();
-
- // Find the first Java frame on the stack starting with input frame
- if (is_java_frame()) {
- // top frame is compiled frame or deoptimized frame
- first_java_frame = *this;
- } else if (safe_for_sender(thread)) {
- for (frame sender_frame = sender(&map);
- sender_frame.safe_for_sender(thread) && !sender_frame.is_first_frame();
- sender_frame = sender_frame.sender(&map)) {
- if (sender_frame.is_java_frame()) {
- first_java_frame = sender_frame;
- break;
- }
- }
- }
- return first_java_frame;
-}
-
// Interpreter frames
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/runtime/frame.hpp
--- a/src/hotspot/share/runtime/frame.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/runtime/frame.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -148,9 +148,6 @@
// returns the sending frame
frame sender(RegisterMap* map) const;
- // for Profiling - acting on another frame. walks sender frames
- // if valid.
- frame profile_find_Java_sender_frame(JavaThread *thread);
bool safe_for_sender(JavaThread *thread);
// returns the sender, but skips conversion frames
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/runtime/globals.hpp
--- a/src/hotspot/share/runtime/globals.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/runtime/globals.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -140,8 +140,8 @@
// notproduct flags are settable / visible only during development and are not declared in the PRODUCT version
// A flag must be declared with one of the following types:
-// bool, int, uint, intx, uintx, size_t, ccstr, double, or uint64_t.
-// The type "ccstr" is an alias for "const char*" and is used
+// bool, int, uint, intx, uintx, size_t, ccstr, ccstrlist, double, or uint64_t.
+// The type "ccstr" and "ccstrlist" are an alias for "const char*" and is used
// only in this file, because the macrology requires single-token type names.
// Note: Diagnostic options not meant for VM tuning or for product modes.
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/runtime/mutexLocker.cpp
--- a/src/hotspot/share/runtime/mutexLocker.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/runtime/mutexLocker.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -306,7 +306,7 @@
def(JvmtiThreadState_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // Used by JvmtiThreadState/JvmtiEventController
def(Management_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // used for JVM management
- def(Compile_lock , PaddedMutex , nonleaf+3, true, Monitor::_safepoint_check_sometimes);
+ def(Compile_lock , PaddedMutex , nonleaf+3, true, Monitor::_safepoint_check_always);
def(MethodData_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always);
def(TouchedMethodLog_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/runtime/statSampler.cpp
--- a/src/hotspot/share/runtime/statSampler.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/runtime/statSampler.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -356,14 +356,3 @@
PerfDataManager::create_counter(SUN_OS, "hrt.ticks",
PerfData::U_Ticks, psh, CHECK);
}
-
-/*
- * the statSampler_exit() function is called from os_init.cpp on
- * exit of the vm.
- */
-void statSampler_exit() {
-
- if (!UsePerfData) return;
-
- StatSampler::destroy();
-}
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/runtime/statSampler.hpp
--- a/src/hotspot/share/runtime/statSampler.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/runtime/statSampler.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -65,6 +65,4 @@
static void destroy();
};
-void statSampler_exit();
-
#endif // SHARE_RUNTIME_STATSAMPLER_HPP
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/runtime/stubRoutines.cpp
--- a/src/hotspot/share/runtime/stubRoutines.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/runtime/stubRoutines.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -73,7 +73,6 @@
jint StubRoutines::_fpu_cntrl_wrd_std = 0;
jint StubRoutines::_fpu_cntrl_wrd_24 = 0;
-jint StubRoutines::_fpu_cntrl_wrd_64 = 0;
jint StubRoutines::_fpu_cntrl_wrd_trunc = 0;
jint StubRoutines::_mxcsr_std = 0;
jint StubRoutines::_fpu_subnormal_bias1[3] = { 0, 0, 0 };
@@ -163,11 +162,6 @@
address StubRoutines::_dlibm_tan_cot_huge = NULL;
address StubRoutines::_dtan = NULL;
-double (* StubRoutines::_intrinsic_log10 )(double) = NULL;
-double (* StubRoutines::_intrinsic_sin )(double) = NULL;
-double (* StubRoutines::_intrinsic_cos )(double) = NULL;
-double (* StubRoutines::_intrinsic_tan )(double) = NULL;
-
address StubRoutines::_safefetch32_entry = NULL;
address StubRoutines::_safefetch32_fault_pc = NULL;
address StubRoutines::_safefetch32_continuation_pc = NULL;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/runtime/stubRoutines.hpp
--- a/src/hotspot/share/runtime/stubRoutines.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/runtime/stubRoutines.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -78,10 +78,6 @@
class StubRoutines: AllStatic {
public:
- enum platform_independent_constants {
- max_size_of_parameters = 256 // max. parameter size supported by megamorphic lookups
- };
-
// Dependencies
friend class StubGenerator;
@@ -114,7 +110,6 @@
static jint _fpu_cntrl_wrd_std;
static jint _fpu_cntrl_wrd_24;
- static jint _fpu_cntrl_wrd_64;
static jint _fpu_cntrl_wrd_trunc;
static jint _mxcsr_std;
static jint _fpu_subnormal_bias1[3];
@@ -207,18 +202,6 @@
static address _dlibm_tan_cot_huge;
static address _dtan;
- // These are versions of the java.lang.Math methods which perform
- // the same operations as the intrinsic version. They are used for
- // constant folding in the compiler to ensure equivalence. If the
- // intrinsic version returns the same result as the strict version
- // then they can be set to the appropriate function from
- // SharedRuntime.
- static double (*_intrinsic_log10)(double);
- static double (*_intrinsic_pow)(double, double);
- static double (*_intrinsic_sin)(double);
- static double (*_intrinsic_cos)(double);
- static double (*_intrinsic_tan)(double);
-
// Safefetch stubs.
static address _safefetch32_entry;
static address _safefetch32_fault_pc;
@@ -289,7 +272,6 @@
static jint fpu_cntrl_wrd_std() { return _fpu_cntrl_wrd_std; }
static address addr_fpu_cntrl_wrd_std() { return (address)&_fpu_cntrl_wrd_std; }
static address addr_fpu_cntrl_wrd_24() { return (address)&_fpu_cntrl_wrd_24; }
- static address addr_fpu_cntrl_wrd_64() { return (address)&_fpu_cntrl_wrd_64; }
static address addr_fpu_cntrl_wrd_trunc() { return (address)&_fpu_cntrl_wrd_trunc; }
static address addr_mxcsr_std() { return (address)&_mxcsr_std; }
static address addr_fpu_subnormal_bias1() { return (address)&_fpu_subnormal_bias1; }
@@ -386,27 +368,6 @@
static address zero_aligned_words() { return _zero_aligned_words; }
- static double intrinsic_log10(double d) {
- assert(_intrinsic_log10 != NULL, "must be defined");
- return _intrinsic_log10(d);
- }
- static double intrinsic_pow(double d, double d2) {
- assert(_intrinsic_pow != NULL, "must be defined");
- return _intrinsic_pow(d, d2);
- }
- static double intrinsic_sin(double d) {
- assert(_intrinsic_sin != NULL, "must be defined");
- return _intrinsic_sin(d);
- }
- static double intrinsic_cos(double d) {
- assert(_intrinsic_cos != NULL, "must be defined");
- return _intrinsic_cos(d);
- }
- static double intrinsic_tan(double d) {
- assert(_intrinsic_tan != NULL, "must be defined");
- return _intrinsic_tan(d);
- }
-
//
// Safefetch stub support
//
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/runtime/thread.cpp
--- a/src/hotspot/share/runtime/thread.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/runtime/thread.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -2392,8 +2392,19 @@
}
}
- VM_ThreadSuspend vm_suspend;
- VMThread::execute(&vm_suspend);
+ if (Thread::current() == this) {
+ // Safely self-suspend.
+ // If we don't do this explicitly it will implicitly happen
+ // before we transition back to Java, and on some other thread-state
+ // transition paths, but not as we exit a JVM TI SuspendThread call.
+ // As SuspendThread(current) must not return (until resumed) we must
+ // self-suspend here.
+ ThreadBlockInVM tbivm(this);
+ java_suspend_self();
+ } else {
+ VM_ThreadSuspend vm_suspend;
+ VMThread::execute(&vm_suspend);
+ }
}
// Part II of external suspension.
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/runtime/timer.cpp
--- a/src/hotspot/share/runtime/timer.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/runtime/timer.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -118,59 +118,3 @@
assert(is_updated(), "must not be clear");
return os::elapsed_counter() - _counter;
}
-
-TraceCPUTime::TraceCPUTime(bool doit,
- bool print_cr,
- outputStream *logfile) :
- _active(doit),
- _print_cr(print_cr),
- _starting_user_time(0.0),
- _starting_system_time(0.0),
- _starting_real_time(0.0),
- _logfile(logfile),
- _error(false) {
- if (_active) {
- if (logfile != NULL) {
- _logfile = logfile;
- } else {
- _logfile = tty;
- }
-
- _error = !os::getTimesSecs(&_starting_real_time,
- &_starting_user_time,
- &_starting_system_time);
- }
-}
-
-TraceCPUTime::~TraceCPUTime() {
- if (_active) {
- bool valid = false;
- if (!_error) {
- double real_secs; // walk clock time
- double system_secs; // system time
- double user_secs; // user time for all threads
-
- double real_time, user_time, system_time;
- valid = os::getTimesSecs(&real_time, &user_time, &system_time);
- if (valid) {
-
- user_secs = user_time - _starting_user_time;
- system_secs = system_time - _starting_system_time;
- real_secs = real_time - _starting_real_time;
-
- _logfile->print(" [Times: user=%3.2f sys=%3.2f real=%3.2f secs] ",
- user_secs, system_secs, real_secs);
-
- } else {
- _logfile->print("[Invalid result in TraceCPUTime]");
- }
- } else {
- _logfile->print("[Error in TraceCPUTime]");
- }
- if (_print_cr) {
- _logfile->cr();
- }
- _logfile->flush();
- }
-}
-
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/runtime/timer.hpp
--- a/src/hotspot/share/runtime/timer.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/runtime/timer.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -72,23 +72,6 @@
jlong ticks_since_update() const;
};
-class TraceCPUTime: public StackObj {
- private:
- bool _active; // true if times will be measured and printed
- bool _print_cr; // if true print carriage return at end
- double _starting_user_time; // user time at start of measurement
- double _starting_system_time; // system time at start of measurement
- double _starting_real_time; // real time at start of measurement
- outputStream* _logfile; // output is printed to this stream
- bool _error; // true if an error occurred, turns off output
-
- public:
- TraceCPUTime(bool doit = true,
- bool print_cr = true,
- outputStream *logfile = NULL);
- ~TraceCPUTime();
-};
-
class TimeHelper {
public:
static double counter_to_seconds(jlong counter);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/runtime/vmOperations.cpp
--- a/src/hotspot/share/runtime/vmOperations.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/runtime/vmOperations.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -333,8 +333,7 @@
if (_with_locked_synchronizers) {
tcl = concurrent_locks.thread_concurrent_locks(jt);
}
- ThreadSnapshot* ts = snapshot_thread(jt, tcl);
- _result->add_thread_snapshot(ts);
+ snapshot_thread(jt, tcl);
}
} else {
// Snapshot threads in the given _threads array
@@ -345,7 +344,7 @@
if (th() == NULL) {
// skip if the thread doesn't exist
// Add a dummy snapshot
- _result->add_thread_snapshot(new ThreadSnapshot());
+ _result->add_thread_snapshot();
continue;
}
@@ -362,24 +361,22 @@
jt->is_exiting() ||
jt->is_hidden_from_external_view()) {
// add a NULL snapshot if skipped
- _result->add_thread_snapshot(new ThreadSnapshot());
+ _result->add_thread_snapshot();
continue;
}
ThreadConcurrentLocks* tcl = NULL;
if (_with_locked_synchronizers) {
tcl = concurrent_locks.thread_concurrent_locks(jt);
}
- ThreadSnapshot* ts = snapshot_thread(jt, tcl);
- _result->add_thread_snapshot(ts);
+ snapshot_thread(jt, tcl);
}
}
}
-ThreadSnapshot* VM_ThreadDump::snapshot_thread(JavaThread* java_thread, ThreadConcurrentLocks* tcl) {
- ThreadSnapshot* snapshot = new ThreadSnapshot(_result->t_list(), java_thread);
+void VM_ThreadDump::snapshot_thread(JavaThread* java_thread, ThreadConcurrentLocks* tcl) {
+ ThreadSnapshot* snapshot = _result->add_thread_snapshot(java_thread);
snapshot->dump_stack_at_safepoint(_max_depth, _with_locked_monitors);
snapshot->set_concurrent_locks(tcl);
- return snapshot;
}
volatile bool VM_Exit::_vm_exited = false;
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/runtime/vmOperations.hpp
--- a/src/hotspot/share/runtime/vmOperations.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/runtime/vmOperations.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -68,7 +68,9 @@
template(G1CollectForAllocation) \
template(G1CollectFull) \
template(G1Concurrent) \
- template(ZOperation) \
+ template(ZMarkStart) \
+ template(ZMarkEnd) \
+ template(ZRelocateStart) \
template(HandshakeOneThread) \
template(HandshakeAllThreads) \
template(HandshakeFallback) \
@@ -119,7 +121,6 @@
template(PrintCompileQueue) \
template(PrintClassHierarchy) \
template(ThreadSuspend) \
- template(CTWThreshold) \
template(ThreadsSuspendJVMTI) \
template(ICBufferFull) \
template(ScavengeMonitors) \
@@ -270,12 +271,6 @@
VMOp_Type type() const { return VMOp_ThreadSuspend; }
};
-// empty vm op, when forcing a safepoint due to ctw threshold is reached for the sweeper
-class VM_CTWThreshold: public VM_ForceSafepoint {
- public:
- VMOp_Type type() const { return VMOp_CTWThreshold; }
-};
-
// empty vm op, when forcing a safepoint to suspend threads from jvmti
class VM_ThreadsSuspendJVMTI: public VM_ForceSafepoint {
public:
@@ -445,7 +440,7 @@
bool _with_locked_monitors;
bool _with_locked_synchronizers;
- ThreadSnapshot* snapshot_thread(JavaThread* java_thread, ThreadConcurrentLocks* tcl);
+ void snapshot_thread(JavaThread* java_thread, ThreadConcurrentLocks* tcl);
public:
VM_ThreadDump(ThreadDumpResult* result,
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/services/management.cpp
--- a/src/hotspot/share/services/management.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/services/management.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, 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
@@ -1097,15 +1097,13 @@
for (int i = 0; i < num_threads; i++) {
jlong tid = ids_ah->long_at(i);
JavaThread* jt = dump_result.t_list()->find_JavaThread_from_java_tid(tid);
- ThreadSnapshot* ts;
if (jt == NULL) {
// if the thread does not exist or now it is terminated,
// create dummy snapshot
- ts = new ThreadSnapshot();
+ dump_result.add_thread_snapshot();
} else {
- ts = new ThreadSnapshot(dump_result.t_list(), jt);
+ dump_result.add_thread_snapshot(jt);
}
- dump_result.add_thread_snapshot(ts);
}
} else {
// obtain thread dump with the specific list of threads with stack trace
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/services/threadService.cpp
--- a/src/hotspot/share/services/threadService.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/services/threadService.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, 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
@@ -503,8 +503,25 @@
}
}
+ThreadSnapshot* ThreadDumpResult::add_thread_snapshot() {
+ ThreadSnapshot* ts = new ThreadSnapshot();
+ link_thread_snapshot(ts);
+ return ts;
+}
-void ThreadDumpResult::add_thread_snapshot(ThreadSnapshot* ts) {
+ThreadSnapshot* ThreadDumpResult::add_thread_snapshot(JavaThread* thread) {
+ // Note: it is very important that the ThreadSnapshot* gets linked before
+ // ThreadSnapshot::initialize gets called. This is to ensure that
+ // ThreadSnapshot::oops_do can get called prior to the field
+ // ThreadSnapshot::_threadObj being assigned a value (to prevent a dangling
+ // oop).
+ ThreadSnapshot* ts = new ThreadSnapshot();
+ link_thread_snapshot(ts);
+ ts->initialize(t_list(), thread);
+ return ts;
+}
+
+void ThreadDumpResult::link_thread_snapshot(ThreadSnapshot* ts) {
assert(_num_threads == 0 || _num_snapshots < _num_threads,
"_num_snapshots must be less than _num_threads");
_num_snapshots++;
@@ -831,12 +848,9 @@
memset((void*) _perf_recursion_counts, 0, sizeof(_perf_recursion_counts));
}
-ThreadSnapshot::ThreadSnapshot(ThreadsList * t_list, JavaThread* thread) {
+void ThreadSnapshot::initialize(ThreadsList * t_list, JavaThread* thread) {
_thread = thread;
_threadObj = thread->threadObj();
- _stack_trace = NULL;
- _concurrent_locks = NULL;
- _next = NULL;
ThreadStatistics* stat = thread->get_thread_stat();
_contended_enter_ticks = stat->contended_enter_ticks();
@@ -846,9 +860,6 @@
_sleep_ticks = stat->sleep_ticks();
_sleep_count = stat->sleep_count();
- _blocker_object = NULL;
- _blocker_object_owner = NULL;
-
_thread_status = java_lang_Thread::get_thread_status(_threadObj);
_is_ext_suspended = thread->is_being_ext_suspended();
_is_in_native = (thread->thread_state() == _thread_in_native);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/services/threadService.hpp
--- a/src/hotspot/share/services/threadService.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/services/threadService.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -213,12 +213,15 @@
ThreadConcurrentLocks* _concurrent_locks;
ThreadSnapshot* _next;
-public:
- // Dummy snapshot
+ // ThreadSnapshot instances should only be created via
+ // ThreadDumpResult::add_thread_snapshot.
+ friend class ThreadDumpResult;
ThreadSnapshot() : _thread(NULL), _threadObj(NULL),
_blocker_object(NULL), _blocker_object_owner(NULL),
_stack_trace(NULL), _concurrent_locks(NULL), _next(NULL) {};
- ThreadSnapshot(ThreadsList * t_list, JavaThread* thread);
+ void initialize(ThreadsList * t_list, JavaThread* thread);
+
+public:
~ThreadSnapshot();
java_lang_Thread::ThreadStatus thread_status() { return _thread_status; }
@@ -367,12 +370,16 @@
ThreadsListSetter _setter; // Helper to set hazard ptr in the originating thread
// which protects the JavaThreads in _snapshots.
+ void link_thread_snapshot(ThreadSnapshot* ts);
+
public:
ThreadDumpResult();
ThreadDumpResult(int num_threads);
~ThreadDumpResult();
- void add_thread_snapshot(ThreadSnapshot* ts);
+ ThreadSnapshot* add_thread_snapshot();
+ ThreadSnapshot* add_thread_snapshot(JavaThread* thread);
+
void set_next(ThreadDumpResult* next) { _next = next; }
ThreadDumpResult* next() { return _next; }
int num_threads() { return _num_threads; }
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/utilities/bitMap.hpp
--- a/src/hotspot/share/utilities/bitMap.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/utilities/bitMap.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -429,12 +429,6 @@
return _map.size();
}
- // Returns number of full slots that have been allocated
- idx_t size_in_slots() {
- // Round down
- return _map.size() / _bits_per_slot;
- }
-
bool is_valid_index(idx_t slot_index, idx_t bit_within_slot_index);
bool at(idx_t slot_index, idx_t bit_within_slot_index) const;
void set_bit(idx_t slot_index, idx_t bit_within_slot_index);
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/utilities/count_leading_zeros.hpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/utilities/count_leading_zeros.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2019, 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.
+ *
+ */
+
+#ifndef SHARE_UTILITIES_COUNT_LEADING_ZEROS_HPP
+#define SHARE_UTILITIES_COUNT_LEADING_ZEROS_HPP
+
+#include "utilities/debug.hpp"
+#include "utilities/globalDefinitions.hpp"
+#include "utilities/count_trailing_zeros.hpp"
+
+#if defined(TARGET_COMPILER_visCPP)
+#include
+#pragma intrinsic(_BitScanReverse)
+#elif defined(TARGET_COMPILER_xlc)
+#include
+#endif
+
+// uint32_t count_leading_zeros(uint32_t x)
+// Return the number of leading zeros in x, e.g. the zero-based index
+// of the most significant set bit in x. Undefined for 0.
+inline uint32_t count_leading_zeros(uint32_t x) {
+ assert(x != 0, "precondition");
+#if defined(TARGET_COMPILER_gcc)
+ return __builtin_clz(x);
+#elif defined(TARGET_COMPILER_visCPP)
+ unsigned long index;
+ _BitScanReverse(&index, x);
+ return index ^ 31u;
+#elif defined(TARGET_COMPILER_xlc)
+ return __cntlz4(x);
+#else
+ // Efficient and portable fallback implementation:
+ // http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogDeBruijn
+ // - with positions xor'd by 31 to get number of leading zeros
+ // rather than position of highest bit.
+ static const int MultiplyDeBruijnBitPosition[32] = {
+ 31, 22, 30, 21, 18, 10, 29, 2, 20, 17, 15, 13, 9, 6, 28, 1,
+ 23, 19, 11, 3, 16, 14, 7, 24, 12, 4, 8, 25, 5, 26, 27, 0
+ };
+
+ x |= x >> 1; // first round down to one less than a power of 2
+ x |= x >> 2;
+ x |= x >> 4;
+ x |= x >> 8;
+ x |= x >> 16;
+ return MultiplyDeBruijnBitPosition[(uint32_t)( x * 0x07c4acddu ) >> 27];
+#endif
+}
+
+#endif // SHARE_UTILITIES_COUNT_LEADING_ZEROS_HPP
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/utilities/population_count.hpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/utilities/population_count.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2019, 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.
+ *
+ */
+
+#ifndef SHARE_UTILITIES_POPULATION_COUNT_HPP
+#define SHARE_UTILITIES_POPULATION_COUNT_HPP
+
+#include "utilities/debug.hpp"
+#include "utilities/globalDefinitions.hpp"
+
+// Returns the population count of x, i.e., the number of bits set in x.
+//
+// Adapted from Hacker's Delight, 2nd Edition, Figure 5-2.
+//
+// Ideally this should be dispatched per platform to use optimized
+// instructions when available, such as POPCNT on modern x86/AMD. Our builds
+// still target and support older architectures that might lack support for
+// these, however. For example, with current build configurations,
+// __builtin_popcount(x) would generate a call to a similar but slower 64-bit
+// version of this 32-bit implementation.
+static uint32_t population_count(uint32_t x) {
+ x -= ((x >> 1) & 0x55555555);
+ x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
+ return (((x + (x >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
+}
+
+#endif // SHARE_UTILITIES_POPULATION_COUNT_HPP
diff -r b50715adf242 -r cf2b4754174d src/hotspot/share/utilities/resourceHash.hpp
--- a/src/hotspot/share/utilities/resourceHash.hpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/hotspot/share/utilities/resourceHash.hpp Tue Jan 29 09:38:31 2019 -0500
@@ -27,11 +27,6 @@
#include "memory/allocation.hpp"
-template struct ResourceHashtableFns {
- typedef unsigned (*hash_fn)(K const&);
- typedef bool (*equals_fn)(K const&, K const&);
-};
-
template<
typename K, typename V,
// xlC does not compile this:
@@ -160,10 +155,6 @@
++bucket;
}
}
-
- static size_t node_size() {
- return sizeof(Node);
- }
};
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/java/lang/constant/ClassDesc.java
--- a/src/java.base/share/classes/java/lang/constant/ClassDesc.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/java/lang/constant/ClassDesc.java Tue Jan 29 09:38:31 2019 -0500
@@ -101,10 +101,8 @@
return of(className);
}
validateMemberName(requireNonNull(className), false);
- return ofDescriptor(String.format("L%s%s%s;",
- binaryToInternal(packageName),
- (packageName.length() > 0 ? "/" : ""),
- className));
+ return ofDescriptor("L" + binaryToInternal(packageName) +
+ (packageName.length() > 0 ? "/" : "") + className + ";");
}
/**
@@ -134,12 +132,14 @@
static ClassDesc ofDescriptor(String descriptor) {
requireNonNull(descriptor);
if (descriptor.isEmpty()) {
- throw new IllegalArgumentException(String.format("not a valid reference type descriptor: %s", descriptor));
+ throw new IllegalArgumentException(
+ "not a valid reference type descriptor: " + descriptor);
}
int depth = ConstantUtils.arrayDepth(descriptor);
if (depth > ConstantUtils.MAX_ARRAY_TYPE_DESC_DIMENSIONS) {
- throw new IllegalArgumentException(String.format("Cannot create an array type descriptor with more than %d dimensions",
- ConstantUtils.MAX_ARRAY_TYPE_DESC_DIMENSIONS));
+ throw new IllegalArgumentException(
+ "Cannot create an array type descriptor with more than " +
+ ConstantUtils.MAX_ARRAY_TYPE_DESC_DIMENSIONS + " dimensions");
}
return (descriptor.length() == 1)
? new PrimitiveClassDescImpl(descriptor)
@@ -157,8 +157,9 @@
default ClassDesc arrayType() {
int depth = ConstantUtils.arrayDepth(descriptorString());
if (depth >= ConstantUtils.MAX_ARRAY_TYPE_DESC_DIMENSIONS) {
- throw new IllegalStateException(String.format("Cannot create an array type descriptor with more than %d dimensions",
- ConstantUtils.MAX_ARRAY_TYPE_DESC_DIMENSIONS));
+ throw new IllegalStateException(
+ "Cannot create an array type descriptor with more than " +
+ ConstantUtils.MAX_ARRAY_TYPE_DESC_DIMENSIONS + " dimensions");
}
return arrayType(1);
}
@@ -201,7 +202,7 @@
validateMemberName(nestedName, false);
if (!isClassOrInterface())
throw new IllegalStateException("Outer class is not a class or interface type");
- return ClassDesc.ofDescriptor(String.format("%s$%s;", dropLastChar(descriptorString()), nestedName));
+ return ClassDesc.ofDescriptor(dropLastChar(descriptorString()) + "$" + nestedName + ";");
}
/**
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java
--- a/src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java Tue Jan 29 09:38:31 2019 -0500
@@ -77,6 +77,7 @@
private static final String DESCR_CTOR_NOT_SERIALIZABLE_EXCEPTION = "(Ljava/lang/String;)V";
private static final String[] SER_HOSTILE_EXCEPTIONS = new String[] {NAME_NOT_SERIALIZABLE_EXCEPTION};
+ private static final String DESCR_HIDDEN = "Ljdk/internal/vm/annotation/Hidden;";
private static final String[] EMPTY_STRING_ARRAY = new String[0];
@@ -279,7 +280,7 @@
// Forward the SAM method
MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, samMethodName,
samMethodType.toMethodDescriptorString(), null, null);
- mv.visitAnnotation("Ljava/lang/invoke/LambdaForm$Hidden;", true);
+ mv.visitAnnotation(DESCR_HIDDEN, true);
new ForwardingMethodGenerator(mv).generate(samMethodType);
// Forward the bridges
@@ -287,7 +288,7 @@
for (MethodType mt : additionalBridges) {
mv = cw.visitMethod(ACC_PUBLIC|ACC_BRIDGE, samMethodName,
mt.toMethodDescriptorString(), null, null);
- mv.visitAnnotation("Ljava/lang/invoke/LambdaForm$Hidden;", true);
+ mv.visitAnnotation(DESCR_HIDDEN, true);
new ForwardingMethodGenerator(mv).generate(mt);
}
}
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java
--- a/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java Tue Jan 29 09:38:31 2019 -0500
@@ -721,11 +721,11 @@
}
}
- static final String LF_HIDDEN_SIG = className("Ljava/lang/invoke/LambdaForm$Hidden;");
- static final String LF_COMPILED_SIG = className("Ljava/lang/invoke/LambdaForm$Compiled;");
- static final String FORCEINLINE_SIG = className("Ljdk/internal/vm/annotation/ForceInline;");
- static final String DONTINLINE_SIG = className("Ljdk/internal/vm/annotation/DontInline;");
- static final String INJECTEDPROFILE_SIG = className("Ljava/lang/invoke/InjectedProfile;");
+ static final String DONTINLINE_SIG = className("Ljdk/internal/vm/annotation/DontInline;");
+ static final String FORCEINLINE_SIG = className("Ljdk/internal/vm/annotation/ForceInline;");
+ static final String HIDDEN_SIG = className("Ljdk/internal/vm/annotation/Hidden;");
+ static final String INJECTEDPROFILE_SIG = className("Ljava/lang/invoke/InjectedProfile;");
+ static final String LF_COMPILED_SIG = className("Ljava/lang/invoke/LambdaForm$Compiled;");
/**
* Generate an invoker method for the passed {@link LambdaForm}.
@@ -748,7 +748,7 @@
methodPrologue();
// Suppress this method in backtraces displayed to the user.
- mv.visitAnnotation(LF_HIDDEN_SIG, true);
+ mv.visitAnnotation(HIDDEN_SIG, true);
// Mark this method as a compiled LambdaForm
mv.visitAnnotation(LF_COMPILED_SIG, true);
@@ -1752,7 +1752,7 @@
methodPrologue();
// Suppress this method in backtraces displayed to the user.
- mv.visitAnnotation(LF_HIDDEN_SIG, true);
+ mv.visitAnnotation(HIDDEN_SIG, true);
// Don't inline the interpreter entry.
mv.visitAnnotation(DONTINLINE_SIG, true);
@@ -1812,7 +1812,7 @@
methodPrologue();
// Suppress this method in backtraces displayed to the user.
- mv.visitAnnotation(LF_HIDDEN_SIG, true);
+ mv.visitAnnotation(HIDDEN_SIG, true);
// Force inlining of this invoker method.
mv.visitAnnotation(FORCEINLINE_SIG, true);
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/java/lang/invoke/LambdaForm.java
--- a/src/java.base/share/classes/java/lang/invoke/LambdaForm.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/java/lang/invoke/LambdaForm.java Tue Jan 29 09:38:31 2019 -0500
@@ -27,6 +27,7 @@
import jdk.internal.perf.PerfCounter;
import jdk.internal.vm.annotation.DontInline;
+import jdk.internal.vm.annotation.Hidden;
import jdk.internal.vm.annotation.Stable;
import sun.invoke.util.Wrapper;
@@ -1828,15 +1829,6 @@
@interface Compiled {
}
- /**
- * Internal marker for LambdaForm interpreter frames.
- */
- /*non-public*/
- @Target(ElementType.METHOD)
- @Retention(RetentionPolicy.RUNTIME)
- @interface Hidden {
- }
-
private static final HashMap DEBUG_NAME_COUNTERS;
private static final HashMap DEBUG_NAMES;
static {
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java
--- a/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java Tue Jan 29 09:38:31 2019 -0500
@@ -33,6 +33,7 @@
import jdk.internal.reflect.CallerSensitive;
import jdk.internal.reflect.Reflection;
import jdk.internal.vm.annotation.ForceInline;
+import jdk.internal.vm.annotation.Hidden;
import jdk.internal.vm.annotation.Stable;
import sun.invoke.empty.Empty;
import sun.invoke.util.ValueConversions;
@@ -681,7 +682,7 @@
return SimpleMethodHandle.make(srcType, form);
}
- @LambdaForm.Hidden
+ @Hidden
static
MethodHandle selectAlternative(boolean testResult, MethodHandle target, MethodHandle fallback) {
if (testResult) {
@@ -692,7 +693,7 @@
}
// Intrinsified by C2. Counters are used during parsing to calculate branch frequencies.
- @LambdaForm.Hidden
+ @Hidden
@jdk.internal.HotSpotIntrinsicCandidate
static
boolean profileBoolean(boolean result, int[] counters) {
@@ -708,7 +709,7 @@
}
// Intrinsified by C2. Returns true if obj is a compile-time constant.
- @LambdaForm.Hidden
+ @Hidden
@jdk.internal.HotSpotIntrinsicCandidate
static
boolean isCompileConstant(Object obj) {
@@ -1054,7 +1055,7 @@
* Intrinsified during LambdaForm compilation
* (see {@link InvokerBytecodeGenerator#emitGuardWithCatch emitGuardWithCatch}).
*/
- @LambdaForm.Hidden
+ @Hidden
static Object guardWithCatch(MethodHandle target, Class extends Throwable> exType, MethodHandle catcher,
Object... av) throws Throwable {
// Use asFixedArity() to avoid unnecessary boxing of last argument for VarargsCollector case.
@@ -1067,7 +1068,7 @@
}
/** Prepend elements to an array. */
- @LambdaForm.Hidden
+ @Hidden
private static Object[] prepend(Object[] array, Object... elems) {
int nArray = array.length;
int nElems = elems.length;
@@ -1265,7 +1266,7 @@
null, null);
// Suppress invoker method in stack traces.
- AnnotationVisitor av0 = mv.visitAnnotation("Ljava/lang/invoke/LambdaForm$Hidden;", true);
+ AnnotationVisitor av0 = mv.visitAnnotation(InvokerBytecodeGenerator.HIDDEN_SIG, true);
av0.visitEnd();
mv.visitCode();
@@ -1969,7 +1970,7 @@
* Intrinsified during LambdaForm compilation
* (see {@link InvokerBytecodeGenerator#emitLoop(int)}).
*/
- @LambdaForm.Hidden
+ @Hidden
static Object loop(BasicType[] localTypes, LoopClauses clauseData, Object... av) throws Throwable {
final MethodHandle[] init = clauseData.clauses[0];
final MethodHandle[] step = clauseData.clauses[1];
@@ -2174,7 +2175,7 @@
* Intrinsified during LambdaForm compilation
* (see {@link InvokerBytecodeGenerator#emitTryFinally emitTryFinally}).
*/
- @LambdaForm.Hidden
+ @Hidden
static Object tryFinally(MethodHandle target, MethodHandle cleanup, Object... av) throws Throwable {
Throwable t = null;
Object r = null;
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/java/net/HttpConnectSocketImpl.java
--- a/src/java.base/share/classes/java/net/HttpConnectSocketImpl.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/java/net/HttpConnectSocketImpl.java Tue Jan 29 09:38:31 2019 -0500
@@ -197,14 +197,4 @@
else
return super.getPort();
}
-
- @Override
- protected int getLocalPort() {
- if (socket != null)
- return super.getLocalPort();
- if (external_address != null)
- return external_address.getPort();
- else
- return super.getLocalPort();
- }
}
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/java/net/SocksSocketImpl.java
--- a/src/java.base/share/classes/java/net/SocksSocketImpl.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/java/net/SocksSocketImpl.java Tue Jan 29 09:38:31 2019 -0500
@@ -28,14 +28,11 @@
import java.io.OutputStream;
import java.io.BufferedOutputStream;
import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedExceptionAction;
import jdk.internal.util.StaticProperty;
import sun.net.SocksProxy;
import sun.net.spi.DefaultProxySelector;
import sun.net.www.ParseUtil;
-/* import org.ietf.jgss.*; */
/**
* SOCKS (V4 & V5) TCP socket implementation (RFC 1928).
@@ -51,19 +48,11 @@
private Socket cmdsock = null;
private InputStream cmdIn = null;
private OutputStream cmdOut = null;
- /* true if the Proxy has been set programmatically */
- private boolean applicationSetProxy; /* false */
-
SocksSocketImpl() {
// Nothing needed
}
- SocksSocketImpl(String server, int port) {
- this.server = server;
- this.serverPort = (port == -1 ? DEFAULT_PORT : port);
- }
-
SocksSocketImpl(Proxy proxy) {
SocketAddress a = proxy.address();
if (a instanceof InetSocketAddress) {
@@ -75,10 +64,6 @@
useV4 = useV4(proxy);
}
- void setV4() {
- useV4 = true;
- }
-
private static boolean useV4(Proxy proxy) {
if (proxy instanceof SocksProxy
&& ((SocksProxy)proxy).protocolVersion() == 4) {
@@ -123,10 +108,6 @@
throw new SocketTimeoutException();
}
- private int readSocksReply(InputStream in, byte[] data) throws IOException {
- return readSocksReply(in, data, 0L);
- }
-
private int readSocksReply(InputStream in, byte[] data, long deadlineMillis) throws IOException {
int len = data.length;
int received = 0;
@@ -144,14 +125,6 @@
return received;
}
- /**
- * Provides the authentication mechanism required by the proxy.
- */
- private boolean authenticate(byte method, InputStream in,
- BufferedOutputStream out) throws IOException {
- return authenticate(method, in, out, 0L);
- }
-
private boolean authenticate(byte method, InputStream in,
BufferedOutputStream out,
long deadlineMillis) throws IOException {
@@ -212,60 +185,6 @@
/* Authentication succeeded */
return true;
}
- /**
- * GSSAPI authentication mechanism.
- * Unfortunately the RFC seems out of sync with the Reference
- * implementation. I'll leave this in for future completion.
- */
-// if (method == GSSAPI) {
-// try {
-// GSSManager manager = GSSManager.getInstance();
-// GSSName name = manager.createName("SERVICE:socks@"+server,
-// null);
-// GSSContext context = manager.createContext(name, null, null,
-// GSSContext.DEFAULT_LIFETIME);
-// context.requestMutualAuth(true);
-// context.requestReplayDet(true);
-// context.requestSequenceDet(true);
-// context.requestCredDeleg(true);
-// byte []inToken = new byte[0];
-// while (!context.isEstablished()) {
-// byte[] outToken
-// = context.initSecContext(inToken, 0, inToken.length);
-// // send the output token if generated
-// if (outToken != null) {
-// out.write(1);
-// out.write(1);
-// out.writeShort(outToken.length);
-// out.write(outToken);
-// out.flush();
-// data = new byte[2];
-// i = readSocksReply(in, data, deadlineMillis);
-// if (i != 2 || data[1] == 0xff) {
-// in.close();
-// out.close();
-// return false;
-// }
-// i = readSocksReply(in, data, deadlineMillis);
-// int len = 0;
-// len = ((int)data[0] & 0xff) << 8;
-// len += data[1];
-// data = new byte[len];
-// i = readSocksReply(in, data, deadlineMillis);
-// if (i == len)
-// return true;
-// in.close();
-// out.close();
-// }
-// }
-// } catch (GSSException e) {
-// /* RFC 1961 states that if Context initialisation fails the connection
-// MUST be closed */
-// e.printStackTrace();
-// in.close();
-// out.close();
-// }
-// }
return false;
}
@@ -590,450 +509,6 @@
external_address = epoint;
}
- private void bindV4(InputStream in, OutputStream out,
- InetAddress baddr,
- int lport) throws IOException {
- if (!(baddr instanceof Inet4Address)) {
- throw new SocketException("SOCKS V4 requires IPv4 only addresses");
- }
- super.bind(baddr, lport);
- byte[] addr1 = baddr.getAddress();
- /* Test for AnyLocal */
- InetAddress naddr = baddr;
- if (naddr.isAnyLocalAddress()) {
- naddr = AccessController.doPrivileged(
- new PrivilegedAction<>() {
- public InetAddress run() {
- return cmdsock.getLocalAddress();
-
- }
- });
- addr1 = naddr.getAddress();
- }
- out.write(PROTO_VERS4);
- out.write(BIND);
- out.write((super.getLocalPort() >> 8) & 0xff);
- out.write((super.getLocalPort() >> 0) & 0xff);
- out.write(addr1);
- String userName = getUserName();
- try {
- out.write(userName.getBytes("ISO-8859-1"));
- } catch (java.io.UnsupportedEncodingException uee) {
- assert false;
- }
- out.write(0);
- out.flush();
- byte[] data = new byte[8];
- int n = readSocksReply(in, data);
- if (n != 8)
- throw new SocketException("Reply from SOCKS server has bad length: " + n);
- if (data[0] != 0 && data[0] != 4)
- throw new SocketException("Reply from SOCKS server has bad version");
- SocketException ex = null;
- switch (data[1]) {
- case 90:
- // Success!
- external_address = new InetSocketAddress(baddr, lport);
- break;
- case 91:
- ex = new SocketException("SOCKS request rejected");
- break;
- case 92:
- ex = new SocketException("SOCKS server couldn't reach destination");
- break;
- case 93:
- ex = new SocketException("SOCKS authentication failed");
- break;
- default:
- ex = new SocketException("Reply from SOCKS server contains bad status");
- break;
- }
- if (ex != null) {
- in.close();
- out.close();
- throw ex;
- }
-
- }
-
- /**
- * Sends the Bind request to the SOCKS proxy. In the SOCKS protocol, bind
- * means "accept incoming connection from", so the SocketAddress is
- * the one of the host we do accept connection from.
- *
- * @param saddr the Socket address of the remote host.
- * @exception IOException if an I/O error occurs when binding this socket.
- */
- protected synchronized void socksBind(InetSocketAddress saddr) throws IOException {
- if (socket != null) {
- // this is a client socket, not a server socket, don't
- // call the SOCKS proxy for a bind!
- return;
- }
-
- // Connects to the SOCKS server
-
- if (server == null) {
- // This is the general case
- // server is not null only when the socket was created with a
- // specified proxy in which case it does bypass the ProxySelector
- ProxySelector sel = java.security.AccessController.doPrivileged(
- new java.security.PrivilegedAction<>() {
- public ProxySelector run() {
- return ProxySelector.getDefault();
- }
- });
- if (sel == null) {
- /*
- * No default proxySelector --> direct connection
- */
- return;
- }
- URI uri;
- // Use getHostString() to avoid reverse lookups
- String host = saddr.getHostString();
- // IPv6 literal?
- if (saddr.getAddress() instanceof Inet6Address &&
- (!host.startsWith("[")) && (host.indexOf(':') >= 0)) {
- host = "[" + host + "]";
- }
- try {
- uri = new URI("serversocket://" + ParseUtil.encodePath(host) + ":"+ saddr.getPort());
- } catch (URISyntaxException e) {
- // This shouldn't happen
- assert false : e;
- uri = null;
- }
- Proxy p = null;
- Exception savedExc = null;
- java.util.Iterator iProxy = null;
- iProxy = sel.select(uri).iterator();
- if (iProxy == null || !(iProxy.hasNext())) {
- return;
- }
- while (iProxy.hasNext()) {
- p = iProxy.next();
- if (p == null || p.type() != Proxy.Type.SOCKS) {
- return;
- }
-
- if (!(p.address() instanceof InetSocketAddress))
- throw new SocketException("Unknown address type for proxy: " + p);
- // Use getHostString() to avoid reverse lookups
- server = ((InetSocketAddress) p.address()).getHostString();
- serverPort = ((InetSocketAddress) p.address()).getPort();
- useV4 = useV4(p);
-
- // Connects to the SOCKS server
- try {
- AccessController.doPrivileged(
- new PrivilegedExceptionAction<>() {
- public Void run() throws Exception {
- cmdsock = new Socket(new PlainSocketImpl());
- cmdsock.connect(new InetSocketAddress(server, serverPort));
- cmdIn = cmdsock.getInputStream();
- cmdOut = cmdsock.getOutputStream();
- return null;
- }
- });
- } catch (Exception e) {
- // Ooops, let's notify the ProxySelector
- sel.connectFailed(uri,p.address(),new SocketException(e.getMessage()));
- server = null;
- serverPort = -1;
- cmdsock = null;
- savedExc = e;
- // Will continue the while loop and try the next proxy
- }
- }
-
- /*
- * If server is still null at this point, none of the proxy
- * worked
- */
- if (server == null || cmdsock == null) {
- throw new SocketException("Can't connect to SOCKS proxy:"
- + savedExc.getMessage());
- }
- } else {
- try {
- AccessController.doPrivileged(
- new PrivilegedExceptionAction<>() {
- public Void run() throws Exception {
- cmdsock = new Socket(new PlainSocketImpl());
- cmdsock.connect(new InetSocketAddress(server, serverPort));
- cmdIn = cmdsock.getInputStream();
- cmdOut = cmdsock.getOutputStream();
- return null;
- }
- });
- } catch (Exception e) {
- throw new SocketException(e.getMessage());
- }
- }
- BufferedOutputStream out = new BufferedOutputStream(cmdOut, 512);
- InputStream in = cmdIn;
- if (useV4) {
- bindV4(in, out, saddr.getAddress(), saddr.getPort());
- return;
- }
- out.write(PROTO_VERS);
- out.write(2);
- out.write(NO_AUTH);
- out.write(USER_PASSW);
- out.flush();
- byte[] data = new byte[2];
- int i = readSocksReply(in, data);
- if (i != 2 || ((int)data[0]) != PROTO_VERS) {
- // Maybe it's not a V5 sever after all
- // Let's try V4 before we give up
- bindV4(in, out, saddr.getAddress(), saddr.getPort());
- return;
- }
- if (((int)data[1]) == NO_METHODS)
- throw new SocketException("SOCKS : No acceptable methods");
- if (!authenticate(data[1], in, out)) {
- throw new SocketException("SOCKS : authentication failed");
- }
- // We're OK. Let's issue the BIND command.
- out.write(PROTO_VERS);
- out.write(BIND);
- out.write(0);
- int lport = saddr.getPort();
- if (saddr.isUnresolved()) {
- out.write(DOMAIN_NAME);
- out.write(saddr.getHostName().length());
- try {
- out.write(saddr.getHostName().getBytes("ISO-8859-1"));
- } catch (java.io.UnsupportedEncodingException uee) {
- assert false;
- }
- out.write((lport >> 8) & 0xff);
- out.write((lport >> 0) & 0xff);
- } else if (saddr.getAddress() instanceof Inet4Address) {
- byte[] addr1 = saddr.getAddress().getAddress();
- out.write(IPV4);
- out.write(addr1);
- out.write((lport >> 8) & 0xff);
- out.write((lport >> 0) & 0xff);
- out.flush();
- } else if (saddr.getAddress() instanceof Inet6Address) {
- byte[] addr1 = saddr.getAddress().getAddress();
- out.write(IPV6);
- out.write(addr1);
- out.write((lport >> 8) & 0xff);
- out.write((lport >> 0) & 0xff);
- out.flush();
- } else {
- cmdsock.close();
- throw new SocketException("unsupported address type : " + saddr);
- }
- data = new byte[4];
- i = readSocksReply(in, data);
- SocketException ex = null;
- int len, nport;
- byte[] addr;
- switch (data[1]) {
- case REQUEST_OK:
- // success!
- switch(data[3]) {
- case IPV4:
- addr = new byte[4];
- i = readSocksReply(in, addr);
- if (i != 4)
- throw new SocketException("Reply from SOCKS server badly formatted");
- data = new byte[2];
- i = readSocksReply(in, data);
- if (i != 2)
- throw new SocketException("Reply from SOCKS server badly formatted");
- nport = ((int)data[0] & 0xff) << 8;
- nport += ((int)data[1] & 0xff);
- external_address =
- new InetSocketAddress(new Inet4Address("", addr) , nport);
- break;
- case DOMAIN_NAME:
- len = data[1];
- byte[] host = new byte[len];
- i = readSocksReply(in, host);
- if (i != len)
- throw new SocketException("Reply from SOCKS server badly formatted");
- data = new byte[2];
- i = readSocksReply(in, data);
- if (i != 2)
- throw new SocketException("Reply from SOCKS server badly formatted");
- nport = ((int)data[0] & 0xff) << 8;
- nport += ((int)data[1] & 0xff);
- external_address = new InetSocketAddress(new String(host), nport);
- break;
- case IPV6:
- len = data[1];
- addr = new byte[len];
- i = readSocksReply(in, addr);
- if (i != len)
- throw new SocketException("Reply from SOCKS server badly formatted");
- data = new byte[2];
- i = readSocksReply(in, data);
- if (i != 2)
- throw new SocketException("Reply from SOCKS server badly formatted");
- nport = ((int)data[0] & 0xff) << 8;
- nport += ((int)data[1] & 0xff);
- external_address =
- new InetSocketAddress(new Inet6Address("", addr), nport);
- break;
- }
- break;
- case GENERAL_FAILURE:
- ex = new SocketException("SOCKS server general failure");
- break;
- case NOT_ALLOWED:
- ex = new SocketException("SOCKS: Bind not allowed by ruleset");
- break;
- case NET_UNREACHABLE:
- ex = new SocketException("SOCKS: Network unreachable");
- break;
- case HOST_UNREACHABLE:
- ex = new SocketException("SOCKS: Host unreachable");
- break;
- case CONN_REFUSED:
- ex = new SocketException("SOCKS: Connection refused");
- break;
- case TTL_EXPIRED:
- ex = new SocketException("SOCKS: TTL expired");
- break;
- case CMD_NOT_SUPPORTED:
- ex = new SocketException("SOCKS: Command not supported");
- break;
- case ADDR_TYPE_NOT_SUP:
- ex = new SocketException("SOCKS: address type not supported");
- break;
- }
- if (ex != null) {
- in.close();
- out.close();
- cmdsock.close();
- cmdsock = null;
- throw ex;
- }
- cmdIn = in;
- cmdOut = out;
- }
-
- /**
- * Accepts a connection from a specific host.
- *
- * @param s the accepted connection.
- * @param saddr the socket address of the host we do accept
- * connection from
- * @exception IOException if an I/O error occurs when accepting the
- * connection.
- */
- protected void acceptFrom(SocketImpl s, InetSocketAddress saddr) throws IOException {
- if (cmdsock == null) {
- // Not a Socks ServerSocket.
- return;
- }
- InputStream in = cmdIn;
- // Sends the "SOCKS BIND" request.
- socksBind(saddr);
- in.read();
- int i = in.read();
- in.read();
- SocketException ex = null;
- int nport;
- byte[] addr;
- InetSocketAddress real_end = null;
- switch (i) {
- case REQUEST_OK:
- // success!
- i = in.read();
- switch(i) {
- case IPV4:
- addr = new byte[4];
- readSocksReply(in, addr);
- nport = in.read() << 8;
- nport += in.read();
- real_end =
- new InetSocketAddress(new Inet4Address("", addr) , nport);
- break;
- case DOMAIN_NAME:
- int len = in.read();
- addr = new byte[len];
- readSocksReply(in, addr);
- nport = in.read() << 8;
- nport += in.read();
- real_end = new InetSocketAddress(new String(addr), nport);
- break;
- case IPV6:
- addr = new byte[16];
- readSocksReply(in, addr);
- nport = in.read() << 8;
- nport += in.read();
- real_end =
- new InetSocketAddress(new Inet6Address("", addr), nport);
- break;
- }
- break;
- case GENERAL_FAILURE:
- ex = new SocketException("SOCKS server general failure");
- break;
- case NOT_ALLOWED:
- ex = new SocketException("SOCKS: Accept not allowed by ruleset");
- break;
- case NET_UNREACHABLE:
- ex = new SocketException("SOCKS: Network unreachable");
- break;
- case HOST_UNREACHABLE:
- ex = new SocketException("SOCKS: Host unreachable");
- break;
- case CONN_REFUSED:
- ex = new SocketException("SOCKS: Connection refused");
- break;
- case TTL_EXPIRED:
- ex = new SocketException("SOCKS: TTL expired");
- break;
- case CMD_NOT_SUPPORTED:
- ex = new SocketException("SOCKS: Command not supported");
- break;
- case ADDR_TYPE_NOT_SUP:
- ex = new SocketException("SOCKS: address type not supported");
- break;
- }
- if (ex != null) {
- cmdIn.close();
- cmdOut.close();
- cmdsock.close();
- cmdsock = null;
- throw ex;
- }
-
- /**
- * This is where we have to do some fancy stuff.
- * The datastream from the socket "accepted" by the proxy will
- * come through the cmdSocket. So we have to swap the socketImpls
- */
- if (s instanceof SocksSocketImpl) {
- ((SocksSocketImpl)s).external_address = real_end;
- }
- if (s instanceof PlainSocketImpl) {
- PlainSocketImpl psi = (PlainSocketImpl) s;
- psi.setInputStream((SocketInputStream) in);
- psi.setFileDescriptor(cmdsock.getImpl().getFileDescriptor());
- psi.setAddress(cmdsock.getImpl().getInetAddress());
- psi.setPort(cmdsock.getImpl().getPort());
- psi.setLocalPort(cmdsock.getImpl().getLocalPort());
- } else {
- s.fd = cmdsock.getImpl().fd;
- s.address = cmdsock.getImpl().address;
- s.port = cmdsock.getImpl().port;
- s.localport = cmdsock.getImpl().localport;
- }
-
- // Need to do that so that the socket won't be closed
- // when the ServerSocket is closed by the user.
- // It kinds of detaches the Socket because it is now
- // used elsewhere.
- cmdsock = null;
- }
/**
@@ -1065,16 +540,6 @@
}
@Override
- protected int getLocalPort() {
- if (socket != null)
- return super.getLocalPort();
- if (external_address != null)
- return external_address.getPort();
- else
- return super.getLocalPort();
- }
-
- @Override
protected void close() throws IOException {
if (cmdsock != null)
cmdsock.close();
@@ -1083,14 +548,6 @@
}
private String getUserName() {
- String userName = "";
- if (applicationSetProxy) {
- try {
- userName = System.getProperty("user.name");
- } catch (SecurityException se) { /* swallow Exception */ }
- } else {
- userName = StaticProperty.userName();
- }
- return userName;
+ return StaticProperty.userName();
}
}
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/java/security/AccessController.java
--- a/src/java.base/share/classes/java/security/AccessController.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/java/security/AccessController.java Tue Jan 29 09:38:31 2019 -0500
@@ -30,6 +30,8 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.ref.Reference;
+
+import jdk.internal.vm.annotation.Hidden;
import sun.security.util.Debug;
import sun.security.util.SecurityConstants;
import jdk.internal.reflect.CallerSensitive;
@@ -790,16 +792,6 @@
/**
- * Internal marker for hidden implementation frames.
- */
- /*non-public*/
- @Target(ElementType.METHOD)
- @Retention(RetentionPolicy.RUNTIME)
- @interface Hidden {
- }
-
-
- /**
* Wrap an exception. The annotations are used in a best effort to
* avoid StackOverflowError in the caller. Inlining the callees as
* well and tail-call elimination could also help here, but are not
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/java/text/SimpleDateFormat.java
--- a/src/java.base/share/classes/java/text/SimpleDateFormat.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/java/text/SimpleDateFormat.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2019, 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
@@ -1189,7 +1189,7 @@
}
break;
- case PATTERN_MONTH: // 'M' (context seinsive)
+ case PATTERN_MONTH: // 'M' (context sensitive)
if (useDateFormatSymbols) {
String[] months;
if (count >= 4) {
@@ -2033,7 +2033,7 @@
return index;
}
} else {
- Map map = getDisplayNamesMap(field, locale);
+ Map map = getDisplayContextNamesMap(field, locale);
if ((index = matchString(text, start, field, map, calb)) > 0) {
return index;
}
@@ -2450,6 +2450,22 @@
}
/**
+ * Obtains display names map, taking the context into account. Currently only
+ * the month name pattern 'M' is context dependent.
+ */
+ private Map getDisplayContextNamesMap(int field, Locale locale) {
+ Map map = calendar.getDisplayNames(field,
+ forceStandaloneForm ? Calendar.SHORT_STANDALONE : Calendar.SHORT_FORMAT, locale);
+ // Get the LONG style
+ Map m = calendar.getDisplayNames(field,
+ forceStandaloneForm ? Calendar.LONG_STANDALONE : Calendar.LONG_FORMAT, locale);
+ if (m != null) {
+ map.putAll(m);
+ }
+ return map;
+ }
+
+ /**
* After reading an object from the input stream, the format
* pattern in the object is verified.
*
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/java/util/Base64.java
--- a/src/java.base/share/classes/java/util/Base64.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/java/util/Base64.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, 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
@@ -186,6 +186,10 @@
* a method of this class will cause a
* {@link java.lang.NullPointerException NullPointerException} to
* be thrown.
+ *
If the encoded byte output of the needed size can not
+ * be allocated, the encode methods of this class will
+ * cause an {@link java.lang.OutOfMemoryError OutOfMemoryError}
+ * to be thrown.
*
* @see Decoder
* @since 1.8
@@ -237,16 +241,37 @@
static final Encoder RFC4648_URLSAFE = new Encoder(true, null, -1, true);
static final Encoder RFC2045 = new Encoder(false, CRLF, MIMELINEMAX, true);
- private final int outLength(int srclen) {
+ /**
+ * Calculates the length of the encoded output bytes.
+ *
+ * @param srclen length of the bytes to encode
+ * @param throwOOME if true, throws OutOfMemoryError if the length of
+ * the encoded bytes overflows; else returns the
+ * length
+ * @return length of the encoded bytes, or -1 if the length overflows
+ *
+ */
+ private final int outLength(int srclen, boolean throwOOME) {
int len = 0;
- if (doPadding) {
- len = 4 * ((srclen + 2) / 3);
- } else {
- int n = srclen % 3;
- len = 4 * (srclen / 3) + (n == 0 ? 0 : n + 1);
+ try {
+ if (doPadding) {
+ len = Math.multiplyExact(4, (Math.addExact(srclen, 2) / 3));
+ } else {
+ int n = srclen % 3;
+ len = Math.addExact(Math.multiplyExact(4, (srclen / 3)), (n == 0 ? 0 : n + 1));
+ }
+ if (linemax > 0) { // line separators
+ len = Math.addExact(len, (len - 1) / linemax * newline.length);
+ }
+ } catch (ArithmeticException ex) {
+ if (throwOOME) {
+ throw new OutOfMemoryError("Encoded size is too large");
+ } else {
+ // let the caller know that encoded bytes length
+ // is too large
+ len = -1;
+ }
}
- if (linemax > 0) // line separators
- len += (len - 1) / linemax * newline.length;
return len;
}
@@ -261,7 +286,7 @@
* encoded bytes.
*/
public byte[] encode(byte[] src) {
- int len = outLength(src.length); // dst array size
+ int len = outLength(src.length, true); // dst array size
byte[] dst = new byte[len];
int ret = encode0(src, 0, src.length, dst);
if (ret != dst.length)
@@ -289,8 +314,8 @@
* space for encoding all input bytes.
*/
public int encode(byte[] src, byte[] dst) {
- int len = outLength(src.length); // dst array size
- if (dst.length < len)
+ int len = outLength(src.length, false); // dst array size
+ if (dst.length < len || len == -1)
throw new IllegalArgumentException(
"Output byte array is too small for encoding all input bytes");
return encode0(src, 0, src.length, dst);
@@ -334,7 +359,7 @@
* @return A newly-allocated byte buffer containing the encoded bytes.
*/
public ByteBuffer encode(ByteBuffer buffer) {
- int len = outLength(buffer.remaining());
+ int len = outLength(buffer.remaining(), true);
byte[] dst = new byte[len];
int ret = 0;
if (buffer.hasArray()) {
@@ -469,6 +494,10 @@
* a method of this class will cause a
* {@link java.lang.NullPointerException NullPointerException} to
* be thrown.
+ *
If the decoded byte output of the needed size can not
+ * be allocated, the decode methods of this class will
+ * cause an {@link java.lang.OutOfMemoryError OutOfMemoryError}
+ * to be thrown.
*
* @see Encoder
* @since 1.8
@@ -531,7 +560,7 @@
* if {@code src} is not in valid Base64 scheme
*/
public byte[] decode(byte[] src) {
- byte[] dst = new byte[outLength(src, 0, src.length)];
+ byte[] dst = new byte[outLength(src, 0, src.length, true)];
int ret = decode0(src, 0, src.length, dst);
if (ret != dst.length) {
dst = Arrays.copyOf(dst, ret);
@@ -584,8 +613,8 @@
* does not have enough space for decoding all input bytes.
*/
public int decode(byte[] src, byte[] dst) {
- int len = outLength(src, 0, src.length);
- if (dst.length < len)
+ int len = outLength(src, 0, src.length, false);
+ if (dst.length < len || len == -1)
throw new IllegalArgumentException(
"Output byte array is too small for decoding all input bytes");
return decode0(src, 0, src.length, dst);
@@ -610,7 +639,7 @@
* @return A newly-allocated byte buffer containing the decoded bytes
*
* @throws IllegalArgumentException
- * if {@code src} is not in valid Base64 scheme.
+ * if {@code buffer} is not in valid Base64 scheme
*/
public ByteBuffer decode(ByteBuffer buffer) {
int pos0 = buffer.position();
@@ -628,7 +657,7 @@
sp = 0;
sl = src.length;
}
- byte[] dst = new byte[outLength(src, sp, sl)];
+ byte[] dst = new byte[outLength(src, sp, sl, true)];
return ByteBuffer.wrap(dst, 0, decode0(src, sp, sl, dst));
} catch (IllegalArgumentException iae) {
buffer.position(pos0);
@@ -656,7 +685,19 @@
return new DecInputStream(is, isURL ? fromBase64URL : fromBase64, isMIME);
}
- private int outLength(byte[] src, int sp, int sl) {
+ /**
+ * Calculates the length of the decoded output bytes.
+ *
+ * @param src the byte array to decode
+ * @param sp the source position
+ * @param sl the source limit
+ * @param throwOOME if true, throws OutOfMemoryError if the length of
+ * the decoded bytes overflows; else returns the
+ * length
+ * @return length of the decoded bytes, or -1 if the length overflows
+ *
+ */
+ private int outLength(byte[] src, int sp, int sl, boolean throwOOME) {
int[] base64 = isURL ? fromBase64URL : fromBase64;
int paddings = 0;
int len = sl - sp;
@@ -691,7 +732,19 @@
}
if (paddings == 0 && (len & 0x3) != 0)
paddings = 4 - (len & 0x3);
- return 3 * ((len + 3) / 4) - paddings;
+
+ try {
+ len = Math.multiplyExact(3, (Math.addExact(len, 3) / 4)) - paddings;
+ } catch (ArithmeticException ex) {
+ if (throwOOME) {
+ throw new OutOfMemoryError("Decoded size is too large");
+ } else {
+ // let the caller know that the decoded bytes length
+ // is too large
+ len = -1;
+ }
+ }
+ return len;
}
private int decode0(byte[] src, int sp, int sl, byte[] dst) {
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/javax/net/ssl/SSLSocket.java
--- a/src/java.base/share/classes/javax/net/ssl/SSLSocket.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/javax/net/ssl/SSLSocket.java Tue Jan 29 09:38:31 2019 -0500
@@ -135,7 +135,7 @@
* applications should each close both sides of their respective connection.
* For {@code SSLSocket} objects, for example, an application can call
* {@link Socket#shutdownOutput()} or {@link java.io.OutputStream#close()}
- * for output strean close and call {@link Socket#shutdownInput()} or
+ * for output stream close and call {@link Socket#shutdownInput()} or
* {@link java.io.InputStream#close()} for input stream close. Note that
* in some cases, closing the input stream may depend on the peer's output
* stream being closed first. If the connection is not closed in an orderly
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/jdk/internal/vm/annotation/Hidden.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.base/share/classes/jdk/internal/vm/annotation/Hidden.java Tue Jan 29 09:38:31 2019 -0500
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2019, 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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.
+ */
+
+package jdk.internal.vm.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * A method or constructor may be annotated as "hidden" to hint it is desirable
+ * to omit it from stack traces.
+ *
+ * @implNote
+ * This annotation only takes effect for methods or constructors of classes
+ * loaded by the boot loader. Annotations on methods or constructors of classes
+ * loaded outside of the boot loader are ignored.
+ *
+ *
HotSpot JVM provides diagnostic option {@code -XX:+ShowHiddenFrames} to
+ * always show "hidden" frames.
+ */
+@Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Hidden {
+}
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/sun/nio/ch/Net.java
--- a/src/java.base/share/classes/sun/nio/ch/Net.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/sun/nio/ch/Net.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2019, 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
@@ -524,9 +524,30 @@
static native int poll(FileDescriptor fd, int events, long timeout)
throws IOException;
+ /**
+ * Polls a connecting socket to test if the connection has been established.
+ *
+ * @apiNote This method is public to allow it be used by code in jdk.sctp.
+ *
+ * @param timeout the timeout to wait; 0 to not wait, -1 to wait indefinitely
+ * @return 1 if connected, 0 if not connected, or IOS_INTERRUPTED
+ */
+ public static native int pollConnect(FileDescriptor fd, long timeout)
+ throws IOException;
+
+ /**
+ * Return the number of bytes in the socket input buffer.
+ */
+ static native int available(FileDescriptor fd) throws IOException;
+
+ /**
+ * Send one byte of urgent data (MSG_OOB) on the socket.
+ */
+ static native int sendOOB(FileDescriptor fd, byte data) throws IOException;
+
+
// -- Multicast support --
-
/**
* Join IPv4 multicast group
*/
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/sun/nio/ch/SocketChannelImpl.java
--- a/src/java.base/share/classes/sun/nio/ch/SocketChannelImpl.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/sun/nio/ch/SocketChannelImpl.java Tue Jan 29 09:38:31 2019 -0500
@@ -65,7 +65,7 @@
implements SelChImpl
{
// Used to make native read and write calls
- private static NativeDispatcher nd;
+ private static final NativeDispatcher nd = new SocketDispatcher();
// Our file descriptor object
private final FileDescriptor fd;
@@ -517,10 +517,10 @@
beginWrite(blocking);
if (blocking) {
do {
- n = sendOutOfBandData(fd, b);
+ n = Net.sendOOB(fd, b);
} while (n == IOStatus.INTERRUPTED && isOpen());
} else {
- n = sendOutOfBandData(fd, b);
+ n = Net.sendOOB(fd, b);
}
} finally {
endWrite(blocking, n > 0);
@@ -772,10 +772,10 @@
int n = 0;
if (blocking) {
do {
- n = checkConnect(fd, true);
+ n = Net.pollConnect(fd, -1);
} while ((n == 0 || n == IOStatus.INTERRUPTED) && isOpen());
} else {
- n = checkConnect(fd, false);
+ n = Net.pollConnect(fd, 0);
}
connected = (n > 0);
} finally {
@@ -1112,19 +1112,4 @@
sb.append(']');
return sb.toString();
}
-
-
- // -- Native methods --
-
- private static native int checkConnect(FileDescriptor fd, boolean block)
- throws IOException;
-
- private static native int sendOutOfBandData(FileDescriptor fd, byte data)
- throws IOException;
-
- static {
- IOUtil.load();
- nd = new SocketDispatcher();
- }
-
}
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/sun/security/util/ECUtil.java
--- a/src/java.base/share/classes/sun/security/util/ECUtil.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/sun/security/util/ECUtil.java Tue Jan 29 09:38:31 2019 -0500
@@ -31,7 +31,6 @@
import java.security.interfaces.*;
import java.security.spec.*;
import java.util.Arrays;
-import sun.security.x509.X509Key;
public class ECUtil {
@@ -103,7 +102,7 @@
ECParameterSpec params) throws InvalidKeySpecException {
KeyFactory keyFactory = getKeyFactory();
ECPublicKeySpec keySpec = new ECPublicKeySpec(w, params);
- X509Key key = (X509Key)keyFactory.generatePublic(keySpec);
+ Key key = keyFactory.generatePublic(keySpec);
return key.getEncoded();
}
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/sun/security/validator/CADistrustPolicy.java
--- a/src/java.base/share/classes/sun/security/validator/CADistrustPolicy.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/sun/security/validator/CADistrustPolicy.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -39,17 +39,19 @@
enum CADistrustPolicy {
/**
* Distrust TLS Server certificates anchored by a Symantec root CA and
- * issued after April 16, 2019. If enabled, this policy is currently
- * enforced by the PKIX and SunX509 TrustManager implementations of the
- * SunJSSE provider implementation.
+ * issued after April 16, 2019 (with exceptions for a couple of subordinate
+ * CAs, see the jdk.security.caDistrustPolicies definition in the
+ * java.security file for more details). If enabled, this policy is
+ * currently enforced by the PKIX and SunX509 TrustManager implementations
+ * of the SunJSSE provider implementation.
*/
SYMANTEC_TLS {
- void checkDistrust(String variant, X509Certificate anchor,
- X509Certificate ee) throws ValidatorException {
+ void checkDistrust(String variant, X509Certificate[] chain)
+ throws ValidatorException {
if (!variant.equals(Validator.VAR_TLS_SERVER)) {
return;
}
- SymantecTLSPolicy.checkDistrust(anchor, ee);
+ SymantecTLSPolicy.checkDistrust(chain);
}
};
@@ -57,13 +59,13 @@
* Checks if the end-entity certificate is distrusted.
*
* @param variant the type of certificate being checked
- * @param anchor the trust anchor certificate
- * @param ee the end-entity certificate to check
+ * @param chain the end-entity's certificate chain. The end entity cert
+ * is at index 0, the trust anchor at index n-1.
* @throws ValidatorException if the end-entity certificate is distrusted
*/
abstract void checkDistrust(String variant,
- X509Certificate anchor,
- X509Certificate ee) throws ValidatorException;
+ X509Certificate[] chain)
+ throws ValidatorException;
// The policies set in the jdk.security.caDistrustPolicies property.
static final EnumSet POLICIES = parseProperty();
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/sun/security/validator/EndEntityChecker.java
--- a/src/java.base/share/classes/sun/security/validator/EndEntityChecker.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/sun/security/validator/EndEntityChecker.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2019, 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
@@ -132,27 +132,26 @@
return new EndEntityChecker(type, variant);
}
- void check(X509Certificate cert, Object parameter,
- boolean checkUnresolvedCritExts, X509Certificate anchor)
- throws CertificateException {
+ void check(X509Certificate[] chain, Object parameter,
+ boolean checkUnresolvedCritExts) throws CertificateException {
if (variant.equals(Validator.VAR_GENERIC)) {
return; // no checks
}
- Set exts = getCriticalExtensions(cert);
+ Set exts = getCriticalExtensions(chain[0]);
if (variant.equals(Validator.VAR_TLS_SERVER)) {
- checkTLSServer(cert, (String)parameter, exts);
+ checkTLSServer(chain[0], (String)parameter, exts);
} else if (variant.equals(Validator.VAR_TLS_CLIENT)) {
- checkTLSClient(cert, exts);
+ checkTLSClient(chain[0], exts);
} else if (variant.equals(Validator.VAR_CODE_SIGNING)) {
- checkCodeSigning(cert, exts);
+ checkCodeSigning(chain[0], exts);
} else if (variant.equals(Validator.VAR_JCE_SIGNING)) {
- checkCodeSigning(cert, exts);
+ checkCodeSigning(chain[0], exts);
} else if (variant.equals(Validator.VAR_PLUGIN_CODE_SIGNING)) {
- checkCodeSigning(cert, exts);
+ checkCodeSigning(chain[0], exts);
} else if (variant.equals(Validator.VAR_TSA_SERVER)) {
- checkTSAServer(cert, exts);
+ checkTSAServer(chain[0], exts);
} else {
throw new CertificateException("Unknown variant: " + variant);
}
@@ -165,7 +164,7 @@
// check if certificate should be distrusted according to policies
// set in the jdk.security.caDistrustPolicies security property
for (CADistrustPolicy policy : CADistrustPolicy.POLICIES) {
- policy.checkDistrust(variant, anchor, cert);
+ policy.checkDistrust(variant, chain);
}
}
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/sun/security/validator/SymantecTLSPolicy.java
--- a/src/java.base/share/classes/sun/security/validator/SymantecTLSPolicy.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/sun/security/validator/SymantecTLSPolicy.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -29,6 +29,7 @@
import java.time.Month;
import java.time.ZoneOffset;
import java.util.Date;
+import java.util.Map;
import java.util.Set;
import sun.security.x509.X509CertImpl;
@@ -119,6 +120,24 @@
"2399561127A57125DE8CEFEA610DDF2FA078B5C8067F4E828290BFB860E84B3C"
);
+ private static final LocalDate DECEMBER_31_2019 =
+ LocalDate.of(2019, Month.DECEMBER, 31);
+ // SHA-256 certificate fingerprints of subCAs with later distrust dates
+ private static final Map EXEMPT_SUBCAS = Map.of(
+ // Subject DN: C=US, O=Apple Inc., OU=Certification Authority,
+ // CN=Apple IST CA 2 - G1
+ // Issuer DN: CN=GeoTrust Global CA, O=GeoTrust Inc., C=US
+ "AC2B922ECFD5E01711772FEA8ED372DE9D1E2245FCE3F57A9CDBEC77296A424B",
+ DECEMBER_31_2019,
+ // Subject DN: C=US, O=Apple Inc., OU=Certification Authority,
+ // CN=Apple IST CA 8 - G1
+ // Issuer DN: CN=GeoTrust Primary Certification Authority - G2,
+ // OU=(c) 2007 GeoTrust Inc. - For authorized use only,
+ // O=GeoTrust Inc., C=US
+ "A4FE7C7F15155F3F0AEF7AAA83CF6E06DEB97CA3F909DF920AC1490882D488ED",
+ DECEMBER_31_2019
+ );
+
// Any TLS Server certificate that is anchored by one of the Symantec
// roots above and is issued after this date will be distrusted.
private static final LocalDate APRIL_16_2019 =
@@ -128,28 +147,47 @@
* This method assumes the eeCert is a TLS Server Cert and chains back to
* the anchor.
*
- * @param anchor the trust anchor certificate
- * @param eeCert the certificate to check
+ * @param chain the end-entity's certificate chain. The end entity cert
+ * is at index 0, the trust anchor at index n-1.
* @throws ValidatorException if the certificate is distrusted
*/
- static void checkDistrust(X509Certificate anchor,
- X509Certificate eeCert)
+ static void checkDistrust(X509Certificate[] chain)
throws ValidatorException {
- String fp = (anchor instanceof X509CertImpl)
- ? ((X509CertImpl)anchor).getFingerprint("SHA-256")
- : X509CertImpl.getFingerprint("SHA-256", anchor);
- if (FINGERPRINTS.contains(fp)) {
- // reject if certificate is issued after April 16, 2019
- Date notBefore = eeCert.getNotBefore();
+ X509Certificate anchor = chain[chain.length-1];
+ if (FINGERPRINTS.contains(fingerprint(anchor))) {
+ Date notBefore = chain[0].getNotBefore();
LocalDate ldNotBefore = LocalDate.ofInstant(notBefore.toInstant(),
ZoneOffset.UTC);
- if (ldNotBefore.isAfter(APRIL_16_2019)) {
- throw new ValidatorException
- ("TLS Server certificate issued after " + APRIL_16_2019 +
- " and anchored by a distrusted legacy Symantec root CA: "
- + anchor.getSubjectX500Principal(),
- ValidatorException.T_UNTRUSTED_CERT, anchor);
+ // check if chain goes through one of the subCAs
+ if (chain.length > 2) {
+ X509Certificate subCA = chain[chain.length-2];
+ LocalDate distrustDate = EXEMPT_SUBCAS.get(fingerprint(subCA));
+ if (distrustDate != null) {
+ // reject if certificate is issued after specified date
+ checkNotBefore(ldNotBefore, distrustDate, anchor);
+ return; // success
+ }
}
+ // reject if certificate is issued after April 16, 2019
+ checkNotBefore(ldNotBefore, APRIL_16_2019, anchor);
+ }
+ }
+
+ private static String fingerprint(X509Certificate cert) {
+ return (cert instanceof X509CertImpl)
+ ? ((X509CertImpl)cert).getFingerprint("SHA-256")
+ : X509CertImpl.getFingerprint("SHA-256", cert);
+ }
+
+ private static void checkNotBefore(LocalDate notBeforeDate,
+ LocalDate distrustDate, X509Certificate anchor)
+ throws ValidatorException {
+ if (notBeforeDate.isAfter(distrustDate)) {
+ throw new ValidatorException
+ ("TLS Server certificate issued after " + distrustDate +
+ " and anchored by a distrusted legacy Symantec root CA: "
+ + anchor.getSubjectX500Principal(),
+ ValidatorException.T_UNTRUSTED_CERT, anchor);
}
}
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/sun/security/validator/Validator.java
--- a/src/java.base/share/classes/sun/security/validator/Validator.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/sun/security/validator/Validator.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2019, 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
@@ -274,9 +274,8 @@
// redundant.
boolean checkUnresolvedCritExts =
(type == TYPE_PKIX) ? false : true;
- endEntityChecker.check(chain[0], parameter,
- checkUnresolvedCritExts,
- chain[chain.length-1]);
+ endEntityChecker.check(chain, parameter,
+ checkUnresolvedCritExts);
}
return chain;
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/classes/sun/util/cldr/CLDRTimeZoneNameProviderImpl.java
--- a/src/java.base/share/classes/sun/util/cldr/CLDRTimeZoneNameProviderImpl.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/classes/sun/util/cldr/CLDRTimeZoneNameProviderImpl.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -148,6 +148,12 @@
private void deriveFallbackName(String[] names, int index, Locale locale, boolean noDST) {
if (exists(names, index)) {
+ if (names[index].equals(NO_INHERITANCE_MARKER)) {
+ // CLDR's "no inheritance marker"
+ names[index] = toGMTFormat(names[INDEX_TZID],
+ index == INDEX_DST_LONG || index == INDEX_DST_SHORT,
+ index % 2 != 0, locale);
+ }
return;
}
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/conf/security/java.security
--- a/src/java.base/share/conf/security/java.security Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/conf/security/java.security Tue Jan 29 09:38:31 2019 -0500
@@ -1167,8 +1167,15 @@
# of which represents a policy for determining if a CA should be distrusted.
# The supported values are:
#
-# SYMANTEC_TLS : Distrust TLS Server certificates anchored by
-# a Symantec root CA and issued after April 16, 2019.
+# SYMANTEC_TLS : Distrust TLS Server certificates anchored by a Symantec
+# root CA and issued after April 16, 2019 unless issued by one of the
+# following subordinate CAs which have a later distrust date:
+# 1. Apple IST CA 2 - G1, SHA-256 fingerprint:
+# AC2B922ECFD5E01711772FEA8ED372DE9D1E2245FCE3F57A9CDBEC77296A424B
+# Distrust after December 31, 2019.
+# 2. Apple IST CA 8 - G1, SHA-256 fingerprint:
+# A4FE7C7F15155F3F0AEF7AAA83CF6E06DEB97CA3F909DF920AC1490882D488ED
+# Distrust after December 31, 2019.
#
# Leading and trailing whitespace surrounding each value are ignored.
# Unknown values are ignored. If the property is commented out or set to the
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/lib/security/default.policy
--- a/src/java.base/share/lib/security/default.policy Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/lib/security/default.policy Tue Jan 29 09:38:31 2019 -0500
@@ -201,6 +201,7 @@
permission java.io.FilePermission "<>", "read,write,delete";
permission java.lang.RuntimePermission "fileSystemProvider";
permission java.util.PropertyPermission "os.name", "read";
+ permission java.util.PropertyPermission "user.dir", "read";
};
// permissions needed by applications using java.desktop module
diff -r b50715adf242 -r cf2b4754174d src/java.base/share/native/libnet/net_util.h
--- a/src/java.base/share/native/libnet/net_util.h Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/share/native/libnet/net_util.h Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -181,6 +181,9 @@
*/
JNIEXPORT int JNICALL
+NET_SocketAvailable(int fd, int *pbytes);
+
+JNIEXPORT int JNICALL
NET_GetSockOpt(int fd, int level, int opt, void *result, int *len);
JNIEXPORT int JNICALL
diff -r b50715adf242 -r cf2b4754174d src/java.base/unix/native/libnet/PlainSocketImpl.c
--- a/src/java.base/unix/native/libnet/PlainSocketImpl.c Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/unix/native/libnet/PlainSocketImpl.c Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -740,8 +740,7 @@
*/
JNIEXPORT jint JNICALL
Java_java_net_PlainSocketImpl_socketAvailable(JNIEnv *env, jobject this) {
-
- jint ret = -1;
+ int count = 0;
jobject fdObj = (*env)->GetObjectField(env, this, psi_fdID);
jint fd;
@@ -752,8 +751,7 @@
} else {
fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID);
}
- /* NET_SocketAvailable returns 0 for failure, 1 for success */
- if (NET_SocketAvailable(fd, &ret) == 0){
+ if (NET_SocketAvailable(fd, &count) != 0) {
if (errno == ECONNRESET) {
JNU_ThrowByName(env, "sun/net/ConnectionResetException", "");
} else {
@@ -761,7 +759,7 @@
(env, JNU_JAVANETPKG "SocketException", "ioctl FIONREAD failed");
}
}
- return ret;
+ return (jint) count;
}
/*
diff -r b50715adf242 -r cf2b4754174d src/java.base/unix/native/libnet/net_util_md.c
--- a/src/java.base/unix/native/libnet/net_util_md.c Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/unix/native/libnet/net_util_md.c Tue Jan 29 09:38:31 2019 -0500
@@ -123,12 +123,10 @@
} while((_result == -1) && (errno == EINTR)); \
} while(0)
-int NET_SocketAvailable(int s, jint *pbytes) {
+int NET_SocketAvailable(int s, int *pbytes) {
int result;
RESTARTABLE(ioctl(s, FIONREAD, pbytes), result);
- // note: ioctl can return 0 when successful, NET_SocketAvailable
- // is expected to return 0 on failure and 1 on success.
- return (result == -1) ? 0 : 1;
+ return result;
}
#ifdef __solaris__
diff -r b50715adf242 -r cf2b4754174d src/java.base/unix/native/libnet/net_util_md.h
--- a/src/java.base/unix/native/libnet/net_util_md.h Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/unix/native/libnet/net_util_md.h Tue Jan 29 09:38:31 2019 -0500
@@ -92,7 +92,6 @@
int NET_SocketClose(int s);
int NET_Dup2(int oldfd, int newfd);
int NET_Poll(struct pollfd *ufds, unsigned int nfds, int timeout);
-int NET_SocketAvailable(int s, jint *pbytes);
void NET_ThrowUnknownHostExceptionWithGaiError(JNIEnv *env,
const char* hostname,
diff -r b50715adf242 -r cf2b4754174d src/java.base/unix/native/libnio/ch/Net.c
--- a/src/java.base/unix/native/libnio/ch/Net.c Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/unix/native/libnio/ch/Net.c Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -684,6 +684,17 @@
}
JNIEXPORT jint JNICALL
+Java_sun_nio_ch_Net_available(JNIEnv *env, jclass cl, jobject fdo)
+{
+ int count = 0;
+ if (NET_SocketAvailable(fdval(env, fdo), &count) != 0) {
+ handleSocketError(env, errno);
+ return IOS_THROWN;
+ }
+ return (jint) count;
+}
+
+JNIEXPORT jint JNICALL
Java_sun_nio_ch_Net_poll(JNIEnv* env, jclass this, jobject fdo, jint events, jlong timeout)
{
struct pollfd pfd;
@@ -708,6 +719,50 @@
}
}
+JNIEXPORT jint JNICALL
+Java_sun_nio_ch_Net_pollConnect(JNIEnv *env, jobject this, jobject fdo, jlong timeout)
+{
+ jint fd = fdval(env, fdo);
+ struct pollfd poller;
+ int result;
+
+ poller.fd = fd;
+ poller.events = POLLOUT;
+ poller.revents = 0;
+ if (timeout < -1) {
+ timeout = -1;
+ } else if (timeout > INT_MAX) {
+ timeout = INT_MAX;
+ }
+
+ result = poll(&poller, 1, (int)timeout);
+
+ if (result > 0) {
+ int error = 0;
+ socklen_t n = sizeof(int);
+ errno = 0;
+ result = getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &n);
+ if (result < 0) {
+ return handleSocketError(env, errno);
+ } else if (error) {
+ return handleSocketError(env, error);
+ } else if ((poller.revents & POLLHUP) != 0) {
+ return handleSocketError(env, ENOTCONN);
+ }
+ // connected
+ return 1;
+ } else if (result == 0) {
+ return 0;
+ } else {
+ if (errno == EINTR) {
+ return IOS_INTERRUPTED;
+ } else {
+ JNU_ThrowIOExceptionWithLastError(env, "poll failed");
+ return IOS_THROWN;
+ }
+ }
+}
+
JNIEXPORT jshort JNICALL
Java_sun_nio_ch_Net_pollinValue(JNIEnv *env, jclass this)
{
@@ -744,6 +799,12 @@
return (jshort)POLLOUT;
}
+JNIEXPORT jint JNICALL
+Java_sun_nio_ch_Net_sendOOB(JNIEnv* env, jclass this, jobject fdo, jbyte b)
+{
+ int n = send(fdval(env, fdo), (const void*)&b, 1, MSG_OOB);
+ return convertReturnVal(env, n, JNI_FALSE);
+}
/* Declared in nio_util.h */
diff -r b50715adf242 -r cf2b4754174d src/java.base/unix/native/libnio/ch/SocketChannelImpl.c
--- a/src/java.base/unix/native/libnio/ch/SocketChannelImpl.c Tue Jan 22 09:43:38 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2000, 2018, 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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.
- */
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#if __linux__
-#include
-#endif
-
-#include "jni.h"
-#include "jni_util.h"
-#include "net_util.h"
-#include "jvm.h"
-#include "jlong.h"
-#include "sun_nio_ch_SocketChannelImpl.h"
-#include "nio_util.h"
-#include "nio.h"
-
-
-JNIEXPORT jint JNICALL
-Java_sun_nio_ch_SocketChannelImpl_checkConnect(JNIEnv *env, jobject this,
- jobject fdo, jboolean block)
-{
- int error = 0;
- socklen_t n = sizeof(int);
- jint fd = fdval(env, fdo);
- int result = 0;
- struct pollfd poller;
-
- poller.fd = fd;
- poller.events = POLLOUT;
- poller.revents = 0;
- result = poll(&poller, 1, block ? -1 : 0);
-
- if (result < 0) {
- if (errno == EINTR) {
- return IOS_INTERRUPTED;
- } else {
- JNU_ThrowIOExceptionWithLastError(env, "poll failed");
- return IOS_THROWN;
- }
- }
- if (!block && (result == 0))
- return IOS_UNAVAILABLE;
-
- if (result > 0) {
- errno = 0;
- result = getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &n);
- if (result < 0) {
- return handleSocketError(env, errno);
- } else if (error) {
- return handleSocketError(env, error);
- } else if ((poller.revents & POLLHUP) != 0) {
- return handleSocketError(env, ENOTCONN);
- }
- // connected
- return 1;
- }
- return 0;
-}
-
-JNIEXPORT jint JNICALL
-Java_sun_nio_ch_SocketChannelImpl_sendOutOfBandData(JNIEnv* env, jclass this,
- jobject fdo, jbyte b)
-{
- int n = send(fdval(env, fdo), (const void*)&b, 1, MSG_OOB);
- return convertReturnVal(env, n, JNI_FALSE);
-}
diff -r b50715adf242 -r cf2b4754174d src/java.base/unix/native/libnio/ch/SocketDispatcher.c
--- a/src/java.base/unix/native/libnio/ch/SocketDispatcher.c Tue Jan 22 09:43:38 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2000, 2009, 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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.
- */
-
-#include "jni.h"
-#include "jni_util.h"
-#include "jvm.h"
-#include "jlong.h"
-
-/* this is a fake c file to make the build happy since there is no
- real SocketDispatcher.c file on Solaris but there is on windows. */
-
-static jfieldID fd_fdID; /* for jint 'fd' in java.io.FileDescriptor */
diff -r b50715adf242 -r cf2b4754174d src/java.base/windows/native/libnet/net_util_md.c
--- a/src/java.base/windows/native/libnet/net_util_md.c Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/windows/native/libnet/net_util_md.c Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -398,6 +398,17 @@
return rv;
}
+JNIEXPORT int JNICALL
+NET_SocketAvailable(int s, int *pbytes) {
+ u_long arg;
+ if (ioctlsocket((SOCKET)s, FIONREAD, &arg) == SOCKET_ERROR) {
+ return -1;
+ } else {
+ *pbytes = (int) arg;
+ return 0;
+ }
+}
+
/*
* Sets SO_ECLUSIVEADDRUSE if SO_REUSEADDR is not already set.
*/
diff -r b50715adf242 -r cf2b4754174d src/java.base/windows/native/libnio/ch/Net.c
--- a/src/java.base/windows/native/libnio/ch/Net.c Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.base/windows/native/libnio/ch/Net.c Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -77,6 +77,11 @@
NULL, 0, &bytesReturned, NULL, NULL);
}
+jint handleSocketError(JNIEnv *env, int errorValue)
+{
+ NET_ThrowNew(env, errorValue, NULL);
+ return IOS_THROWN;
+}
JNIEXPORT void JNICALL
Java_sun_nio_ch_Net_initIDs(JNIEnv *env, jclass clazz)
@@ -551,6 +556,17 @@
}
JNIEXPORT jint JNICALL
+Java_sun_nio_ch_Net_available(JNIEnv *env, jclass cl, jobject fdo)
+{
+ int count = 0;
+ if (NET_SocketAvailable(fdval(env, fdo), &count) != 0) {
+ handleSocketError(env, WSAGetLastError());
+ return IOS_THROWN;
+ }
+ return (jint) count;
+}
+
+JNIEXPORT jint JNICALL
Java_sun_nio_ch_Net_poll(JNIEnv* env, jclass this, jobject fdo, jint events, jlong timeout)
{
int rv;
@@ -596,6 +612,59 @@
return rv;
}
+JNIEXPORT jint JNICALL
+Java_sun_nio_ch_Net_pollConnect(JNIEnv* env, jclass this, jobject fdo, jlong timeout)
+{
+ int optError = 0;
+ int result;
+ int n = sizeof(int);
+ jint fd = fdval(env, fdo);
+ fd_set wr, ex;
+ struct timeval t;
+
+ FD_ZERO(&wr);
+ FD_ZERO(&ex);
+ FD_SET((u_int)fd, &wr);
+ FD_SET((u_int)fd, &ex);
+
+ if (timeout >= 0) {
+ t.tv_sec = (long)(timeout / 1000);
+ t.tv_usec = (timeout % 1000) * 1000;
+ }
+
+ result = select(fd+1, 0, &wr, &ex, (timeout >= 0) ? &t : NULL);
+
+ if (result == SOCKET_ERROR) {
+ handleSocketError(env, WSAGetLastError());
+ return IOS_THROWN;
+ } else if (result == 0) {
+ return 0;
+ } else {
+ // connection established if writable and no error to check
+ if (FD_ISSET(fd, &wr) && !FD_ISSET(fd, &ex)) {
+ return 1;
+ }
+ result = getsockopt((SOCKET)fd,
+ SOL_SOCKET,
+ SO_ERROR,
+ (char *)&optError,
+ &n);
+ if (result == SOCKET_ERROR) {
+ int lastError = WSAGetLastError();
+ if (lastError == WSAEINPROGRESS) {
+ return IOS_UNAVAILABLE;
+ }
+ NET_ThrowNew(env, lastError, "getsockopt");
+ return IOS_THROWN;
+ }
+ if (optError != NO_ERROR) {
+ handleSocketError(env, optError);
+ return IOS_THROWN;
+ }
+ return 0;
+ }
+}
+
JNIEXPORT jshort JNICALL
Java_sun_nio_ch_Net_pollinValue(JNIEnv *env, jclass this)
{
@@ -631,3 +700,19 @@
{
return (jshort)POLLCONN;
}
+
+JNIEXPORT jint JNICALL
+Java_sun_nio_ch_Net_sendOOB(JNIEnv* env, jclass this, jobject fdo, jbyte b)
+{
+ int n = send(fdval(env, fdo), (const char*)&b, 1, MSG_OOB);
+ if (n == SOCKET_ERROR) {
+ if (WSAGetLastError() == WSAEWOULDBLOCK) {
+ return IOS_UNAVAILABLE;
+ } else {
+ JNU_ThrowIOExceptionWithLastError(env, "send failed");
+ return IOS_THROWN;
+ }
+ } else {
+ return n;
+ }
+}
diff -r b50715adf242 -r cf2b4754174d src/java.base/windows/native/libnio/ch/SocketChannelImpl.c
--- a/src/java.base/windows/native/libnio/ch/SocketChannelImpl.c Tue Jan 22 09:43:38 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2000, 2018, 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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.
- */
-
-#include
-#include
-#include
-#include "jni.h"
-#include "jni_util.h"
-#include "jvm.h"
-#include "jlong.h"
-#include "sun_nio_ch_SocketChannelImpl.h"
-
-#include "nio.h"
-#include "nio_util.h"
-#include "net_util.h"
-
-
-static jfieldID ia_addrID; /* java.net.InetAddress.address */
-
-JNIEXPORT void JNICALL
-Java_sun_nio_ch_SocketChannelImpl_initIDs(JNIEnv *env, jclass cls)
-{
- CHECK_NULL(cls = (*env)->FindClass(env, "java/net/InetAddress"));
- CHECK_NULL(ia_addrID = (*env)->GetFieldID(env, cls, "address", "I"));
-}
-
-jint
-handleSocketError(JNIEnv *env, int errorValue)
-{
- NET_ThrowNew(env, errorValue, NULL);
- return IOS_THROWN;
-}
-
-JNIEXPORT jint JNICALL
-Java_sun_nio_ch_SocketChannelImpl_checkConnect(JNIEnv *env, jobject this,
- jobject fdo, jboolean block)
-{
- int optError = 0;
- int result;
- int n = sizeof(int);
- jint fd = fdval(env, fdo);
- fd_set wr, ex;
- struct timeval t = { 0, 0 };
-
- FD_ZERO(&wr);
- FD_ZERO(&ex);
- FD_SET((u_int)fd, &wr);
- FD_SET((u_int)fd, &ex);
-
- result = select(fd+1, 0, &wr, &ex, block ? NULL : &t);
-
- if (result == 0) { /* timeout */
- return block ? 0 : IOS_UNAVAILABLE;
- } else {
- if (result == SOCKET_ERROR) { /* select failed */
- handleSocketError(env, WSAGetLastError());
- return IOS_THROWN;
- }
- }
-
- // connection established if writable and no error to check
- if (FD_ISSET(fd, &wr) && !FD_ISSET(fd, &ex)) {
- return 1;
- }
-
- result = getsockopt((SOCKET)fd,
- SOL_SOCKET,
- SO_ERROR,
- (char *)&optError,
- &n);
- if (result == SOCKET_ERROR) {
- int lastError = WSAGetLastError();
- if (lastError == WSAEINPROGRESS) {
- return IOS_UNAVAILABLE;
- }
- NET_ThrowNew(env, lastError, "getsockopt");
- return IOS_THROWN;
- }
- if (optError != NO_ERROR) {
- handleSocketError(env, optError);
- return IOS_THROWN;
- }
-
- return 0;
-}
-
-JNIEXPORT jint JNICALL
-Java_sun_nio_ch_SocketChannelImpl_sendOutOfBandData(JNIEnv* env, jclass this,
- jobject fdo, jbyte b)
-{
- int n = send(fdval(env, fdo), (const char*)&b, 1, MSG_OOB);
- if (n == SOCKET_ERROR) {
- handleSocketError(env, WSAGetLastError());
- return IOS_THROWN;
- } else {
- return n;
- }
-}
diff -r b50715adf242 -r cf2b4754174d src/java.desktop/share/native/libfontmanager/freetypeScaler.c
--- a/src/java.desktop/share/native/libfontmanager/freetypeScaler.c Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.desktop/share/native/libfontmanager/freetypeScaler.c Tue Jan 29 09:38:31 2019 -0500
@@ -754,7 +754,10 @@
/* generate bitmap if it is not done yet
e.g. if algorithmic styling is performed and style was added to outline */
if (ftglyph->format == FT_GLYPH_FORMAT_OUTLINE) {
- FT_Render_Glyph(ftglyph, FT_LOAD_TARGET_MODE(target));
+ error = FT_Render_Glyph(ftglyph, FT_LOAD_TARGET_MODE(target));
+ if (error != 0) {
+ return ptr_to_jlong(getNullGlyphImage());
+ }
}
width = (UInt16) ftglyph->bitmap.width;
diff -r b50715adf242 -r cf2b4754174d src/java.net.http/share/classes/java/net/http/HttpResponse.java
--- a/src/java.net.http/share/classes/java/net/http/HttpResponse.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.net.http/share/classes/java/net/http/HttpResponse.java Tue Jan 29 09:38:31 2019 -0500
@@ -47,6 +47,7 @@
import java.util.concurrent.Flow.Subscription;
import java.util.function.Consumer;
import java.util.function.Function;
+import java.util.function.Supplier;
import java.util.stream.Stream;
import javax.net.ssl.SSLSession;
import jdk.internal.net.http.BufferingSubscriber;
@@ -1282,17 +1283,26 @@
*
*
The mapping function is executed using the client's {@linkplain
* HttpClient#executor() executor}, and can therefore be used to map any
- * response body type, including blocking {@link InputStream}, as shown
- * in the following example which uses a well-known JSON parser to
+ * response body type, including blocking {@link InputStream}.
+ * However, performing any blocking operation in the mapper function
+ * runs the risk of blocking the executor's thread for an unknown
+ * amount of time (at least until the blocking operation finishes),
+ * which may end up starving the executor of available threads.
+ * Therefore, in the case where mapping to the desired type might
+ * block (e.g. by reading on the {@code InputStream}), then mapping
+ * to a {@link java.util.function.Supplier Supplier} of the desired
+ * type and deferring the blocking operation until {@link Supplier#get()
+ * Supplier::get} is invoked by the caller's thread should be preferred,
+ * as shown in the following example which uses a well-known JSON parser to
* convert an {@code InputStream} into any annotated Java type.
*
*
For example:
- *
{@code public static BodySubscriber asJSON(Class targetType) {
+ *
*
* @param the upstream body type
* @param the type of the body subscriber returned
diff -r b50715adf242 -r cf2b4754174d src/java.net.http/share/classes/jdk/internal/net/http/BufferingSubscriber.java
--- a/src/java.net.http/share/classes/jdk/internal/net/http/BufferingSubscriber.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/BufferingSubscriber.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -37,14 +37,14 @@
import java.net.http.HttpResponse.BodySubscriber;
import jdk.internal.net.http.common.Demand;
import jdk.internal.net.http.common.SequentialScheduler;
-import jdk.internal.net.http.common.Utils;
+import jdk.internal.net.http.ResponseSubscribers.TrustedSubscriber;
/**
* A buffering BodySubscriber. When subscribed, accumulates ( buffers ) a given
* amount ( in bytes ) of a publisher's data before pushing it to a downstream
* subscriber.
*/
-public class BufferingSubscriber implements BodySubscriber
+public class BufferingSubscriber implements TrustedSubscriber
{
/** The downstream consumer of the data. */
private final BodySubscriber downstreamSubscriber;
@@ -94,6 +94,11 @@
return buffers.stream().mapToLong(ByteBuffer::remaining).sum();
}
+ @Override
+ public boolean needsExecutor() {
+ return TrustedSubscriber.needsExecutor(downstreamSubscriber);
+ }
+
/**
* Tells whether, or not, there is at least a sufficient number of bytes
* accumulated in the internal buffers. If the subscriber is COMPLETE, and
diff -r b50715adf242 -r cf2b4754174d src/java.net.http/share/classes/jdk/internal/net/http/Http1AsyncReceiver.java
--- a/src/java.net.http/share/classes/jdk/internal/net/http/Http1AsyncReceiver.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/Http1AsyncReceiver.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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.util.Set;
import java.util.concurrent.ConcurrentLinkedDeque;
import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
import java.util.concurrent.Flow;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
@@ -199,7 +200,11 @@
private void flush() {
ByteBuffer buf;
try {
- assert !client.isSelectorThread() :
+ // we should not be running in the selector here,
+ // except if the custom Executor supplied to the client is
+ // something like (r) -> r.run();
+ assert !client.isSelectorThread()
+ || !(client.theExecutor().delegate() instanceof ExecutorService) :
"Http1AsyncReceiver::flush should not run in the selector: "
+ Thread.currentThread().getName();
diff -r b50715adf242 -r cf2b4754174d src/java.net.http/share/classes/jdk/internal/net/http/Http1Response.java
--- a/src/java.net.http/share/classes/jdk/internal/net/http/Http1Response.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/Http1Response.java Tue Jan 29 09:38:31 2019 -0500
@@ -41,6 +41,7 @@
import java.net.http.HttpResponse;
import jdk.internal.net.http.ResponseContent.BodyParser;
import jdk.internal.net.http.ResponseContent.UnknownLengthBodyParser;
+import jdk.internal.net.http.ResponseSubscribers.TrustedSubscriber;
import jdk.internal.net.http.common.Log;
import jdk.internal.net.http.common.Logger;
import jdk.internal.net.http.common.MinimalFuture;
@@ -293,7 +294,7 @@
* subscribed.
* @param The type of response.
*/
- final static class Http1BodySubscriber implements HttpResponse.BodySubscriber {
+ final static class Http1BodySubscriber implements TrustedSubscriber {
final HttpResponse.BodySubscriber userSubscriber;
final AtomicBoolean completed = new AtomicBoolean();
volatile Throwable withError;
@@ -302,6 +303,11 @@
this.userSubscriber = userSubscriber;
}
+ @Override
+ public boolean needsExecutor() {
+ return TrustedSubscriber.needsExecutor(userSubscriber);
+ }
+
// propagate the error to the user subscriber, even if not
// subscribed yet.
private void propagateError(Throwable t) {
@@ -356,6 +362,7 @@
public CompletionStage getBody() {
return userSubscriber.getBody();
}
+
@Override
public void onSubscribe(Flow.Subscription subscription) {
if (!subscribed) {
@@ -475,18 +482,12 @@
connection.client().unreference();
}
});
- try {
- p.getBody().whenComplete((U u, Throwable t) -> {
- if (t == null)
- cf.complete(u);
- else
- cf.completeExceptionally(t);
- });
- } catch (Throwable t) {
+
+ ResponseSubscribers.getBodyAsync(executor, p, cf, (t) -> {
cf.completeExceptionally(t);
asyncReceiver.setRetryOnError(false);
asyncReceiver.onReadError(t);
- }
+ });
return cf.whenComplete((s,t) -> {
if (t != null) {
diff -r b50715adf242 -r cf2b4754174d src/java.net.http/share/classes/jdk/internal/net/http/HttpRequestImpl.java
--- a/src/java.net.http/share/classes/jdk/internal/net/http/HttpRequestImpl.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/HttpRequestImpl.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -43,6 +43,7 @@
import java.net.http.HttpRequest;
import jdk.internal.net.http.common.HttpHeadersBuilder;
import jdk.internal.net.http.common.Utils;
+import jdk.internal.net.http.websocket.OpeningHandshake;
import jdk.internal.net.http.websocket.WebSocketRequest;
import static jdk.internal.net.http.common.Utils.ALLOWED_HEADERS;
@@ -157,7 +158,11 @@
/** Returns a new instance suitable for authentication. */
public static HttpRequestImpl newInstanceForAuthentication(HttpRequestImpl other) {
- return new HttpRequestImpl(other.uri(), other.method(), other);
+ HttpRequestImpl request = new HttpRequestImpl(other.uri(), other.method(), other);
+ if (request.isWebSocket()) {
+ Utils.setWebSocketUpgradeHeaders(request);
+ }
+ return request;
}
/**
diff -r b50715adf242 -r cf2b4754174d src/java.net.http/share/classes/jdk/internal/net/http/MultiExchange.java
--- a/src/java.net.http/share/classes/jdk/internal/net/http/MultiExchange.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/MultiExchange.java Tue Jan 29 09:38:31 2019 -0500
@@ -271,9 +271,9 @@
private CompletableFuture> handleNoBody(Response r, Exchange exch) {
BodySubscriber bs = responseHandler.apply(new ResponseInfoImpl(r.statusCode(),
r.headers(), r.version()));
- CompletionStage cs = bs.getBody();
bs.onSubscribe(new NullSubscription());
bs.onComplete();
+ CompletionStage cs = ResponseSubscribers.getBodyAsync(executor, bs);
MinimalFuture> result = new MinimalFuture<>();
cs.whenComplete((nullBody, exception) -> {
if (exception != null)
diff -r b50715adf242 -r cf2b4754174d src/java.net.http/share/classes/jdk/internal/net/http/ResponseSubscribers.java
--- a/src/java.net.http/share/classes/jdk/internal/net/http/ResponseSubscribers.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/ResponseSubscribers.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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
@@ -30,9 +30,6 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
-import java.lang.System.Logger.Level;
-import java.net.http.HttpHeaders;
-import java.net.http.HttpResponse;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
@@ -50,6 +47,7 @@
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
+import java.util.concurrent.Executor;
import java.util.concurrent.Flow;
import java.util.concurrent.Flow.Subscriber;
import java.util.concurrent.Flow.Subscription;
@@ -67,7 +65,50 @@
public class ResponseSubscribers {
- public static class ConsumerSubscriber implements BodySubscriber {
+ /**
+ * This interface is used by our BodySubscriber implementations to
+ * declare whether calling getBody() inline is safe, or whether
+ * it needs to be called asynchronously in an executor thread.
+ * Calling getBody() inline is usually safe except when it
+ * might block - which can be the case if the BodySubscriber
+ * is provided by custom code, or if it uses a finisher that
+ * might be called and might block before the last bit is
+ * received (for instance, if a mapping subscriber is used with
+ * a mapper function that maps an InputStream to a GZIPInputStream,
+ * as the the constructor of GZIPInputStream calls read()).
+ * @param The response type.
+ */
+ public interface TrustedSubscriber extends BodySubscriber {
+ /**
+ * Returns true if getBody() should be called asynchronously.
+ * @implSpec The default implementation of this method returns
+ * false.
+ * @return true if getBody() should be called asynchronously.
+ */
+ default boolean needsExecutor() { return false;}
+
+ /**
+ * Returns true if calling {@code bs::getBody} might block
+ * and requires an executor.
+ *
+ * @implNote
+ * In particular this method returns
+ * true if {@code bs} is not a {@code TrustedSubscriber}.
+ * If it is a {@code TrustedSubscriber}, it returns
+ * {@code ((TrustedSubscriber) bs).needsExecutor()}.
+ *
+ * @param bs A BodySubscriber.
+ * @return true if calling {@code bs::getBody} requires using
+ * an executor.
+ */
+ static boolean needsExecutor(BodySubscriber> bs) {
+ if (bs instanceof TrustedSubscriber) {
+ return ((TrustedSubscriber) bs).needsExecutor();
+ } else return true;
+ }
+ }
+
+ public static class ConsumerSubscriber implements TrustedSubscriber {
private final Consumer> consumer;
private Flow.Subscription subscription;
private final CompletableFuture result = new MinimalFuture<>();
@@ -122,7 +163,7 @@
* asserts the specific, write, file permissions that were checked during
* the construction of this PathSubscriber.
*/
- public static class PathSubscriber implements BodySubscriber {
+ public static class PathSubscriber implements TrustedSubscriber {
private static final FilePermission[] EMPTY_FILE_PERMISSIONS = new FilePermission[0];
@@ -223,7 +264,7 @@
}
}
- public static class ByteArraySubscriber implements BodySubscriber {
+ public static class ByteArraySubscriber implements TrustedSubscriber {
private final Function finisher;
private final CompletableFuture result = new MinimalFuture<>();
private final List received = new ArrayList<>();
@@ -292,7 +333,7 @@
* An InputStream built on top of the Flow API.
*/
public static class HttpResponseInputStream extends InputStream
- implements BodySubscriber
+ implements TrustedSubscriber
{
final static int MAX_BUFFERS_IN_QUEUE = 1; // lock-step with the producer
@@ -410,6 +451,24 @@
}
@Override
+ public int available() throws IOException {
+ // best effort: returns the number of remaining bytes in
+ // the current buffer if any, or 1 if the current buffer
+ // is null or empty but the queue or current buffer list
+ // are not empty. Returns 0 otherwise.
+ if (closed) return 0;
+ int available = 0;
+ ByteBuffer current = currentBuffer;
+ if (current == LAST_BUFFER) return 0;
+ if (current != null) available = current.remaining();
+ if (available != 0) return available;
+ Iterator> iterator = currentListItr;
+ if (iterator != null && iterator.hasNext()) return 1;
+ if (buffers.isEmpty()) return 0;
+ return 1;
+ }
+
+ @Override
public void onSubscribe(Flow.Subscription s) {
try {
if (!subscribed.compareAndSet(false, true)) {
@@ -517,17 +576,19 @@
public static BodySubscriber> createLineStream(Charset charset) {
Objects.requireNonNull(charset);
BodySubscriber s = new HttpResponseInputStream();
+ // Creates a MappingSubscriber with a trusted finisher that is
+ // trusted not to block.
return new MappingSubscriber>(s,
(InputStream stream) -> {
return new BufferedReader(new InputStreamReader(stream, charset))
.lines().onClose(() -> Utils.close(stream));
- });
+ }, true);
}
/**
* Currently this consumes all of the data and ignores it
*/
- public static class NullSubscriber implements BodySubscriber {
+ public static class NullSubscriber implements TrustedSubscriber {
private final CompletableFuture cf = new MinimalFuture<>();
private final Optional result;
@@ -573,13 +634,16 @@
/** An adapter between {@code BodySubscriber} and {@code Flow.Subscriber}. */
public static final class SubscriberAdapter>,R>
- implements BodySubscriber
+ implements TrustedSubscriber
{
private final CompletableFuture cf = new MinimalFuture<>();
private final S subscriber;
private final Function super S,? extends R> finisher;
private volatile Subscription subscription;
+ // The finisher isn't called until all bytes have been received,
+ // and so shouldn't need an executor. No need to override
+ // TrustedSubscriber::needsExecutor
public SubscriberAdapter(S subscriber, Function super S,? extends R> finisher) {
this.subscriber = Objects.requireNonNull(subscriber);
this.finisher = Objects.requireNonNull(finisher);
@@ -647,16 +711,40 @@
* @param the upstream body type
* @param this subscriber's body type
*/
- public static class MappingSubscriber implements BodySubscriber {
+ public static class MappingSubscriber implements TrustedSubscriber {
private final BodySubscriber upstream;
private final Function super T,? extends U> mapper;
+ private final boolean trusted;
public MappingSubscriber(BodySubscriber upstream,
Function super T,? extends U> mapper) {
+ this(upstream, mapper, false);
+ }
+
+ // creates a MappingSubscriber with a mapper that is trusted
+ // to not block when called.
+ MappingSubscriber(BodySubscriber upstream,
+ Function super T,? extends U> mapper,
+ boolean trusted) {
this.upstream = Objects.requireNonNull(upstream);
this.mapper = Objects.requireNonNull(mapper);
+ this.trusted = trusted;
}
+ // There is no way to know whether a custom mapper function
+ // might block or not - so we should return true unless the
+ // mapper is implemented and trusted by our own code not to
+ // block.
+ @Override
+ public boolean needsExecutor() {
+ return !trusted || TrustedSubscriber.needsExecutor(upstream);
+ }
+
+ // If upstream.getBody() is already completed (case of InputStream),
+ // then calling upstream.getBody().thenApply(mapper) might block
+ // if the mapper blocks. We should probably add a variant of
+ // MappingSubscriber that calls thenApplyAsync instead, but this
+ // needs a new public API point. See needsExecutor() above.
@Override
public CompletionStage getBody() {
return upstream.getBody().thenApply(mapper);
@@ -685,7 +773,7 @@
// A BodySubscriber that returns a Publisher>
static class PublishingBodySubscriber
- implements BodySubscriber>> {
+ implements TrustedSubscriber>> {
private final MinimalFuture
subscriptionCF = new MinimalFuture<>();
private final MinimalFuture
@@ -894,4 +982,110 @@
return new PublishingBodySubscriber();
}
+
+ /**
+ * Tries to determine whether bs::getBody must be invoked asynchronously,
+ * and if so, uses the provided executor to do it.
+ * If the executor is a {@link HttpClientImpl.DelegatingExecutor},
+ * uses the executor's delegate.
+ * @param e The executor to use if an executor is required.
+ * @param bs The BodySubscriber (trusted or not)
+ * @param The type of the response.
+ * @return A completion stage that completes when the completion
+ * stage returned by bs::getBody completes. This may, or
+ * may not, be the same completion stage.
+ */
+ public static CompletionStage getBodyAsync(Executor e, BodySubscriber bs) {
+ if (TrustedSubscriber.needsExecutor(bs)) {
+ // getBody must be called in the executor
+ return getBodyAsync(e, bs, new MinimalFuture<>());
+ } else {
+ // No executor needed
+ return bs.getBody();
+ }
+ }
+
+ /**
+ * Invokes bs::getBody using the provided executor.
+ * If invoking bs::getBody requires an executor, and the given executor
+ * is a {@link HttpClientImpl.DelegatingExecutor}, then the executor's
+ * delegate is used. If an error occurs anywhere then the given {code cf}
+ * is completed exceptionally (this method does not throw).
+ * @param e The executor that should be used to call bs::getBody
+ * @param bs The BodySubscriber
+ * @param cf A completable future that this function will set up
+ * to complete when the completion stage returned by
+ * bs::getBody completes.
+ * In case of any error while trying to set up the
+ * completion chain, {@code cf} will be completed
+ * exceptionally with that error.
+ * @param The response type.
+ * @return The provided {@code cf}.
+ */
+ public static CompletableFuture getBodyAsync(Executor e,
+ BodySubscriber bs,
+ CompletableFuture cf) {
+ return getBodyAsync(e, bs, cf, cf::completeExceptionally);
+ }
+
+ /**
+ * Invokes bs::getBody using the provided executor.
+ * If invoking bs::getBody requires an executor, and the given executor
+ * is a {@link HttpClientImpl.DelegatingExecutor}, then the executor's
+ * delegate is used.
+ * The provided {@code cf} is completed with the result (exceptional
+ * or not) of the completion stage returned by bs::getBody.
+ * If an error occurs when trying to set up the
+ * completion chain, the provided {@code errorHandler} is invoked,
+ * but {@code cf} is not necessarily affected.
+ * This method does not throw.
+ * @param e The executor that should be used to call bs::getBody
+ * @param bs The BodySubscriber
+ * @param cf A completable future that this function will set up
+ * to complete when the completion stage returned by
+ * bs::getBody completes.
+ * In case of any error while trying to set up the
+ * completion chain, {@code cf} will be completed
+ * exceptionally with that error.
+ * @param errorHandler The handler to invoke if an error is raised
+ * while trying to set up the completion chain.
+ * @param The response type.
+ * @return The provide {@code cf}. If the {@code errorHandler} is
+ * invoked, it is the responsibility of the {@code errorHandler} to
+ * complete the {@code cf}, if needed.
+ */
+ public static CompletableFuture getBodyAsync(Executor e,
+ BodySubscriber bs,
+ CompletableFuture cf,
+ Consumer errorHandler) {
+ assert errorHandler != null;
+ try {
+ assert e != null;
+ assert cf != null;
+
+ if (TrustedSubscriber.needsExecutor(bs)) {
+ e = (e instanceof HttpClientImpl.DelegatingExecutor)
+ ? ((HttpClientImpl.DelegatingExecutor) e).delegate() : e;
+ }
+
+ e.execute(() -> {
+ try {
+ bs.getBody().whenComplete((r, t) -> {
+ if (t != null) {
+ cf.completeExceptionally(t);
+ } else {
+ cf.complete(r);
+ }
+ });
+ } catch (Throwable t) {
+ errorHandler.accept(t);
+ }
+ });
+ return cf;
+
+ } catch (Throwable t) {
+ errorHandler.accept(t);
+ }
+ return cf;
+ }
}
diff -r b50715adf242 -r cf2b4754174d src/java.net.http/share/classes/jdk/internal/net/http/Stream.java
--- a/src/java.net.http/share/classes/jdk/internal/net/http/Stream.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/Stream.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -333,21 +333,10 @@
// pushes entire response body into response subscriber
// blocking when required by local or remote flow control
CompletableFuture receiveData(BodySubscriber bodySubscriber, Executor executor) {
- responseBodyCF = new MinimalFuture<>();
// We want to allow the subscriber's getBody() method to block so it
// can work with InputStreams. So, we offload execution.
- executor.execute(() -> {
- try {
- bodySubscriber.getBody().whenComplete((T body, Throwable t) -> {
- if (t == null)
- responseBodyCF.complete(body);
- else
- responseBodyCF.completeExceptionally(t);
- });
- } catch(Throwable t) {
- cancelImpl(t);
- }
- });
+ responseBodyCF = ResponseSubscribers.getBodyAsync(executor, bodySubscriber,
+ new MinimalFuture<>(), this::cancelImpl);
if (isCanceled()) {
Throwable t = getCancelCause();
diff -r b50715adf242 -r cf2b4754174d src/java.net.http/share/classes/jdk/internal/net/http/common/Utils.java
--- a/src/java.net.http/share/classes/jdk/internal/net/http/common/Utils.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/common/Utils.java Tue Jan 29 09:38:31 2019 -0500
@@ -263,6 +263,15 @@
: ! PROXY_AUTH_DISABLED_SCHEMES.isEmpty();
}
+ // WebSocket connection Upgrade headers
+ private static final String HEADER_CONNECTION = "Connection";
+ private static final String HEADER_UPGRADE = "Upgrade";
+
+ public static final void setWebSocketUpgradeHeaders(HttpRequestImpl request) {
+ request.setSystemHeader(HEADER_UPGRADE, "websocket");
+ request.setSystemHeader(HEADER_CONNECTION, "Upgrade");
+ }
+
public static IllegalArgumentException newIAE(String message, Object... args) {
return new IllegalArgumentException(format(message, args));
}
diff -r b50715adf242 -r cf2b4754174d src/java.net.http/share/classes/jdk/internal/net/http/websocket/OpeningHandshake.java
--- a/src/java.net.http/share/classes/jdk/internal/net/http/websocket/OpeningHandshake.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/websocket/OpeningHandshake.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -143,8 +143,7 @@
requestBuilder.version(Version.HTTP_1_1).GET();
request = requestBuilder.buildForWebSocket();
request.isWebSocket(true);
- request.setSystemHeader(HEADER_UPGRADE, "websocket");
- request.setSystemHeader(HEADER_CONNECTION, "Upgrade");
+ Utils.setWebSocketUpgradeHeaders(request);
request.setProxy(proxy);
}
diff -r b50715adf242 -r cf2b4754174d src/java.xml/share/classes/com/sun/xml/internal/stream/writers/XMLStreamWriterImpl.java
--- a/src/java.xml/share/classes/com/sun/xml/internal/stream/writers/XMLStreamWriterImpl.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/java.xml/share/classes/com/sun/xml/internal/stream/writers/XMLStreamWriterImpl.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2019, 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
@@ -44,6 +44,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Random;
import java.util.Set;
import javax.xml.XMLConstants;
@@ -1729,12 +1730,7 @@
*/
private boolean isDefaultNamespace(String uri) {
String defaultNamespace = fInternalNamespaceContext.getURI(DEFAULT_PREFIX);
-
- if (uri.equals(defaultNamespace)) {
- return true;
- }
-
- return false;
+ return Objects.equals(uri, defaultNamespace);
}
/**
diff -r b50715adf242 -r cf2b4754174d src/jdk.charsets/share/classes/sun/nio/cs/ext/IBM29626C.java.template
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.charsets/share/classes/sun/nio/cs/ext/IBM29626C.java.template Tue Jan 29 09:38:31 2019 -0500
@@ -0,0 +1,602 @@
+/*
+ * Copyright (c) 2002, 2019, 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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.
+ */
+
+package $PACKAGE$;
+
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CoderResult;
+import sun.nio.cs.HistoricallyNamedCharset;
+import sun.nio.cs.DelegatableDecoder;
+import sun.nio.cs.DoubleByte;
+import sun.nio.cs.Surrogate;
+import sun.nio.cs.SingleByte;
+import sun.nio.cs.*;
+import static sun.nio.cs.CharsetMapping.*;
+
+public class IBM29626C
+ extends Charset
+ implements HistoricallyNamedCharset
+{
+ public IBM29626C() {
+ super("x-IBM29626C", $ALIASES$);
+ }
+
+ public String historicalName() {
+ return "Cp29626C";
+ }
+
+ public boolean contains(Charset cs) {
+ return ((cs.name().equals("US-ASCII"))
+ || (cs instanceof IBM29626C));
+ }
+
+ public CharsetDecoder newDecoder() {
+ return new Decoder(this);
+ }
+
+ public CharsetEncoder newEncoder() {
+ return new Encoder(this);
+ }
+
+ static class Decoder extends CharsetDecoder
+ implements DelegatableDecoder {
+
+ final static SingleByte.Decoder DEC0201 =
+ (SingleByte.Decoder)new JIS_X_0201().newDecoder();
+
+ final static DoubleByte.Decoder DEC0208 =
+ (DoubleByte.Decoder)new JIS_X_0208().newDecoder();
+
+ final static DoubleByte.Decoder DEC0212 =
+ (DoubleByte.Decoder)new JIS_X_0212().newDecoder();
+
+ final static DoubleByte.Encoder ibm943 =
+ (DoubleByte.Encoder)new IBM943().newEncoder();
+
+ private final SingleByte.Decoder dec0201;
+ private final DoubleByte.Decoder dec0208;
+ private final DoubleByte.Decoder dec0212;
+
+ private final String G2_b =
+ "\uA1F1\uA1F2\uA2CC\uADA1\uADA2\uADA3\uADA4\uADA5\uADA6\uADA7"+
+ "\uADA8\uADA9\uADAA\uADAB\uADAC\uADAD\uADAE\uADAF\uADB0\uADB1"+
+ "\uADB2\uADB3\uADB4\uADB5\uADB6\uADB7\uADB8\uADB9\uADBA\uADBB"+
+ "\uADBC\uADBD\uADBE\uADC0\uADC1\uADC2\uADC3\uADC4\uADC5\uADC6"+
+ "\uADC7\uADC8\uADC9\uADCA\uADCB\uADCC\uADCD\uADCE\uADCF\uADD0"+
+ "\uADD1\uADD2\uADD3\uADD4\uADD5\uADD6\uADDF\uADE0\uADE1\uADE2"+
+ "\uADE3\uADE4\uADE5\uADE6\uADE7\uADE8\uADE9\uADEA\uADEB\uADEC"+
+ "\uADED\uADEE\uADEF\uADF0\uADF1\uADF2\uADF3\uADF4\uADF5\uADF6"+
+ "\uADF7\uADF8\uADF9\uADFA\uADFB\uADFC";
+
+ private final String G2_c =
+ "\uFFE0\uFFE1\uFFE2\u2460\u2461\u2462\u2463\u2464\u2465\u2466"+
+ "\u2467\u2468\u2469\u246A\u246B\u246C\u246D\u246E\u246F\u2470"+
+ "\u2471\u2472\u2473\u2160\u2161\u2162\u2163\u2164\u2165\u2166"+
+ "\u2167\u2168\u2169\u3349\u3314\u3322\u334D\u3318\u3327\u3303"+
+ "\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C"+
+ "\u339D\u339E\u338E\u338F\u33C4\u33A1\u337B\u301D\u301F\u2116"+
+ "\u33CD\u2121\u32A4\u32A5\u32A6\u32A7\u32A8\u3231\u3232\u3239"+
+ "\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5"+
+ "\u2220\u221F\u22BF\u2235\u2229\u222A";
+
+ private final String G3_b =
+ "\uF3B8\uF3B9\uF3AB\uF3AC\uF3AD\uF3AE\uF3AF\uF3B0\uF3B1\uF3B2"+
+ "\uF3B3\uF3B4\uF3A1\uF3A2\uF3A3\uF3A4\uF3A5\uF3A6\uF3A7\uF3A8"+
+ "\uF3A9\uF3AA\uF3B7\uF3B8\uF4A2\uF4A3\uF4A4\uF4A5\uF4A6\uF4A8"+
+ "\uF4A9\uF4AC\uF4AE\uF4AF\uF4B0\uF4B2\uF4B3\uF4B4\uF4B5\uF4B6"+
+ "\uF4B7\uF4BA\uF4BD\uF4BE\uF4C0\uF4BF\uF4C2\uF4A1\uF4C6\uF4C7"+
+ "\uF4C8\uF4CB\uF4D0\uF4D4\uF4D5\uF4D7\uF4D9\uF4DC\uF4DF\uF4E0"+
+ "\uF4E1\uF4E5\uF4E7\uF4EA\uF4ED\uF4EE\uF4EF\uF4F4\uF4F5\uF4F6"+
+ "\uF4F8\uF3B8\uF4B9\uF4EB\uF4A7\uF4AA\uF4AB\uF4B1\uF4B8\uF4BB"+
+ "\uF4BC\uF4C4\uF4C5\uF4C9\uF4CC\uF4CD\uF4CE\uF4CF\uF4D1\uF4D3"+
+ "\uF4D6\uF4D8\uF4DA\uF4DB\uF4DE\uF4E2\uF4E3\uF4E4\uF4E6\uF4E8"+
+ "\uF4E9\uF4EC\uF4F1\uF4F2\uF4F3\uF4F7\uF3B6\uF3B5";
+
+ private final String G3_c =
+ "\u2116\u2121\u2160\u2161\u2162\u2163\u2164\u2165\u2166\u2167"+
+ "\u2168\u2169\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177"+
+ "\u2178\u2179\u3231\u00A6\u4EFC\u50F4\u51EC\u5307\u5324\u548A"+
+ "\u5759\u589E\u5BEC\u5CF5\u5D53\u5FB7\u6085\u6120\u654E\u663B"+
+ "\u6665\u6801\u6A6B\u6AE2\u6DF2\u6DF8\u7028\u70BB\u7501\u7682"+
+ "\u769E\u7930\u7AE7\u7DA0\u7DD6\u8362\u85B0\u8807\u8B7F\u8CF4"+
+ "\u8D76\u90DE\u9115\u9592\u973B\u974D\u9751\u999E\u9AD9\u9B72"+
+ "\u9ED1\uF86F\uF929\uF9DC\uFA0E\uFA0F\uFA10\uFA11\uFA12\uFA13"+
+ "\uFA14\uFA15\uFA16\uFA17\uFA18\uFA19\uFA1A\uFA1B\uFA1C\uFA1D"+
+ "\uFA1E\uFA1F\uFA20\uFA21\uFA22\uFA23\uFA24\uFA25\uFA26\uFA27"+
+ "\uFA28\uFA29\uFA2A\uFA2B\uFA2C\uFA2D\uFF02\uFF07";
+
+ protected Decoder(Charset cs) {
+ this(cs, 0.5f, 1.0f, DEC0201, DEC0208, DEC0212);
+ }
+
+ protected Decoder(Charset cs, float avgCpb, float maxCpb,
+ SingleByte.Decoder dec0201,
+ DoubleByte.Decoder dec0208,
+ DoubleByte.Decoder dec0212) {
+ super(cs, avgCpb, maxCpb);
+ this.dec0201 = dec0201;
+ this.dec0208 = dec0208;
+ this.dec0212 = dec0212;
+ }
+
+
+ protected char decodeSingle(int b) {
+ if (b < 0x8e)
+ return (char) b;
+ if (b < 0x90)
+ return UNMAPPABLE_DECODING;
+ if (b < 0xa0)
+ return (char) b;
+ return UNMAPPABLE_DECODING;
+ }
+
+ protected char decodeUDC(int byte1, int byte2, int offset) {
+ if ((byte1 >= 0xf5 && byte1 <= 0xfe)
+ && (byte2 >= 0xa1 && byte2 <= 0xfe)) {
+ return (char)((byte1 - 0xf5) * 94 + (byte2 - 0xa1) + offset);
+ }
+ return UNMAPPABLE_DECODING;
+ }
+
+ final static String g1_c = "\u00a2\u00a3\u00ac\\\u007e";
+
+ protected char decodeDouble(int byte1, int byte2) {
+ if (byte1 == 0x8e) {
+ if (byte2 < 0x80)
+ return UNMAPPABLE_DECODING;
+ char c = dec0201.decode((byte)byte2);
+ if (byte2 >= 0xe0 && byte2 <= 0xe4)
+ c = g1_c.charAt(byte2 - 0xe0);
+ return c;
+ }
+ if ((byte1 >= 0xa1 && byte1 <= 0xfe)
+ && (byte2 >= 0xa1 && byte2 <= 0xfe)) {
+ char c = (char)((byte1 << 8) + byte2);
+ int idx = G2_b.indexOf(c);
+ if (idx > -1)
+ return G2_c.charAt(idx);
+ }
+ char ch = dec0208.decodeDouble(byte1 - 0x80, byte2 - 0x80);
+ if (ch == UNMAPPABLE_DECODING)
+ ch = decodeUDC(byte1, byte2, 0xe000);
+ return ch;
+ }
+
+ protected char decodeDoubleG3(int byte1, int byte2) {
+ if ((byte1 >= 0xa1 && byte1 <= 0xfe)
+ && (byte2 >= 0xa1 && byte2 <= 0xfe)) {
+ char c = (char)((byte1 << 8) + byte2);
+ int idx = G3_b.indexOf(c);
+ if (idx > -1)
+ return G3_c.charAt(idx);
+ }
+ char ch = dec0212.decodeDouble(byte1 - 0x80, byte2 - 0x80);
+ if (ch == '\u2116')
+ ch = UNMAPPABLE_DECODING;
+ if (ch != UNMAPPABLE_DECODING)
+ ch = ibm943.canEncode(ch) ? ch : UNMAPPABLE_DECODING;
+ if (ch == UNMAPPABLE_DECODING)
+ ch = decodeUDC(byte1, byte2, 0xe3ac);
+ return ch;
+ }
+
+ private CoderResult decodeArrayLoop(ByteBuffer src,
+ CharBuffer dst)
+ {
+ byte[] sa = src.array();
+ int sp = src.arrayOffset() + src.position();
+ int sl = src.arrayOffset() + src.limit();
+ assert (sp <= sl);
+ sp = (sp <= sl ? sp : sl);
+
+ char[] da = dst.array();
+ int dp = dst.arrayOffset() + dst.position();
+ int dl = dst.arrayOffset() + dst.limit();
+ assert (dp <= dl);
+ dp = (dp <= dl ? dp : dl);
+
+ int b1 = 0, b2 = 0;
+ int inputSize = 0;
+ char outputChar = UNMAPPABLE_DECODING;
+ try {
+ while (sp < sl) {
+ b1 = sa[sp] & 0xff;
+ inputSize = 1;
+
+ outputChar = decodeSingle(b1);
+ if (outputChar == UNMAPPABLE_DECODING) { // Multibyte char
+ if (b1 == 0x8f) { // JIS0212
+ if (sp + 3 > sl)
+ return CoderResult.UNDERFLOW;
+ b1 = sa[sp + 1] & 0xff;
+ b2 = sa[sp + 2] & 0xff;
+ inputSize += 2;
+ outputChar = decodeDoubleG3(b1, b2);
+ } else { // JIS0201, JIS0208
+ if (sp + 2 > sl)
+ return CoderResult.UNDERFLOW;
+ b2 = sa[sp + 1] & 0xff;
+ inputSize++;
+ outputChar = decodeDouble(b1, b2);
+ }
+ }
+ if (outputChar == UNMAPPABLE_DECODING) { // can't be decoded
+ return CoderResult.unmappableForLength(inputSize);
+ }
+ if (dp + 1 > dl)
+ return CoderResult.OVERFLOW;
+ da[dp++] = outputChar;
+ sp += inputSize;
+ }
+ return CoderResult.UNDERFLOW;
+ } finally {
+ src.position(sp - src.arrayOffset());
+ dst.position(dp - dst.arrayOffset());
+ }
+ }
+
+ private CoderResult decodeBufferLoop(ByteBuffer src,
+ CharBuffer dst)
+ {
+ int mark = src.position();
+ int b1 = 0, b2 = 0;
+ int inputSize = 0;
+ char outputChar = UNMAPPABLE_DECODING;
+
+ try {
+ while (src.hasRemaining()) {
+ b1 = src.get() & 0xff;
+ inputSize = 1;
+ outputChar = decodeSingle(b1);
+ if (outputChar == UNMAPPABLE_DECODING) { // Multibyte char
+ if (b1 == 0x8f) { // JIS0212
+ if (src.remaining() < 2)
+ return CoderResult.UNDERFLOW;
+ b1 = src.get() & 0xff;
+ b2 = src.get() & 0xff;
+ inputSize += 2;
+ outputChar = decodeDoubleG3(b1, b2);
+ } else { // JIS0201 JIS0208
+ if (src.remaining() < 1)
+ return CoderResult.UNDERFLOW;
+ b2 = src.get() & 0xff;
+ inputSize++;
+ outputChar = decodeDouble(b1, b2);
+ }
+ }
+ if (outputChar == UNMAPPABLE_DECODING) {
+ return CoderResult.unmappableForLength(inputSize);
+ }
+ if (dst.remaining() < 1)
+ return CoderResult.OVERFLOW;
+ dst.put(outputChar);
+ mark += inputSize;
+ }
+ return CoderResult.UNDERFLOW;
+ } finally {
+ src.position(mark);
+ }
+ }
+
+ // Make some protected methods public for use by JISAutoDetect
+ public CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
+ if (src.hasArray() && dst.hasArray())
+ return decodeArrayLoop(src, dst);
+ else
+ return decodeBufferLoop(src, dst);
+ }
+ public void implReset() {
+ super.implReset();
+ }
+ public CoderResult implFlush(CharBuffer out) {
+ return super.implFlush(out);
+ }
+ }
+
+
+ static class Encoder extends CharsetEncoder {
+
+ final static SingleByte.Encoder ENC0201 =
+ (SingleByte.Encoder)new JIS_X_0201().newEncoder();
+
+ final static DoubleByte.Encoder ENC0208 =
+ (DoubleByte.Encoder)new JIS_X_0208().newEncoder();
+
+ final static DoubleByte.Encoder ENC0212 =
+ (DoubleByte.Encoder)new JIS_X_0212().newEncoder();
+
+ final static DoubleByte.Encoder ibm943 =
+ (DoubleByte.Encoder)new IBM943().newEncoder();
+
+ private final Surrogate.Parser sgp = new Surrogate.Parser();
+
+ private final SingleByte.Encoder enc0201;
+ private final DoubleByte.Encoder enc0208;
+ private final DoubleByte.Encoder enc0212;
+
+ private final String G2_c =
+ "\u2015\u2211\u221F\u2225\u222E\u22BF\u2460\u2461\u2462\u2463"+
+ "\u2464\u2465\u2466\u2467\u2468\u2469\u246A\u246B\u246C\u246D"+
+ "\u246E\u246F\u2470\u2471\u2472\u2473\u301D\u301F\u3232\u3239"+
+ "\u32A4\u32A5\u32A6\u32A7\u32A8\u3303\u330D\u3314\u3318\u3322"+
+ "\u3323\u3326\u3327\u332B\u3336\u333B\u3349\u334A\u334D\u3351"+
+ "\u3357\u337B\u337C\u337D\u337E\u338E\u338F\u339C\u339D\u339E"+
+ "\u33A1\u33C4\u33CD\u4FE0\u525D\u555E\u5699\u56CA\u5861\u5C5B"+
+ "\u5C62\u6414\u6451\u6522\u6805\u688E\u6F51\u7006\u7130\u7626"+
+ "\u79B1\u7C1E\u7E48\u7E61\u7E6B\u8141\u8346\u840A\u8523\u87EC"+
+ "\u881F\u8EC0\u91AC\u91B1\u9830\u9839\u985A\u9A52\u9DD7\u9E7C"+
+ "\u9EB4\u9EB5\uFF0D\uFF5E\uFFE0\uFFE1\uFFE2";
+
+ private final String G2_b =
+ "\uA1BD\uADF4\uADF8\uA1C2\uADF3\uADF9\uADA1\uADA2\uADA3\uADA4"+
+ "\uADA5\uADA6\uADA7\uADA8\uADA9\uADAA\uADAB\uADAC\uADAD\uADAE"+
+ "\uADAF\uADB0\uADB1\uADB2\uADB3\uADB4\uADE0\uADE1\uADEB\uADEC"+
+ "\uADE5\uADE6\uADE7\uADE8\uADE9\uADC6\uADCA\uADC1\uADC4\uADC2"+
+ "\uADCC\uADCB\uADC5\uADCD\uADC7\uADCF\uADC0\uADCE\uADC3\uADC8"+
+ "\uADC9\uADDF\uADEF\uADEE\uADED\uADD3\uADD4\uADD0\uADD1\uADD2"+
+ "\uADD6\uADD5\uADE3\uB6A2\uC7ED\uB0A2\uB3FA\uC7B9\uC5B6\uD6A2"+
+ "\uBCC8\uC1DF\uC4CF\uDAB9\uBAF4\uDBF4\uC8AE\uC6C2\uB1EB\uC1E9"+
+ "\uC5F8\uC3BD\uE5DA\uBDAB\uB7D2\uE7A6\uB7D5\uCDE9\uBED5\uC0E6"+
+ "\uCFB9\uB6ED\uBEDF\uC8B0\uCBCB\uF0F8\uC5BF\uC2CD\uB2AA\uB8B4"+
+ "\uB9ED\uCCCD\uA1DD\uA1C1\uA1F1\uA1F2\uA2CC";
+
+ private final String G3_c =
+ "\u2116\u2121\u2160\u2161\u2162\u2163\u2164\u2165\u2166\u2167"+
+ "\u2168\u2169\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177"+
+ "\u2178\u2179\u3231\u4EFC\u50F4\u51EC\u5307\u5324\u548A\u5759"+
+ "\u589E\u5BEC\u5CF5\u5D53\u5FB7\u6085\u6120\u654E\u663B\u6665"+
+ "\u6801\u6A6B\u6AE2\u6DF2\u6DF8\u7028\u70BB\u7501\u7682\u769E"+
+ "\u7930\u7AE7\u7DA0\u7DD6\u8362\u85B0\u8807\u8B7F\u8CF4\u8D76"+
+ "\u90DE\u9115\u9592\u973B\u974D\u9751\u999E\u9AD9\u9B72\u9ED1"+
+ "\uF86F\uF929\uF9DC\uFA0E\uFA0F\uFA10\uFA11\uFA12\uFA13\uFA14"+
+ "\uFA15\uFA16\uFA17\uFA18\uFA19\uFA1A\uFA1B\uFA1C\uFA1D\uFA1E"+
+ "\uFA1F\uFA20\uFA21\uFA22\uFA23\uFA24\uFA25\uFA26\uFA27\uFA28"+
+ "\uFA29\uFA2A\uFA2B\uFA2C\uFA2D\uFF02\uFF07\uFFE4";
+
+ private final String G3_b =
+ "\uF3B8\uF3B9\uF3AB\uF3AC\uF3AD\uF3AE\uF3AF\uF3B0\uF3B1\uF3B2"+
+ "\uF3B3\uF3B4\uF3A1\uF3A2\uF3A3\uF3A4\uF3A5\uF3A6\uF3A7\uF3A8"+
+ "\uF3A9\uF3AA\uF3B7\uF4A2\uF4A3\uF4A4\uF4A5\uF4A6\uF4A8\uF4A9"+
+ "\uF4AC\uF4AE\uF4AF\uF4B0\uF4B2\uF4B3\uF4B4\uF4B5\uF4B6\uF4B7"+
+ "\uF4BA\uF4BD\uF4BE\uF4C0\uF4BF\uF4C2\uF4A1\uF4C6\uF4C7\uF4C8"+
+ "\uF4CB\uF4D0\uF4D4\uF4D5\uF4D7\uF4D9\uF4DC\uF4DF\uF4E0\uF4E1"+
+ "\uF4E5\uF4E7\uF4EA\uF4ED\uF4EE\uF4EF\uF4F4\uF4F5\uF4F6\uF4F8"+
+ "\uF3B8\uF4B9\uF4EB\uF4A7\uF4AA\uF4AB\uF4B1\uF4B8\uF4BB\uF4BC"+
+ "\uF4C4\uF4C5\uF4C9\uF4CC\uF4CD\uF4CE\uF4CF\uF4D1\uF4D3\uF4D6"+
+ "\uF4D8\uF4DA\uF4DB\uF4DE\uF4E2\uF4E3\uF4E4\uF4E6\uF4E8\uF4E9"+
+ "\uF4EC\uF4F1\uF4F2\uF4F3\uF4F7\uF3B6\uF3B5\uA2C3";
+
+ protected Encoder(Charset cs) {
+ this(cs, 3.0f, 3.0f, ENC0201, ENC0208, ENC0212);
+ }
+
+ protected Encoder(Charset cs, float avgBpc, float maxBpc,
+ SingleByte.Encoder enc0201,
+ DoubleByte.Encoder enc0208,
+ DoubleByte.Encoder enc0212) {
+ super(cs, avgBpc, maxBpc);
+ this.enc0201 = enc0201;
+ this.enc0208 = enc0208;
+ this.enc0212 = enc0212;
+ }
+
+ public boolean canEncode(char c) {
+ byte[] encodedBytes = new byte[3];
+ return encodeSingle(c, encodedBytes) != 0 ||
+ encodeDouble(c) != UNMAPPABLE_ENCODING;
+ }
+
+ private final static String G1_c = "\u00A2\u00A3\u00AC";
+
+ protected int encodeSingle(char inputChar, byte[] outputByte) {
+ if (inputChar >= 0x80 && inputChar < 0x8e) {
+ outputByte[0] = (byte)inputChar;
+ return 1;
+ }
+ if (inputChar >= 0x90 && inputChar < 0xa0) {
+ outputByte[0] = (byte)inputChar;
+ return 1;
+ }
+ int b = enc0201.encode(inputChar);
+ if (b == UNMAPPABLE_ENCODING) {
+ int idx = G1_c.indexOf(inputChar);
+ if (idx > -1)
+ b = 0xe0 + idx;
+ }
+ if (b == UNMAPPABLE_ENCODING)
+ return 0;
+ if (b >= 0 && b < 128) {
+ outputByte[0] = (byte)b;
+ return 1;
+ }
+ outputByte[0] = (byte)0x8e;
+ outputByte[1] = (byte)b;
+ return 2;
+ }
+
+ protected int encodeUDC(char ch) {
+ if (ch >= '\ue000' && ch <= '\ue757') {
+ if (ch < '\ue3ac') {
+ int offset = (int)ch - 0xe000;
+ int b = ((offset / 94) << 8) + (offset % 94);
+ return b + 0xf5a1;
+ } else {
+ int offset = (int)ch - 0xe3ac;
+ int b = ((offset / 94) << 8) + (offset % 94);
+ return b + 0x8ff5a1;
+ }
+ }
+ return UNMAPPABLE_ENCODING;
+ }
+
+ protected int encodeDouble(char ch) {
+ int idx = G2_c.indexOf(ch);
+ if (idx > -1)
+ return (int)G2_b.charAt(idx);
+ idx = G3_c.indexOf(ch);
+ if (idx > -1)
+ return (int)G3_b.charAt(idx) + 0x8f0000;
+ int b = enc0208.encodeChar(ch);
+ if (b != UNMAPPABLE_ENCODING)
+ return b + 0x8080;
+ b = encodeUDC(ch);
+ if (b != UNMAPPABLE_ENCODING)
+ return b;
+ if (ibm943.canEncode(ch)) {
+ b = enc0212.encodeChar(ch);
+ if (b != UNMAPPABLE_ENCODING) {
+ b += 0x8F8080;
+ return b;
+ }
+ }
+ return b;
+ }
+
+ private CoderResult encodeArrayLoop(CharBuffer src,
+ ByteBuffer dst)
+ {
+ char[] sa = src.array();
+ int sp = src.arrayOffset() + src.position();
+ int sl = src.arrayOffset() + src.limit();
+ assert (sp <= sl);
+ sp = (sp <= sl ? sp : sl);
+ byte[] da = dst.array();
+ int dp = dst.arrayOffset() + dst.position();
+ int dl = dst.arrayOffset() + dst.limit();
+ assert (dp <= dl);
+ dp = (dp <= dl ? dp : dl);
+
+ int outputSize = 0;
+ byte[] outputByte;
+ int inputSize = 0; // Size of input
+ byte[] tmpBuf = new byte[3];
+
+ try {
+ while (sp < sl) {
+ outputByte = tmpBuf;
+ char c = sa[sp];
+ if (Character.isSurrogate(c)) {
+ if (sgp.parse(c, sa, sp, sl) < 0)
+ return sgp.error();
+ return sgp.unmappableResult();
+ }
+ outputSize = encodeSingle(c, outputByte);
+ if (outputSize == 0) { // DoubleByte
+ int ncode = encodeDouble(c);
+ if (ncode != UNMAPPABLE_ENCODING) {
+ if ((ncode & 0xFF0000) == 0) {
+ outputByte[0] = (byte) ((ncode & 0xff00) >> 8);
+ outputByte[1] = (byte) (ncode & 0xff);
+ outputSize = 2;
+ } else {
+ outputByte[0] = (byte) 0x8f;
+ outputByte[1] = (byte) ((ncode & 0xff00) >> 8);
+ outputByte[2] = (byte) (ncode & 0xff);
+ outputSize = 3;
+ }
+ } else {
+ return CoderResult.unmappableForLength(1);
+ }
+ }
+ if (dl - dp < outputSize)
+ return CoderResult.OVERFLOW;
+ // Put the byte in the output buffer
+ for (int i = 0; i < outputSize; i++) {
+ da[dp++] = outputByte[i];
+ }
+ sp++;
+ }
+ return CoderResult.UNDERFLOW;
+ } finally {
+ src.position(sp - src.arrayOffset());
+ dst.position(dp - dst.arrayOffset());
+ }
+ }
+
+ private CoderResult encodeBufferLoop(CharBuffer src,
+ ByteBuffer dst)
+ {
+ int outputSize = 0;
+ byte[] outputByte;
+ int inputSize = 0; // Size of input
+ byte[] tmpBuf = new byte[3];
+
+ int mark = src.position();
+
+ try {
+ while (src.hasRemaining()) {
+ outputByte = tmpBuf;
+ char c = src.get();
+ if (Character.isSurrogate(c)) {
+ if (sgp.parse(c, src) < 0)
+ return sgp.error();
+ return sgp.unmappableResult();
+ }
+ outputSize = encodeSingle(c, outputByte);
+ if (outputSize == 0) { // DoubleByte
+ int ncode = encodeDouble(c);
+ if (ncode != UNMAPPABLE_ENCODING) {
+ if ((ncode & 0xFF0000) == 0) {
+ outputByte[0] = (byte) ((ncode & 0xff00) >> 8);
+ outputByte[1] = (byte) (ncode & 0xff);
+ outputSize = 2;
+ } else {
+ outputByte[0] = (byte) 0x8f;
+ outputByte[1] = (byte) ((ncode & 0xff00) >> 8);
+ outputByte[2] = (byte) (ncode & 0xff);
+ outputSize = 3;
+ }
+ } else {
+ return CoderResult.unmappableForLength(1);
+ }
+ }
+ if (dst.remaining() < outputSize)
+ return CoderResult.OVERFLOW;
+ // Put the byte in the output buffer
+ for (int i = 0; i < outputSize; i++) {
+ dst.put(outputByte[i]);
+ }
+ mark++;
+ }
+ return CoderResult.UNDERFLOW;
+ } finally {
+ src.position(mark);
+ }
+ }
+
+ protected CoderResult encodeLoop(CharBuffer src,
+ ByteBuffer dst)
+ {
+ if (src.hasArray() && dst.hasArray())
+ return encodeArrayLoop(src, dst);
+ else
+ return encodeBufferLoop(src, dst);
+ }
+ }
+}
diff -r b50715adf242 -r cf2b4754174d src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2019, 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
@@ -896,7 +896,7 @@
if (moreInfo && bound != null && !isPrintingBound)
try {
isPrintingBound = true;
- s.append("{:").append(bound.bound).append(":}");
+ s.append("{:").append(bound.getUpperBound()).append(":}");
} finally {
isPrintingBound = false;
}
@@ -1607,7 +1607,7 @@
* itself. Furthermore, the erasure_field of the class
* points to the first class or interface bound.
*/
- public Type bound = null;
+ private Type _bound = null;
/** The lower bound of this type variable.
* TypeVars don't normally have a lower bound, so it is normally set
@@ -1620,7 +1620,7 @@
super(null, TypeMetadata.EMPTY);
Assert.checkNonNull(lower);
tsym = new TypeVariableSymbol(0, name, this, owner);
- this.bound = null;
+ this.setUpperBound(null);
this.lower = lower;
}
@@ -1632,15 +1632,20 @@
TypeMetadata metadata) {
super(tsym, metadata);
Assert.checkNonNull(lower);
- this.bound = bound;
+ this.setUpperBound(bound);
this.lower = lower;
}
@Override
public TypeVar cloneWithMetadata(TypeMetadata md) {
- return new TypeVar(tsym, bound, lower, md) {
+ return new TypeVar(tsym, getUpperBound(), lower, md) {
@Override
public Type baseType() { return TypeVar.this.baseType(); }
+
+ @Override @DefinedBy(Api.LANGUAGE_MODEL)
+ public Type getUpperBound() { return TypeVar.this.getUpperBound(); }
+
+ public void setUpperBound(Type bound) { TypeVar.this.setUpperBound(bound); }
};
}
@@ -1655,12 +1660,9 @@
}
@Override @DefinedBy(Api.LANGUAGE_MODEL)
- public Type getUpperBound() {
- if ((bound == null || bound.hasTag(NONE)) && this != tsym.type) {
- bound = tsym.type.getUpperBound();
- }
- return bound;
- }
+ public Type getUpperBound() { return _bound; }
+
+ public void setUpperBound(Type bound) { this._bound = bound; }
int rank_field = -1;
@@ -1709,7 +1711,7 @@
WildcardType wildcard) {
super(name, owner, lower);
this.lower = Assert.checkNonNull(lower);
- this.bound = upper;
+ this.setUpperBound(upper);
this.wildcard = wildcard;
}
@@ -1725,9 +1727,14 @@
@Override
public CapturedType cloneWithMetadata(TypeMetadata md) {
- return new CapturedType(tsym, bound, bound, lower, wildcard, md) {
+ return new CapturedType(tsym, getUpperBound(), getUpperBound(), lower, wildcard, md) {
@Override
public Type baseType() { return CapturedType.this.baseType(); }
+
+ @Override @DefinedBy(Api.LANGUAGE_MODEL)
+ public Type getUpperBound() { return CapturedType.this.getUpperBound(); }
+
+ public void setUpperBound(Type bound) { CapturedType.this.setUpperBound(bound); }
};
}
@@ -1832,7 +1839,7 @@
public void complete() {
for (List l = tvars; l.nonEmpty(); l = l.tail) {
- ((TypeVar)l.head).bound.complete();
+ ((TypeVar)l.head).getUpperBound().complete();
}
qtype.complete();
}
diff -r b50715adf242 -r cf2b4754174d src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, 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
@@ -132,7 +132,7 @@
if (t.hasTag(WILDCARD)) {
WildcardType w = (WildcardType) t;
if (w.isSuperBound())
- return w.bound == null ? syms.objectType : w.bound.bound;
+ return w.bound == null ? syms.objectType : w.bound.getUpperBound();
else
return wildUpperBound(w.type);
}
@@ -146,7 +146,7 @@
public Type cvarUpperBound(Type t) {
if (t.hasTag(TYPEVAR)) {
TypeVar v = (TypeVar) t;
- return v.isCaptured() ? cvarUpperBound(v.bound) : v;
+ return v.isCaptured() ? cvarUpperBound(v.getUpperBound()) : v;
}
else return t;
}
@@ -1821,14 +1821,14 @@
case TYPEVAR:
if (isSubtype(t, s)) {
return true;
- } else if (isCastable(t.bound, s, noWarnings)) {
+ } else if (isCastable(t.getUpperBound(), s, noWarnings)) {
warnStack.head.warn(LintCategory.UNCHECKED);
return true;
} else {
return false;
}
default:
- return isCastable(t.bound, s, warnStack.head);
+ return isCastable(t.getUpperBound(), s, warnStack.head);
}
}
@@ -1954,7 +1954,7 @@
if (t == s) return false;
if (t.hasTag(TYPEVAR)) {
TypeVar tv = (TypeVar) t;
- return !isCastable(tv.bound,
+ return !isCastable(tv.getUpperBound(),
relaxBound(s),
noWarnings);
}
@@ -2150,7 +2150,7 @@
if (t.tsym == sym)
return t;
else
- return asSuper(t.bound, sym);
+ return asSuper(t.getUpperBound(), sym);
}
@Override
@@ -2269,7 +2269,7 @@
@Override
public Type visitTypeVar(TypeVar t, Symbol sym) {
- return memberType(t.bound, sym);
+ return memberType(t.getUpperBound(), sym);
}
@Override
@@ -2392,7 +2392,7 @@
@Override
public Type visitTypeVar(TypeVar t, Boolean recurse) {
- Type erased = erasure(t.bound, recurse);
+ Type erased = erasure(t.getUpperBound(), recurse);
return combineMetadata(erased, t);
}
};
@@ -2498,11 +2498,11 @@
*/
@Override
public Type visitTypeVar(TypeVar t, Void ignored) {
- if (t.bound.hasTag(TYPEVAR) ||
- (!t.bound.isCompound() && !t.bound.isInterface())) {
- return t.bound;
+ if (t.getUpperBound().hasTag(TYPEVAR) ||
+ (!t.getUpperBound().isCompound() && !t.getUpperBound().isInterface())) {
+ return t.getUpperBound();
} else {
- return supertype(t.bound);
+ return supertype(t.getUpperBound());
}
}
@@ -2573,11 +2573,11 @@
@Override
public List visitTypeVar(TypeVar t, Void ignored) {
- if (t.bound.isCompound())
- return interfaces(t.bound);
-
- if (t.bound.isInterface())
- return List.of(t.bound);
+ if (t.getUpperBound().isCompound())
+ return interfaces(t.getUpperBound());
+
+ if (t.getUpperBound().isInterface())
+ return List.of(t.getUpperBound());
return List.nil();
}
@@ -2662,9 +2662,9 @@
* @param allInterfaces are all bounds interface types?
*/
public void setBounds(TypeVar t, List bounds, boolean allInterfaces) {
- t.bound = bounds.tail.isEmpty() ?
+ t.setUpperBound( bounds.tail.isEmpty() ?
bounds.head :
- makeIntersectionType(bounds, allInterfaces);
+ makeIntersectionType(bounds, allInterfaces) );
t.rank_field = -1;
}
//
@@ -2674,10 +2674,10 @@
* Return list of bounds of the given type variable.
*/
public List getBounds(TypeVar t) {
- if (t.bound.hasTag(NONE))
+ if (t.getUpperBound().hasTag(NONE))
return List.nil();
- else if (t.bound.isErroneous() || !t.bound.isCompound())
- return List.of(t.bound);
+ else if (t.getUpperBound().isErroneous() || !t.getUpperBound().isCompound())
+ return List.of(t.getUpperBound());
else if ((erasure(t).tsym.flags() & INTERFACE) == 0)
return interfaces(t).prepend(supertype(t));
else
@@ -3361,8 +3361,8 @@
// calculate new bounds
for (Type t : tvars) {
TypeVar tv = (TypeVar) t;
- Type bound = subst(tv.bound, from, to);
- if (bound != tv.bound)
+ Type bound = subst(tv.getUpperBound(), from, to);
+ if (bound != tv.getUpperBound())
changed = true;
newBoundsBuf.append(bound);
}
@@ -3386,15 +3386,15 @@
// set the bounds of new type variables to the new bounds
for (Type t : newTvars.toList()) {
TypeVar tv = (TypeVar) t;
- tv.bound = newBounds.head;
+ tv.setUpperBound( newBounds.head );
newBounds = newBounds.tail;
}
return newTvars.toList();
}
public TypeVar substBound(TypeVar t, List from, List to) {
- Type bound1 = subst(t.bound, from, to);
- if (bound1 == t.bound)
+ Type bound1 = subst(t.getUpperBound(), from, to);
+ if (bound1 == t.getUpperBound())
return t;
else {
// create new type variable without bounds
@@ -3402,7 +3402,7 @@
t.getMetadata());
// the new bound should use the new type variable in place
// of the old
- tv.bound = subst(bound1, List.of(t), List.of(tv));
+ tv.setUpperBound( subst(bound1, List.of(t), List.of(tv)) );
return tv;
}
}
@@ -3435,7 +3435,7 @@
List tvars1 = tvars.map(newInstanceFun);
for (List l = tvars1; l.nonEmpty(); l = l.tail) {
TypeVar tv = (TypeVar) l.head;
- tv.bound = subst(tv.bound, tvars, tvars1);
+ tv.setUpperBound( subst(tv.getUpperBound(), tvars, tvars1) );
}
return tvars1;
}
@@ -3614,11 +3614,11 @@
}
private void appendTyparamString(TypeVar t, StringBuilder buf) {
buf.append(t);
- if (t.bound == null ||
- t.bound.tsym.getQualifiedName() == names.java_lang_Object)
+ if (t.getUpperBound() == null ||
+ t.getUpperBound().tsym.getQualifiedName() == names.java_lang_Object)
return;
buf.append(" extends "); // Java syntax; no need for i18n
- Type bound = t.bound;
+ Type bound = t.getUpperBound();
if (!bound.isCompound()) {
buf.append(bound);
} else if ((erasure(t).tsym.flags() & INTERFACE) == 0) {
@@ -4375,24 +4375,24 @@
Ui = syms.objectType;
switch (Ti.kind) {
case UNBOUND:
- Si.bound = subst(Ui, A, S);
+ Si.setUpperBound( subst(Ui, A, S) );
Si.lower = syms.botType;
break;
case EXTENDS:
- Si.bound = glb(Ti.getExtendsBound(), subst(Ui, A, S));
+ Si.setUpperBound( glb(Ti.getExtendsBound(), subst(Ui, A, S)) );
Si.lower = syms.botType;
break;
case SUPER:
- Si.bound = subst(Ui, A, S);
+ Si.setUpperBound( subst(Ui, A, S) );
Si.lower = Ti.getSuperBound();
break;
}
- Type tmpBound = Si.bound.hasTag(UNDETVAR) ? ((UndetVar)Si.bound).qtype : Si.bound;
+ Type tmpBound = Si.getUpperBound().hasTag(UNDETVAR) ? ((UndetVar)Si.getUpperBound()).qtype : Si.getUpperBound();
Type tmpLower = Si.lower.hasTag(UNDETVAR) ? ((UndetVar)Si.lower).qtype : Si.lower;
- if (!Si.bound.hasTag(ERROR) &&
+ if (!Si.getUpperBound().hasTag(ERROR) &&
!Si.lower.hasTag(ERROR) &&
isSameType(tmpBound, tmpLower)) {
- currentS.head = Si.bound;
+ currentS.head = Si.getUpperBound();
}
}
currentA = currentA.tail;
@@ -4720,9 +4720,9 @@
@Override
public Type visitTypeVar(TypeVar t, Void s) {
if (rewriteTypeVars) {
- Type bound = t.bound.contains(t) ?
- erasure(t.bound) :
- visit(t.bound);
+ Type bound = t.getUpperBound().contains(t) ?
+ erasure(t.getUpperBound()) :
+ visit(t.getUpperBound());
return rewriteAsWildcardType(bound, t, EXTENDS);
} else {
return t;
diff -r b50715adf242 -r cf2b4754174d src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Tue Jan 29 09:38:31 2019 -0500
@@ -798,7 +798,7 @@
for (JCTypeParameter tvar : typarams) {
TypeVar a = (TypeVar)tvar.type;
a.tsym.flags_field |= UNATTRIBUTED;
- a.bound = Type.noType;
+ a.setUpperBound(Type.noType);
if (!tvar.bounds.isEmpty()) {
List bounds = List.of(attribType(tvar.bounds.head, env));
for (JCExpression bound : tvar.bounds.tail)
@@ -4520,9 +4520,9 @@
annotate.annotateTypeParameterSecondStage(tree, tree.annotations);
}
- if (!typeVar.bound.isErroneous()) {
+ if (!typeVar.getUpperBound().isErroneous()) {
//fixup type-parameter bound computed in 'attribTypeVariables'
- typeVar.bound = checkIntersection(tree, tree.bounds);
+ typeVar.setUpperBound(checkIntersection(tree, tree.bounds));
}
}
diff -r b50715adf242 -r cf2b4754174d src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Tue Jan 29 09:38:31 2019 -0500
@@ -2285,7 +2285,7 @@
return;
if (seen.contains(t)) {
tv = (TypeVar)t;
- tv.bound = types.createErrorType(t);
+ tv.setUpperBound(types.createErrorType(t));
log.error(pos, Errors.CyclicInheritance(t));
} else if (t.hasTag(TYPEVAR)) {
tv = (TypeVar)t;
diff -r b50715adf242 -r cf2b4754174d src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Infer.java
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Infer.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Infer.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2019, 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
@@ -537,8 +537,8 @@
for (Type t : todo) {
UndetVar uv = (UndetVar)t;
TypeVar ct = (TypeVar)uv.getInst();
- ct.bound = types.glb(inferenceContext.asInstTypes(types.getBounds(ct)));
- if (ct.bound.isErroneous()) {
+ ct.setUpperBound( types.glb(inferenceContext.asInstTypes(types.getBounds(ct))) );
+ if (ct.getUpperBound().isErroneous()) {
//report inference error if glb fails
reportBoundError(uv, InferenceBound.UPPER);
}
diff -r b50715adf242 -r cf2b4754174d src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2019, 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
@@ -989,7 +989,7 @@
// use the SAM parameter type
if (checkForIntersection && descPTypes.head.getKind() == TypeKind.TYPEVAR) {
TypeVar tv = (TypeVar) descPTypes.head;
- if (tv.bound.getKind() == TypeKind.INTERSECTION) {
+ if (tv.getUpperBound().getKind() == TypeKind.INTERSECTION) {
parmType = samPTypes.head;
}
}
@@ -2375,7 +2375,7 @@
return true;
case TYPEVAR:
TypeVar tv = (TypeVar) t;
- return isIntersectionOrUnionType(tv.bound);
+ return isIntersectionOrUnionType(tv.getUpperBound());
}
return false;
}
diff -r b50715adf242 -r cf2b4754174d src/jdk.compiler/share/classes/com/sun/tools/javac/util/RichDiagnosticFormatter.java
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/util/RichDiagnosticFormatter.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/util/RichDiagnosticFormatter.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2019, 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
@@ -506,11 +506,11 @@
public Void visitCapturedType(CapturedType t, Void ignored) {
if (indexOf(t, WhereClauseKind.CAPTURED) == -1) {
String suffix = t.lower == syms.botType ? ".1" : "";
- JCDiagnostic d = diags.fragment("where.captured"+ suffix, t, t.bound, t.lower, t.wildcard);
+ JCDiagnostic d = diags.fragment("where.captured"+ suffix, t, t.getUpperBound(), t.lower, t.wildcard);
whereClauses.get(WhereClauseKind.CAPTURED).put(t, d);
visit(t.wildcard);
visit(t.lower);
- visit(t.bound);
+ visit(t.getUpperBound());
}
return null;
}
@@ -555,7 +555,7 @@
t = (TypeVar)t.stripMetadataIfNeeded();
if (indexOf(t, WhereClauseKind.TYPEVAR) == -1) {
//access the bound type and skip error types
- Type bound = t.bound;
+ Type bound = t.getUpperBound();
while ((bound instanceof ErrorType))
bound = ((ErrorType)bound).getOriginalType();
//retrieve the bound list - if the type variable
diff -r b50715adf242 -r cf2b4754174d src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/VM.java
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/VM.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/VM.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2019, 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
@@ -130,6 +130,7 @@
private static Type intxType;
private static Type uintxType;
private static Type sizetType;
+ private static Type uint64tType;
private static CIntegerType boolType;
private Boolean sharingEnabled;
private Boolean compressedOopsEnabled;
@@ -231,6 +232,50 @@
return addr.getCIntegerAt(0, sizetType.getSize(), true);
}
+ public boolean isCcstr() {
+ return type.equals("ccstr");
+ }
+
+ public String getCcstr() {
+ if (Assert.ASSERTS_ENABLED) {
+ Assert.that(isCcstr(), "not a ccstr flag!");
+ }
+ return CStringUtilities.getString(addr.getAddressAt(0));
+ }
+
+ public boolean isCcstrlist() {
+ return type.equals("ccstrlist");
+ }
+
+ public String getCcstrlist() {
+ if (Assert.ASSERTS_ENABLED) {
+ Assert.that(isCcstrlist(), "not a ccstrlist flag!");
+ }
+ return CStringUtilities.getString(addr.getAddressAt(0));
+ }
+
+ public boolean isDouble() {
+ return type.equals("double");
+ }
+
+ public double getDouble() {
+ if (Assert.ASSERTS_ENABLED) {
+ Assert.that(isDouble(), "not a double flag!");
+ }
+ return addr.getJDoubleAt(0);
+ }
+
+ public boolean isUint64t() {
+ return type.equals("uint64_t");
+ }
+
+ public long getUint64t() {
+ if (Assert.ASSERTS_ENABLED) {
+ Assert.that(isUint64t(), "not an uint64_t flag!");
+ }
+ return addr.getCIntegerAt(0, uint64tType.getSize(), true);
+ }
+
public String getValue() {
if (isBool()) {
return Boolean.toString(getBool());
@@ -241,11 +286,27 @@
} else if (isIntx()) {
return Long.toString(getIntx());
} else if (isUIntx()) {
- return Long.toString(getUIntx());
+ return Long.toUnsignedString(getUIntx());
} else if (isSizet()) {
- return Long.toString(getSizet());
+ return Long.toUnsignedString(getSizet());
+ } else if (isCcstr()) {
+ var str = getCcstr();
+ if (str != null) {
+ str = "\"" + str + "\"";
+ }
+ return str;
+ } else if (isCcstrlist()) {
+ var str = getCcstrlist();
+ if (str != null) {
+ str = "\"" + str + "\"";
+ }
+ return str;
+ } else if (isDouble()) {
+ return Double.toString(getDouble());
+ } else if (isUint64t()) {
+ return Long.toUnsignedString(getUint64t());
} else {
- return null;
+ throw new WrongTypeException("Unknown type: " + type + " (" + name + ")");
}
}
};
@@ -383,6 +444,7 @@
intxType = db.lookupType("intx");
uintxType = db.lookupType("uintx");
sizetType = db.lookupType("size_t");
+ uint64tType = db.lookupType("uint64_t");
boolType = (CIntegerType) db.lookupType("bool");
minObjAlignmentInBytes = getObjectAlignmentInBytes();
diff -r b50715adf242 -r cf2b4754174d src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/HeapSummary.java
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/HeapSummary.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/HeapSummary.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, 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
@@ -294,6 +294,8 @@
if (f != null) {
if (f.isBool()) {
return f.getBool()? 1L : 0L;
+ } else if (f.isUIntx() || f.isSizet() || f.isUint64t()) {
+ return Long.parseUnsignedLong(f.getValue());
} else {
return Long.parseLong(f.getValue());
}
diff -r b50715adf242 -r cf2b4754174d src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/GraalHotSpotVMConfig.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/GraalHotSpotVMConfig.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/GraalHotSpotVMConfig.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, 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
@@ -309,8 +309,11 @@
public final int jvmAccWrittenFlags = getConstant("JVM_ACC_WRITTEN_FLAGS", Integer.class);
public final int jvmAccSynthetic = getConstant("JVM_ACC_SYNTHETIC", Integer.class);
+ public final int jvmciCompileStateCanPostOnExceptionsOffset = getFieldOffset("JVMCIEnv::_jvmti_can_post_on_exceptions", Integer.class, "jbyte", Integer.MIN_VALUE);
+
public final int threadTlabOffset = getFieldOffset("Thread::_tlab", Integer.class, "ThreadLocalAllocBuffer");
public final int javaThreadAnchorOffset = getFieldOffset("JavaThread::_anchor", Integer.class, "JavaFrameAnchor");
+ public final int javaThreadShouldPostOnExceptionsFlagOffset = getFieldOffset("JavaThread::_should_post_on_exceptions_flag", Integer.class, "int", Integer.MIN_VALUE);
public final int threadObjectOffset = getFieldOffset("JavaThread::_threadObj", Integer.class, "oop");
public final int osThreadOffset = getFieldOffset("JavaThread::_osthread", Integer.class, "OSThread*");
public final int threadIsMethodHandleReturnOffset = getFieldOffset("JavaThread::_is_method_handle_return", Integer.class, "int");
diff -r b50715adf242 -r cf2b4754174d src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -124,7 +124,7 @@
Plugins plugins = new Plugins(invocationPlugins);
NodeIntrinsificationProvider nodeIntrinsificationProvider = new NodeIntrinsificationProvider(metaAccess, snippetReflection, foreignCalls, wordTypes);
HotSpotWordOperationPlugin wordOperationPlugin = new HotSpotWordOperationPlugin(snippetReflection, wordTypes);
- HotSpotNodePlugin nodePlugin = new HotSpotNodePlugin(wordOperationPlugin);
+ HotSpotNodePlugin nodePlugin = new HotSpotNodePlugin(wordOperationPlugin, config, wordTypes);
plugins.appendTypePlugin(nodePlugin);
plugins.appendNodePlugin(nodePlugin);
diff -r b50715adf242 -r cf2b4754174d src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotNodePlugin.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotNodePlugin.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotNodePlugin.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -24,21 +24,41 @@
package org.graalvm.compiler.hotspot.meta;
+import static jdk.vm.ci.meta.DeoptimizationAction.None;
+import static jdk.vm.ci.meta.DeoptimizationReason.TransferToInterpreter;
import static org.graalvm.compiler.core.common.GraalOptions.ImmutableCode;
+import org.graalvm.compiler.core.common.CompilationIdentifier;
+import org.graalvm.compiler.core.common.type.StampFactory;
import org.graalvm.compiler.core.common.type.StampPair;
+import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
+import org.graalvm.compiler.hotspot.HotSpotCompilationIdentifier;
+import org.graalvm.compiler.hotspot.nodes.CurrentJavaThreadNode;
+import org.graalvm.compiler.hotspot.word.HotSpotWordTypes;
import org.graalvm.compiler.nodes.ConstantNode;
+import org.graalvm.compiler.nodes.FixedGuardNode;
+import org.graalvm.compiler.nodes.FixedWithNextNode;
+import org.graalvm.compiler.nodes.LogicNode;
+import org.graalvm.compiler.nodes.NamedLocationIdentity;
+import org.graalvm.compiler.nodes.StructuredGraph;
import org.graalvm.compiler.nodes.ValueNode;
+import org.graalvm.compiler.nodes.calc.IntegerEqualsNode;
import org.graalvm.compiler.nodes.extended.GuardingNode;
import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext;
import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderTool;
import org.graalvm.compiler.nodes.graphbuilderconf.InlineInvokePlugin;
import org.graalvm.compiler.nodes.graphbuilderconf.NodePlugin;
import org.graalvm.compiler.nodes.graphbuilderconf.TypePlugin;
+import org.graalvm.compiler.nodes.memory.HeapAccess.BarrierType;
+import org.graalvm.compiler.nodes.memory.ReadNode;
+import org.graalvm.compiler.nodes.memory.address.AddressNode;
+import org.graalvm.compiler.nodes.memory.address.OffsetAddressNode;
import org.graalvm.compiler.nodes.util.ConstantFoldUtil;
import org.graalvm.compiler.word.Word;
import org.graalvm.compiler.word.WordOperationPlugin;
+import jdk.internal.vm.compiler.word.LocationIdentity;
+import jdk.vm.ci.hotspot.HotSpotCompilationRequest;
import jdk.vm.ci.meta.JavaConstant;
import jdk.vm.ci.meta.JavaKind;
import jdk.vm.ci.meta.JavaType;
@@ -47,23 +67,30 @@
import jdk.vm.ci.meta.ResolvedJavaMethod;
import jdk.vm.ci.meta.ResolvedJavaType;
+import java.lang.reflect.Field;
+import sun.misc.Unsafe;
+
/**
- * This plugin handles the HotSpot-specific customizations of bytecode parsing:
- *
- * {@link Word}-type rewriting for {@link GraphBuilderContext#parsingIntrinsic intrinsic} functions
- * (snippets and method substitutions), by forwarding to the {@link WordOperationPlugin}. Note that
- * we forward the {@link NodePlugin} and {@link TypePlugin} methods, but not the
+ * This plugin does HotSpot-specific customization of bytecode parsing:
+ *
+ *
{@link Word}-type rewriting for {@link GraphBuilderContext#parsingIntrinsic intrinsic}
+ * functions (snippets and method substitutions), by forwarding to the {@link WordOperationPlugin}.
+ * Note that we forward the {@link NodePlugin} and {@link TypePlugin} methods, but not the
* {@link InlineInvokePlugin} methods implemented by {@link WordOperationPlugin}. The latter is not
* necessary because HotSpot only uses the {@link Word} type in methods that are force-inlined,
- * i.e., there are never non-inlined invokes that involve the {@link Word} type.
- *
- * Constant folding of field loads.
+ * i.e., there are never non-inlined invokes that involve the {@link Word} type.
+ *
Constant folding of field loads.
+ *
*/
public final class HotSpotNodePlugin implements NodePlugin, TypePlugin {
protected final WordOperationPlugin wordOperationPlugin;
+ private final GraalHotSpotVMConfig config;
+ private final HotSpotWordTypes wordTypes;
- public HotSpotNodePlugin(WordOperationPlugin wordOperationPlugin) {
+ public HotSpotNodePlugin(WordOperationPlugin wordOperationPlugin, GraalHotSpotVMConfig config, HotSpotWordTypes wordTypes) {
this.wordOperationPlugin = wordOperationPlugin;
+ this.config = config;
+ this.wordTypes = wordTypes;
}
@Override
@@ -180,4 +207,58 @@
}
return false;
}
+
+ @Override
+ public FixedWithNextNode instrumentExceptionDispatch(StructuredGraph graph, FixedWithNextNode afterExceptionLoaded) {
+ CompilationIdentifier id = graph.compilationId();
+ if (id instanceof HotSpotCompilationIdentifier) {
+ HotSpotCompilationRequest request = ((HotSpotCompilationIdentifier) id).getRequest();
+ if (request != null) {
+ long compileState = request.getJvmciEnv();
+ if (compileState != 0 &&
+ config.jvmciCompileStateCanPostOnExceptionsOffset != Integer.MIN_VALUE &&
+ config.javaThreadShouldPostOnExceptionsFlagOffset != Integer.MIN_VALUE) {
+ long canPostOnExceptionsOffset = compileState + config.jvmciCompileStateCanPostOnExceptionsOffset;
+ boolean canPostOnExceptions = UNSAFE.getByte(canPostOnExceptionsOffset) != 0;
+ if (canPostOnExceptions) {
+ // If the exception capability is set, then generate code
+ // to check the JavaThread.should_post_on_exceptions flag to see
+ // if we actually need to report exception events for the current
+ // thread. If not, take the fast path otherwise deoptimize.
+ CurrentJavaThreadNode thread = graph.unique(new CurrentJavaThreadNode(wordTypes.getWordKind()));
+ ValueNode offset = graph.unique(ConstantNode.forLong(config.javaThreadShouldPostOnExceptionsFlagOffset));
+ AddressNode address = graph.unique(new OffsetAddressNode(thread, offset));
+ ReadNode shouldPostException = graph.add(new ReadNode(address, JAVA_THREAD_SHOULD_POST_ON_EXCEPTIONS_FLAG_LOCATION, StampFactory.intValue(), BarrierType.NONE));
+ afterExceptionLoaded.setNext(shouldPostException);
+ ValueNode zero = graph.unique(ConstantNode.forInt(0));
+ LogicNode cond = graph.unique(new IntegerEqualsNode(shouldPostException, zero));
+ FixedGuardNode check = graph.add(new FixedGuardNode(cond, TransferToInterpreter, None, false));
+ shouldPostException.setNext(check);
+ return check;
+ }
+ }
+ }
+ }
+ return afterExceptionLoaded;
+ }
+
+ private static final LocationIdentity JAVA_THREAD_SHOULD_POST_ON_EXCEPTIONS_FLAG_LOCATION = NamedLocationIdentity.mutable("JavaThread::_should_post_on_exceptions_flag");
+
+ private static final Unsafe UNSAFE = initUnsafe();
+
+ private static Unsafe initUnsafe() {
+ try {
+ // Fast path when we are trusted.
+ return Unsafe.getUnsafe();
+ } catch (SecurityException se) {
+ // Slow path when we are not trusted.
+ try {
+ Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
+ theUnsafe.setAccessible(true);
+ return (Unsafe) theUnsafe.get(Unsafe.class);
+ } catch (Exception e) {
+ throw new RuntimeException("exception while trying to get Unsafe", e);
+ }
+ }
+ }
}
diff -r b50715adf242 -r cf2b4754174d src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2019, 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
@@ -1106,7 +1106,11 @@
deopt.updateNodeSourcePosition(() -> createBytecodePosition());
}
+ /**
+ * @return the entry point to exception dispatch
+ */
private AbstractBeginNode handleException(ValueNode exceptionObject, int bci, boolean deoptimizeOnly) {
+ FixedWithNextNode currentLastInstr = lastInstr;
assert bci == BytecodeFrame.BEFORE_BCI || bci == bci() : "invalid bci";
debug.log("Creating exception dispatch edges at %d, exception object=%s, exception seen=%s", bci, exceptionObject, (profilingInfo == null ? "" : profilingInfo.getExceptionSeen(bci)));
@@ -1126,18 +1130,25 @@
dispatchState.setRethrowException(true);
}
this.controlFlowSplit = true;
- FixedWithNextNode finishedDispatch = finishInstruction(dispatchBegin, dispatchState);
+ FixedWithNextNode afterExceptionLoaded = finishInstruction(dispatchBegin, dispatchState);
if (deoptimizeOnly) {
DeoptimizeNode deoptimizeNode = graph.add(new DeoptimizeNode(DeoptimizationAction.None, DeoptimizationReason.TransferToInterpreter));
- dispatchBegin.setNext(BeginNode.begin(deoptimizeNode));
+ afterExceptionLoaded.setNext(BeginNode.begin(deoptimizeNode));
} else {
- createHandleExceptionTarget(finishedDispatch, bci, dispatchState);
- }
+ createHandleExceptionTarget(afterExceptionLoaded, bci, dispatchState);
+ }
+ assert currentLastInstr == lastInstr;
return dispatchBegin;
}
- protected void createHandleExceptionTarget(FixedWithNextNode finishedDispatch, int bci, FrameStateBuilder dispatchState) {
+ protected void createHandleExceptionTarget(FixedWithNextNode afterExceptionLoaded, int bci, FrameStateBuilder dispatchState) {
+ FixedWithNextNode afterInstrumentation = afterExceptionLoaded;
+ for (NodePlugin plugin : graphBuilderConfig.getPlugins().getNodePlugins()) {
+ afterInstrumentation = plugin.instrumentExceptionDispatch(graph, afterInstrumentation);
+ assert afterInstrumentation.next() == null : "exception dispatch instrumentation will be linked to dispatch block";
+ }
+
BciBlock dispatchBlock = currentBlock.exceptionDispatchBlock();
/*
* The exception dispatch block is always for the last bytecode of a block, so if we are not
@@ -1149,7 +1160,7 @@
}
FixedNode target = createTarget(dispatchBlock, dispatchState);
- finishedDispatch.setNext(target);
+ afterInstrumentation.setNext(target);
}
protected ValueNode genLoadIndexed(ValueNode array, ValueNode index, GuardingNode boundsCheck, JavaKind kind) {
diff -r b50715adf242 -r cf2b4754174d src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/graphbuilderconf/NodePlugin.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/graphbuilderconf/NodePlugin.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/graphbuilderconf/NodePlugin.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -24,6 +24,9 @@
package org.graalvm.compiler.nodes.graphbuilderconf;
+import org.graalvm.compiler.graph.Node.ValueNumberable;
+import org.graalvm.compiler.nodes.FixedWithNextNode;
+import org.graalvm.compiler.nodes.StructuredGraph;
import org.graalvm.compiler.nodes.ValueNode;
import org.graalvm.compiler.nodes.extended.GuardingNode;
@@ -210,6 +213,23 @@
}
/**
+ * Allows this plugin to add nodes after the exception object has been loaded in the dispatch
+ * sequence. Note that a {@link StructuredGraph} is provided to this call instead of a
+ * {@link GraphBuilderContext} so that the caller has a guarantee that its current control flow
+ * insertion point is not changed by this call. This means nodes must be added to the graph with
+ * the appropriate method (e.g., {@link StructuredGraph#unique} for {@link ValueNumberable}
+ * nodes) and fixed nodes must be manually {@linkplain FixedWithNextNode#setNext added} as
+ * successors of {@code afterExceptionLoaded}.
+ *
+ * @param graph the graph being parsed
+ * @param afterExceptionLoaded the last fixed node after loading the exception
+ * @return the last fixed node after instrumentation
+ */
+ default FixedWithNextNode instrumentExceptionDispatch(StructuredGraph graph, FixedWithNextNode afterExceptionLoaded) {
+ return afterExceptionLoaded;
+ }
+
+ /**
* If the plugin {@link GraphBuilderContext#push pushes} a value with a different
* {@link JavaKind} than specified by the bytecode, it must override this method and return
* {@code true}. This disables assertion checking for value kinds.
diff -r b50715adf242 -r cf2b4754174d src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements.test/src/org/graalvm/compiler/replacements/test/IntegerExactExceptionTest.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements.test/src/org/graalvm/compiler/replacements/test/IntegerExactExceptionTest.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements.test/src/org/graalvm/compiler/replacements/test/IntegerExactExceptionTest.java Tue Jan 29 09:38:31 2019 -0500
@@ -98,6 +98,10 @@
}
}
+ public void testIntegerExactOverflowWithoutUse3() {
+ Math.addExact(Integer.MAX_VALUE, 1);
+ }
+
@Test
public void testIntegerExactWithoutUse1() throws InvalidInstalledCodeException {
ResolvedJavaMethod method = getResolvedJavaMethod("testIntegerExactOverflowWithoutUse1");
@@ -126,6 +130,20 @@
assertTrue(gotException);
}
+ @Test
+ public void testIntegerExactWithoutUse3() throws InvalidInstalledCodeException {
+ ResolvedJavaMethod method = getResolvedJavaMethod("testIntegerExactOverflowWithoutUse3");
+ InstalledCode code = getCode(method);
+
+ boolean gotException = false;
+ try {
+ code.executeVarargs(this);
+ } catch (ArithmeticException e) {
+ gotException = true;
+ }
+ assertTrue(gotException);
+ }
+
static long longCounter = 10;
public void testLongExactOverflowSnippet(long input) {
diff -r b50715adf242 -r cf2b4754174d src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/StandardGraphBuilderPlugins.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/StandardGraphBuilderPlugins.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/StandardGraphBuilderPlugins.java Tue Jan 29 09:38:31 2019 -0500
@@ -560,19 +560,14 @@
}
private static boolean createIntegerExactOperation(GraphBuilderContext b, JavaKind kind, ValueNode x, ValueNode y, IntegerExactOp op) {
- if (x.isConstant() && y.isConstant()) {
- b.addPush(kind, createIntegerExactArithmeticNode(x, y, null, op));
+ BytecodeExceptionKind exceptionKind = kind == JavaKind.Int ? BytecodeExceptionKind.INTEGER_EXACT_OVERFLOW : BytecodeExceptionKind.LONG_EXACT_OVERFLOW;
+ AbstractBeginNode exceptionEdge = b.genExplicitExceptionEdge(exceptionKind);
+ if (exceptionEdge != null) {
+ IntegerExactArithmeticSplitNode split = b.addPush(kind, createIntegerExactSplit(x, y, exceptionEdge, op));
+ split.setNext(b.add(new BeginNode()));
return true;
- } else {
- BytecodeExceptionKind exceptionKind = kind == JavaKind.Int ? BytecodeExceptionKind.INTEGER_EXACT_OVERFLOW : BytecodeExceptionKind.LONG_EXACT_OVERFLOW;
- AbstractBeginNode exceptionEdge = b.genExplicitExceptionEdge(exceptionKind);
- if (exceptionEdge != null) {
- IntegerExactArithmeticSplitNode split = b.addPush(kind, createIntegerExactSplit(x, y, exceptionEdge, op));
- split.setNext(b.add(new BeginNode()));
- return true;
- }
- return false;
}
+ return false;
}
private static void registerMathPlugins(InvocationPlugins plugins, boolean allowDeoptimization) {
diff -r b50715adf242 -r cf2b4754174d src/jdk.pack/share/native/common-unpack/zip.cpp
--- a/src/jdk.pack/share/native/common-unpack/zip.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.pack/share/native/common-unpack/zip.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -416,9 +416,11 @@
((uLong)h << 11) | ((uLong)m << 5) | ((uLong)s >> 1);
}
-#ifdef _REENTRANT // solaris
-extern "C" struct tm *gmtime_r(const time_t *, struct tm *);
-#else
+/*
+ * For thread-safe reasons, non-Windows platforms need gmtime_r
+ * while Windows can directly use gmtime that is already thread-safe.
+ */
+#ifdef _MSC_VER
#define gmtime_r(t, s) gmtime(t)
#endif
/*
diff -r b50715adf242 -r cf2b4754174d src/jdk.sctp/unix/classes/sun/nio/ch/sctp/SctpChannelImpl.java
--- a/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/SctpChannelImpl.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/SctpChannelImpl.java Tue Jan 29 09:38:31 2019 -0500
@@ -478,7 +478,7 @@
}
if (!isBlocking()) {
for (;;) {
- n = checkConnect(fd, false, readyToConnect);
+ n = Net.pollConnect(fd, 0);
if ( (n == IOStatus.INTERRUPTED)
&& isOpen())
continue;
@@ -486,7 +486,7 @@
}
} else {
for (;;) {
- n = checkConnect(fd, true, readyToConnect);
+ n = Net.pollConnect(fd, -1);
if (n == 0) {
// Loop in case of
// spurious notifications
@@ -1104,9 +1104,6 @@
InetAddress addr, int port, int assocId, int streamNumber,
boolean unordered, int ppid) throws IOException;
- private static native int checkConnect(FileDescriptor fd, boolean block,
- boolean ready) throws IOException;
-
static {
IOUtil.load(); /* loads nio & net native libraries */
java.security.AccessController.doPrivileged(
diff -r b50715adf242 -r cf2b4754174d src/jdk.sctp/unix/native/libsctp/SctpChannelImpl.c
--- a/src/jdk.sctp/unix/native/libsctp/SctpChannelImpl.c Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.sctp/unix/native/libsctp/SctpChannelImpl.c Tue Jan 29 09:38:31 2019 -0500
@@ -72,10 +72,6 @@
jint handleSocketError(JNIEnv *env, jint errorValue);
-/* use SocketChannelImpl's checkConnect implementation */
-extern jint Java_sun_nio_ch_SocketChannelImpl_checkConnect(JNIEnv* env,
- jobject this, jobject fdo, jboolean block, jboolean ready);
-
/*
* Class: sun_nio_ch_sctp_SctpChannelImpl
* Method: initIDs
@@ -598,13 +594,3 @@
return rv;
}
-/*
- * Class: sun_nio_ch_sctp_SctpChannelImpl
- * Method: checkConnect
- * Signature: (Ljava/io/FileDescriptor;ZZ)I
- */
-JNIEXPORT jint JNICALL Java_sun_nio_ch_sctp_SctpChannelImpl_checkConnect
- (JNIEnv* env, jobject this, jobject fdo, jboolean block, jboolean ready) {
- return Java_sun_nio_ch_SocketChannelImpl_checkConnect(env, this,
- fdo, block, ready);
-}
diff -r b50715adf242 -r cf2b4754174d src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystemProvider.java
--- a/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystemProvider.java Tue Jan 22 09:43:38 2019 -0500
+++ b/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystemProvider.java Tue Jan 29 09:38:31 2019 -0500
@@ -39,6 +39,9 @@
import java.nio.file.attribute.FileAttribute;
import java.nio.file.attribute.FileAttributeView;
import java.nio.file.spi.FileSystemProvider;
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
@@ -317,7 +320,13 @@
//////////////////////////////////////////////////////////////
void removeFileSystem(Path zfpath, ZipFileSystem zfs) throws IOException {
synchronized (filesystems) {
- zfpath = zfpath.toRealPath();
+ Path tempPath = zfpath;
+ PrivilegedExceptionAction action = tempPath::toRealPath;
+ try {
+ zfpath = AccessController.doPrivileged(action);
+ } catch (PrivilegedActionException e) {
+ throw (IOException) e.getException();
+ }
if (filesystems.get(zfpath) == zfs)
filesystems.remove(zfpath);
}
diff -r b50715adf242 -r cf2b4754174d test/Makefile
--- a/test/Makefile Tue Jan 22 09:43:38 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-#
-# Copyright (c) 2010, 2018, 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. Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# 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.
-#
-
-#
-# Makefile to run tests from multiple sibling directories
-#
-
-$(info WARNING: This way of running tests ("cd test && make") is deprecated)
-$(info Please use "make test TEST=..." instead. See doc/testing.md for details)
-
-# Macro to run a test target in a subdir
-define SUBDIR_TEST # subdirectory target
-if [ -d $1 ] ; then \
- if [ -r $1/Makefile ] ; then \
- $(MAKE) --no-print-directory -k -C $1 $2 ; \
- echo 'WARNING: This way of running tests ("cd test && make") is deprecated' ; \
- echo 'Please use "make test TEST=..." instead. See doc/testing.md for details' ; \
- else \
- echo "ERROR: File does not exist: $1/Makefile"; \
- exit 1; \
- fi; \
-else \
- echo "WARNING: No testing done, directory does not exist: $1"; \
-fi
-endef
-
-# Default test target (core)
-default: jdk_core langtools_jtreg jaxp_all
-
-# All testing
-all: jdk_all langtools_all jaxp_all
-
-ifeq ($(TEST_JOBS), 0)
- JDK_TEST_JOBS=$(JOBS)
-else
- JDK_TEST_JOBS=$(TEST_JOBS)
-endif
-# Test targets
-langtools_% :
- @$(NO_STOPPING)$(call SUBDIR_TEST, langtools, \
- $(if $(JDK_TEST_JOBS), CONCURRENCY=$(JDK_TEST_JOBS)) \
- JT_JAVA=$(PRODUCT_HOME) JTREG_HOME=$(JT_HOME) \
- TEST="$(subst langtools_,,$@)" $(subst langtools_,,$@))
-
-jdk_% core_%s svc_%:
- @$(NO_STOPPING)$(call SUBDIR_TEST, jdk, \
- $(if $(JDK_TEST_JOBS), CONCURRENCY=$(JDK_TEST_JOBS)) TEST="$@" $@)
-
-jaxp_%:
- @$(NO_STOPPING)$(call SUBDIR_TEST, jaxp, \
- $(if $(JDK_TEST_JOBS), CONCURRENCY=$(JDK_TEST_JOBS)) TEST="$@" $@)
-
-nashorn_%:
- @$(NO_STOPPING)$(call SUBDIR_TEST, nashorn, \
- $(if $(JDK_TEST_JOBS), CONCURRENCY=$(JDK_TEST_JOBS)) TEST="$@" $@)
-
-SUB_MAKE_ARGS :=
-ifneq ($(TEST_JOBS), 0)
- ifneq ($(TEST_JOBS), )
- SUB_MAKE_ARGS += CONCURRENCY=$(TEST_JOBS)
- endif
-endif
-hotspot_%:
- @$(NO_STOPPING)$(call SUBDIR_TEST, hotspot/jtreg, $(SUB_MAKE_ARGS) TEST="$@" $@)
-
-#
-# jtreg_tests
-#
-# Invocation:
-#
-# make jtreg_tests TESTDIRS= TEST_SELECTION= TEST_OUTPUT_DIR=
-#
-# where is something like '..//test/runtime',
-# in turn being one of the top level directories (for
-# example 'hotspot').
-#
-# The below will strip the path prefix and delegate to the
-# corresponding ..//test/Makefile.
-
-ifneq ($(TESTDIRS),)
- # Extract the component from ../test//...
- TESTDIRS_NORM := $(patsubst test/%, %, $(patsubst ../%, %, $(TESTDIRS)))
- COMPONENT := $(word 1,$(subst /, ,$(TESTDIRS_NORM)))
-
- # Strip off the ..//test prefix and pass the rest as TESTDIRS
- # to the delegate Makefile
- # The hotspot tests are in a subdir "java". Accept paths both including
- # and excluding this extra subdir
- TESTDIRS_TESTS := $(patsubst $(COMPONENT)/%,%,$(patsubst hotspot/jtreg/%,%, \
- $(patsubst ../%, %, $(TESTDIRS_NORM))))
-endif
-
-jtreg_tests:
- $(MAKE) --no-print-directory TESTDIRS=$(TESTDIRS_TESTS) \
- $(COMPONENT)_jtreg_tests
-
-################################################################
-
-# Phony targets (e.g. these are not filenames)
-.PHONY: all clean
-
-################################################################
diff -r b50715adf242 -r cf2b4754174d test/TestCommon.gmk
--- a/test/TestCommon.gmk Tue Jan 22 09:43:38 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,472 +0,0 @@
-#
-# Copyright (c) 1995, 2018, 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. Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# 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.
-#
-
-#
-# Common logic to run various tests for a component, to be included by the
-# component specific test makefiles.
-#
-
-# Default values for some properties that can be overridden by components.
-USE_JTREG_VERSION ?= 4.2
-JTREG_VM_TYPE ?= -agentvm
-USE_JTREG_ASSERT ?= true
-LIMIT_JTREG_VM_MEMORY ?= true
-
-X:=
-SPACE:=$(X) $(X)
-
-.DEFAULT : all
-
-# Empty these to get rid of some default rules
-.SUFFIXES:
-.SUFFIXES: .java
-CO=
-GET=
-
-# Utilities used
-AWK = awk
-CAT = cat
-CD = cd
-CHMOD = chmod
-CP = cp
-CUT = cut
-DIRNAME = dirname
-ECHO = echo
-EGREP = egrep
-EXPAND = expand
-FIND = find
-MKDIR = mkdir
-PWD = pwd
-RM = rm -f
-SED = sed
-SORT = sort
-TEE = tee
-UNAME = uname
-UNIQ = uniq
-WC = wc
-ZIPEXE = zip
-
-# Get OS name from uname (Cygwin inexplicably adds _NT-5.1)
-UNAME_S := $(shell $(UNAME) -s | $(CUT) -f1 -d_)
-
-# Commands to run on paths to make mixed paths for java on windows
-ifeq ($(findstring CYGWIN,$(UNAME_S)), CYGWIN)
- # Location of developer shared files
- SLASH_JAVA = J:
- GETMIXEDPATH = cygpath -m
- PLATFORM = windows
-else
- # Location of developer shared files
- SLASH_JAVA = /java
- GETMIXEDPATH = $(ECHO)
- PLATFORM = unix # we only care about windows or bsd.
- ifeq ($(UNAME_S), Darwin)
- PLATFORM = bsd
- endif
- ifeq ($(findstring BSD,$(UNAME_S)), BSD)
- PLATFORM = bsd
- endif
-endif
-
-# convert list of directories to dos paths
-define MixedDirs
-$(foreach i,$1,$(shell $(GETMIXEDPATH) "${i}"))
-endef
-
-ifdef ALT_SLASH_JAVA
- SLASH_JAVA = $(ALT_SLASH_JAVA)
-endif
-
-# Root of this test area (important to use full paths in some places)
-TEST_ROOT := $(shell $(PWD))
-
-# Root of all test results
-ifdef TEST_OUTPUT_DIR
- $(shell $(MKDIR) -p $(TEST_OUTPUT_DIR)/jtreg)
- ABS_TEST_OUTPUT_DIR := \
- $(shell $(CD) $(TEST_OUTPUT_DIR)/jtreg && $(PWD))
-else
- ifdef ALT_OUTPUTDIR
- ABS_OUTPUTDIR = $(shell $(CD) $(ALT_OUTPUTDIR) && $(PWD))
- else
- ABS_OUTPUTDIR = $(shell $(CD) $(TEST_ROOT)/.. && $(PWD))
- endif
-
- ABS_PLATFORM_BUILD_ROOT = $(ABS_OUTPUTDIR)
- ABS_TEST_OUTPUT_DIR := $(ABS_PLATFORM_BUILD_ROOT)/testoutput/$(UNIQUE_DIR)
-endif
-
-# If unset, set up the PRODUCT_HOME variable to the jdk to test
-ifndef PRODUCT_HOME
- # Try to use images/jdk if it exists
- ABS_JDK_IMAGE = $(ABS_PLATFORM_BUILD_ROOT)/images/jdk
- PRODUCT_HOME := \
- $(shell \
- if [ -d $(ABS_JDK_IMAGE) ] ; then \
- $(ECHO) "$(ABS_JDK_IMAGE)"; \
- else \
- $(ECHO) "$(ABS_PLATFORM_BUILD_ROOT)"; \
- fi)
- PRODUCT_HOME := $(PRODUCT_HOME)
-endif
-
-# On Windows, setup the _NT_SYMBOL_PATH if possible.
-ifeq ($(PLATFORM), windows)
- ifndef _NT_SYMBOL_PATH
- ifdef PRODUCT_SYMBOLS_HOME
- _NT_SYMBOL_PATH := \
- $(subst $(SPACE),;,$(strip $(call MixedDirs, $(sort $(dir $(wildcard \
- $(addprefix $(PRODUCT_SYMBOLS_HOME)/bin/, *.pdb */*.pdb)))))))
- export _NT_SYMBOL_PATH
- endif
- endif
- JTREG_BASIC_OPTIONS += -e:_NT_SYMBOL_PATH='$(_NT_SYMBOL_PATH)'
-endif
-
-ifneq ($(NATIVE_TEST_PATH), )
- # jtreg -nativepath
- #
- # Local make tests will be TEST_IMAGE_DIR
- ifdef TEST_IMAGE_DIR
- TESTNATIVE_DIR = $(TEST_IMAGE_DIR)
- endif
- ifdef TESTNATIVE_DIR
- JTREG_NATIVE_PATH = -nativepath:$(shell $(GETMIXEDPATH) "$(TESTNATIVE_DIR)/$(NATIVE_TEST_PATH)")
- endif
-endif
-
-ifeq ($(USE_FAILURE_HANDLER), true)
- # jtreg failure handler config
- ifeq ($(FAILURE_HANDLER_DIR), )
- ifneq ($(TESTNATIVE_DIR), )
- FAILURE_HANDLER_DIR := $(TESTNATIVE_DIR)/failure_handler
- endif
- endif
- ifneq ($(FAILURE_HANDLER_DIR), )
- FAILURE_HANDLER_DIR_MIXED := $(shell $(GETMIXEDPATH) "$(FAILURE_HANDLER_DIR)")
- JTREG_FAILURE_HANDLER_OPTIONS := \
- -timeoutHandlerDir:$(FAILURE_HANDLER_DIR_MIXED)/jtregFailureHandler.jar \
- -observerDir:$(FAILURE_HANDLER_DIR_MIXED)/jtregFailureHandler.jar \
- -timeoutHandler:jdk.test.failurehandler.jtreg.GatherProcessInfoTimeoutHandler \
- -observer:jdk.test.failurehandler.jtreg.GatherDiagnosticInfoObserver \
- -timeoutHandlerTimeout:0
- ifeq ($(PLATFORM), windows)
- JTREG_FAILURE_HANDLER_OPTIONS += -J-Djava.library.path="$(FAILURE_HANDLER_DIR_MIXED)"
- endif
- endif
-endif
-
-# How to create the test bundle (pass or fail, we want to create this)
-# Follow command with ";$(BUNDLE_UP_AND_EXIT)", so it always gets executed.
-ifneq ($(ARCHIVE_BUNDLE), )
- ZIP_UP_RESULTS = ( $(MKDIR) -p `$(DIRNAME) $(ARCHIVE_BUNDLE)` \
- && $(CD) $(ABS_TEST_OUTPUT_DIR) \
- && $(CHMOD) -R a+r . \
- && $(ZIPEXE) -q -r $(ARCHIVE_BUNDLE) . ) ;
- CLEAN_ARCHIVE_BUNDLE = @$(RM) $(ARCHIVE_BUNDLE)
-endif
-
-# AddressSanitizer
-ifeq ($(ASAN_ENABLED), yes)
- export ASAN_OPTIONS="handle_segv=0 detect_leaks=0"
- JTREG_BASIC_OPTIONS += -e:ASAN_OPTIONS=$(ASAN_OPTIONS)
- ifneq ($(DEVKIT_LIB_DIR),)
- export LD_LIBRARY_PATH:=$(LD_LIBRARY_PATH):$(DEVKIT_LIB_DIR)
- JTREG_BASIC_OPTIONS += -e:LD_LIBRARY_PATH=$(LD_LIBRARY_PATH)
- endif
-endif
-
-# important results files
-SUMMARY_TXT = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/JTreport/text/summary.txt")
-STATS_TXT_NAME = Stats.txt
-STATS_TXT = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/$(STATS_TXT_NAME)")
-RUNLIST = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/runlist.txt")
-PASSLIST = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/passlist.txt")
-FAILLIST = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/faillist.txt")
-EXITCODE = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/exitcode.txt")
-
-TESTEXIT = \
- if [ ! -s $(EXITCODE) ] ; then \
- $(ECHO) "ERROR: EXITCODE file not filled in."; \
- $(ECHO) "1" > $(EXITCODE); \
- fi ; \
- testExitCode=`$(CAT) $(EXITCODE)`; \
- $(ECHO) "EXIT CODE: $${testExitCode}"; \
- exit $${testExitCode}
-
-ifeq ($(TREAT_EXIT_CODE_1_AS_0), true)
- ADJUST_EXIT_CODE := \
- if [ $${jtregExitCode} = 1 ] ; then \
- jtregExitCode=0; \
- fi
-else
- # colon is the shell no-op
- ADJUST_EXIT_CODE := :
-endif
-
-BUNDLE_UP_AND_EXIT = \
-( \
- jtregExitCode=$$? && \
- _summary="$(SUMMARY_TXT)"; \
- $(ADJUST_EXIT_CODE) ; \
- $(RM) -f $(STATS_TXT) $(RUNLIST) $(PASSLIST) $(FAILLIST) $(EXITCODE); \
- $(ECHO) "$${jtregExitCode}" > $(EXITCODE); \
- if [ -r "$${_summary}" ] ; then \
- $(ECHO) "Summary: $(UNIQUE_DIR)" > $(STATS_TXT); \
- $(EXPAND) $${_summary} | $(EGREP) -v ' Not run\.' > $(RUNLIST); \
- $(EGREP) ' Passed\.' $(RUNLIST) \
- | $(EGREP) -v ' Error\.' \
- | $(EGREP) -v ' Failed\.' > $(PASSLIST); \
- ( $(EGREP) ' Failed\.' $(RUNLIST); \
- $(EGREP) ' Error\.' $(RUNLIST); \
- $(EGREP) -v ' Passed\.' $(RUNLIST) ) \
- | $(SORT) | $(UNIQ) > $(FAILLIST); \
- if [ $${jtregExitCode} != 0 -o -s $(FAILLIST) ] ; then \
- $(EXPAND) $(FAILLIST) \
- | $(CUT) -d' ' -f1 \
- | $(SED) -e 's@^@FAILED: @' >> $(STATS_TXT); \
- if [ $${jtregExitCode} = 0 ] ; then \
- jtregExitCode=1; \
- fi; \
- fi; \
- runc="`$(CAT) $(RUNLIST) | $(WC) -l | $(AWK) '{print $$1;}'`"; \
- passc="`$(CAT) $(PASSLIST) | $(WC) -l | $(AWK) '{print $$1;}'`"; \
- failc="`$(CAT) $(FAILLIST) | $(WC) -l | $(AWK) '{print $$1;}'`"; \
- exclc="FIXME CODETOOLS-7900176"; \
- $(ECHO) "TEST STATS: name=$(UNIQUE_DIR) run=$${runc} pass=$${passc} fail=$${failc}" \
- >> $(STATS_TXT); \
- else \
- $(ECHO) "Missing file: $${_summary}" >> $(STATS_TXT); \
- fi; \
- if [ -f $(STATS_TXT) ] ; then \
- $(CAT) $(STATS_TXT); \
- fi; \
- $(ZIP_UP_RESULTS) \
- $(TESTEXIT) \
-)
-
-################################################################
-
-# Prep for output
-# Change execute permissions on shared library files.
-# Files in repositories should never have execute permissions, but
-# there are some tests that have pre-built shared libraries, and these
-# windows dll files must have execute permission. Adding execute
-# permission may happen automatically on windows when using certain
-# versions of mercurial but it cannot be guaranteed. And blindly
-# adding execute permission might be seen as a mercurial 'change', so
-# we avoid adding execute permission to repository files. But testing
-# from a plain source tree needs the chmod a+rx. Applying the chmod to
-# all shared libraries not just dll files. And with CYGWIN and sshd
-# service, you may need CYGWIN=ntsec for this to work.
-prep:
- @$(MKDIR) -p $(ABS_TEST_OUTPUT_DIR)
- @if [ ! -d $(TEST_ROOT)/../../.hg ] && [ ! -d $(TEST_ROOT)/../../../.hg ]; then \
- $(FIND) $(TEST_ROOT) \( -name \*.dll -o -name \*.DLL -o -name \*.so \) \
- -exec $(CHMOD) a+rx {} \; ; \
- fi
-
-ifeq ($(CLEAN_BEFORE_PREP), true)
-prep: clean
-
-endif
-
-# Cleanup
-clean:
- @$(RM) -r $(ABS_TEST_OUTPUT_DIR)
- $(CLEAN_ARCHIVE_BUNDLE)
-
-################################################################
-
-# jtreg tests
-
-# Expect JT_HOME to be set for jtreg tests. (home for jtreg)
-ifndef JT_HOME
- JT_HOME = $(SLASH_JAVA)/re/jtreg/$(USE_JTREG_VERSION)/promoted/latest/binaries/jtreg
-endif
-
-# Problematic tests to be excluded
-EXTRA_PROBLEM_LISTS :=
-PROBLEM_LISTS := ProblemList.txt $(EXTRA_PROBLEM_LISTS)
-
-# Create exclude list for this platform and arch
-ifdef NO_EXCLUDES
- JTREG_EXCLUSIONS =
-else
- JTREG_EXCLUSIONS = $(addprefix -exclude:, $(wildcard $(PROBLEM_LISTS)))
-endif
-
-# ------------------------------------------------------------------
-
-# The TESTDIRS variable can be used to select the jtreg tests to run
-ifdef TESTDIRS
- TEST_SELECTION = $(TESTDIRS)
-endif
-
-ifeq ($(UNAME_S), SunOS)
- NUM_CORES := $(shell LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line)
-endif
-ifeq ($(UNAME_S), Linux)
- NUM_CORES := $(shell cat /proc/cpuinfo | grep -c processor)
-endif
-ifeq ($(UNAME_S), Darwin)
- NUM_CORES := $(shell /usr/sbin/sysctl -n hw.ncpu)
-endif
-ifeq ($(findstring CYGWIN,$(UNAME_S)), CYGWIN)
- ifneq ($(NUMBER_OF_PROCESSORS), )
- NUM_CORES := $(NUMBER_OF_PROCESSORS)
- else
- ifneq ($(HOTSPOT_BUILD_JOBS), )
- NUM_CORES := $(HOTSPOT_BUILD_JOBS)
- else
- NUM_CORES := 1 # fallback
- endif
- endif
-endif
-
-ifndef CONCURRENCY_FACTOR
- CONCURRENCY_FACTOR = 1
-endif
-
-# Concurrency based on min(cores / 2, 12) * CONCURRENCY_FACTOR
-CONCURRENCY := $(shell $(AWK) \
- 'BEGIN { \
- c = $(NUM_CORES) / 2; \
- if (c > 12) c = 12; \
- c = c * $(CONCURRENCY_FACTOR); \
- if (c < 1) c = 1; \
- printf "%.0f", c; \
- }')
-JTREG_BASIC_OPTIONS += -concurrency:$(CONCURRENCY)
-
-# Make sure MaxRAMPercentage is low enough to not cause OOM or swapping since
-# we may end up with a lot of JVM's
-MAX_RAM_PERCENTAGE := $(shell expr 25 / $(CONCURRENCY))
-JTREG_BASIC_OPTIONS += -vmoption:-XX:MaxRAMPercentage=$(MAX_RAM_PERCENTAGE)
-
-ifdef EXTRA_JTREG_OPTIONS
- JTREG_BASIC_OPTIONS += $(EXTRA_JTREG_OPTIONS)
-endif
-
-# Default JTREG to run
-JTREG = $(JT_HOME)/bin/jtreg
-# run in agentvm/othervm mode
-JTREG_BASIC_OPTIONS += $(JTREG_VM_TYPE)
-# Only run automatic tests
-JTREG_BASIC_OPTIONS += -a
-# Always turn on assertions
-ifeq ($(USE_JTREG_ASSERT), true)
- JTREG_ASSERT_OPTION = -ea -esa
-endif
-JTREG_BASIC_OPTIONS += $(JTREG_ASSERT_OPTION)
-# jtreg verbosity setting
-# Default is to report details on all failed or error tests, times too
-JTREG_VERBOSE ?= fail,error,time
-JTREG_BASIC_OPTIONS += $(if $(JTREG_VERBOSE),-v:$(JTREG_VERBOSE))
-# Retain all files for failing tests
-JTREG_BASIC_OPTIONS += -retain:fail,error
-# Ignore tests are not run and completely silent about it
-JTREG_IGNORE_OPTION = -ignore:quiet
-JTREG_BASIC_OPTIONS += $(JTREG_IGNORE_OPTION)
-# Multiply by 4 the timeout factor
-JTREG_TIMEOUT_OPTION = -timeoutFactor:4
-JTREG_BASIC_OPTIONS += $(JTREG_TIMEOUT_OPTION)
-ifeq ($(LIMIT_JTREG_VM_MEMORY), true)
- # Set the max memory for jtreg control vm
- JTREG_MEMORY_OPTION = -J-Xmx512m
- JTREG_BASIC_OPTIONS += $(JTREG_MEMORY_OPTION)
- # Set the max memory for jtreg target test vms
- JTREG_TESTVM_MEMORY_OPTION = -vmoption:-Xmx512m
- JTREG_TEST_OPTIONS += $(JTREG_TESTVM_MEMORY_OPTION)
-endif
-# Make it possible to specify the JIB_DATA_DIR for tests using the
-# JIB Artifact resolver
-JTREG_BASIC_OPTIONS += -e:JIB_DATA_DIR
-# Give tests access to JT_JAVA, see JDK-8141609
-JTREG_BASIC_OPTIONS += -e:JDK8_HOME=${JT_JAVA}
-# Give aot tests access to Visual Studio installation
-ifneq ($(VS120COMNTOOLS), )
- JTREG_BASIC_OPTIONS += -e:VS120COMNTOOLS="$(shell $(GETMIXEDPATH) "$(patsubst %\,%,$(VS120COMNTOOLS))")"
-endif
-
-JTREG_BASIC_OPTIONS += -e:TEST_IMAGE_GRAAL_DIR=${TEST_IMAGE_DIR}/hotspot/jtreg/graal
-
-# Set other vm and test options
-JTREG_TEST_OPTIONS += $(JAVA_ARGS:%=-javaoptions:%) $(JAVA_VM_ARGS:%=-vmoption:%)
-ifneq ($(JIB_HOME), )
- JTREG_BASIC_OPTIONS += -e:JIB_HOME=$(shell $(GETMIXEDPATH) "$(JIB_HOME)")
-endif
-ifeq ($(IGNORE_MARKED_TESTS), true)
- # Option to tell jtreg to not run tests marked with "ignore"
- ifeq ($(PLATFORM), windows)
- JTREG_KEY_OPTION = -k:!ignore
- else
- JTREG_KEY_OPTION = -k:\!ignore
- endif
- JTREG_BASIC_OPTIONS += $(JTREG_KEY_OPTION)
-endif
-
-# Make sure jtreg exists
-ifeq ($(USE_WINDOWS_EXISTENCE_CHECK), true)
- jtreg_exists:
- test -d $(shell $(GETMIXEDPATH) "$(JT_HOME)")
- test -f $(shell $(GETMIXEDPATH) "$(JTREG)")
-
-else
- jtreg_exists: $(JT_HOME)
-endif
-PHONY_LIST += jtreg_exists
-
-# Run jtreg
-jtreg_tests: prep jtreg_exists $(PRODUCT_HOME) $(TEST_PREREQS)
- ( \
- ( JT_HOME=$(shell $(GETMIXEDPATH) "$(JT_HOME)"); \
- export JT_HOME; \
- $(shell $(GETMIXEDPATH) "$(JTREG)") \
- $(JTREG_BASIC_OPTIONS) \
- -r:$(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/JTreport") \
- -w:$(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/JTwork") \
- -jdk:$(shell $(GETMIXEDPATH) "$(PRODUCT_HOME)") \
- $(JTREG_NATIVE_PATH) \
- $(JTREG_FAILURE_HANDLER_OPTIONS) \
- $(JTREG_EXCLUSIONS) \
- $(JTREG_TEST_OPTIONS) \
- $(TEST_SELECTION) \
- ) ; \
- $(BUNDLE_UP_AND_EXIT) \
- ) 2>&1 | $(TEE) $(ABS_TEST_OUTPUT_DIR)/output.txt ; $(TESTEXIT)
-
-PHONY_LIST += jtreg_tests
-
-# Make it possible to call this with _jtreg_tests
-%_jtreg_tests: jtreg_tests
- # Must have a fake recipe here to prevent make from matching any other rule
-
-################################################################
-
-# Phony targets (e.g. these are not filenames)
-.PHONY: all clean prep $(PHONY_LIST)
-
-################################################################
diff -r b50715adf242 -r cf2b4754174d test/hotspot/gtest/gc/g1/test_g1FreeIdSet.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/gtest/gc/g1/test_g1FreeIdSet.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -0,0 +1,165 @@
+/*
+ * Copyright (c) 2019, 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.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "gc/g1/g1FreeIdSet.hpp"
+#include "memory/allocation.hpp"
+#include "runtime/atomic.hpp"
+#include "runtime/interfaceSupport.inline.hpp"
+#include "runtime/orderAccess.hpp"
+#include "runtime/semaphore.inline.hpp"
+#include "runtime/thread.hpp"
+#include "utilities/debug.hpp"
+#include "utilities/globalDefinitions.hpp"
+#include "utilities/ostream.hpp"
+#include "threadHelper.inline.hpp"
+#include "unittest.hpp"
+
+struct G1FreeIdSet::TestSupport : AllStatic {
+ static uint next(const G1FreeIdSet& set, uint index) {
+ assert(index < set._size, "precondition");
+ return set._next[index];
+ }
+
+ static uint start(const G1FreeIdSet& set) { return set._start; }
+ static uint size(const G1FreeIdSet& set) { return set._size; }
+ static uintx mask(const G1FreeIdSet& set) { return set._head_index_mask; }
+ static uintx head(const G1FreeIdSet& set) { return Atomic::load(&set._head); }
+
+ static uint head_index(const G1FreeIdSet& set, uintx head) {
+ return set.head_index(head);
+ }
+};
+
+typedef G1FreeIdSet::TestSupport TestSupport;
+
+TEST_VM(G1FreeIdSetTest, initial_state) {
+ const uint start = 5;
+ const uint size = 4;
+ G1FreeIdSet set(start, size);
+
+ ASSERT_EQ(start, TestSupport::start(set));
+ ASSERT_EQ(size, TestSupport::size(set));
+ ASSERT_EQ(7u, TestSupport::mask(set));
+ ASSERT_EQ(0u, TestSupport::head(set));
+ for (uint i = 0; i < size; ++i) {
+ ASSERT_EQ(i + 1, TestSupport::next(set, i));
+ }
+}
+
+TEST_VM(G1FreeIdSetTest, non_blocking_ops) {
+ const uint start = 5;
+ const uint size = 3;
+ G1FreeIdSet set(start, size);
+
+ ASSERT_EQ(5u, set.claim_par_id());
+ ASSERT_EQ(1u, TestSupport::head_index(set, TestSupport::head(set)));
+ ASSERT_EQ(6u, set.claim_par_id());
+ ASSERT_EQ(2u, TestSupport::head_index(set, TestSupport::head(set)));
+ ASSERT_EQ(7u, set.claim_par_id());
+ ASSERT_EQ(3u, TestSupport::head_index(set, TestSupport::head(set)));
+
+ set.release_par_id(5u);
+ set.release_par_id(6u);
+ ASSERT_EQ(6u, set.claim_par_id());
+ ASSERT_EQ(5u, set.claim_par_id());
+}
+
+class TestG1FreeIdSetThread : public JavaTestThread {
+ G1FreeIdSet* _set;
+ volatile size_t* _total_allocations;
+ volatile bool* _continue_running;
+ size_t _allocations;
+ uint _thread_number;
+
+public:
+ TestG1FreeIdSetThread(uint thread_number,
+ Semaphore* post,
+ G1FreeIdSet* set,
+ volatile size_t* total_allocations,
+ volatile bool* continue_running) :
+ JavaTestThread(post),
+ _set(set),
+ _total_allocations(total_allocations),
+ _continue_running(continue_running),
+ _allocations(0),
+ _thread_number(thread_number)
+ {}
+
+ virtual void main_run() {
+ while (OrderAccess::load_acquire(_continue_running)) {
+ uint id = _set->claim_par_id();
+ _set->release_par_id(id);
+ ++_allocations;
+ ThreadBlockInVM tbiv(this); // Safepoint check.
+ }
+ tty->print_cr("%u allocations: " SIZE_FORMAT, _thread_number, _allocations);
+ Atomic::add(_allocations, _total_allocations);
+ }
+};
+
+TEST_VM(G1FreeIdSetTest, stress) {
+ const uint start = 5;
+ const uint size = 3;
+ const uint nthreads = size + 1;
+ const uint milliseconds_to_run = 1000;
+
+ Semaphore post;
+ volatile size_t total_allocations = 0;
+ volatile bool continue_running = true;
+
+ G1FreeIdSet set(start, size);
+
+ TestG1FreeIdSetThread* threads[nthreads] = {};
+ for (uint i = 0; i < nthreads; ++i) {
+ threads[i] = new TestG1FreeIdSetThread(i,
+ &post,
+ &set,
+ &total_allocations,
+ &continue_running);
+ threads[i]->doit();
+ }
+
+ JavaThread* this_thread = JavaThread::current();
+ tty->print_cr("Stressing G1FreeIdSet for %u ms", milliseconds_to_run);
+ {
+ ThreadInVMfromNative invm(this_thread);
+ os::sleep(this_thread, milliseconds_to_run, true);
+ }
+ OrderAccess::release_store(&continue_running, false);
+ for (uint i = 0; i < nthreads; ++i) {
+ ThreadInVMfromNative invm(this_thread);
+ post.wait_with_safepoint_check(this_thread);
+ }
+ tty->print_cr("total allocations: " SIZE_FORMAT, total_allocations);
+ tty->print_cr("final free list: ");
+ uint ids[size] = {};
+ for (uint i = 0; i < size; ++i) {
+ uint id = set.claim_par_id();
+ uint index = id - TestSupport::start(set);
+ ASSERT_LT(index, TestSupport::size(set));
+ tty->print_cr(" %u: %u", i, index);
+ }
+ ASSERT_EQ(size, TestSupport::head_index(set, TestSupport::head(set)));
+}
diff -r b50715adf242 -r cf2b4754174d test/hotspot/gtest/memory/test_virtualSpaceNode.cpp
--- a/test/hotspot/gtest/memory/test_virtualSpaceNode.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/gtest/memory/test_virtualSpaceNode.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -28,6 +28,9 @@
#include "utilities/formatBuffer.hpp"
#include "unittest.hpp"
+// include as last, or otherwise we pull in an incompatible "assert" macro
+#include
+
using namespace metaspace;
namespace {
@@ -71,24 +74,55 @@
// removes all the chunks added to the ChunkManager since creation of ChunkManagerRestorer
class ChunkManagerRestorer {
- ChunkManager* const _cm;
- Metachunk* _chunks[NumberOfFreeLists];
- public:
- ChunkManagerRestorer(ChunkManager* cm) : _cm(cm) {
- for (ChunkIndex i = ZeroIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) {
- ChunkList* l = ChunkManagerTest::free_chunks(_cm, i);
- _chunks[i] = l->tail();
+ metaspace::ChunkManager* const _cm;
+ std::vector* _free_chunks[metaspace::NumberOfFreeLists];
+ int _count_pre_existing;
+public:
+ ChunkManagerRestorer(metaspace::ChunkManager* cm) : _cm(cm), _count_pre_existing(0) {
+ _cm->locked_verify();
+ for (metaspace::ChunkIndex i = metaspace::ZeroIndex; i < metaspace::NumberOfFreeLists; i = next_chunk_index(i)) {
+ metaspace::ChunkList* l = ChunkManagerTest::free_chunks(_cm, i);
+ _count_pre_existing += l->count();
+ std::vector *v = new std::vector(l->count());
+ metaspace::Metachunk* c = l->head();
+ while (c) {
+ v->push_back(c);
+ c = c->next();
+ }
+ _free_chunks[i] = v;
}
}
~ChunkManagerRestorer() {
+ _cm->locked_verify();
+ for (metaspace::ChunkIndex i = metaspace::ZeroIndex; i < metaspace::NumberOfFreeLists; i = next_chunk_index(i)) {
+ metaspace::ChunkList* l = ChunkManagerTest::free_chunks(_cm, i);
+ std::vector *v = _free_chunks[i];
+ ssize_t count = l->count();
+ for (ssize_t j = 0; j < count; j++) {
+ metaspace::Metachunk* c = l->head();
+ while (c) {
+ bool found = false;
+ for (size_t k = 0; k < v->size() && !found; k++) {
+ found = (c == v->at(k));
+ }
+ if (found) {
+ c = c->next();
+ } else {
+ _cm->remove_chunk(c);
+ break;
+ }
+ }
+ }
+ delete _free_chunks[i];
+ _free_chunks[i] = NULL;
+ }
+ int count_after_cleanup = 0;
for (ChunkIndex i = ZeroIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) {
ChunkList* l = ChunkManagerTest::free_chunks(_cm, i);
- Metachunk* t = l->tail();
- while (t != _chunks[i]) {
- _cm->remove_chunk(t);
- t = l->tail();
- }
+ count_after_cleanup += l->count();
}
+ EXPECT_EQ(_count_pre_existing, count_after_cleanup);
+ _cm->locked_verify();
}
};
@@ -121,7 +155,6 @@
// committed - used = words left to retire
const size_t words_left = page_chunks - SmallChunk - SpecializedChunk;
-
size_t num_medium_chunks, num_small_chunks, num_spec_chunks;
chunk_up(words_left, num_medium_chunks, num_small_chunks, num_spec_chunks);
@@ -155,7 +188,6 @@
TEST_VM(VirtualSpaceNodeTest, all_vsn_is_committed_half_is_used_by_chunks) {
MutexLockerEx ml(MetaspaceExpand_lock, Mutex::_no_safepoint_check_flag);
-
ChunkManager cm(false);
VirtualSpaceNode vsn(false, vsn_test_size_bytes);
ChunkManagerRestorer c(Metaspace::get_chunk_manager(false));
@@ -165,6 +197,7 @@
vsn.get_chunk_vs(MediumChunk);
vsn.get_chunk_vs(MediumChunk);
vsn.retire(&cm);
+
// DISABLED: checks started to fail after 8198423
// EXPECT_EQ(2UL, ChunkManagerTest::sum_free_chunks_count(&cm)) << "should have been memory left for 2 chunks";
// EXPECT_EQ(2UL * MediumChunk, ChunkManagerTest::sum_free_chunks(&cm)) << "sizes should add up";
@@ -172,13 +205,13 @@
TEST_VM(VirtualSpaceNodeTest, no_committed_memory) {
MutexLockerEx ml(MetaspaceExpand_lock, Mutex::_no_safepoint_check_flag);
-
ChunkManager cm(false);
VirtualSpaceNode vsn(false, vsn_test_size_bytes);
ChunkManagerRestorer c(Metaspace::get_chunk_manager(false));
vsn.initialize();
vsn.retire(&cm);
+
ASSERT_EQ(0UL, ChunkManagerTest::sum_free_chunks_count(&cm)) << "did not commit any memory in the VSN";
}
diff -r b50715adf242 -r cf2b4754174d test/hotspot/gtest/utilities/test_count_leading_zeros.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/gtest/utilities/test_count_leading_zeros.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2019, 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.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "utilities/count_leading_zeros.hpp"
+#include "utilities/globalDefinitions.hpp"
+#include "unittest.hpp"
+
+TEST(count_leading_zeros, one_or_two_set_bits) {
+ unsigned i = 0; // Position of a set bit.
+ for (uint32_t ix = 1; ix != 0; ix <<= 1, ++i) {
+ unsigned j = 0; // Position of a set bit.
+ for (uint32_t jx = 1; jx != 0; jx <<= 1, ++j) {
+ uint32_t value = ix | jx;
+ EXPECT_EQ(31u - MAX2(i, j), count_leading_zeros(value))
+ << "value = " << value;
+ }
+ }
+}
+
+TEST(count_leading_zeros, high_zeros_low_ones) {
+ unsigned i = 0; // Number of leading zeros
+ uint32_t value = ~(uint32_t)0;
+ for ( ; value != 0; value >>= 1, ++i) {
+ EXPECT_EQ(i, count_leading_zeros(value))
+ << "value = " << value;
+ }
+}
+
+TEST(count_leading_zeros, high_ones_low_zeros) {
+ uint32_t value = ~(uint32_t)0;
+ for ( ; value != 0; value <<= 1) {
+ EXPECT_EQ(0u, count_leading_zeros(value))
+ << "value = " << value;
+ }
+}
diff -r b50715adf242 -r cf2b4754174d test/hotspot/gtest/utilities/test_count_trailing_zeros.cpp
--- a/test/hotspot/gtest/utilities/test_count_trailing_zeros.cpp Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/gtest/utilities/test_count_trailing_zeros.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -39,16 +39,15 @@
}
}
-TEST(count_trailing_zeros, all_ones_followed_by_all_zeros) {
- unsigned i = BitsPerWord - 1; // Index of most significant set bit.
+TEST(count_trailing_zeros, high_zeros_low_ones) {
uintx value = ~(uintx)0;
- for ( ; value != 0; value >>= 1, --i) {
+ for ( ; value != 0; value >>= 1) {
EXPECT_EQ(0u, count_trailing_zeros(value))
<< "value = " << value;
}
}
-TEST(count_trailing_zeros, all_zeros_followed_by_all_ones) {
+TEST(count_trailing_zeros, high_ones_low_zeros) {
unsigned i = 0; // Index of least significant set bit.
uintx value = ~(uintx)0;
for ( ; value != 0; value <<= 1, ++i) {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/gtest/utilities/test_population_count.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/gtest/utilities/test_population_count.cpp Tue Jan 29 09:38:31 2019 -0500
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2019, 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.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "libadt/vectset.hpp"
+#include "runtime/os.hpp"
+#include "utilities/population_count.hpp"
+#include "utilities/globalDefinitions.hpp"
+#include "unittest.hpp"
+
+uint8_t test_popcnt_bitsInByte[BITS_IN_BYTE_ARRAY_SIZE] = {
+ 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+ 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8
+};
+
+TEST(population_count, sparse) {
+ // Step through the entire input range from a random starting point,
+ // verify population_count return values against the lookup table
+ // approach used historically
+ uint32_t step = 4711;
+ for (uint32_t value = os::random() % step; value < UINT_MAX - step; value += step) {
+ uint32_t lookup = test_popcnt_bitsInByte[(value >> 24) & 0xff] +
+ test_popcnt_bitsInByte[(value >> 16) & 0xff] +
+ test_popcnt_bitsInByte[(value >> 8) & 0xff] +
+ test_popcnt_bitsInByte[ value & 0xff];
+
+ EXPECT_EQ(lookup, population_count(value))
+ << "value = " << value;
+ }
+
+ // Test a few edge cases
+ EXPECT_EQ(0u, population_count(0u))
+ << "value = " << 0;
+ EXPECT_EQ(1u, population_count(1u))
+ << "value = " << 1;
+ EXPECT_EQ(1u, population_count(2u))
+ << "value = " << 2;
+ EXPECT_EQ(32u, population_count(UINT_MAX))
+ << "value = " << UINT_MAX;
+ EXPECT_EQ(31u, population_count(UINT_MAX - 1))
+ << "value = " << (UINT_MAX - 1);
+}
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/Makefile
--- a/test/hotspot/jtreg/Makefile Tue Jan 22 09:43:38 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-#
-# Copyright (c) 1995, 2018, 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.
-#
-#
-
-NATIVE_TEST_PATH := hotspot/jtreg/native
-
-CLEAN_BEFORE_PREP := true
-
-USE_JTREG_VERSION := 4.1
-
-USE_JTREG_ASSERT := false
-
-LIMIT_JTREG_VM_MEMORY := false
-
-IGNORE_MARKED_TESTS := true
-
-# Include the common base file with most of the logic
-include ../../TestCommon.gmk
-
-################################################################
-# Default make rule (runs jtreg_tests)
-all: hotspot_all
- @$(ECHO) "Testing completed successfully"
-
-# Support "hotspot_" prefixed test make targets (too)
-# The hotspot_% targets are used by the top level Makefile
-# Unless explicitly defined below, hotspot_ is interpreted as a jtreg test group name
-hotspot_%:
- $(ECHO) "Running tests: $@"
- $(MAKE) -j 1 TEST_SELECTION=":$@" UNIQUE_DIR=$@ jtreg_tests;
-
-################################################################
-
-# Set up the directory in which the jvm directories live (client/, server/, etc.)
-ifeq ($(PLATFORM),windows)
-JVMS_DIR := $(PRODUCT_HOME)/bin
-else
-JVMS_DIR := $(PRODUCT_HOME)/lib
-endif
-
-# Use the existance of a directory as a sign that jvm variant is available
-CANDIDATE_JVM_VARIANTS := client minimal server
-JVM_VARIANTS := $(strip $(foreach x,$(CANDIDATE_JVM_VARIANTS),$(if $(wildcard $(JVMS_DIR)/$(x)),$(x))))
-
-################################################################
-
-# Run the native gtest tests from the test image
-
-define NEWLINE
-
-
-endef
-
-
-hotspot_gtest:
- $(foreach v, $(JVM_VARIANTS), \
- $(MAKE) hotspot_gtest$v $(NEWLINE) )
-
-hotspot_gtestserver hotspot_gtestclient hotspot_gtestminimal: hotspot_gtest%:
- $(TESTNATIVE_DIR)/hotspot/gtest/$*/gtestLauncher \
- -jdk $(shell $(GETMIXEDPATH) "$(PRODUCT_HOME)")
-
-PHONY_LIST += hotspot_gtest hotspot_gtestserver hotspot_gtestclient \
- hotspot_gtestminimal
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/ProblemList-Xcomp.txt
--- a/test/hotspot/jtreg/ProblemList-Xcomp.txt Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/ProblemList-Xcomp.txt Tue Jan 29 09:38:31 2019 -0500
@@ -28,4 +28,3 @@
#############################################################################
vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/Test.java 8208235 solaris-all
-runtime/appcds/cacheObject/DifferentHeapSizes.java 8210102 solaris-all
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/ProblemList-graal.txt
--- a/test/hotspot/jtreg/ProblemList-graal.txt Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/ProblemList-graal.txt Tue Jan 29 09:38:31 2019 -0500
@@ -39,8 +39,6 @@
compiler/graalunit/JttThreadsTest.java 8208066 generic-all
-compiler/intrinsics/mathexact/LongMulOverflowTest.java 8196568 generic-all
-
compiler/jvmci/SecurityRestrictionsTest.java 8181837 generic-all
compiler/unsafe/UnsafeGetConstantField.java 8181833 generic-all
@@ -64,7 +62,7 @@
compiler/compilercontrol/directives/LogTest.java 8181753 generic-all
-gc/parallel/TestPrintGCDetailsVerbose.java 8200186 macosx-all
+gc/parallel/TestPrintGCDetailsVerbose.java 8196611 macosx-all
compiler/jvmci/compilerToVM/ReprofileTest.java 8201333 generic-all
@@ -107,18 +105,10 @@
vmTestbase/nsk/jdi/ThreadReference/forceEarlyReturn/forceEarlyReturn007/TestDescription.java 8195600 generic-all
-vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses026/TestDescription.java 8195627 generic-all
-vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses028/TestDescription.java 8195627 generic-all
-vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses030/TestDescription.java 8195627 generic-all
-vmTestbase/nsk/jdb/wherei/wherei001/wherei001.java 8195627 generic-all
-
vmTestbase/vm/mlvm/anonloader/stress/oome/heap/Test.java 8186299 generic-all
vmTestbase/vm/mlvm/anonloader/stress/oome/metaspace/Test.java 8186299 generic-all
# jvmti tests
-vmTestbase/nsk/jvmti/IterateThroughHeap/filter-tagged/TestDescription.java 8193577 generic-all
-vmTestbase/nsk/jvmti/IterateThroughHeap/filter-class-tagged/TestDescription.java 8193577 generic-all
-
vmTestbase/nsk/jvmti/unit/ForceEarlyReturn/earlyretbase/TestDescription.java 8195635 generic-all
vmTestbase/nsk/jvmti/PopFrame/popframe009/TestDescription.java 8195639 generic-all
@@ -135,8 +125,6 @@
vmTestbase/nsk/jvmti/PopFrame/popframe005/TestDescription.java 8207013 generic-all
vmTestbase/nsk/jvmti/StopThread/stopthrd007/TestDescription.java 8207013 generic-all
-vmTestbase/nsk/jvmti/scenarios/sampling/SP02/sp02t003/TestDescription.java 8051349 generic-all
-
serviceability/jvmti/FieldAccessWatch/FieldAccessWatch.java 8202482 generic-all
compiler/stable/TestStableBoolean.java 8204347 generic-all
@@ -157,13 +145,10 @@
org.graalvm.compiler.core.test.OptionsVerifierTest 8205081
org.graalvm.compiler.hotspot.test.CompilationWrapperTest 8205081
org.graalvm.compiler.replacements.test.classfile.ClassfileBytecodeProviderTest 8205081
+org.graalvm.compiler.debug.test.DebugContextTest 8205081
org.graalvm.compiler.core.test.deopt.CompiledMethodTest 8202955
-org.graalvm.compiler.debug.test.DebugContextTest 8203504
-org.graalvm.compiler.hotspot.test.GraalOSRTest 8206947
org.graalvm.compiler.hotspot.test.ReservedStackAccessTest 8213567 windows-all
-org.graalvm.compiler.replacements.test.StringCompressInflateTest 8213556
-
-org.graalvm.compiler.debug.test.TimerKeyTest 8213598
+org.graalvm.compiler.replacements.test.StringCompressInflateTest 8214947
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/ProblemList.txt
--- a/test/hotspot/jtreg/ProblemList.txt Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/ProblemList.txt Tue Jan 29 09:38:31 2019 -0500
@@ -53,14 +53,14 @@
compiler/c2/Test6852078.java 8194310 generic-all
-applications/ctw/modules/java_desktop.java 8189604 windows-all
-applications/ctw/modules/java_desktop_2.java 8189604 windows-all
-applications/ctw/modules/jdk_jconsole.java 8189604 windows-all
-
compiler/cpuflags/TestAESIntrinsicsOnSupportedConfig.java 8190680 generic-all
compiler/runtime/Test8168712.java 8211769,8211771 generic-ppc64,generic-ppc64le,linux-s390x
+applications/ctw/modules/java_desktop.java 8217851 windows-all
+applications/ctw/modules/java_desktop_2.java 8217851 windows-all
+applications/ctw/modules/jdk_jconsole.java 8217851 windows-all
+
#############################################################################
# :hotspot_gc
@@ -74,18 +74,13 @@
gc/stress/gclocker/TestGCLockerWithG1.java 8180622 generic-all
gc/survivorAlignment/TestPromotionFromSurvivorToTenuredAfterMinorGC.java 8177765 generic-all
gc/stress/TestJNIBlockFullGC/TestJNIBlockFullGC.java 8192647 generic-all
-gc/logging/TestUnifiedLoggingSwitchStress.java 8208778 macosx-x64
gc/metaspace/CompressedClassSpaceSizeInJmapHeap.java 8193639 solaris-all
#############################################################################
# :hotspot_runtime
-runtime/appcds/javaldr/GCSharedStringsDuringDump.java 8208778 macosx-x64
-runtime/appcds/javaldr/GCDuringDump.java 8208778 macosx-x64
-runtime/CompressedOops/UseCompressedOops.java 8079353 generic-all
runtime/handshake/HandshakeWalkSuspendExitTest.java 8214174 generic-all
-runtime/RedefineTests/RedefineRunningMethods.java 8208778 macosx-x64
runtime/SharedArchiveFile/SASymbolTableTest.java 8193639 solaris-all
#############################################################################
@@ -161,35 +156,24 @@
vmTestbase/nsk/monitoring/MemoryPoolMBean/isUsageThresholdExceeded/isexceeded005/TestDescription.java 8153598 generic-all
vmTestbase/nsk/monitoring/ThreadMXBean/ThreadInfo/Deadlock/JavaDeadlock001/TestDescription.java 8060733 generic-all
-vmTestbase/nsk/jdi/AttachingConnector/attachnosuspend/attachnosuspend001/TestDescription.java 8153613 generic-all
-vmTestbase/nsk/jdi/ThreadReference/frameCount/framecount001/TestDescription.java 6530620 generic-all
vmTestbase/nsk/jdi/ThreadReference/isSuspended/issuspended002/TestDescription.java 4903717 generic-all
vmTestbase/nsk/jdi/ThreadReference/resume/resume001/TestDescription.java 8072701 generic-all
vmTestbase/nsk/jdi/ThreadReference/stop/stop001/TestDescription.java 7034630 generic-all
vmTestbase/nsk/jdi/BScenarios/hotswap/tc10x001/TestDescription.java 8013728 generic-all
-vmTestbase/nsk/jdi/BScenarios/multithrd/tc02x004/TestDescription.java 4751860 generic-all
vmTestbase/nsk/jdi/EventRequest/setEnabled/setenabled003/TestDescription.java 8066993 generic-all
-vmTestbase/nsk/jdi/StackFrame/_bounds_/bounds001/TestDescription.java 6604963 generic-all
vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses021/TestDescription.java 8065773 generic-all
vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses023/TestDescription.java 8065773 generic-all
vmTestbase/nsk/jdi/EventQueue/remove_l/remove_l005/TestDescription.java 8068225 generic-all
-vmTestbase/nsk/jdi/stress/ClassPrepareEvents/ClassPrepareEvents001/ClassPrepareEvents001.java 6426321 generic-all
vmTestbase/metaspace/gc/firstGC_10m/TestDescription.java 8208250 generic-all
vmTestbase/metaspace/gc/firstGC_50m/TestDescription.java 8208250 generic-all
vmTestbase/metaspace/gc/firstGC_99m/TestDescription.java 8208250 generic-all
vmTestbase/metaspace/gc/firstGC_default/TestDescription.java 8208250 generic-all
-vmTestbase/nsk/jvmti/ClearBreakpoint/clrbrk001/TestDescription.java 8016181 generic-all
-vmTestbase/nsk/jvmti/FieldModification/fieldmod001/TestDescription.java 8016181 generic-all
-vmTestbase/nsk/jvmti/ResourceExhausted/resexhausted001/TestDescription.java 7013634 generic-all
vmTestbase/nsk/jvmti/ResourceExhausted/resexhausted003/TestDescription.java 6606767 generic-all
vmTestbase/nsk/jvmti/ResourceExhausted/resexhausted004/TestDescription.java 7013634,6606767 generic-all
-vmTestbase/nsk/jvmti/ThreadStart/threadstart001/TestDescription.java 8016181 generic-all
vmTestbase/nsk/jvmti/scenarios/extension/EX03/ex03t001/TestDescription.java 8173658 generic-all
-vmTestbase/nsk/jvmti/AttachOnDemand/attach034/TestDescription.java 8042145 generic-all
vmTestbase/nsk/jvmti/AttachOnDemand/attach045/TestDescription.java 8202971 generic-all
-vmTestbase/nsk/jvmti/unit/heap/HeapWalkTests/TestDescription.java 8016181 generic-all
vmTestbase/gc/lock/jni/jnilock002/TestDescription.java 8208243,8192647 generic-all
@@ -197,18 +181,15 @@
vmTestbase/jit/escape/LockCoarsening/LockCoarsening002/TestDescription.java 8208259 generic-all
vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/TestDescription.java 8013267 generic-all
-vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSite/Test.java 8079664 generic-all
-vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSite/Test.java 8079664 generic-all
vmTestbase/vm/mlvm/meth/func/java/throwException/Test.java 8208255 generic-all
vmTestbase/vm/mlvm/meth/func/jdi/breakpointOtherStratum/Test.java 8208257,8208255 generic-all
-vmTestbase/vm/mlvm/meth/stress/compiler/deoptimize/Test.java 8079642,8208255 generic-all
+vmTestbase/vm/mlvm/meth/stress/compiler/deoptimize/Test.java 8208255 generic-all
vmTestbase/vm/mlvm/meth/stress/compiler/i2c_c2i/Test.java 8208255 generic-all
vmTestbase/vm/mlvm/meth/stress/compiler/sequences/Test.java 8208255 generic-all
vmTestbase/vm/mlvm/meth/stress/gc/callSequencesDuringGC/Test.java 8208255 generic-all
vmTestbase/vm/mlvm/meth/stress/java/sequences/Test.java 8208255 generic-all
vmTestbase/vm/mlvm/meth/stress/jdi/breakpointInCompiledCode/Test.java 8208255 generic-all
vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/TestDescription.java 8208278 generic-all
-vmTestbase/vm/mlvm/mixed/stress/regression/b6969574/INDIFY_Test.java 8079650 generic-all
vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/TestDescription.java 8013267 generic-all
vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/TestDescription.java 8013267 generic-all
vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/TestDescription.java 8013267 generic-all
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/TEST.ROOT
--- a/test/hotspot/jtreg/TEST.ROOT Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/TEST.ROOT Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2005, 2019, 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
@@ -59,6 +59,7 @@
vm.rtm.cpu \
vm.rtm.compiler \
vm.aot \
+ vm.aot.enabled \
vm.cds \
vm.cds.custom.loaders \
vm.cds.archived.java.heap \
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/compiler/c2/Test8217359.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/c2/Test8217359.java Tue Jan 29 09:38:31 2019 -0500
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2019, Huawei Technologies Co. Ltd. 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
+ * @bug 8217359
+ * @summary C2 compiler triggers SIGSEGV after transformation in ConvI2LNode::Ideal
+ *
+ * @run main/othervm -XX:-TieredCompilation
+ * -XX:CompileCommand=compileonly,compiler.c2.Test8217359::test
+ * compiler.c2.Test8217359
+ */
+
+package compiler.c2;
+
+public class Test8217359 {
+
+ public static int ival = 0;
+ public static long lsum = 0;
+ public static long lval = 0;
+
+ public static void test() {
+ short s = -25632;
+ float f = 0.512F, f1 = 2.556F;
+ int i6 = 32547, i7 = 9, i8 = -9, i9 = 36, i10 = -223;
+
+ for (i6 = 4; i6 < 182; i6++) {
+ i8 = 1;
+ while (++i8 < 17) {
+ f1 = 1;
+ do {
+ i7 += (182 + (f1 * f1));
+ } while (++f1 < 1);
+
+ Test8217359.ival += (i8 | Test8217359.ival);
+ }
+ }
+
+ for (i9 = 9; i9 < 100; ++i9) {
+ i10 -= i6;
+ i10 >>= s;
+ i7 += (((i9 * i10) + i6) - Test8217359.lval);
+ }
+
+ lsum += i6 + i7 + i8;
+ }
+
+ public static void main(String[] args) {
+ for (int i = 0; i < 16000; i++) {
+ test();
+ }
+ }
+
+}
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/compiler/c2/TestMatcherLargeOffset.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/c2/TestMatcherLargeOffset.java Tue Jan 29 09:38:31 2019 -0500
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2019, 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
+ * @bug 8202952
+ * @summary C2: Unexpected dead nodes after matching
+ *
+ * @run main/othervm -XX:-TieredCompilation -Xcomp -XX:CompileOnly=::test
+ * compiler.c2.TestMatcherLargeOffset
+ */
+package compiler.c2;
+
+public class TestMatcherLargeOffset {
+ public static final int N = 400;
+ public static int iArrFld[] = new int[N];
+
+ public static void m(int i4) {
+ i4 |= -104;
+ iArrFld[(i4 >>> 1) % N] >>= i4;
+ }
+
+ public static void test() {
+ int i2 = 1, i24 = 65;
+ for (int i1 = 7; i1 < 384; ++i1) {
+ for (long l = 2; l < 67; l++) {
+ m(i2);
+ for (i24 = 1; 2 > i24; ++i24) {
+ iArrFld = iArrFld;
+ }
+ }
+ i2 = (-229 / i24);
+ }
+ }
+ public static void main(String[] strArr) {
+ for (int i = 0; i < 5; i++ ) {
+ test();
+ }
+ }
+}
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/compiler/ciReplay/CiReplayBase.java
--- a/test/hotspot/jtreg/compiler/ciReplay/CiReplayBase.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/compiler/ciReplay/CiReplayBase.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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
@@ -71,6 +71,11 @@
"-XX:+ReplayCompiles", REPLAY_FILE_OPTION};
protected final Optional runServer;
+ public static class EmptyMain {
+ public static void main(String[] args) {
+ }
+ }
+
static {
try {
CLIENT_VM_AVAILABLE = ProcessTools.executeTestJvm(CLIENT_VM_OPTION, VERSION_OPTION)
@@ -135,7 +140,7 @@
options.addAll(Arrays.asList(REPLAY_GENERATION_OPTIONS));
options.addAll(Arrays.asList(vmopts));
options.add(needCoreDump ? ENABLE_COREDUMP_ON_CRASH : DISABLE_COREDUMP_ON_CRASH);
- options.add(VERSION_OPTION);
+ options.add(EmptyMain.class.getName());
if (needCoreDump) {
crashOut = ProcessTools.executeProcess(getTestJavaCommandlineWithPrefix(
RUN_SHELL_NO_LIMIT, options.toArray(new String[0])));
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/compiler/intrinsics/bigInteger/TestMulAdd.java
--- a/test/hotspot/jtreg/compiler/intrinsics/bigInteger/TestMulAdd.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/compiler/intrinsics/bigInteger/TestMulAdd.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -25,6 +25,8 @@
* @test
* @bug 8081778
* @summary Add C2 x86 intrinsic for BigInteger::mulAdd() method
+ * @comment the test disables intrinsics, so it can't be run w/ AOT'ed java.base
+ * @requires !vm.aot.enabled
*
* @run main/othervm/timeout=600 -XX:-TieredCompilation -Xbatch
* -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockDiagnosticVMOptions -XX:-UseSquareToLenIntrinsic -XX:-UseMultiplyToLenIntrinsic
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/compiler/jsr292/NonInlinedCall/InvokeTest.java
--- a/test/hotspot/jtreg/compiler/jsr292/NonInlinedCall/InvokeTest.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/compiler/jsr292/NonInlinedCall/InvokeTest.java Tue Jan 29 09:38:31 2019 -0500
@@ -60,6 +60,8 @@
static final MethodHandle privateMH; // invokespecial I.f4 T
static final MethodHandle basicMH;
+ static final MethodHandle intrinsicMH; // invokevirtual Object.hashCode
+
static final WhiteBox WB = WhiteBox.getWhiteBox();
static volatile boolean doDeopt = false;
@@ -75,6 +77,7 @@
specialMH = LOOKUP.findSpecial(T.class, "f4", mtype, T.class);
privateMH = LOOKUP.findSpecial(I.class, "f4", mtype, I.class);
basicMH = NonInlinedReinvoker.make(staticMH);
+ intrinsicMH = LOOKUP.findVirtual(Object.class, "hashCode", MethodType.methodType(int.class));
} catch (Exception e) {
throw new Error(e);
}
@@ -117,6 +120,10 @@
static class Q2 extends T implements J2 {}
static class Q3 extends T implements J3 {}
+ static class H {
+ public int hashCode() { return 0; }
+ }
+
@DontInline
static void linkToVirtual(T recv, Class> expected) {
try {
@@ -138,6 +145,16 @@
}
@DontInline
+ static void linkToVirtualIntrinsic(Object recv, int expected) {
+ try {
+ int v = (int)intrinsicMH.invokeExact(recv);
+ assertEquals(v, expected);
+ } catch (Throwable e) {
+ throw new Error(e);
+ }
+ }
+
+ @DontInline
static void linkToInterface(I recv, Class> expected) {
try {
Class> cls = (Class>)intfMH.invokeExact(recv);
@@ -177,7 +194,6 @@
}
}
-
@DontInline
static void invokeBasic() {
try {
@@ -215,6 +231,8 @@
run(() -> linkToVirtual(new T(), T.class));
run(() -> linkToVirtualDefault(new T(), I.class));
+ run(() -> linkToVirtualIntrinsic(new H(), 0));
+
// Megamorphic case (optimized virtual call)
run(() -> {
linkToVirtual(new T() {}, T.class);
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/compiler/jvmci/compilerToVM/MaterializeVirtualObjectTest.java
--- a/test/hotspot/jtreg/compiler/jvmci/compilerToVM/MaterializeVirtualObjectTest.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/compiler/jvmci/compilerToVM/MaterializeVirtualObjectTest.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -24,9 +24,13 @@
/*
* @test
* @bug 8136421
+ *
* @requires vm.jvmci
- * & (vm.compMode != "Xcomp" | vm.opt.TieredCompilation == null | vm.opt.TieredCompilation == true)
- * @summary no "-Xcomp -XX:-TieredCompilation" combination allowed until JDK-8140018 is resolved
+ * @requires vm.opt.final.EliminateAllocations == true
+ *
+ * @comment no "-Xcomp -XX:-TieredCompilation" combination allowed until JDK-8140018 is resolved
+ * @requires vm.compMode != "Xcomp" | vm.opt.TieredCompilation == null | vm.opt.TieredCompilation == true
+ *
* @library / /test/lib
* @library ../common/patches
* @modules java.base/jdk.internal.misc
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/CondCardMark/Basic.java
--- a/test/hotspot/jtreg/gc/CondCardMark/Basic.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/CondCardMark/Basic.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,20 +21,22 @@
* questions.
*/
+package gc.CondCardMark;
+
/**
* @test
* @bug 8076987
* @bug 8078438
* @summary Verify UseCondCardMark works
* @modules java.base/jdk.internal.misc
- * @run main/othervm -Xint Basic
- * @run main/othervm -Xint -XX:+UseCondCardMark Basic
- * @run main/othervm -XX:TieredStopAtLevel=1 Basic
- * @run main/othervm -XX:TieredStopAtLevel=1 -XX:+UseCondCardMark Basic
- * @run main/othervm -XX:TieredStopAtLevel=4 Basic
- * @run main/othervm -XX:TieredStopAtLevel=4 -XX:+UseCondCardMark Basic
- * @run main/othervm -XX:-TieredCompilation Basic
- * @run main/othervm -XX:-TieredCompilation -XX:+UseCondCardMark Basic
+ * @run main/othervm -Xint gc.CondCardMark.Basic
+ * @run main/othervm -Xint -XX:+UseCondCardMark gc.CondCardMark.Basic
+ * @run main/othervm -XX:TieredStopAtLevel=1 gc.CondCardMark.Basic
+ * @run main/othervm -XX:TieredStopAtLevel=1 -XX:+UseCondCardMark gc.CondCardMark.Basic
+ * @run main/othervm -XX:TieredStopAtLevel=4 gc.CondCardMark.Basic
+ * @run main/othervm -XX:TieredStopAtLevel=4 -XX:+UseCondCardMark gc.CondCardMark.Basic
+ * @run main/othervm -XX:-TieredCompilation gc.CondCardMark.Basic
+ * @run main/othervm -XX:-TieredCompilation -XX:+UseCondCardMark gc.CondCardMark.Basic
*/
public class Basic {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/CriticalNative.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/gc/CriticalNative.java Tue Jan 29 09:38:31 2019 -0500
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2019, Red Hat, Inc. and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 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.
+ */
+
+package gc;
+
+public class CriticalNative {
+ static {
+ System.loadLibrary("CriticalNative");
+ }
+
+ public static native boolean isNull(int[] a);
+ public static native long sum1(long[] a);
+ // More than 6 parameters
+ public static native long sum2(long a1, int[] a2, int[] a3, long[] a4, int[] a5);
+}
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/CriticalNativeArgs.java
--- a/test/hotspot/jtreg/gc/CriticalNativeArgs.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/CriticalNativeArgs.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,45 +21,42 @@
*
*/
+package gc;
/*
* @test CriticalNativeStressEpsilon
* @key gc
* @bug 8199868
+ * @library /
* @requires (os.arch =="x86_64" | os.arch == "amd64") & vm.gc.Epsilon & !vm.graal.enabled
* @summary test argument unpacking nmethod wrapper of critical native method
- * @run main/othervm/native -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xcomp -Xmx256M -XX:+CriticalJNINatives CriticalNativeArgs
+ * @run main/othervm/native -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xcomp -Xmx256M -XX:+CriticalJNINatives gc.CriticalNativeArgs
*/
/*
* @test CriticalNativeStressShenandoah
* @key gc
* @bug 8199868
+ * @library /
* @requires (os.arch =="x86_64" | os.arch == "amd64") & vm.gc.Shenandoah & !vm.graal.enabled
* @summary test argument unpacking nmethod wrapper of critical native method
- * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC -Xcomp -Xmx512M -XX:+CriticalJNINatives CriticalNativeArgs
- * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC -Xcomp -Xmx512M -XX:+CriticalJNINatives CriticalNativeArgs
+ * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.CriticalNativeArgs
+ * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.CriticalNativeArgs
*
- * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive -Xcomp -Xmx512M -XX:+CriticalJNINatives CriticalNativeArgs
+ * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.CriticalNativeArgs
*
- * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xcomp -Xmx256M -XX:+CriticalJNINatives CriticalNativeArgs
- * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UnlockExperimentalVMOptions -XX:ShenandoahGCHeuristics=traversal -Xcomp -Xmx512M -XX:+CriticalJNINatives CriticalNativeArgs
+ * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xcomp -Xmx256M -XX:+CriticalJNINatives gc.CriticalNativeArgs
+ * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UnlockExperimentalVMOptions -XX:ShenandoahGCHeuristics=traversal -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.CriticalNativeArgs
*/
public class CriticalNativeArgs {
- static {
- System.loadLibrary("CriticalNative");
- }
-
- static native boolean isNull(int[] a);
-
public static void main(String[] args) {
int[] arr = new int[2];
- if (isNull(arr)) {
+ if (CriticalNative.isNull(arr)) {
throw new RuntimeException("Should not be null");
}
- if (!isNull(null)) {
+ if (!CriticalNative.isNull(null)) {
throw new RuntimeException("Should be null");
}
}
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestAgeOutput.java
--- a/test/hotspot/jtreg/gc/TestAgeOutput.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestAgeOutput.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc;
+
/*
* @test TestAgeOutput
* @bug 8164936
@@ -31,8 +33,8 @@
* @library /test/lib
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
- * @run main/othervm -XX:+UseSerialGC TestAgeOutput UseSerialGC
- * @run main/othervm -XX:+UseG1GC TestAgeOutput UseG1GC
+ * @run main/othervm -XX:+UseSerialGC gc.TestAgeOutput UseSerialGC
+ * @run main/othervm -XX:+UseG1GC gc.TestAgeOutput UseG1GC
*/
/*
@@ -45,7 +47,7 @@
* @library /test/lib
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
- * @run main/othervm -XX:+UseConcMarkSweepGC TestAgeOutput UseConcMarkSweepGC
+ * @run main/othervm -XX:+UseConcMarkSweepGC gc.TestAgeOutput UseConcMarkSweepGC
*/
import sun.hotspot.WhiteBox;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestAllocateHeapAt.java
--- a/test/hotspot/jtreg/gc/TestAllocateHeapAt.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestAllocateHeapAt.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -21,12 +21,15 @@
* questions.
*/
+package gc;
+
/* @test TestAllocateHeapAt.java
* @key gc
* @summary Test to check allocation of Java Heap with AllocateHeapAt option
* @requires vm.gc != "Z" & os.family != "aix"
* @library /test/lib
* @modules java.base/jdk.internal.misc
+ * @run main gc.TestAllocateHeapAt
*/
import jdk.test.lib.JDKToolFinder;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestAllocateHeapAtError.java
--- a/test/hotspot/jtreg/gc/TestAllocateHeapAtError.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestAllocateHeapAtError.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -21,12 +21,15 @@
* questions.
*/
+package gc;
+
/* @test TestAllocateHeapAtError.java
* @key gc
* @summary Test to check correct handling of non-existent directory passed to AllocateHeapAt option
* @requires vm.gc != "Z" & os.family != "aix"
* @library /test/lib
* @modules java.base/jdk.internal.misc
+ * @run main gc.TestAllocateHeapAtError
*/
import java.io.File;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestAllocateHeapAtMultiple.java
--- a/test/hotspot/jtreg/gc/TestAllocateHeapAtMultiple.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestAllocateHeapAtMultiple.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -21,13 +21,15 @@
* questions.
*/
+package gc;
+
/* @test TestAllocateHeapAtMultiple.java
* @key gc
* @summary Test to check allocation of Java Heap with AllocateHeapAt option. Has multiple sub-tests to cover different code paths.
* @library /test/lib
* @modules java.base/jdk.internal.misc
* @requires vm.bits == "64" & vm.gc != "Z" & os.family != "aix"
- * @run main/timeout=360 TestAllocateHeapAtMultiple
+ * @run main/timeout=360 gc.TestAllocateHeapAtMultiple
*/
import jdk.test.lib.JDKToolFinder;
@@ -53,9 +55,8 @@
"-Xmx32m -Xms32m -XX:+UseCompressedOops", // 1. With compressedoops enabled.
"-Xmx32m -Xms32m -XX:-UseCompressedOops", // 2. With compressedoops disabled.
"-Xmx32m -Xms32m -XX:HeapBaseMinAddress=3g", // 3. With user specified HeapBaseMinAddress.
- "-Xmx4g -Xms4g", // 4. With larger heap size (UnscaledNarrowOop not possible).
- "-Xmx4g -Xms4g -XX:+UseLargePages", // 5. Set UseLargePages.
- "-Xmx4g -Xms4g -XX:+UseNUMA" // 6. Set UseNUMA.
+ "-Xmx32m -Xms32m -XX:+UseLargePages", // 4. Set UseLargePages.
+ "-Xmx32m -Xms32m -XX:+UseNUMA" // 5. Set UseNUMA.
};
for(String extraOpts : extraOptsList) {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestBigObj.java
--- a/test/hotspot/jtreg/gc/TestBigObj.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestBigObj.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2019, 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
@@ -21,11 +21,13 @@
* questions.
*/
+package gc;
+
/*
* @test TestBigObj
* @bug 6845368
* @summary ensure gc updates references > 64K bytes from the start of the obj
- * @run main/othervm/timeout=720 -Xmx256m -verbose:gc TestBigObj
+ * @run main/othervm/timeout=720 -Xmx256m -verbose:gc gc.TestBigObj
*/
// Allocate an object with a block of reference fields that starts more
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestCardTablePageCommits.java
--- a/test/hotspot/jtreg/gc/TestCardTablePageCommits.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestCardTablePageCommits.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc;
+
import jdk.test.lib.JDKToolFinder;
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.process.OutputAnalyzer;
@@ -34,7 +36,7 @@
* @requires vm.gc.Parallel
* @library /test/lib
* @modules java.base/jdk.internal.misc
- * @run driver TestCardTablePageCommits
+ * @run driver gc.TestCardTablePageCommits
*/
public class TestCardTablePageCommits {
public static void main(String args[]) throws Exception {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestDisableExplicitGC.java
--- a/test/hotspot/jtreg/gc/TestDisableExplicitGC.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestDisableExplicitGC.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc;
+
/*
* @test TestDisableExplicitGC
* @requires vm.opt.DisableExplicitGC == null
@@ -28,9 +30,9 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* @modules jdk.management/com.sun.management.internal
- * @run main/othervm -Xlog:gc=debug TestDisableExplicitGC
- * @run main/othervm/fail -XX:+DisableExplicitGC -Xlog:gc=debug TestDisableExplicitGC
- * @run main/othervm -XX:-DisableExplicitGC -Xlog:gc=debug TestDisableExplicitGC
+ * @run main/othervm -Xlog:gc=debug gc.TestDisableExplicitGC
+ * @run main/othervm/fail -XX:+DisableExplicitGC -Xlog:gc=debug gc.TestDisableExplicitGC
+ * @run main/othervm -XX:-DisableExplicitGC -Xlog:gc=debug gc.TestDisableExplicitGC
*/
import java.lang.management.GarbageCollectorMXBean;
import java.util.List;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestFullGCALot.java
--- a/test/hotspot/jtreg/gc/TestFullGCALot.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestFullGCALot.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -21,13 +21,15 @@
* questions.
*/
+package gc;
+
/*
* @test TestFullGCALot
* @key gc
* @bug 4187687 8187819
* @summary Ensure no access violation when using FullGCALot
* @requires vm.debug
- * @run main/othervm -XX:NewSize=10m -XX:+FullGCALot -XX:FullGCALotInterval=120 TestFullGCALot
+ * @run main/othervm -XX:NewSize=10m -XX:+FullGCALot -XX:FullGCALotInterval=120 gc.TestFullGCALot
*/
public class TestFullGCALot {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestFullGCCount.java
--- a/test/hotspot/jtreg/gc/TestFullGCCount.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestFullGCCount.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc;
+
/**
* @test TestFullGCCount.java
* @bug 7072527
@@ -29,7 +31,7 @@
* @comment Shenandoah has "ExplicitGCInvokesConcurrent" on by default
* @requires !(vm.gc == "Shenandoah" & vm.opt.ExplicitGCInvokesConcurrent != false)
* @modules java.management
- * @run main/othervm -Xlog:gc TestFullGCCount
+ * @run main/othervm -Xlog:gc gc.TestFullGCCount
*/
import java.lang.management.GarbageCollectorMXBean;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestGenerationPerfCounter.java
--- a/test/hotspot/jtreg/gc/TestGenerationPerfCounter.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestGenerationPerfCounter.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc;
+
import static jdk.test.lib.Asserts.*;
import gc.testlibrary.PerfCounter;
import gc.testlibrary.PerfCounters;
@@ -35,9 +37,9 @@
* java.compiler
* java.management/sun.management
* jdk.internal.jvmstat/sun.jvmstat.monitor
- * @run main/othervm -XX:+UsePerfData -XX:+UseSerialGC TestGenerationPerfCounter
- * @run main/othervm -XX:+UsePerfData -XX:+UseParallelGC TestGenerationPerfCounter
- * @run main/othervm -XX:+UsePerfData -XX:+UseG1GC TestGenerationPerfCounter
+ * @run main/othervm -XX:+UsePerfData -XX:+UseSerialGC gc.TestGenerationPerfCounter
+ * @run main/othervm -XX:+UsePerfData -XX:+UseParallelGC gc.TestGenerationPerfCounter
+ * @run main/othervm -XX:+UsePerfData -XX:+UseG1GC gc.TestGenerationPerfCounter
*/
/* @test TestGenerationPerfCounterCMS
@@ -50,7 +52,7 @@
* java.compiler
* java.management/sun.management
* jdk.internal.jvmstat/sun.jvmstat.monitor
- * @run main/othervm -XX:+UsePerfData -XX:+UseConcMarkSweepGC TestGenerationPerfCounter
+ * @run main/othervm -XX:+UsePerfData -XX:+UseConcMarkSweepGC gc.TestGenerationPerfCounter
*/
public class TestGenerationPerfCounter {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestHumongousReferenceObject.java
--- a/test/hotspot/jtreg/gc/TestHumongousReferenceObject.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestHumongousReferenceObject.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc;
+
import jdk.internal.vm.annotation.Contended;
/*
@@ -29,11 +31,11 @@
* @requires vm.gc == "null"
* @bug 8151499 8153734
* @modules java.base/jdk.internal.vm.annotation
- * @run main/othervm -XX:+EnableContended -XX:-RestrictContended -Xmx128m -XX:+UseParallelGC -XX:ContendedPaddingWidth=8192 TestHumongousReferenceObject
- * @run main/othervm -XX:+EnableContended -XX:-RestrictContended -Xmx128m -XX:+UseG1GC -XX:G1HeapRegionSize=1M -XX:ContendedPaddingWidth=8192 TestHumongousReferenceObject
- * @run main/othervm -XX:+EnableContended -XX:-RestrictContended -Xmx128m -XX:+UseG1GC -XX:G1HeapRegionSize=2M -XX:ContendedPaddingWidth=8192 TestHumongousReferenceObject
- * @run main/othervm -XX:+EnableContended -XX:-RestrictContended -Xmx128m -XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:ContendedPaddingWidth=8192 TestHumongousReferenceObject
- * @run main/othervm -XX:+EnableContended -XX:-RestrictContended -Xmx128m -XX:+UseG1GC -XX:G1HeapRegionSize=8M -XX:ContendedPaddingWidth=8192 TestHumongousReferenceObject
+ * @run main/othervm -XX:+EnableContended -XX:-RestrictContended -Xmx128m -XX:+UseParallelGC -XX:ContendedPaddingWidth=8192 gc.TestHumongousReferenceObject
+ * @run main/othervm -XX:+EnableContended -XX:-RestrictContended -Xmx128m -XX:+UseG1GC -XX:G1HeapRegionSize=1M -XX:ContendedPaddingWidth=8192 gc.TestHumongousReferenceObject
+ * @run main/othervm -XX:+EnableContended -XX:-RestrictContended -Xmx128m -XX:+UseG1GC -XX:G1HeapRegionSize=2M -XX:ContendedPaddingWidth=8192 gc.TestHumongousReferenceObject
+ * @run main/othervm -XX:+EnableContended -XX:-RestrictContended -Xmx128m -XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:ContendedPaddingWidth=8192 gc.TestHumongousReferenceObject
+ * @run main/othervm -XX:+EnableContended -XX:-RestrictContended -Xmx128m -XX:+UseG1GC -XX:G1HeapRegionSize=8M -XX:ContendedPaddingWidth=8192 gc.TestHumongousReferenceObject
*/
/*
@@ -42,8 +44,8 @@
* @requires vm.gc.Shenandoah
* @bug 8151499 8153734
* @modules java.base/jdk.internal.vm.annotation
- * @run main/othervm -XX:+EnableContended -XX:-RestrictContended -Xmx128m -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahHeapRegionSize=8M -XX:ContendedPaddingWidth=8192 TestHumongousReferenceObject
- * @run main/othervm -XX:+EnableContended -XX:-RestrictContended -Xmx128m -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahHeapRegionSize=8M -XX:ContendedPaddingWidth=8192 -XX:+UnlockDiagnosticVMOptions -XX:+ShenandoahVerify TestHumongousReferenceObject
+ * @run main/othervm -XX:+EnableContended -XX:-RestrictContended -Xmx128m -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahHeapRegionSize=8M -XX:ContendedPaddingWidth=8192 gc.TestHumongousReferenceObject
+ * @run main/othervm -XX:+EnableContended -XX:-RestrictContended -Xmx128m -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahHeapRegionSize=8M -XX:ContendedPaddingWidth=8192 -XX:+UnlockDiagnosticVMOptions -XX:+ShenandoahVerify gc.TestHumongousReferenceObject
*/
public class TestHumongousReferenceObject {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestMemoryInitialization.java
--- a/test/hotspot/jtreg/gc/TestMemoryInitialization.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestMemoryInitialization.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,6 +1,6 @@
/*
- * Copyright (c) 2002, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2019, 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
@@ -22,6 +22,8 @@
* questions.
*/
+package gc;
+
/*
* test TestMemoryInitialization
* bug 4668531
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestMemoryInitializationWithCMS.java
--- a/test/hotspot/jtreg/gc/TestMemoryInitializationWithCMS.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestMemoryInitializationWithCMS.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2019, 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
@@ -21,13 +21,16 @@
* questions.
*/
+package gc;
+
/*
* @test TestMemoryInitializationWithCMS
* @key gc
* @bug 4668531
+ * @library /
* @requires vm.debug & vm.gc.ConcMarkSweep & !vm.graal.enabled
* @summary Simple test for -XX:+CheckMemoryInitialization doesn't crash VM
- * @run main/othervm -XX:+UseConcMarkSweepGC -XX:+CheckMemoryInitialization TestMemoryInitializationWithCMS
+ * @run main/othervm -XX:+UseConcMarkSweepGC -XX:+CheckMemoryInitialization gc.TestMemoryInitializationWithCMS
*/
public class TestMemoryInitializationWithCMS {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestMemoryInitializationWithSerial.java
--- a/test/hotspot/jtreg/gc/TestMemoryInitializationWithSerial.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestMemoryInitializationWithSerial.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,6 +1,6 @@
/*
- * Copyright (c) 2002, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2019, 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
@@ -22,13 +22,16 @@
* questions.
*/
+package gc;
+
/*
- * @test TestMemoryInitializationWithSerial`
+ * @test TestMemoryInitializationWithSerial
* @key gc
* @bug 4668531
+ * @library /
* @requires vm.debug & vm.gc.Serial
* @summary Simple test for -XX:+CheckMemoryInitialization doesn't crash VM
- * @run main/othervm -XX:+UseSerialGC -XX:+CheckMemoryInitialization TestMemoryInitializationWithSerial
+ * @run main/othervm -XX:+UseSerialGC -XX:+CheckMemoryInitialization gc.TestMemoryInitializationWithSerial
*/
public class TestMemoryInitializationWithSerial {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestMemoryMXBeansAndPoolsPresence.java
--- a/test/hotspot/jtreg/gc/TestMemoryMXBeansAndPoolsPresence.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestMemoryMXBeansAndPoolsPresence.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc;
+
import java.util.List;
import java.util.ArrayList;
import java.lang.management.*;
@@ -34,9 +36,9 @@
* @modules java.base/jdk.internal.misc
* java.management
* @requires vm.gc == null
- * @run main/othervm -XX:+UseG1GC TestMemoryMXBeansAndPoolsPresence G1
- * @run main/othervm -XX:+UseParallelGC TestMemoryMXBeansAndPoolsPresence Parallel
- * @run main/othervm -XX:+UseSerialGC TestMemoryMXBeansAndPoolsPresence Serial
+ * @run main/othervm -XX:+UseG1GC gc.TestMemoryMXBeansAndPoolsPresence G1
+ * @run main/othervm -XX:+UseParallelGC gc.TestMemoryMXBeansAndPoolsPresence Parallel
+ * @run main/othervm -XX:+UseSerialGC gc.TestMemoryMXBeansAndPoolsPresence Serial
*/
/* @test TestMemoryMXBeansAndPoolsPresenceCMS
@@ -46,7 +48,7 @@
* java.management
* @comment Graal does not support CMS
* @requires vm.gc == null & !vm.graal.enabled
- * @run main/othervm -XX:+UseConcMarkSweepGC TestMemoryMXBeansAndPoolsPresence CMS
+ * @run main/othervm -XX:+UseConcMarkSweepGC gc.TestMemoryMXBeansAndPoolsPresence CMS
*/
class GCBeanDescription {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestNUMAPageSize.java
--- a/test/hotspot/jtreg/gc/TestNUMAPageSize.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestNUMAPageSize.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,13 +21,15 @@
* questions.
*/
+package gc;
+
/**
* @test TestNUMAPageSize
* @key gc regression
* @summary Make sure that start up with NUMA support does not cause problems.
* @bug 8061467
* @requires vm.gc != "Z"
- * @run main/othervm -Xmx128m -XX:+UseNUMA -XX:+UseLargePages TestNUMAPageSize
+ * @run main/othervm -Xmx128m -XX:+UseNUMA -XX:+UseLargePages gc.TestNUMAPageSize
*/
public class TestNUMAPageSize {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestNoPerfCounter.java
--- a/test/hotspot/jtreg/gc/TestNoPerfCounter.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestNoPerfCounter.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -21,12 +21,14 @@
* questions.
*/
+package gc;
+
/* @test TestNoPerfCounter
* @bug 8210265
* @requires vm.gc=="null"
* @library /test/lib /
* @summary Tests that disabling perf counters does not crash the VM
- * @run main/othervm -XX:-UsePerfData TestNoPerfCounter
+ * @run main/othervm -XX:-UsePerfData gc.TestNoPerfCounter
*/
public class TestNoPerfCounter {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestNumWorkerOutput.java
--- a/test/hotspot/jtreg/gc/TestNumWorkerOutput.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestNumWorkerOutput.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc;
+
/*
* @test TestNumWorkerOutput
* @bug 8165292
@@ -31,7 +33,7 @@
* @library /test/lib
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
- * @run main/othervm -XX:+UseG1GC TestNumWorkerOutput UseG1GC
+ * @run main/othervm -XX:+UseG1GC gc.TestNumWorkerOutput UseG1GC
*/
/*
@@ -44,7 +46,7 @@
* @library /test/lib
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
- * @run main/othervm -XX:+UseConcMarkSweepGC TestNumWorkerOutput UseConcMarkSweepGC
+ * @run main/othervm -XX:+UseConcMarkSweepGC gc.TestNumWorkerOutput UseConcMarkSweepGC
*/
import sun.hotspot.WhiteBox;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestObjectAlignment.java
--- a/test/hotspot/jtreg/gc/TestObjectAlignment.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestObjectAlignment.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc;
+
/**
* @test TestObjectAlignment
* @key gc
@@ -28,18 +30,18 @@
* @summary G1: Concurrent marking crashes with -XX:ObjectAlignmentInBytes>=32 in 64bit VMs
* @library /test/lib
* @modules java.base/jdk.internal.misc
- * @run main/othervm TestObjectAlignment -Xmx20M -XX:+ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=8
- * @run main/othervm TestObjectAlignment -Xmx20M -XX:+ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=16
- * @run main/othervm TestObjectAlignment -Xmx20M -XX:+ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=32
- * @run main/othervm TestObjectAlignment -Xmx20M -XX:+ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=64
- * @run main/othervm TestObjectAlignment -Xmx20M -XX:+ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=128
- * @run main/othervm TestObjectAlignment -Xmx20M -XX:+ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=256
- * @run main/othervm TestObjectAlignment -Xmx20M -XX:-ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=8
- * @run main/othervm TestObjectAlignment -Xmx20M -XX:-ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=16
- * @run main/othervm TestObjectAlignment -Xmx20M -XX:-ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=32
- * @run main/othervm TestObjectAlignment -Xmx20M -XX:-ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=64
- * @run main/othervm TestObjectAlignment -Xmx20M -XX:-ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=128
- * @run main/othervm TestObjectAlignment -Xmx20M -XX:-ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=256
+ * @run main/othervm gc.TestObjectAlignment -Xmx20M -XX:+ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=8
+ * @run main/othervm gc.TestObjectAlignment -Xmx20M -XX:+ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=16
+ * @run main/othervm gc.TestObjectAlignment -Xmx20M -XX:+ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=32
+ * @run main/othervm gc.TestObjectAlignment -Xmx20M -XX:+ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=64
+ * @run main/othervm gc.TestObjectAlignment -Xmx20M -XX:+ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=128
+ * @run main/othervm gc.TestObjectAlignment -Xmx20M -XX:+ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=256
+ * @run main/othervm gc.TestObjectAlignment -Xmx20M -XX:-ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=8
+ * @run main/othervm gc.TestObjectAlignment -Xmx20M -XX:-ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=16
+ * @run main/othervm gc.TestObjectAlignment -Xmx20M -XX:-ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=32
+ * @run main/othervm gc.TestObjectAlignment -Xmx20M -XX:-ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=64
+ * @run main/othervm gc.TestObjectAlignment -Xmx20M -XX:-ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=128
+ * @run main/othervm gc.TestObjectAlignment -Xmx20M -XX:-ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=256
*/
import jdk.test.lib.process.ProcessTools;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestPolicyNamePerfCounter.java
--- a/test/hotspot/jtreg/gc/TestPolicyNamePerfCounter.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestPolicyNamePerfCounter.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc;
+
import static jdk.test.lib.Asserts.*;
import gc.testlibrary.PerfCounter;
import gc.testlibrary.PerfCounters;
@@ -35,9 +37,9 @@
* java.compiler
* java.management/sun.management
* jdk.internal.jvmstat/sun.jvmstat.monitor
- * @run main/othervm -XX:+UsePerfData -XX:+UseSerialGC TestPolicyNamePerfCounter Copy:MSC
- * @run main/othervm -XX:+UsePerfData -XX:+UseParallelGC TestPolicyNamePerfCounter ParScav:MSC
- * @run main/othervm -XX:+UsePerfData -XX:+UseG1GC TestPolicyNamePerfCounter GarbageFirst
+ * @run main/othervm -XX:+UsePerfData -XX:+UseSerialGC gc.TestPolicyNamePerfCounter Copy:MSC
+ * @run main/othervm -XX:+UsePerfData -XX:+UseParallelGC gc.TestPolicyNamePerfCounter ParScav:MSC
+ * @run main/othervm -XX:+UsePerfData -XX:+UseG1GC gc.TestPolicyNamePerfCounter GarbageFirst
*/
/* @test TestPolicyNamePerfCounterCMS
@@ -50,7 +52,7 @@
* java.compiler
* java.management/sun.management
* jdk.internal.jvmstat/sun.jvmstat.monitor
- * @run main/othervm -XX:+UsePerfData -XX:+UseConcMarkSweepGC TestPolicyNamePerfCounter ParNew:CMS
+ * @run main/othervm -XX:+UsePerfData -XX:+UseConcMarkSweepGC gc.TestPolicyNamePerfCounter ParNew:CMS
*/
public class TestPolicyNamePerfCounter {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestSmallHeap.java
--- a/test/hotspot/jtreg/gc/TestSmallHeap.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestSmallHeap.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc;
+
/**
* @test TestSmallHeap
* @bug 8067438 8152239
@@ -30,7 +32,7 @@
* @modules java.base/jdk.internal.misc
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
- * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI TestSmallHeap
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI gc.TestSmallHeap
*/
/* Note: It would be nice to verify the minimal supported heap size here,
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestSoftReferencesBehaviorOnOOME.java
--- a/test/hotspot/jtreg/gc/TestSoftReferencesBehaviorOnOOME.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestSoftReferencesBehaviorOnOOME.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc;
+
/**
* @test TestSoftReferencesBehaviorOnOOME
* @key gc
@@ -28,9 +30,9 @@
* @requires vm.gc != "Z"
* @library /test/lib
* @modules java.base/jdk.internal.misc
- * @run main/othervm -Xmx128m TestSoftReferencesBehaviorOnOOME 512 2k
- * @run main/othervm -Xmx128m TestSoftReferencesBehaviorOnOOME 128k 256k
- * @run main/othervm -Xmx128m TestSoftReferencesBehaviorOnOOME 2k 32k
+ * @run main/othervm -Xmx128m gc.TestSoftReferencesBehaviorOnOOME 512 2k
+ * @run main/othervm -Xmx128m gc.TestSoftReferencesBehaviorOnOOME 128k 256k
+ * @run main/othervm -Xmx128m gc.TestSoftReferencesBehaviorOnOOME 2k 32k
*/
import jdk.test.lib.Utils;
import jdk.test.lib.Asserts;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestStackOverflow.java
--- a/test/hotspot/jtreg/gc/TestStackOverflow.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestStackOverflow.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2019, 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
@@ -21,12 +21,14 @@
* questions.
*/
+package gc;
+
/*
* @test TestStackOverflow
* @key gc
* @bug 4396719
* @summary Test verifies only that VM doesn't crash but throw expected Error.
- * @run main/othervm TestStackOverflow
+ * @run main/othervm gc.TestStackOverflow
*/
public class TestStackOverflow {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestSystemGC.java
--- a/test/hotspot/jtreg/gc/TestSystemGC.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestSystemGC.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,19 +21,21 @@
* questions.
*/
+package gc;
+
/*
* @test TestSystemGC
* @key gc
* @requires vm.gc=="null"
* @summary Runs System.gc() with different flags.
- * @run main/othervm TestSystemGC
- * @run main/othervm -XX:+UseSerialGC TestSystemGC
- * @run main/othervm -XX:+UseParallelGC TestSystemGC
- * @run main/othervm -XX:+UseParallelGC -XX:-UseParallelOldGC TestSystemGC
- * @run main/othervm -XX:+UseG1GC TestSystemGC
- * @run main/othervm -XX:+UseG1GC -XX:+ExplicitGCInvokesConcurrent TestSystemGC
- * @run main/othervm -XX:+UseLargePages TestSystemGC
- * @run main/othervm -XX:+UseLargePages -XX:+UseLargePagesInMetaspace TestSystemGC
+ * @run main/othervm gc.TestSystemGC
+ * @run main/othervm -XX:+UseSerialGC gc.TestSystemGC
+ * @run main/othervm -XX:+UseParallelGC gc.TestSystemGC
+ * @run main/othervm -XX:+UseParallelGC -XX:-UseParallelOldGC gc.TestSystemGC
+ * @run main/othervm -XX:+UseG1GC gc.TestSystemGC
+ * @run main/othervm -XX:+UseG1GC -XX:+ExplicitGCInvokesConcurrent gc.TestSystemGC
+ * @run main/othervm -XX:+UseLargePages gc.TestSystemGC
+ * @run main/othervm -XX:+UseLargePages -XX:+UseLargePagesInMetaspace gc.TestSystemGC
*/
/*
@@ -41,8 +43,8 @@
* @key gc
* @comment Graal does not support CMS
* @requires vm.gc=="null" & !vm.graal.enabled
- * @run main/othervm -XX:+UseConcMarkSweepGC TestSystemGC
- * @run main/othervm -XX:+UseConcMarkSweepGC -XX:+ExplicitGCInvokesConcurrent TestSystemGC
+ * @run main/othervm -XX:+UseConcMarkSweepGC gc.TestSystemGC
+ * @run main/othervm -XX:+UseConcMarkSweepGC -XX:+ExplicitGCInvokesConcurrent gc.TestSystemGC
*/
/*
@@ -50,8 +52,8 @@
* @key gc
* @requires vm.gc.Shenandoah & !vm.graal.enabled
* @summary Runs System.gc() with different flags.
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC TestSystemGC
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+ExplicitGCInvokesConcurrent TestSystemGC
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC gc.TestSystemGC
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+ExplicitGCInvokesConcurrent gc.TestSystemGC
*/
public class TestSystemGC {
public static void main(String args[]) throws Exception {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestVerifyDuringStartup.java
--- a/test/hotspot/jtreg/gc/TestVerifyDuringStartup.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestVerifyDuringStartup.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc;
+
/* @test TestVerifyDuringStartup.java
* @key gc
* @bug 8010463 8011343 8011898
@@ -28,6 +30,7 @@
* @requires vm.gc != "Z"
* @library /test/lib
* @modules java.base/jdk.internal.misc
+ * @run main gc.TestVerifyDuringStartup
*/
import jdk.test.lib.JDKToolFinder;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestVerifySilently.java
--- a/test/hotspot/jtreg/gc/TestVerifySilently.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestVerifySilently.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc;
+
/* @test TestVerifySilently.java
* @key gc
* @bug 8032771
@@ -28,6 +30,7 @@
* @requires vm.gc != "Z"
* @library /test/lib
* @modules java.base/jdk.internal.misc
+ * @run main gc.TestVerifySilently
*/
import jdk.test.lib.process.ProcessTools;
@@ -36,7 +39,7 @@
import java.util.Collections;
import jdk.test.lib.Utils;
-class RunSystemGC {
+class TestVerifySilentlyRunSystemGC {
public static void main(String args[]) throws Exception {
System.gc();
}
@@ -54,7 +57,7 @@
"-XX:+VerifyBeforeGC",
"-XX:+VerifyAfterGC",
(verifySilently ? "-Xlog:gc":"-Xlog:gc+verify=debug"),
- RunSystemGC.class.getName()});
+ TestVerifySilentlyRunSystemGC.class.getName()});
ProcessBuilder pb =
ProcessTools.createJavaProcessBuilder(vmOpts.toArray(new String[vmOpts.size()]));
OutputAnalyzer output = new OutputAnalyzer(pb.start());
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/TestVerifySubSet.java
--- a/test/hotspot/jtreg/gc/TestVerifySubSet.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestVerifySubSet.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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
@@ -21,12 +21,15 @@
* questions.
*/
+package gc;
+
/* @test TestVerifySubSet.java
* @key gc
* @bug 8072725
* @summary Test VerifySubSet option
* @library /test/lib
* @modules java.base/jdk.internal.misc
+ * @run main gc.TestVerifySubSet
*/
import jdk.test.lib.process.ProcessTools;
@@ -35,7 +38,7 @@
import java.util.Collections;
import jdk.test.lib.Utils;
-class RunSystemGC {
+class TestVerifySubSetRunSystemGC {
public static void main(String args[]) throws Exception {
System.gc();
}
@@ -52,7 +55,7 @@
"-XX:+VerifyAfterGC",
"-Xlog:gc+verify=debug",
"-XX:VerifySubSet="+subset,
- RunSystemGC.class.getName()});
+ TestVerifySubSetRunSystemGC.class.getName()});
ProcessBuilder pb =
ProcessTools.createJavaProcessBuilder(vmOpts.toArray(new String[vmOpts.size()]));
OutputAnalyzer output = new OutputAnalyzer(pb.start());
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/AllocationHelper.java
--- a/test/hotspot/jtreg/gc/arguments/AllocationHelper.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/AllocationHelper.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
import java.util.LinkedList;
import java.util.concurrent.Callable;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/FlagsValue.java
--- a/test/hotspot/jtreg/gc/arguments/FlagsValue.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/FlagsValue.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
import java.util.regex.*;
public class FlagsValue {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/GCTypes.java
--- a/test/hotspot/jtreg/gc/arguments/GCTypes.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/GCTypes.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
import java.util.Arrays;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/HeapRegionUsageTool.java
--- a/test/hotspot/jtreg/gc/arguments/HeapRegionUsageTool.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/HeapRegionUsageTool.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryPoolMXBean;
import java.lang.management.MemoryUsage;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestAggressiveHeap.java
--- a/test/hotspot/jtreg/gc/arguments/TestAggressiveHeap.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestAggressiveHeap.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestAggressiveHeap
* @key gc
@@ -29,7 +31,7 @@
* @summary Test argument processing for -XX:+AggressiveHeap.
* @library /test/lib
* @modules java.base java.management
- * @run driver TestAggressiveHeap
+ * @run driver gc.arguments.TestAggressiveHeap
*/
import java.lang.management.ManagementFactory;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestAlignmentToUseLargePages.java
--- a/test/hotspot/jtreg/gc/arguments/TestAlignmentToUseLargePages.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestAlignmentToUseLargePages.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/**
* @test TestAlignmentToUseLargePages
* @key gc regression
@@ -28,14 +30,14 @@
* heap alignment is large page aligned. Other collectors also need to start up with odd sized heaps.
* @bug 8024396
* @requires vm.gc=="null"
- * @run main/othervm -Xms71M -Xmx91M -XX:+UseParallelGC -XX:-UseParallelOldGC -XX:+UseLargePages TestAlignmentToUseLargePages
- * @run main/othervm -Xms71M -Xmx91M -XX:+UseParallelGC -XX:-UseParallelOldGC -XX:-UseLargePages TestAlignmentToUseLargePages
- * @run main/othervm -Xms71M -Xmx91M -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:+UseLargePages TestAlignmentToUseLargePages
- * @run main/othervm -Xms71M -Xmx91M -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:-UseLargePages TestAlignmentToUseLargePages
- * @run main/othervm -Xms71M -Xmx91M -XX:+UseSerialGC -XX:+UseLargePages TestAlignmentToUseLargePages
- * @run main/othervm -Xms71M -Xmx91M -XX:+UseSerialGC -XX:-UseLargePages TestAlignmentToUseLargePages
- * @run main/othervm -Xms71M -Xmx91M -XX:+UseG1GC -XX:+UseLargePages TestAlignmentToUseLargePages
- * @run main/othervm -Xms71M -Xmx91M -XX:+UseG1GC -XX:-UseLargePages TestAlignmentToUseLargePages
+ * @run main/othervm -Xms71M -Xmx91M -XX:+UseParallelGC -XX:-UseParallelOldGC -XX:+UseLargePages gc.arguments.TestAlignmentToUseLargePages
+ * @run main/othervm -Xms71M -Xmx91M -XX:+UseParallelGC -XX:-UseParallelOldGC -XX:-UseLargePages gc.arguments.TestAlignmentToUseLargePages
+ * @run main/othervm -Xms71M -Xmx91M -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:+UseLargePages gc.arguments.TestAlignmentToUseLargePages
+ * @run main/othervm -Xms71M -Xmx91M -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:-UseLargePages gc.arguments.TestAlignmentToUseLargePages
+ * @run main/othervm -Xms71M -Xmx91M -XX:+UseSerialGC -XX:+UseLargePages gc.arguments.TestAlignmentToUseLargePages
+ * @run main/othervm -Xms71M -Xmx91M -XX:+UseSerialGC -XX:-UseLargePages gc.arguments.TestAlignmentToUseLargePages
+ * @run main/othervm -Xms71M -Xmx91M -XX:+UseG1GC -XX:+UseLargePages gc.arguments.TestAlignmentToUseLargePages
+ * @run main/othervm -Xms71M -Xmx91M -XX:+UseG1GC -XX:-UseLargePages gc.arguments.TestAlignmentToUseLargePages
*/
/**
@@ -44,8 +46,8 @@
* @bug 8024396
* @comment Graal does not support CMS
* @requires vm.gc=="null" & !vm.graal.enabled
- * @run main/othervm -Xms71M -Xmx91M -XX:+UseConcMarkSweepGC -XX:+UseLargePages TestAlignmentToUseLargePages
- * @run main/othervm -Xms71M -Xmx91M -XX:+UseConcMarkSweepGC -XX:-UseLargePages TestAlignmentToUseLargePages
+ * @run main/othervm -Xms71M -Xmx91M -XX:+UseConcMarkSweepGC -XX:+UseLargePages gc.arguments.TestAlignmentToUseLargePages
+ * @run main/othervm -Xms71M -Xmx91M -XX:+UseConcMarkSweepGC -XX:-UseLargePages gc.arguments.TestAlignmentToUseLargePages
*/
/**
@@ -54,8 +56,8 @@
* @bug 8024396
* @comment Graal does not support Shenandoah
* @requires vm.gc.Shenandoah & !vm.graal.enabled
- * @run main/othervm -Xms71M -Xmx91M -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseLargePages TestAlignmentToUseLargePages
- * @run main/othervm -Xms71M -Xmx91M -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:-UseLargePages TestAlignmentToUseLargePages
+ * @run main/othervm -Xms71M -Xmx91M -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseLargePages gc.arguments.TestAlignmentToUseLargePages
+ * @run main/othervm -Xms71M -Xmx91M -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:-UseLargePages gc.arguments.TestAlignmentToUseLargePages
*/
public class TestAlignmentToUseLargePages {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestArrayAllocatorMallocLimit.java
--- a/test/hotspot/jtreg/gc/arguments/TestArrayAllocatorMallocLimit.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestArrayAllocatorMallocLimit.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestArrayAllocatorMallocLimit
* @summary Sanity check that the ArrayAllocatorMallocLimit flag can be set.
@@ -30,7 +32,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.management
- * @run driver TestArrayAllocatorMallocLimit
+ * @run driver gc.arguments.TestArrayAllocatorMallocLimit
*/
import jdk.test.lib.Asserts;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestCMSHeapSizeFlags.java
--- a/test/hotspot/jtreg/gc/arguments/TestCMSHeapSizeFlags.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestCMSHeapSizeFlags.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestCMSHeapSizeFlags
* @key gc
@@ -28,12 +30,13 @@
* @requires vm.gc.ConcMarkSweep & !vm.graal.enabled
* @summary Tests argument processing for initial and maximum heap size for the CMS collector
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
* sun.hotspot.WhiteBox$WhiteBoxPermission
- * @run main/othervm TestCMSHeapSizeFlags
+ * @run main/othervm gc.arguments.TestCMSHeapSizeFlags
* @author thomas.schatzl@oracle.com
*/
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestCompressedClassFlags.java
--- a/test/hotspot/jtreg/gc/arguments/TestCompressedClassFlags.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestCompressedClassFlags.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.Platform;
@@ -33,6 +35,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.management
+ * @run main gc.arguments.TestCompressedClassFlags
*/
public class TestCompressedClassFlags {
public static void main(String[] args) throws Exception {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestDisableDefaultGC.java
--- a/test/hotspot/jtreg/gc/arguments/TestDisableDefaultGC.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestDisableDefaultGC.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestDisableDefaultGC
* @summary Test that the VM complains when the default GC is disabled and no other GC is specified
@@ -30,7 +32,7 @@
* @requires vm.gc=="null"
* @modules java.base/jdk.internal.misc
* java.management
- * @run driver TestDisableDefaultGC
+ * @run driver gc.arguments.TestDisableDefaultGC
*/
import jdk.test.lib.process.ProcessTools;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestDynMaxHeapFreeRatio.java
--- a/test/hotspot/jtreg/gc/arguments/TestDynMaxHeapFreeRatio.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestDynMaxHeapFreeRatio.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
import static jdk.test.lib.Asserts.assertEQ;
import static jdk.test.lib.Asserts.assertFalse;
import static jdk.test.lib.Asserts.assertTrue;
@@ -33,12 +35,12 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* @modules java.management
- * @run main TestDynMaxHeapFreeRatio
- * @run main/othervm -XX:MinHeapFreeRatio=0 -XX:MaxHeapFreeRatio=100 TestDynMaxHeapFreeRatio
- * @run main/othervm -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=50 -XX:-UseAdaptiveSizePolicy TestDynMaxHeapFreeRatio
- * @run main/othervm -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=50 TestDynMaxHeapFreeRatio
- * @run main/othervm -XX:MinHeapFreeRatio=51 -XX:MaxHeapFreeRatio=52 TestDynMaxHeapFreeRatio
- * @run main/othervm -XX:MinHeapFreeRatio=75 -XX:MaxHeapFreeRatio=100 TestDynMaxHeapFreeRatio
+ * @run main gc.arguments.TestDynMaxHeapFreeRatio
+ * @run main/othervm -XX:MinHeapFreeRatio=0 -XX:MaxHeapFreeRatio=100 gc.arguments.TestDynMaxHeapFreeRatio
+ * @run main/othervm -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=50 -XX:-UseAdaptiveSizePolicy gc.arguments.TestDynMaxHeapFreeRatio
+ * @run main/othervm -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=50 gc.arguments.TestDynMaxHeapFreeRatio
+ * @run main/othervm -XX:MinHeapFreeRatio=51 -XX:MaxHeapFreeRatio=52 gc.arguments.TestDynMaxHeapFreeRatio
+ * @run main/othervm -XX:MinHeapFreeRatio=75 -XX:MaxHeapFreeRatio=100 gc.arguments.TestDynMaxHeapFreeRatio
*/
public class TestDynMaxHeapFreeRatio {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestDynMinHeapFreeRatio.java
--- a/test/hotspot/jtreg/gc/arguments/TestDynMinHeapFreeRatio.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestDynMinHeapFreeRatio.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/**
* @test TestDynMinHeapFreeRatio
* @bug 8028391
@@ -28,12 +30,12 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* @modules java.management
- * @run main TestDynMinHeapFreeRatio
- * @run main/othervm -XX:MinHeapFreeRatio=0 -XX:MaxHeapFreeRatio=100 TestDynMinHeapFreeRatio
- * @run main/othervm -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=50 -XX:-UseAdaptiveSizePolicy TestDynMinHeapFreeRatio
- * @run main/othervm -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=50 TestDynMinHeapFreeRatio
- * @run main/othervm -XX:MinHeapFreeRatio=51 -XX:MaxHeapFreeRatio=52 TestDynMinHeapFreeRatio
- * @run main/othervm -XX:MinHeapFreeRatio=75 -XX:MaxHeapFreeRatio=100 TestDynMinHeapFreeRatio
+ * @run main gc.arguments.TestDynMinHeapFreeRatio
+ * @run main/othervm -XX:MinHeapFreeRatio=0 -XX:MaxHeapFreeRatio=100 gc.arguments.TestDynMinHeapFreeRatio
+ * @run main/othervm -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=50 -XX:-UseAdaptiveSizePolicy gc.arguments.TestDynMinHeapFreeRatio
+ * @run main/othervm -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=50 gc.arguments.TestDynMinHeapFreeRatio
+ * @run main/othervm -XX:MinHeapFreeRatio=51 -XX:MaxHeapFreeRatio=52 gc.arguments.TestDynMinHeapFreeRatio
+ * @run main/othervm -XX:MinHeapFreeRatio=75 -XX:MaxHeapFreeRatio=100 gc.arguments.TestDynMinHeapFreeRatio
*/
import static jdk.test.lib.Asserts.assertEQ;
import static jdk.test.lib.Asserts.assertFalse;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestG1ConcMarkStepDurationMillis.java
--- a/test/hotspot/jtreg/gc/arguments/TestG1ConcMarkStepDurationMillis.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestG1ConcMarkStepDurationMillis.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestG1ConcMarkStepDurationMillis
* @key gc
@@ -29,6 +31,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.management
+ * @run main gc.arguments.TestG1ConcMarkStepDurationMillis
*/
import jdk.test.lib.process.ProcessTools;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestG1ConcRefinementThreads.java
--- a/test/hotspot/jtreg/gc/arguments/TestG1ConcRefinementThreads.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestG1ConcRefinementThreads.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestG1ConcRefinementThreads
* @key gc
@@ -30,6 +32,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.management
+ * @run main gc.arguments.TestG1ConcRefinementThreads
*/
import jdk.test.lib.process.OutputAnalyzer;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestG1HeapRegionSize.java
--- a/test/hotspot/jtreg/gc/arguments/TestG1HeapRegionSize.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestG1HeapRegionSize.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestG1HeapRegionSize
* @key gc
@@ -30,7 +32,7 @@
* @modules java.base/jdk.internal.misc
* @modules java.management/sun.management
* @library /test/lib
- * @run main TestG1HeapRegionSize
+ * @run main gc.arguments.TestG1HeapRegionSize
*/
import java.util.regex.Matcher;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestG1HeapSizeFlags.java
--- a/test/hotspot/jtreg/gc/arguments/TestG1HeapSizeFlags.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestG1HeapSizeFlags.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestG1HeapSizeFlags
* @key gc
@@ -28,12 +30,13 @@
* @requires vm.gc.G1
* @summary Tests argument processing for initial and maximum heap size for the G1 collector
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
* sun.hotspot.WhiteBox$WhiteBoxPermission
- * @run main/othervm TestG1HeapSizeFlags
+ * @run main/othervm gc.arguments.TestG1HeapSizeFlags
* @author thomas.schatzl@oracle.com
*/
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestG1PercentageOptions.java
--- a/test/hotspot/jtreg/gc/arguments/TestG1PercentageOptions.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestG1PercentageOptions.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestG1PercentageOptions
* @key gc
@@ -30,7 +32,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.management
- * @run driver TestG1PercentageOptions
+ * @run driver gc.arguments.TestG1PercentageOptions
*/
import jdk.test.lib.process.OutputAnalyzer;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestHeapFreeRatio.java
--- a/test/hotspot/jtreg/gc/arguments/TestHeapFreeRatio.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestHeapFreeRatio.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestHeapFreeRatio
* @key gc
@@ -29,7 +31,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.management
- * @run main/othervm TestHeapFreeRatio
+ * @run main/othervm gc.arguments.TestHeapFreeRatio
*/
import jdk.test.lib.process.OutputAnalyzer;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestInitialTenuringThreshold.java
--- a/test/hotspot/jtreg/gc/arguments/TestInitialTenuringThreshold.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestInitialTenuringThreshold.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestInitialTenuringThreshold
* @key gc
@@ -30,7 +32,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.management
- * @run main/othervm TestInitialTenuringThreshold
+ * @run main/othervm gc.arguments.TestInitialTenuringThreshold
* @author thomas.schatzl@oracle.com
*/
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestMaxHeapSizeTools.java
--- a/test/hotspot/jtreg/gc/arguments/TestMaxHeapSizeTools.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestMaxHeapSizeTools.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.ArrayList;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestMaxMinHeapFreeRatioFlags.java
--- a/test/hotspot/jtreg/gc/arguments/TestMaxMinHeapFreeRatioFlags.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestMaxMinHeapFreeRatioFlags.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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
@@ -21,15 +21,18 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestMaxMinHeapFreeRatioFlags
* @key gc
* @summary Verify that heap size changes according to max and min heap free ratios.
* @requires vm.gc != "Z" & vm.gc != "Shenandoah"
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
- * @run driver/timeout=240 TestMaxMinHeapFreeRatioFlags
+ * @run driver/timeout=240 gc.arguments.TestMaxMinHeapFreeRatioFlags
*/
import java.util.LinkedList;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestMaxNewSize.java
--- a/test/hotspot/jtreg/gc/arguments/TestMaxNewSize.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestMaxNewSize.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestMaxNewSize
* @key gc
@@ -31,9 +33,9 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.management
- * @run main TestMaxNewSize -XX:+UseSerialGC
- * @run main TestMaxNewSize -XX:+UseParallelGC
- * @run main TestMaxNewSize -XX:+UseG1GC
+ * @run main gc.arguments.TestMaxNewSize -XX:+UseSerialGC
+ * @run main gc.arguments.TestMaxNewSize -XX:+UseParallelGC
+ * @run main gc.arguments.TestMaxNewSize -XX:+UseG1GC
* @author thomas.schatzl@oracle.com, jesper.wilhelmsson@oracle.com
*/
@@ -46,7 +48,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.management
- * @run main TestMaxNewSize -XX:+UseConcMarkSweepGC
+ * @run main gc.arguments.TestMaxNewSize -XX:+UseConcMarkSweepGC
*/
import java.util.regex.Matcher;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestMinAndInitialSurvivorRatioFlags.java
--- a/test/hotspot/jtreg/gc/arguments/TestMinAndInitialSurvivorRatioFlags.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestMinAndInitialSurvivorRatioFlags.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -21,16 +21,19 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestMinAndInitialSurvivorRatioFlags
* @key gc
* @summary Verify that MinSurvivorRatio and InitialSurvivorRatio flags work
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
- * @run driver/timeout=240 TestMinAndInitialSurvivorRatioFlags
+ * @run driver/timeout=240 gc.arguments.TestMinAndInitialSurvivorRatioFlags
*/
import java.lang.management.MemoryUsage;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestMinInitialErgonomics.java
--- a/test/hotspot/jtreg/gc/arguments/TestMinInitialErgonomics.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestMinInitialErgonomics.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,18 +21,21 @@
* questions.
*/
+package gc.arguments;
+
/**
* @test TestMinInitialErgonomics
* @key gc
* @bug 8006088
* @summary Test ergonomics decisions related to minimum and initial heap size.
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
* sun.hotspot.WhiteBox$WhiteBoxPermission
- * @run main/othervm TestMinInitialErgonomics
+ * @run main/othervm gc.arguments.TestMinInitialErgonomics
* @author thomas.schatzl@oracle.com
*/
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestNewRatioFlag.java
--- a/test/hotspot/jtreg/gc/arguments/TestNewRatioFlag.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestNewRatioFlag.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestNewRatioFlag
* @key gc
@@ -28,11 +30,12 @@
* @summary Verify that heap devided among generations according to NewRatio
* @requires vm.gc != "Z" & vm.gc != "Shenandoah"
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
- * @run driver TestNewRatioFlag
+ * @run driver gc.arguments.TestNewRatioFlag
*/
import java.util.Arrays;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestNewSizeFlags.java
--- a/test/hotspot/jtreg/gc/arguments/TestNewSizeFlags.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestNewSizeFlags.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestNewSizeFlags
* @key gc
@@ -28,11 +30,12 @@
* @summary Verify that young gen size conforms values specified by NewSize, MaxNewSize and Xmn options
* @requires vm.gc != "Z" & vm.gc != "Shenandoah"
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
- * @run driver/timeout=240 TestNewSizeFlags
+ * @run driver/timeout=240 gc.arguments.TestNewSizeFlags
*/
import java.io.IOException;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestNewSizeThreadIncrease.java
--- a/test/hotspot/jtreg/gc/arguments/TestNewSizeThreadIncrease.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestNewSizeThreadIncrease.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestNewSizeThreadIncrease
* @key gc
@@ -30,6 +32,7 @@
* @requires vm.gc.Serial
* @modules java.base/jdk.internal.misc
* java.management
+ * @run main gc.arguments.TestNewSizeThreadIncrease
*/
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestObjectTenuringFlags.java
--- a/test/hotspot/jtreg/gc/arguments/TestObjectTenuringFlags.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestObjectTenuringFlags.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestObjectTenuringFlags
* @key gc
@@ -29,9 +31,10 @@
* @summary Tests argument processing for NeverTenure, AlwaysTenure,
* and MaxTenuringThreshold
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
- * @run main/othervm TestObjectTenuringFlags
+ * @run main/othervm gc.arguments.TestObjectTenuringFlags
*/
import jdk.test.lib.process.OutputAnalyzer;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestParallelGCThreads.java
--- a/test/hotspot/jtreg/gc/arguments/TestParallelGCThreads.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestParallelGCThreads.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,15 +21,18 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestParallelGCThreads
* @key gc
* @bug 8059527 8081382
* @summary Tests argument processing for ParallelGCThreads
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
- * @run driver TestParallelGCThreads
+ * @run driver gc.arguments.TestParallelGCThreads
*/
import jdk.test.lib.Asserts;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestParallelHeapSizeFlags.java
--- a/test/hotspot/jtreg/gc/arguments/TestParallelHeapSizeFlags.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestParallelHeapSizeFlags.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestParallelHeapSizeFlags
* @key gc
@@ -29,12 +31,13 @@
* parallel collectors.
* @requires vm.gc=="null"
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
* sun.hotspot.WhiteBox$WhiteBoxPermission
- * @run main/othervm TestParallelHeapSizeFlags
+ * @run main/othervm gc.arguments.TestParallelHeapSizeFlags
* @author thomas.schatzl@oracle.com
*/
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestParallelRefProc.java
--- a/test/hotspot/jtreg/gc/arguments/TestParallelRefProc.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestParallelRefProc.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -21,12 +21,14 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestParallelRefProc
* @key gc
* @summary Test defaults processing for -XX:+ParallelRefProcEnabled.
* @library /test/lib
- * @run driver TestParallelRefProc
+ * @run driver gc.arguments.TestParallelRefProc
*/
import java.util.Arrays;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestSelectDefaultGC.java
--- a/test/hotspot/jtreg/gc/arguments/TestSelectDefaultGC.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestSelectDefaultGC.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestSelectDefaultGC
* @summary Test selection of GC when no GC option is specified
@@ -30,7 +32,7 @@
* @requires vm.gc=="null"
* @modules java.base/jdk.internal.misc
* java.management
- * @run driver TestSelectDefaultGC
+ * @run driver gc.arguments.TestSelectDefaultGC
*/
import jdk.test.lib.Platform;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestSerialHeapSizeFlags.java
--- a/test/hotspot/jtreg/gc/arguments/TestSerialHeapSizeFlags.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestSerialHeapSizeFlags.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,18 +21,21 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestSerialHeapSizeFlags
* @key gc
* @bug 8006088
* @summary Tests argument processing for initial and maximum heap size for the Serial collector
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
* sun.hotspot.WhiteBox$WhiteBoxPermission
- * @run main/othervm TestSerialHeapSizeFlags
+ * @run main/othervm gc.arguments.TestSerialHeapSizeFlags
* @author thomas.schatzl@oracle.com
*/
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestShrinkHeapInSteps.java
--- a/test/hotspot/jtreg/gc/arguments/TestShrinkHeapInSteps.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestShrinkHeapInSteps.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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
@@ -21,15 +21,18 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestShrinkHeapInSteps
* @key gc
* @summary Verify that -XX:-ShrinkHeapInSteps works properly.
* @requires vm.gc != "Z" & vm.gc != "Shenandoah"
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
- * @run driver/timeout=240 TestShrinkHeapInSteps
+ * @run driver/timeout=240 gc.arguments.TestShrinkHeapInSteps
*/
import java.util.LinkedList;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestSmallInitialHeapWithLargePageAndNUMA.java
--- a/test/hotspot/jtreg/gc/arguments/TestSmallInitialHeapWithLargePageAndNUMA.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestSmallInitialHeapWithLargePageAndNUMA.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestSmallInitialHeapWithLargePageAndNUMA
* @bug 8023905
@@ -32,7 +34,7 @@
* @modules java.management/sun.management
* @build TestSmallInitialHeapWithLargePageAndNUMA
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
- * @run main/othervm -Xbootclasspath/a:. -XX:+UseHugeTLBFS -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI TestSmallInitialHeapWithLargePageAndNUMA
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UseHugeTLBFS -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI gc.arguments.TestSmallInitialHeapWithLargePageAndNUMA
*/
import jdk.test.lib.process.ProcessTools;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestSurvivorAlignmentInBytesOption.java
--- a/test/hotspot/jtreg/gc/arguments/TestSurvivorAlignmentInBytesOption.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestSurvivorAlignmentInBytesOption.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
import jdk.test.lib.process.ExitCode;
import jdk.test.lib.cli.CommandLineOptionTest;
@@ -36,7 +38,7 @@
* | vm.opt.IgnoreUnrecognizedVMOptions == "false")
* @modules java.base/jdk.internal.misc
* java.management
- * @run main TestSurvivorAlignmentInBytesOption
+ * @run main gc.arguments.TestSurvivorAlignmentInBytesOption
*/
public class TestSurvivorAlignmentInBytesOption {
public static void main(String args[]) throws Throwable {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestSurvivorRatioFlag.java
--- a/test/hotspot/jtreg/gc/arguments/TestSurvivorRatioFlag.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestSurvivorRatioFlag.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -21,17 +21,20 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestSurvivorRatioFlag
* @key gc
* @summary Verify that actual survivor ratio is equal to specified SurvivorRatio value
* @requires vm.gc != "Z" & vm.gc != "Shenandoah"
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
- * @run driver TestSurvivorRatioFlag
+ * @run driver gc.arguments.TestSurvivorRatioFlag
*/
import java.lang.management.MemoryUsage;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestTargetSurvivorRatioFlag.java
--- a/test/hotspot/jtreg/gc/arguments/TestTargetSurvivorRatioFlag.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestTargetSurvivorRatioFlag.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestTargetSurvivorRatioFlag
* @key gc
@@ -29,11 +31,12 @@
* @requires vm.opt.UseJVMCICompiler != true
* @requires vm.gc != "Z" & vm.gc != "Shenandoah"
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
- * @run driver TestTargetSurvivorRatioFlag
+ * @run driver gc.arguments.TestTargetSurvivorRatioFlag
*/
import java.lang.management.GarbageCollectorMXBean;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestUnrecognizedVMOptionsHandling.java
--- a/test/hotspot/jtreg/gc/arguments/TestUnrecognizedVMOptionsHandling.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestUnrecognizedVMOptionsHandling.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestUnrecognizedVMOptionsHandling
* @key gc
@@ -29,7 +31,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.management
- * @run main/othervm TestUnrecognizedVMOptionsHandling
+ * @run main/othervm gc.arguments.TestUnrecognizedVMOptionsHandling
*/
import jdk.test.lib.process.OutputAnalyzer;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestUseCompressedOopsErgo.java
--- a/test/hotspot/jtreg/gc/arguments/TestUseCompressedOopsErgo.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestUseCompressedOopsErgo.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestUseCompressedOopsErgo
* @key gc
@@ -28,15 +30,16 @@
* @summary Tests ergonomics for UseCompressedOops.
* @requires vm.gc=="null"
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management/sun.management
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
* sun.hotspot.WhiteBox$WhiteBoxPermission
- * @run main/othervm TestUseCompressedOopsErgo -XX:+UseG1GC
- * @run main/othervm TestUseCompressedOopsErgo -XX:+UseParallelGC
- * @run main/othervm TestUseCompressedOopsErgo -XX:+UseParallelGC -XX:-UseParallelOldGC
- * @run main/othervm TestUseCompressedOopsErgo -XX:+UseSerialGC
+ * @run main/othervm gc.arguments.TestUseCompressedOopsErgo -XX:+UseG1GC
+ * @run main/othervm gc.arguments.TestUseCompressedOopsErgo -XX:+UseParallelGC
+ * @run main/othervm gc.arguments.TestUseCompressedOopsErgo -XX:+UseParallelGC -XX:-UseParallelOldGC
+ * @run main/othervm gc.arguments.TestUseCompressedOopsErgo -XX:+UseSerialGC
*/
/*
@@ -46,12 +49,13 @@
* @comment Graal does not support CMS
* @requires vm.gc=="null" & !vm.graal.enabled
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management/sun.management
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
* sun.hotspot.WhiteBox$WhiteBoxPermission
- * @run main/othervm TestUseCompressedOopsErgo -XX:+UseConcMarkSweepGC
+ * @run main/othervm gc.arguments.TestUseCompressedOopsErgo -XX:+UseConcMarkSweepGC
*/
/*
@@ -61,12 +65,13 @@
* @comment Graal does not support Shenandoah
* @requires vm.gc.Shenandoah & !vm.graal.enabled
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management/sun.management
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
* sun.hotspot.WhiteBox$WhiteBoxPermission
- * @run main/othervm TestUseCompressedOopsErgo -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC
+ * @run main/othervm gc.arguments.TestUseCompressedOopsErgo -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC
*/
public class TestUseCompressedOopsErgo {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestUseCompressedOopsErgoTools.java
--- a/test/hotspot/jtreg/gc/arguments/TestUseCompressedOopsErgoTools.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestUseCompressedOopsErgoTools.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
import com.sun.management.HotSpotDiagnosticMXBean;
import com.sun.management.VMOption;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestUseNUMAInterleaving.java
--- a/test/hotspot/jtreg/gc/arguments/TestUseNUMAInterleaving.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestUseNUMAInterleaving.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/**
* @test TestUseNUMAInterleaving
* @summary Tests that UseNUMAInterleaving enabled for all collectors by
@@ -30,7 +32,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.management
- * @run driver TestUseNUMAInterleaving
+ * @run driver gc.arguments.TestUseNUMAInterleaving
*/
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/arguments/TestVerifyBeforeAndAfterGCFlags.java
--- a/test/hotspot/jtreg/gc/arguments/TestVerifyBeforeAndAfterGCFlags.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestVerifyBeforeAndAfterGCFlags.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.arguments;
+
/*
* @test TestVerifyBeforeAndAfterGCFlags
* @key gc
@@ -32,7 +34,7 @@
* @modules java.base/jdk.internal.misc
* @modules java.management
* @library /test/lib
- * @run driver TestVerifyBeforeAndAfterGCFlags
+ * @run driver gc.arguments.TestVerifyBeforeAndAfterGCFlags
*/
import java.util.ArrayList;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java
--- a/test/hotspot/jtreg/gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.class_unloading;
+
/*
* @test
* @key gc
@@ -32,7 +34,7 @@
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
* sun.hotspot.WhiteBox$WhiteBoxPermission
- * @run driver TestCMSClassUnloadingEnabledHWM
+ * @run driver gc.class_unloading.TestCMSClassUnloadingEnabledHWM
* @summary Test that -XX:-CMSClassUnloadingEnabled will trigger a Full GC when more than MetaspaceSize metadata is allocated.
*/
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/class_unloading/TestClassUnloadingDisabled.java
--- a/test/hotspot/jtreg/gc/class_unloading/TestClassUnloadingDisabled.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/class_unloading/TestClassUnloadingDisabled.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.class_unloading;
+
/*
* @test
* @key gc
@@ -36,13 +38,13 @@
* sun.hotspot.WhiteBox$WhiteBoxPermission
*
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
- * -XX:-ClassUnloading -XX:+UseG1GC TestClassUnloadingDisabled
+ * -XX:-ClassUnloading -XX:+UseG1GC gc.class_unloading.TestClassUnloadingDisabled
*
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
- * -XX:-ClassUnloading -XX:+UseSerialGC TestClassUnloadingDisabled
+ * -XX:-ClassUnloading -XX:+UseSerialGC gc.class_unloading.TestClassUnloadingDisabled
*
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
- * -XX:-ClassUnloading -XX:+UseParallelGC TestClassUnloadingDisabled
+ * -XX:-ClassUnloading -XX:+UseParallelGC gc.class_unloading.TestClassUnloadingDisabled
*
*/
@@ -61,7 +63,7 @@
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
* sun.hotspot.WhiteBox$WhiteBoxPermission
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
- * -XX:-ClassUnloading -XX:+UseConcMarkSweepGC TestClassUnloadingDisabled
+ * -XX:-ClassUnloading -XX:+UseConcMarkSweepGC gc.class_unloading.TestClassUnloadingDisabled
*/
/*
@@ -79,7 +81,7 @@
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
* sun.hotspot.WhiteBox$WhiteBoxPermission
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
- * -XX:-ClassUnloading -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC TestClassUnloadingDisabled
+ * -XX:-ClassUnloading -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC gc.class_unloading.TestClassUnloadingDisabled
*/
import java.io.File;
@@ -98,7 +100,7 @@
// Fetch the dir where the test class and the class
// to be loaded resides.
String classDir = TestClassUnloadingDisabled.class.getProtectionDomain().getCodeSource().getLocation().getPath();
- String className = "ClassToLoadUnload";
+ String className = "gc.class_unloading.ClassToLoadUnload"; // can not use ClassToLoadUnload.class.getName() as that would load the class
assertFalse(wb.isClassAlive(className), "Should not be loaded yet");
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/class_unloading/TestG1ClassUnloadingHWM.java
--- a/test/hotspot/jtreg/gc/class_unloading/TestG1ClassUnloadingHWM.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/class_unloading/TestG1ClassUnloadingHWM.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.class_unloading;
+
/*
* @test
* @key gc
@@ -31,7 +33,7 @@
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
* sun.hotspot.WhiteBox$WhiteBoxPermission
- * @run driver TestG1ClassUnloadingHWM
+ * @run driver gc.class_unloading.TestG1ClassUnloadingHWM
* @summary Test that -XX:-ClassUnloadingWithConcurrentMark will trigger a Full GC when more than MetaspaceSize metadata is allocated.
*/
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/cms/DisableResizePLAB.java
--- a/test/hotspot/jtreg/gc/cms/DisableResizePLAB.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/cms/DisableResizePLAB.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.cms;
+
/*
* @test DisableResizePLAB
* @key gc
@@ -28,7 +30,7 @@
* @author filipp.zhinkin@oracle.com, john.coomes@oracle.com
* @requires vm.gc.ConcMarkSweep & !vm.graal.enabled
* @summary Run CMS with PLAB resizing disabled and a small OldPLABSize
- * @run main/othervm -XX:+UseConcMarkSweepGC -XX:-ResizePLAB -XX:OldPLABSize=1k -Xmx256m -Xlog:gc=debug DisableResizePLAB
+ * @run main/othervm -XX:+UseConcMarkSweepGC -XX:-ResizePLAB -XX:OldPLABSize=1k -Xmx256m -Xlog:gc=debug gc.cms.DisableResizePLAB
*/
public class DisableResizePLAB {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/cms/GuardShrinkWarning.java
--- a/test/hotspot/jtreg/gc/cms/GuardShrinkWarning.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/cms/GuardShrinkWarning.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.cms;
+
/**
* @test GuardShrinkWarning
* @key gc regression
@@ -30,7 +32,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.management
- * @run main/othervm GuardShrinkWarning
+ * @run main/othervm gc.cms.GuardShrinkWarning
* @author jon.masamitsu@oracle.com
*/
@@ -44,7 +46,7 @@
"-showversion",
"-XX:+UseConcMarkSweepGC",
"-XX:+ExplicitGCInvokesConcurrent",
- "GuardShrinkWarning$SystemGCCaller"
+ SystemGCCaller.class.getName()
);
OutputAnalyzer output = new OutputAnalyzer(pb.start());
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/cms/TestBubbleUpRef.java
--- a/test/hotspot/jtreg/gc/cms/TestBubbleUpRef.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/cms/TestBubbleUpRef.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.cms;
+
import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;
import java.util.LinkedList;
@@ -35,7 +37,7 @@
* stays nearly full.
* @run main/othervm
* -XX:+UseConcMarkSweepGC -XX:-CMSYield -XX:-CMSPrecleanRefLists1
- * -XX:CMSInitiatingOccupancyFraction=0 -Xmx80m TestBubbleUpRef 16000 50 10000
+ * -XX:CMSInitiatingOccupancyFraction=0 -Xmx80m gc.cms.TestBubbleUpRef 16000 50 10000
*/
/**
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/cms/TestCMSScavengeBeforeRemark.java
--- a/test/hotspot/jtreg/gc/cms/TestCMSScavengeBeforeRemark.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/cms/TestCMSScavengeBeforeRemark.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -21,13 +21,15 @@
* questions.
*/
+package gc.cms;
+
/*
* @test TestCMSScavengeBeforeRemark
* @key gc
* @bug 8139868
* @requires vm.gc.ConcMarkSweep & !vm.graal.enabled
* @summary Run CMS with CMSScavengeBeforeRemark
- * @run main/othervm -XX:+UseConcMarkSweepGC -XX:+CMSScavengeBeforeRemark -XX:+ExplicitGCInvokesConcurrent -Xmx256m -Xlog:gc=debug TestCMSScavengeBeforeRemark
+ * @run main/othervm -XX:+UseConcMarkSweepGC -XX:+CMSScavengeBeforeRemark -XX:+ExplicitGCInvokesConcurrent -Xmx256m -Xlog:gc=debug gc.cms.TestCMSScavengeBeforeRemark
*/
public class TestCMSScavengeBeforeRemark {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/cms/TestCriticalPriority.java
--- a/test/hotspot/jtreg/gc/cms/TestCriticalPriority.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/cms/TestCriticalPriority.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,13 +21,15 @@
* questions.
*/
+package gc.cms;
+
/*
* @test TestCriticalPriority
* @key gc
* @bug 8217378
* @requires vm.gc.ConcMarkSweep & !vm.graal.enabled
* @summary Test critical priority is accepted
- * @run main/othervm -XX:+UseConcMarkSweepGC -XX:+UnlockExperimentalVMOptions -XX:+UseCriticalCMSThreadPriority TestCriticalPriority
+ * @run main/othervm -XX:+UseConcMarkSweepGC -XX:+UnlockExperimentalVMOptions -XX:+UseCriticalCMSThreadPriority gc.cms.TestCriticalPriority
*/
public class TestCriticalPriority {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/cms/TestMBeanCMS.java
--- a/test/hotspot/jtreg/gc/cms/TestMBeanCMS.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/cms/TestMBeanCMS.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2019, 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
@@ -21,13 +21,15 @@
* questions.
*/
+package gc.cms;
+
/*
* @test TestMBeanCMS.java
* @bug 6581734
* @requires vm.gc.ConcMarkSweep & !vm.graal.enabled
* @summary CMS Old Gen's collection usage is zero after GC which is incorrect
* @modules java.management
- * @run main/othervm -Xmx512m -verbose:gc -XX:+UseConcMarkSweepGC TestMBeanCMS
+ * @run main/othervm -Xmx512m -verbose:gc -XX:+UseConcMarkSweepGC gc.cms.TestMBeanCMS
*
*/
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/concurrent_phase_control/TestConcurrentPhaseControlCMS.java
--- a/test/hotspot/jtreg/gc/concurrent_phase_control/TestConcurrentPhaseControlCMS.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/concurrent_phase_control/TestConcurrentPhaseControlCMS.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.concurrent_phase_control;
+
/*
* @test TestConcurrentPhaseControlCMS
* @bug 8169517
@@ -35,7 +37,7 @@
* @run main/othervm -XX:+UseConcMarkSweepGC
* -Xbootclasspath/a:.
* -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
- * TestConcurrentPhaseControlCMS
+ * gc.concurrent_phase_control.TestConcurrentPhaseControlCMS
*/
import gc.concurrent_phase_control.CheckUnsupported;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/concurrent_phase_control/TestConcurrentPhaseControlG1.java
--- a/test/hotspot/jtreg/gc/concurrent_phase_control/TestConcurrentPhaseControlG1.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/concurrent_phase_control/TestConcurrentPhaseControlG1.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.concurrent_phase_control;
+
/*
* @test TestConcurrentPhaseControlG1
* @bug 8169517
@@ -32,7 +34,7 @@
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
* sun.hotspot.WhiteBox$WhiteBoxPermission
- * @run driver TestConcurrentPhaseControlG1
+ * @run driver gc.concurrent_phase_control.TestConcurrentPhaseControlG1
*/
import gc.concurrent_phase_control.CheckControl;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/concurrent_phase_control/TestConcurrentPhaseControlG1Basics.java
--- a/test/hotspot/jtreg/gc/concurrent_phase_control/TestConcurrentPhaseControlG1Basics.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/concurrent_phase_control/TestConcurrentPhaseControlG1Basics.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.concurrent_phase_control;
+
/*
* @test TestConcurrentPhaseControlG1Basics
* @bug 8169517
@@ -36,7 +38,7 @@
* @run main/othervm -XX:+UseG1GC
* -Xbootclasspath/a:.
* -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
- * TestConcurrentPhaseControlG1Basics
+ * gc.concurrent_phase_control.TestConcurrentPhaseControlG1Basics
*/
import gc.concurrent_phase_control.CheckSupported;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/concurrent_phase_control/TestConcurrentPhaseControlParallel.java
--- a/test/hotspot/jtreg/gc/concurrent_phase_control/TestConcurrentPhaseControlParallel.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/concurrent_phase_control/TestConcurrentPhaseControlParallel.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.concurrent_phase_control;
+
/*
* @test TestConcurrentPhaseControlParallel
* @bug 8169517
@@ -35,7 +37,7 @@
* @run main/othervm -XX:+UseParallelGC
* -Xbootclasspath/a:.
* -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
- * TestConcurrentPhaseControlParallel
+ * gc.concurrent_phase_control.TestConcurrentPhaseControlParallel
*/
import gc.concurrent_phase_control.CheckUnsupported;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/concurrent_phase_control/TestConcurrentPhaseControlSerial.java
--- a/test/hotspot/jtreg/gc/concurrent_phase_control/TestConcurrentPhaseControlSerial.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/concurrent_phase_control/TestConcurrentPhaseControlSerial.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.concurrent_phase_control;
+
/*
* @test TestConcurrentPhaseControlSerial
* @bug 8169517
@@ -35,7 +37,7 @@
* @run main/othervm -XX:+UseSerialGC
* -Xbootclasspath/a:.
* -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
- * TestConcurrentPhaseControlSerial
+ * gc.concurrent_phase_control.TestConcurrentPhaseControlSerial
*/
import gc.concurrent_phase_control.CheckUnsupported;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/cslocker/TestCSLocker.java
--- a/test/hotspot/jtreg/gc/cslocker/TestCSLocker.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/cslocker/TestCSLocker.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.cslocker;
+
/*
* @test TestCSLocker
* @key gc
@@ -28,7 +30,7 @@
* @summary This short test check RFE 6186200 changes. One thread locked
* @summary completely in JNI CS, while other is trying to allocate memory
* @summary provoking GC. OOM means FAIL, deadlock means PASS.
- * @run main/native/othervm -Xmx256m TestCSLocker
+ * @run main/native/othervm -Xmx256m gc.cslocker.TestCSLocker
*/
public class TestCSLocker extends Thread
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/cslocker/libTestCSLocker.c
--- a/test/hotspot/jtreg/gc/cslocker/libTestCSLocker.c Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/cslocker/libTestCSLocker.c Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2019, 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
@@ -25,7 +25,7 @@
static volatile int release_critical = 0;
-JNIEXPORT jboolean JNICALL Java_CSLocker_lock
+JNIEXPORT jboolean JNICALL Java_gc_cslocker_CSLocker_lock
(JNIEnv *env, jobject obj, jintArray array)
{
jboolean retval = JNI_TRUE;
@@ -42,7 +42,7 @@
return retval;
}
-JNIEXPORT void JNICALL Java_CSLocker_unlock
+JNIEXPORT void JNICALL Java_gc_cslocker_CSLocker_unlock
(JNIEnv *env, jobject obj)
{
release_critical = 1;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestAlignment.java
--- a/test/hotspot/jtreg/gc/epsilon/TestAlignment.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestAlignment.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,16 +21,18 @@
* questions.
*/
+package gc.epsilon;
+
/**
* @test TestAlignment
* @key gc
* @requires vm.gc.Epsilon & !vm.graal.enabled
* @summary Check Epsilon runs fine with (un)usual alignments
* @bug 8212005
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:+UseTLAB TestAlignment
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:-UseTLAB TestAlignment
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:+UseTLAB -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=16 TestAlignment
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:-UseTLAB -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=16 TestAlignment
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:+UseTLAB gc.epsilon.TestAlignment
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:-UseTLAB gc.epsilon.TestAlignment
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:+UseTLAB -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=16 gc.epsilon.TestAlignment
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:-UseTLAB -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=16 gc.epsilon.TestAlignment
*/
public class TestAlignment {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestAlwaysPretouch.java
--- a/test/hotspot/jtreg/gc/epsilon/TestAlwaysPretouch.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestAlwaysPretouch.java Tue Jan 29 09:38:31 2019 -0500
@@ -26,9 +26,11 @@
* @key gc
* @requires vm.gc.Epsilon & !vm.graal.enabled
* @summary Basic sanity test for Epsilon
- * @run main/othervm -Xmx1g -XX:+AlwaysPreTouch -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestAlwaysPretouch
+ * @run main/othervm -Xmx1g -XX:+AlwaysPreTouch -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestAlwaysPretouch
*/
+package gc.epsilon;
+
public class TestAlwaysPretouch {
public static void main(String[] args) throws Exception {
// everything should happen before entry point
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestArraycopyCheckcast.java
--- a/test/hotspot/jtreg/gc/epsilon/TestArraycopyCheckcast.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestArraycopyCheckcast.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.epsilon;
+
/**
* @test TestArraycopyCheckcast
* @key gc
@@ -29,11 +31,11 @@
* @library /test/lib
* @bug 8215724
*
- * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestArraycopyCheckcast
- * @run main/othervm -Xmx1g -Xint -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestArraycopyCheckcast
- * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestArraycopyCheckcast
- * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestArraycopyCheckcast
- * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:-TieredCompilation -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestArraycopyCheckcast
+ * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestArraycopyCheckcast
+ * @run main/othervm -Xmx1g -Xint -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestArraycopyCheckcast
+ * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestArraycopyCheckcast
+ * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestArraycopyCheckcast
+ * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:-TieredCompilation -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestArraycopyCheckcast
*/
import java.util.Random;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestByteArrays.java
--- a/test/hotspot/jtreg/gc/epsilon/TestByteArrays.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestByteArrays.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,23 +21,25 @@
* questions.
*/
+package gc.epsilon;
+
/**
* @test TestByteArrays
* @key gc
* @requires vm.gc.Epsilon & !vm.graal.enabled
* @summary Epsilon is able to allocate arrays, and does not corrupt their state
*
- * @run main/othervm -Xmx1g -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestByteArrays
- * @run main/othervm -Xmx1g -Xint -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestByteArrays
- * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestByteArrays
- * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestByteArrays
- * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:-TieredCompilation -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestByteArrays
+ * @run main/othervm -Xmx1g -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestByteArrays
+ * @run main/othervm -Xmx1g -Xint -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestByteArrays
+ * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestByteArrays
+ * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestByteArrays
+ * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:-TieredCompilation -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestByteArrays
*
- * @run main/othervm -Xmx1g -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestByteArrays
- * @run main/othervm -Xmx1g -Xint -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestByteArrays
- * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestByteArrays
- * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestByteArrays
- * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:-TieredCompilation -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestByteArrays
+ * @run main/othervm -Xmx1g -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestByteArrays
+ * @run main/othervm -Xmx1g -Xint -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestByteArrays
+ * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestByteArrays
+ * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestByteArrays
+ * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:-TieredCompilation -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestByteArrays
*/
import java.util.Random;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestClasses.java
--- a/test/hotspot/jtreg/gc/epsilon/TestClasses.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestClasses.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.epsilon;
+
/**
* @test TestClasses
* @key gc
@@ -30,7 +32,7 @@
* @modules java.base/jdk.internal.org.objectweb.asm
* java.base/jdk.internal.misc
*
- * @run main/othervm -Xmx128m -XX:MetaspaceSize=1m -XX:MaxMetaspaceSize=32m -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc -Xlog:gc+metaspace TestClasses
+ * @run main/othervm -Xmx128m -XX:MetaspaceSize=1m -XX:MaxMetaspaceSize=64m -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc -Xlog:gc+metaspace gc.epsilon.TestClasses
*/
import jdk.internal.org.objectweb.asm.ClassWriter;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestDieDefault.java
--- a/test/hotspot/jtreg/gc/epsilon/TestDieDefault.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestDieDefault.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,13 +21,15 @@
* questions.
*/
+package gc.epsilon;
+
/**
* @test TestDieDefault
* @key gc
* @requires vm.gc.Epsilon & !vm.graal.enabled
* @summary Epsilon GC should die on heap exhaustion
* @library /test/lib
- * @run main TestDieDefault
+ * @run main gc.epsilon.TestDieDefault
*/
import jdk.test.lib.process.OutputAnalyzer;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestDieWithHeapDump.java
--- a/test/hotspot/jtreg/gc/epsilon/TestDieWithHeapDump.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestDieWithHeapDump.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,13 +21,15 @@
* questions.
*/
+package gc.epsilon;
+
/**
* @test TestDieWithHeapDump
* @key gc
* @requires vm.gc.Epsilon & !vm.graal.enabled
* @summary Epsilon GC should die on heap exhaustion with error handler attached
* @library /test/lib
- * @run main TestDieWithHeapDump
+ * @run main gc.epsilon.TestDieWithHeapDump
*/
import java.io.*;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestDieWithOnError.java
--- a/test/hotspot/jtreg/gc/epsilon/TestDieWithOnError.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestDieWithOnError.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,13 +21,15 @@
* questions.
*/
+package gc.epsilon;
+
/**
* @test TestDieWithOnError
* @key gc
* @requires vm.gc.Epsilon & !vm.graal.enabled
* @summary Epsilon GC should die on heap exhaustion with error handler attached
* @library /test/lib
- * @run main TestDieWithOnError
+ * @run main gc.epsilon.TestDieWithOnError
*/
import jdk.test.lib.process.OutputAnalyzer;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestElasticTLAB.java
--- a/test/hotspot/jtreg/gc/epsilon/TestElasticTLAB.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestElasticTLAB.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,18 +21,20 @@
* questions.
*/
+package gc.epsilon;
+
/**
* @test TestElasticTLAB
* @key gc
* @requires vm.gc.Epsilon & !vm.graal.enabled
* @summary Epsilon is able to work with/without elastic TLABs
*
- * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:-EpsilonElasticTLAB TestElasticTLAB
- * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:+EpsilonElasticTLAB -XX:EpsilonTLABElasticity=1 TestElasticTLAB
- * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:+EpsilonElasticTLAB -XX:EpsilonTLABElasticity=1.1 TestElasticTLAB
- * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:+EpsilonElasticTLAB -XX:EpsilonTLABElasticity=2.0 TestElasticTLAB
- * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:+EpsilonElasticTLAB -XX:EpsilonTLABElasticity=42 TestElasticTLAB
- * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:+EpsilonElasticTLAB -XX:EpsilonTLABElasticity=100 TestElasticTLAB
+ * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:-EpsilonElasticTLAB gc.epsilon.TestElasticTLAB
+ * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:+EpsilonElasticTLAB -XX:EpsilonTLABElasticity=1 gc.epsilon.TestElasticTLAB
+ * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:+EpsilonElasticTLAB -XX:EpsilonTLABElasticity=1.1 gc.epsilon.TestElasticTLAB
+ * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:+EpsilonElasticTLAB -XX:EpsilonTLABElasticity=2.0 gc.epsilon.TestElasticTLAB
+ * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:+EpsilonElasticTLAB -XX:EpsilonTLABElasticity=42 gc.epsilon.TestElasticTLAB
+ * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:+EpsilonElasticTLAB -XX:EpsilonTLABElasticity=100 gc.epsilon.TestElasticTLAB
*/
import java.util.Random;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestElasticTLABDecay.java
--- a/test/hotspot/jtreg/gc/epsilon/TestElasticTLABDecay.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestElasticTLABDecay.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,15 +21,17 @@
* questions.
*/
+package gc.epsilon;
+
/**
* @test TestElasticTLABDecay
* @key gc
* @requires vm.gc.Epsilon & !vm.graal.enabled
* @summary Epsilon is able to work with/without elastic TLABs
*
- * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:+EpsilonElasticTLAB -XX:-EpsilonElasticTLABDecay TestElasticTLABDecay
- * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:+EpsilonElasticTLAB -XX:+EpsilonElasticTLABDecay -XX:EpsilonTLABDecayTime=1 TestElasticTLABDecay
- * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:+EpsilonElasticTLAB -XX:+EpsilonElasticTLABDecay -XX:EpsilonTLABDecayTime=100 TestElasticTLABDecay
+ * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:+EpsilonElasticTLAB -XX:-EpsilonElasticTLABDecay gc.epsilon.TestElasticTLABDecay
+ * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:+EpsilonElasticTLAB -XX:+EpsilonElasticTLABDecay -XX:EpsilonTLABDecayTime=1 gc.epsilon.TestElasticTLABDecay
+ * @run main/othervm -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:+EpsilonElasticTLAB -XX:+EpsilonElasticTLABDecay -XX:EpsilonTLABDecayTime=100 gc.epsilon.TestElasticTLABDecay
*/
import java.util.Random;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestEpsilonEnabled.java
--- a/test/hotspot/jtreg/gc/epsilon/TestEpsilonEnabled.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestEpsilonEnabled.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,13 +21,15 @@
* questions.
*/
+package gc.epsilon;
+
/**
* @test TestAlwaysPretouch
* @key gc
* @requires vm.gc.Epsilon & !vm.graal.enabled
* @summary Basic sanity test for Epsilon
* @library /test/lib
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestEpsilonEnabled
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestEpsilonEnabled
*/
import jdk.test.lib.Platform;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestHelloWorld.java
--- a/test/hotspot/jtreg/gc/epsilon/TestHelloWorld.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestHelloWorld.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,12 +21,14 @@
* questions.
*/
+package gc.epsilon;
+
/**
* @test TestHelloWorld
* @key gc
* @requires vm.gc.Epsilon & !vm.graal.enabled
* @summary Basic sanity test for Epsilon
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestHelloWorld
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestHelloWorld
*/
public class TestHelloWorld {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestLogTrace.java
--- a/test/hotspot/jtreg/gc/epsilon/TestLogTrace.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestLogTrace.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,12 +21,15 @@
* questions.
*/
+
+package gc.epsilon;
+
/**
* @test TestLogTrace
* @key gc
* @requires vm.gc.Epsilon & !vm.graal.enabled
* @summary Test that tracing does not crash Epsilon
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc*=trace TestLogTrace
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc*=trace gc.epsilon.TestLogTrace
*/
public class TestLogTrace {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestManyThreads.java
--- a/test/hotspot/jtreg/gc/epsilon/TestManyThreads.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestManyThreads.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,23 +21,25 @@
* questions.
*/
+package gc.epsilon;
+
/**
* @test TestManyThreads
* @key gc
* @requires vm.gc.Epsilon & !vm.graal.enabled
* @summary Test allocations from many threads
*
- * @run main/othervm -Xmx128m -Xss512k -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestManyThreads
- * @run main/othervm -Xmx128m -Xss512k -Xint -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestManyThreads
- * @run main/othervm -Xmx128m -Xss512k -Xbatch -Xcomp -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestManyThreads
- * @run main/othervm -Xmx128m -Xss512k -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestManyThreads
- * @run main/othervm -Xmx128m -Xss512k -Xbatch -Xcomp -XX:-TieredCompilation -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestManyThreads
+ * @run main/othervm -Xmx128m -Xss512k -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestManyThreads
+ * @run main/othervm -Xmx128m -Xss512k -Xint -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestManyThreads
+ * @run main/othervm -Xmx128m -Xss512k -Xbatch -Xcomp -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestManyThreads
+ * @run main/othervm -Xmx128m -Xss512k -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestManyThreads
+ * @run main/othervm -Xmx128m -Xss512k -Xbatch -Xcomp -XX:-TieredCompilation -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestManyThreads
*
- * @run main/othervm -Xmx128m -Xss512k -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestManyThreads
- * @run main/othervm -Xmx128m -Xss512k -Xint -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestManyThreads
- * @run main/othervm -Xmx128m -Xss512k -Xbatch -Xcomp -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestManyThreads
- * @run main/othervm -Xmx128m -Xss512k -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestManyThreads
- * @run main/othervm -Xmx128m -Xss512k -Xbatch -Xcomp -XX:-TieredCompilation -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestManyThreads
+ * @run main/othervm -Xmx128m -Xss512k -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestManyThreads
+ * @run main/othervm -Xmx128m -Xss512k -Xint -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestManyThreads
+ * @run main/othervm -Xmx128m -Xss512k -Xbatch -Xcomp -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestManyThreads
+ * @run main/othervm -Xmx128m -Xss512k -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestManyThreads
+ * @run main/othervm -Xmx128m -Xss512k -Xbatch -Xcomp -XX:-TieredCompilation -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestManyThreads
*/
import java.util.concurrent.atomic.*;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestMaxTLAB.java
--- a/test/hotspot/jtreg/gc/epsilon/TestMaxTLAB.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestMaxTLAB.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.epsilon;
+
/**
* @test TestMaxTLAB
* @key gc
@@ -28,15 +30,15 @@
* @summary Check EpsilonMaxTLAB options
* @bug 8212177
*
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:EpsilonMaxTLABSize=1 TestMaxTLAB
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:EpsilonMaxTLABSize=1K TestMaxTLAB
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:EpsilonMaxTLABSize=1M TestMaxTLAB
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:EpsilonMaxTLABSize=12345 TestMaxTLAB
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:EpsilonMaxTLABSize=1 gc.epsilon.TestMaxTLAB
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:EpsilonMaxTLABSize=1K gc.epsilon.TestMaxTLAB
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:EpsilonMaxTLABSize=1M gc.epsilon.TestMaxTLAB
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:EpsilonMaxTLABSize=12345 gc.epsilon.TestMaxTLAB
*
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:EpsilonMaxTLABSize=1 -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=16 TestMaxTLAB
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:EpsilonMaxTLABSize=1K -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=16 TestMaxTLAB
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:EpsilonMaxTLABSize=1M -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=16 TestMaxTLAB
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:EpsilonMaxTLABSize=12345 -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=16 TestMaxTLAB
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:EpsilonMaxTLABSize=1 -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=16 gc.epsilon.TestMaxTLAB
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:EpsilonMaxTLABSize=1K -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=16 gc.epsilon.TestMaxTLAB
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:EpsilonMaxTLABSize=1M -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=16 gc.epsilon.TestMaxTLAB
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -Xmx128m -XX:+UseEpsilonGC -XX:EpsilonMaxTLABSize=12345 -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=16 gc.epsilon.TestMaxTLAB
*/
public class TestMaxTLAB {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestMemoryMXBeans.java
--- a/test/hotspot/jtreg/gc/epsilon/TestMemoryMXBeans.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestMemoryMXBeans.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,6 +21,8 @@
*
*/
+package gc.epsilon;
+
/**
* @test TestMemoryMXBeans
* @key gc
@@ -28,9 +30,9 @@
* @summary Test JMX memory beans
* @modules java.base/jdk.internal.misc
* java.management
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xmx1g TestMemoryMXBeans -1 1024
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xms1g -Xmx1g TestMemoryMXBeans 1024 1024
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xms128m -Xmx1g TestMemoryMXBeans 128 1024
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xmx1g gc.epsilon.TestMemoryMXBeans -1 1024
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xms1g -Xmx1g gc.epsilon.TestMemoryMXBeans 1024 1024
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xms128m -Xmx1g gc.epsilon.TestMemoryMXBeans 128 1024
*/
import java.lang.management.*;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestMemoryPools.java
--- a/test/hotspot/jtreg/gc/epsilon/TestMemoryPools.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestMemoryPools.java Tue Jan 29 09:38:31 2019 -0500
@@ -22,6 +22,8 @@
*
*/
+package gc.epsilon;
+
/**
* @test TestMemoryPools
* @key gc
@@ -29,7 +31,7 @@
* @summary Test JMX memory pools
* @modules java.base/jdk.internal.misc
* java.management
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xmx1g -Xms1g TestMemoryPools
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xmx1g -Xms1g gc.epsilon.TestMemoryPools
*/
import java.lang.management.*;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestObjects.java
--- a/test/hotspot/jtreg/gc/epsilon/TestObjects.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestObjects.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,23 +21,25 @@
* questions.
*/
+package gc.epsilon;
+
/**
* @test TestObjects
* @key gc
* @requires vm.gc.Epsilon & !vm.graal.enabled
* @summary Epsilon is able to allocate objects, and does not corrupt their state
*
- * @run main/othervm -Xmx128m -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestObjects
- * @run main/othervm -Xmx128m -Xint -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestObjects
- * @run main/othervm -Xmx128m -Xbatch -Xcomp -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestObjects
- * @run main/othervm -Xmx128m -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestObjects
- * @run main/othervm -Xmx128m -Xbatch -Xcomp -XX:-TieredCompilation -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestObjects
+ * @run main/othervm -Xmx128m -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestObjects
+ * @run main/othervm -Xmx128m -Xint -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestObjects
+ * @run main/othervm -Xmx128m -Xbatch -Xcomp -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestObjects
+ * @run main/othervm -Xmx128m -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestObjects
+ * @run main/othervm -Xmx128m -Xbatch -Xcomp -XX:-TieredCompilation -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestObjects
*
- * @run main/othervm -Xmx128m -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestObjects
- * @run main/othervm -Xmx128m -Xint -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestObjects
- * @run main/othervm -Xmx128m -Xbatch -Xcomp -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestObjects
- * @run main/othervm -Xmx128m -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestObjects
- * @run main/othervm -Xmx128m -Xbatch -Xcomp -XX:-TieredCompilation -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestObjects
+ * @run main/othervm -Xmx128m -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestObjects
+ * @run main/othervm -Xmx128m -Xint -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestObjects
+ * @run main/othervm -Xmx128m -Xbatch -Xcomp -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestObjects
+ * @run main/othervm -Xmx128m -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestObjects
+ * @run main/othervm -Xmx128m -Xbatch -Xcomp -XX:-TieredCompilation -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestObjects
*/
import java.util.Random;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestPrintHeapSteps.java
--- a/test/hotspot/jtreg/gc/epsilon/TestPrintHeapSteps.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestPrintHeapSteps.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,14 +21,16 @@
* questions.
*/
+package gc.epsilon;
+
/**
* @test TestPrintSteps
* @key gc
* @requires vm.gc.Epsilon & !vm.graal.enabled
* @summary Tests -XX:EpsilonPrintHeapSteps works
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc -XX:EpsilonPrintHeapSteps=0 TestPrintHeapSteps
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc -XX:EpsilonPrintHeapSteps=1 TestPrintHeapSteps
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc -XX:EpsilonPrintHeapSteps=1000 TestPrintHeapSteps
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc -XX:EpsilonPrintHeapSteps=0 gc.epsilon.TestPrintHeapSteps
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc -XX:EpsilonPrintHeapSteps=1 gc.epsilon.TestPrintHeapSteps
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc -XX:EpsilonPrintHeapSteps=1000 gc.epsilon.TestPrintHeapSteps
*/
public class TestPrintHeapSteps {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestRefArrays.java
--- a/test/hotspot/jtreg/gc/epsilon/TestRefArrays.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestRefArrays.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.epsilon;
+
/**
* @test TestRefArrays
* @key gc
@@ -28,17 +30,17 @@
* @summary Epsilon is able to allocate arrays, and does not corrupt their state
* @library /test/lib
*
- * @run main/othervm -Xmx1g -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestRefArrays
- * @run main/othervm -Xmx1g -Xint -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestRefArrays
- * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestRefArrays
- * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestRefArrays
- * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:-TieredCompilation -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestRefArrays
+ * @run main/othervm -Xmx1g -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestRefArrays
+ * @run main/othervm -Xmx1g -Xint -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestRefArrays
+ * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestRefArrays
+ * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestRefArrays
+ * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:-TieredCompilation -XX:+UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestRefArrays
*
- * @run main/othervm -Xmx1g -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestRefArrays
- * @run main/othervm -Xmx1g -Xint -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestRefArrays
- * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestRefArrays
- * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestRefArrays
- * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:-TieredCompilation -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestRefArrays
+ * @run main/othervm -Xmx1g -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestRefArrays
+ * @run main/othervm -Xmx1g -Xint -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestRefArrays
+ * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestRefArrays
+ * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestRefArrays
+ * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:-TieredCompilation -XX:-UseTLAB -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestRefArrays
*/
import java.util.Random;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/epsilon/TestUpdateCountersSteps.java
--- a/test/hotspot/jtreg/gc/epsilon/TestUpdateCountersSteps.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestUpdateCountersSteps.java Tue Jan 29 09:38:31 2019 -0500
@@ -21,15 +21,17 @@
* questions.
*/
+package gc.epsilon;
+
/**
* @test TestUpdateCountersSteps
* @key gc
* @requires vm.gc.Epsilon & !vm.graal.enabled
* @summary Test EpsilonUpdateCountersStep works
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc -XX:EpsilonUpdateCountersStep=1 TestUpdateCountersSteps
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc -XX:EpsilonUpdateCountersStep=10 TestUpdateCountersSteps
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc -XX:EpsilonUpdateCountersStep=100 TestUpdateCountersSteps
- * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc -XX:EpsilonUpdateCountersStep=1000 TestUpdateCountersSteps
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc -XX:EpsilonUpdateCountersStep=1 gc.epsilon.TestUpdateCountersSteps
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc -XX:EpsilonUpdateCountersStep=10 gc.epsilon.TestUpdateCountersSteps
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc -XX:EpsilonUpdateCountersStep=100 gc.epsilon.TestUpdateCountersSteps
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xlog:gc -XX:EpsilonUpdateCountersStep=1000 gc.epsilon.TestUpdateCountersSteps
*/
public class TestUpdateCountersSteps {
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/ergonomics/TestDynamicNumberOfGCThreads.java
--- a/test/hotspot/jtreg/gc/ergonomics/TestDynamicNumberOfGCThreads.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/ergonomics/TestDynamicNumberOfGCThreads.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.ergonomics;
+
/*
* @test TestDynamicNumberOfGCThreads
* @bug 8017462
@@ -31,7 +33,7 @@
* @library /test/lib
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
- * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI TestDynamicNumberOfGCThreads
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI gc.ergonomics.TestDynamicNumberOfGCThreads
*/
import jdk.test.lib.process.OutputAnalyzer;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/ergonomics/TestInitialGCThreadLogging.java
--- a/test/hotspot/jtreg/gc/ergonomics/TestInitialGCThreadLogging.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/ergonomics/TestInitialGCThreadLogging.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.ergonomics;
+
/*
* @test TestInitialGCThreadLogging
* @bug 8157240
@@ -31,7 +33,7 @@
* @library /test/lib
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
- * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI TestInitialGCThreadLogging
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI gc.ergonomics.TestInitialGCThreadLogging
*/
import jdk.test.lib.process.ProcessTools;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/g1/Test2GbHeap.java
--- a/test/hotspot/jtreg/gc/g1/Test2GbHeap.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/Test2GbHeap.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.g1;
+
/*
* @test Test2GbHeap
* @key gc regression
@@ -32,6 +34,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.management
+ * @run main gc.g1.Test2GbHeap
*/
import java.util.ArrayList;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/g1/TestConcurrentSystemGC.java
--- a/test/hotspot/jtreg/gc/g1/TestConcurrentSystemGC.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestConcurrentSystemGC.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.g1;
+
/*
* @test TestConcurrentSystemGC
* @bug 8195158
@@ -31,7 +33,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.management
- * @run main/othervm -XX:+UseG1GC -XX:+ExplicitGCInvokesConcurrent -Xmx8m -Xms8m -XX:G1HeapRegionSize=1m TestConcurrentSystemGC
+ * @run main/othervm -XX:+UseG1GC -XX:+ExplicitGCInvokesConcurrent -Xmx8m -Xms8m -XX:G1HeapRegionSize=1m gc.g1.TestConcurrentSystemGC
*/
import java.util.ArrayList;
diff -r b50715adf242 -r cf2b4754174d test/hotspot/jtreg/gc/g1/TestEagerReclaimHumongousRegions.java
--- a/test/hotspot/jtreg/gc/g1/TestEagerReclaimHumongousRegions.java Tue Jan 22 09:43:38 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestEagerReclaimHumongousRegions.java Tue Jan 29 09:38:31 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -21,6 +21,8 @@
* questions.
*/
+package gc.g1;
+
/*
* @test TestEagerReclaimHumongousRegions
* @bug 8027959
@@ -31,6 +33,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.management
+ * @run main gc.g1.TestEagerReclaimHumongousRegions
*/
import java.util.regex.Pattern;
@@ -41,7 +44,7 @@
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.Asserts;
-class ReclaimRegionFast {
+class TestEagerReclaimHumongousRegionsReclaimRegionFast {
public static final int M = 1024*1024;
public static LinkedList