Merge remote-tracking branch 'upstream/master' into dragonwell
Summary: Merge upstream code Test Plan: CICD Reviewed-by: D-D-H, yuleil Issue: https://github.com/alibaba/dragonwell11/issues/225
This commit is contained in:
commit
d6a370cf4d
|
|
@ -71,8 +71,28 @@ jobs:
|
|||
run: "echo '${{ steps.check_deps.outputs.dependencies }}'"
|
||||
if: steps.check_submit.outputs.should_run != 'false'
|
||||
|
||||
- name: Determine full JDK versions
|
||||
id: check_jdk_versions
|
||||
shell: bash
|
||||
run: |
|
||||
FEATURE=${{ fromJson(steps.check_deps.outputs.dependencies).DEFAULT_VERSION_FEATURE }}
|
||||
INTERIM=${{ fromJson(steps.check_deps.outputs.dependencies).DEFAULT_VERSION_INTERIM }}
|
||||
UPDATE=${{ fromJson(steps.check_deps.outputs.dependencies).DEFAULT_VERSION_UPDATE }}
|
||||
PATCH=${{ fromJson(steps.check_deps.outputs.dependencies).DEFAULT_VERSION_PATCH }}
|
||||
if [ "x${PATCH}" != "x0" ]; then
|
||||
V=${FEATURE}.${INTERIM}.${UPDATE}.${PATCH}
|
||||
elif [ "x${UPDATE}" != "x0" ]; then
|
||||
V=${FEATURE}.${INTERIM}.${UPDATE}
|
||||
elif [ "x${INTERIM}" != "x0" ]; then
|
||||
V={FEATURE}.${INTERIM}
|
||||
else
|
||||
V=${FEATURE}
|
||||
fi
|
||||
echo "::set-output name=jdk_version::${V}"
|
||||
if: steps.check_submit.outputs.should_run != 'false'
|
||||
|
||||
- name: Determine the jtreg ref to checkout
|
||||
run: "echo JTREG_REF=jtreg${{ fromJson(steps.check_deps.outputs.dependencies).JTREG_VERSION }}-${{ fromJson(steps.check_deps.outputs.dependencies).JTREG_BUILD }} >> $GITHUB_ENV"
|
||||
run: "echo JTREG_REF=jtreg-${{ fromJson(steps.check_deps.outputs.dependencies).JTREG_VERSION }}+${{ fromJson(steps.check_deps.outputs.dependencies).JTREG_BUILD }} >> $GITHUB_ENV"
|
||||
if: steps.check_submit.outputs.should_run != 'false'
|
||||
|
||||
- name: Determine the jtreg version to build
|
||||
|
|
@ -100,7 +120,7 @@ jobs:
|
|||
if: steps.check_submit.outputs.should_run != 'false' && steps.jtreg.outputs.cache-hit != 'true'
|
||||
|
||||
- name: Build jtreg
|
||||
run: bash make/build-all.sh ${JAVA_HOME_8_X64}
|
||||
run: bash make/build.sh --jdk ${JAVA_HOME_8_X64}
|
||||
working-directory: jtreg
|
||||
if: steps.check_submit.outputs.should_run != 'false' && steps.jtreg.outputs.cache-hit != 'true'
|
||||
|
||||
|
|
@ -134,7 +154,7 @@ jobs:
|
|||
artifact: -debug
|
||||
|
||||
env:
|
||||
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_INTERIM }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_UPDATE }}"
|
||||
JDK_VERSION: "${{ needs.prerequisites.outputs.jdk_version }}"
|
||||
BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
|
||||
BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_FILENAME }}"
|
||||
BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_URL }}"
|
||||
|
|
@ -264,7 +284,7 @@ jobs:
|
|||
- test: dragonwell/jdk feature
|
||||
suites: test/jdk/:dragonwell_jdk
|
||||
env:
|
||||
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_INTERIM }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_UPDATE }}"
|
||||
JDK_VERSION: "${{ needs.prerequisites.outputs.jdk_version }}"
|
||||
BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
|
||||
BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_FILENAME }}"
|
||||
BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_URL }}"
|
||||
|
|
@ -356,15 +376,103 @@ jobs:
|
|||
JTREG_KEYWORDS="!headful"
|
||||
JTREG="JAVA_OPTIONS=-XX:-CreateCoredumpOnCrash"
|
||||
|
||||
- name: Check that all tests executed successfully
|
||||
if: steps.run_tests.outcome != 'skipped'
|
||||
run: >
|
||||
if ! grep --include=test-summary.txt -lqr build/*/test-results -e "TEST SUCCESS" ; then
|
||||
cat build/*/test-results/*/text/newfailures.txt ;
|
||||
cat build/*/test-results/*/text/other_errors.txt ;
|
||||
exit 1 ;
|
||||
- name: Generate test failure summary
|
||||
run: |
|
||||
#
|
||||
test_suite_name=$(cat build/run-test-prebuilt/test-support/test-last-ids.txt)
|
||||
results_dir=build/run-test-prebuilt/test-results/$test_suite_name/text
|
||||
|
||||
failures=$(sed -e 's!\(.*\)\.java!\1!' -e '/^#/d' $results_dir/newfailures.txt || true)
|
||||
errors=$(sed -e 's!\(.*\)\.java!\1!' -e '/^#/d' $results_dir/other_errors.txt || true)
|
||||
failure_count=$(echo $failures | wc -w || true)
|
||||
error_count=$(echo $errors | wc -w || true)
|
||||
|
||||
if [[ "$failures" = "" && "$errors" = "" ]]; then
|
||||
# If we have nothing to report, exit this step now
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "::error:: Test run reported $failure_count test failure(s) and $error_count error(s). See summary for details."
|
||||
|
||||
echo "### :boom: Test failures summary" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
if [[ "$failures" != "" ]]; then
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "These tests reported failure:" >> $GITHUB_STEP_SUMMARY
|
||||
for test in $failures; do
|
||||
anchor="$(echo "$test" | tr [A-Z/] [a-z_])"
|
||||
echo "* [$test](#user-content-$anchor)"
|
||||
done >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
if [[ "$errors" != "" ]]; then
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "These tests reported errors:" >> $GITHUB_STEP_SUMMARY
|
||||
for test in $errors; do
|
||||
anchor="$(echo "$test" | tr [A-Z/] [a-z_])"
|
||||
echo "* [$test](#user-content-$anchor)"
|
||||
done >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
- name: Collect failed test output
|
||||
run: |
|
||||
#
|
||||
# This is a separate step, since if the markdown from a step gets bigger than
|
||||
# 1024 kB it is skipped, but then the summary above is still generated
|
||||
test_suite_name=$(cat build/run-test-prebuilt/test-support/test-last-ids.txt)
|
||||
results_dir=build/run-test-prebuilt/test-results/$test_suite_name/text
|
||||
report_dir=build/run-test-prebuilt/test-support/$test_suite_name
|
||||
|
||||
failures=$(sed -e 's!\(.*\)\.java!\1!' -e '/^#/d' $results_dir/newfailures.txt || true)
|
||||
errors=$(sed -e 's!\(.*\)\.java!\1!' -e '/^#/d' $results_dir/other_errors.txt || true)
|
||||
|
||||
if [[ "$failures" = "" && "$errors" = "" ]]; then
|
||||
# If we have nothing to report, exit this step now
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "### Test output for failed tests" >> $GITHUB_STEP_SUMMARY
|
||||
for test in $failures $errors; do
|
||||
anchor="$(echo "$test" | tr [A-Z/] [a-z_])"
|
||||
base_path="$(echo "$test" | tr '#' '_')"
|
||||
report_file="$report_dir/$base_path.jtr"
|
||||
hs_err_files="$report_dir/$base_path/hs_err*.log"
|
||||
echo "#### <a id="$anchor">$test"
|
||||
|
||||
echo "<details><summary>View test results</summary>"
|
||||
echo ""
|
||||
echo '```'
|
||||
if [[ -f "$report_file" ]]; then
|
||||
cat "$report_file"
|
||||
else
|
||||
echo "Error: Result file $report_file not found"
|
||||
fi
|
||||
echo '```'
|
||||
echo "</details>"
|
||||
echo ""
|
||||
|
||||
if [[ "$hs_err_files" != "" ]]; then
|
||||
echo "<details><summary>View HotSpot error log</summary>"
|
||||
echo ""
|
||||
for hs_err in $hs_err_files; do
|
||||
echo '```'
|
||||
echo "$hs_err:"
|
||||
echo ""
|
||||
cat "$hs_err"
|
||||
echo '```'
|
||||
done
|
||||
|
||||
echo "</details>"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
done >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
echo ":arrow_right: To see the entire test log, click the job in the list to the left" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
# This will abort the entire job in GHA, which is what we want
|
||||
exit 1
|
||||
|
||||
- name: Create suitable test log artifact name
|
||||
if: always()
|
||||
run: echo "logsuffix=`echo ${{ matrix.test }} | sed -e 's!/!_!'g -e 's! !_!'g`" >> $GITHUB_ENV
|
||||
|
|
@ -423,7 +531,7 @@ jobs:
|
|||
gnu-arch: aarch64
|
||||
|
||||
env:
|
||||
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_INTERIM }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_UPDATE }}"
|
||||
JDK_VERSION: "${{ needs.prerequisites.outputs.jdk_version }}"
|
||||
BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
|
||||
BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_FILENAME }}"
|
||||
BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_URL }}"
|
||||
|
|
@ -570,7 +678,7 @@ jobs:
|
|||
artifact: -debug
|
||||
|
||||
env:
|
||||
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_INTERIM }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_UPDATE }}"
|
||||
JDK_VERSION: "${{ needs.prerequisites.outputs.jdk_version }}"
|
||||
BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
|
||||
BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).WINDOWS_X64_BOOT_JDK_FILENAME }}"
|
||||
BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).WINDOWS_X64_BOOT_JDK_URL }}"
|
||||
|
|
@ -706,7 +814,7 @@ jobs:
|
|||
artifact: -debug
|
||||
|
||||
env:
|
||||
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_INTERIM }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_UPDATE }}"
|
||||
JDK_VERSION: "${{ needs.prerequisites.outputs.jdk_version }}"
|
||||
BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
|
||||
BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).WINDOWS_X64_BOOT_JDK_FILENAME }}"
|
||||
BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).WINDOWS_X64_BOOT_JDK_URL }}"
|
||||
|
|
@ -876,7 +984,7 @@ jobs:
|
|||
|
||||
macos_x64_build:
|
||||
name: macOS x64
|
||||
runs-on: "macos-10.15"
|
||||
runs-on: "macos-11"
|
||||
needs: prerequisites
|
||||
if: needs.prerequisites.outputs.should_run != 'false' && needs.prerequisites.outputs.platform_macos_x64 != 'false'
|
||||
|
||||
|
|
@ -893,7 +1001,7 @@ jobs:
|
|||
artifact: -debug
|
||||
|
||||
env:
|
||||
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_INTERIM }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_UPDATE }}"
|
||||
JDK_VERSION: "${{ needs.prerequisites.outputs.jdk_version }}"
|
||||
BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
|
||||
BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).MACOS_X64_BOOT_JDK_FILENAME }}"
|
||||
BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).MACOS_X64_BOOT_JDK_URL }}"
|
||||
|
|
@ -943,7 +1051,7 @@ jobs:
|
|||
run: brew install make
|
||||
|
||||
- name: Select Xcode version
|
||||
run: sudo xcode-select --switch /Applications/Xcode_11.3.1.app/Contents/Developer
|
||||
run: sudo xcode-select --switch /Applications/Xcode_11.7.app/Contents/Developer
|
||||
|
||||
- name: Configure
|
||||
run: >
|
||||
|
|
@ -974,7 +1082,7 @@ jobs:
|
|||
|
||||
macos_aarch64_build:
|
||||
name: macOS aarch64
|
||||
runs-on: "macos-10.15"
|
||||
runs-on: "macos-11"
|
||||
needs: prerequisites
|
||||
if: needs.prerequisites.outputs.should_run != 'false' && needs.prerequisites.outputs.platform_macos_aarch64 != 'false'
|
||||
|
||||
|
|
@ -991,7 +1099,7 @@ jobs:
|
|||
artifact: -debug
|
||||
|
||||
env:
|
||||
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}"
|
||||
JDK_VERSION: "${{ needs.prerequisites.outputs.jdk_version }}"
|
||||
BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
|
||||
BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).MACOS_X64_BOOT_JDK_FILENAME }}"
|
||||
BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).MACOS_X64_BOOT_JDK_URL }}"
|
||||
|
|
@ -1074,7 +1182,7 @@ jobs:
|
|||
|
||||
macos_x64_test:
|
||||
name: macOS x64
|
||||
runs-on: "macos-10.15"
|
||||
runs-on: "macos-11"
|
||||
needs:
|
||||
- prerequisites
|
||||
- macos_x64_build
|
||||
|
|
@ -1099,7 +1207,7 @@ jobs:
|
|||
artifact: -debug
|
||||
|
||||
env:
|
||||
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_INTERIM }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_UPDATE }}"
|
||||
JDK_VERSION: "${{ needs.prerequisites.outputs.jdk_version }}"
|
||||
BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
|
||||
BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).MACOS_X64_BOOT_JDK_FILENAME }}"
|
||||
BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).MACOS_X64_BOOT_JDK_URL }}"
|
||||
|
|
@ -1169,7 +1277,7 @@ jobs:
|
|||
run: brew install make
|
||||
|
||||
- name: Select Xcode version
|
||||
run: sudo xcode-select --switch /Applications/Xcode_11.3.1.app/Contents/Developer
|
||||
run: sudo xcode-select --switch /Applications/Xcode_11.7.app/Contents/Developer
|
||||
|
||||
- name: Find root of jdk image dir
|
||||
run: |
|
||||
|
|
@ -1192,15 +1300,103 @@ jobs:
|
|||
JTREG_KEYWORDS="!headful"
|
||||
JTREG="JAVA_OPTIONS=-XX:-CreateCoredumpOnCrash"
|
||||
|
||||
- name: Check that all tests executed successfully
|
||||
if: steps.run_tests.outcome != 'skipped'
|
||||
run: >
|
||||
if ! grep --include=test-summary.txt -lqr build/*/test-results -e "TEST SUCCESS" ; then
|
||||
cat build/*/test-results/*/text/newfailures.txt ;
|
||||
cat build/*/test-results/*/text/other_errors.txt ;
|
||||
exit 1 ;
|
||||
- name: Generate test failure summary
|
||||
run: |
|
||||
#
|
||||
test_suite_name=$(cat build/run-test-prebuilt/test-support/test-last-ids.txt)
|
||||
results_dir=build/run-test-prebuilt/test-results/$test_suite_name/text
|
||||
|
||||
failures=$(sed -e 's!\(.*\)\.java!\1!' -e '/^#/d' $results_dir/newfailures.txt || true)
|
||||
errors=$(sed -e 's!\(.*\)\.java!\1!' -e '/^#/d' $results_dir/other_errors.txt || true)
|
||||
failure_count=$(echo $failures | wc -w || true)
|
||||
error_count=$(echo $errors | wc -w || true)
|
||||
|
||||
if [[ "$failures" = "" && "$errors" = "" ]]; then
|
||||
# If we have nothing to report, exit this step now
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "::error:: Test run reported $failure_count test failure(s) and $error_count error(s). See summary for details."
|
||||
|
||||
echo "### :boom: Test failures summary" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
if [[ "$failures" != "" ]]; then
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "These tests reported failure:" >> $GITHUB_STEP_SUMMARY
|
||||
for test in $failures; do
|
||||
anchor="$(echo "$test" | tr [A-Z/] [a-z_])"
|
||||
echo "* [$test](#user-content-$anchor)"
|
||||
done >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
if [[ "$errors" != "" ]]; then
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "These tests reported errors:" >> $GITHUB_STEP_SUMMARY
|
||||
for test in $errors; do
|
||||
anchor="$(echo "$test" | tr [A-Z/] [a-z_])"
|
||||
echo "* [$test](#user-content-$anchor)"
|
||||
done >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
- name: Collect failed test output
|
||||
run: |
|
||||
#
|
||||
# This is a separate step, since if the markdown from a step gets bigger than
|
||||
# 1024 kB it is skipped, but then the summary above is still generated
|
||||
test_suite_name=$(cat build/run-test-prebuilt/test-support/test-last-ids.txt)
|
||||
results_dir=build/run-test-prebuilt/test-results/$test_suite_name/text
|
||||
report_dir=build/run-test-prebuilt/test-support/$test_suite_name
|
||||
|
||||
failures=$(sed -e 's!\(.*\)\.java!\1!' -e '/^#/d' $results_dir/newfailures.txt || true)
|
||||
errors=$(sed -e 's!\(.*\)\.java!\1!' -e '/^#/d' $results_dir/other_errors.txt || true)
|
||||
|
||||
if [[ "$failures" = "" && "$errors" = "" ]]; then
|
||||
# If we have nothing to report, exit this step now
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "### Test output for failed tests" >> $GITHUB_STEP_SUMMARY
|
||||
for test in $failures $errors; do
|
||||
anchor="$(echo "$test" | tr [A-Z/] [a-z_])"
|
||||
base_path="$(echo "$test" | tr '#' '_')"
|
||||
report_file="$report_dir/$base_path.jtr"
|
||||
hs_err_files="$report_dir/$base_path/hs_err*.log"
|
||||
echo "#### <a id="$anchor">$test"
|
||||
|
||||
echo "<details><summary>View test results</summary>"
|
||||
echo ""
|
||||
echo '```'
|
||||
if [[ -f "$report_file" ]]; then
|
||||
cat "$report_file"
|
||||
else
|
||||
echo "Error: Result file $report_file not found"
|
||||
fi
|
||||
echo '```'
|
||||
echo "</details>"
|
||||
echo ""
|
||||
|
||||
if [[ "$hs_err_files" != "" ]]; then
|
||||
echo "<details><summary>View HotSpot error log</summary>"
|
||||
echo ""
|
||||
for hs_err in $hs_err_files; do
|
||||
echo '```'
|
||||
echo "$hs_err:"
|
||||
echo ""
|
||||
cat "$hs_err"
|
||||
echo '```'
|
||||
done
|
||||
|
||||
echo "</details>"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
done >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
echo ":arrow_right: To see the entire test log, click the job in the list to the left" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
# This will abort the entire job in GHA, which is what we want
|
||||
exit 1
|
||||
|
||||
- name: Create suitable test log artifact name
|
||||
if: always()
|
||||
run: echo "logsuffix=`echo ${{ matrix.test }} | sed -e 's!/!_!'g -e 's! !_!'g`" >> $GITHUB_ENV
|
||||
|
|
|
|||
16
.hgignore
16
.hgignore
|
|
@ -1,16 +0,0 @@
|
|||
^build/
|
||||
^dist/
|
||||
^.idea/
|
||||
nbproject/private/
|
||||
^webrev
|
||||
^.src-rev$
|
||||
^.jib/
|
||||
\.DS_Store
|
||||
\.metadata/
|
||||
\.recommenders/
|
||||
test/nashorn/script/external
|
||||
test/nashorn/lib
|
||||
NashornProfile.txt
|
||||
.*/JTreport/.*
|
||||
.*/JTwork/.*
|
||||
.*/.git/.*
|
||||
652
.hgtags
652
.hgtags
|
|
@ -1,652 +0,0 @@
|
|||
3cc80be736f24704e505ad8ddaa598dec3fa2ed3 jdk-9+181
|
||||
e2b70be325bd10dae4c06f74c46d70d480854916 jdk-9+179
|
||||
5b16a1c3ccffff2a82c88bb7ea894c4ff1c9ebde jdk-9+180
|
||||
43bf6f30fcba031ecf0cc7e511efe3a8179d0f77 jdk-9+176
|
||||
d9f6bc6ba599d0487dc18b2fbdb6c34eedf6f958 jdk-9+177
|
||||
bc9df7dd63ec76f50fafeb4acc44465044662f0a jdk-9+178
|
||||
994036e74ab805bcc09afa0646be17a725bec42f jdk-9+175
|
||||
94680c6d60ecd9ed3ffd1847706efde7eb947afc jdk-9+174
|
||||
6dd7fda42bab7ecf648cafb0a4e9b4ca11b3094f jdk-9+173
|
||||
dad6746278facbbea57dd462cb56fb743dc0a5f0 jdk-9+172
|
||||
643b5f18c2656fe91b69fea85b07b98d5fad394d jdk-9+171
|
||||
898cbe31fbdae2d25d141384fac746cc244a730c jdk-9+170
|
||||
c7efde2b60fc1ec04630be769d9ad60efb39c39c jdk-9+169
|
||||
8fd0a4569191f33c98ee90c2709174a342fefb0d jdk-9+167
|
||||
fcabc74bd44e56c7419d111d59b95669ecb33c55 jdk-9+168
|
||||
d3e973f1809606c67412361041ad197e50fe8cec jdk-9+166
|
||||
3965b747cfe1e6cbd66b8739da5a1ea6ec6985e9 jdk-9+165
|
||||
d16aebbb56d37f12e0c0b0a4fb427db65e1fb1a8 jdk-9+162
|
||||
18c41483a082e097ac2f5f983c1226ed94aa4215 jdk-9+163
|
||||
32db52c675e7d5bc413605d2e89b68b608b19be0 jdk-9+164
|
||||
fd1497902bbe3aa24b21f270ecdcb8de5f7aa9ac jdk-9+159
|
||||
6aa8be0c4e054fe8b3ab016ae00d16d680f92145 jdk-9+160
|
||||
f6883b1a5a6478437cd4181c4bd45328ab24feaf jdk-9+161
|
||||
fa3e76b477829afc4476f0b725cfaa440a6fd917 jdk-9+157
|
||||
b5015f742ba648184bb7fc547197bd33ebfde30d jdk-9+158
|
||||
1cc8dd79fd1cd13d36b385196271a29632c67c3b jdk7-b24
|
||||
bf2517e15f0c0f950e5b3143c4ca11e2df73dcc1 jdk7-b25
|
||||
5ae7db536e3fcf6be78e45b240a9058095e0ed38 jdk7-b26
|
||||
67052ac87fc927d048e62ec54ff42adb230d3f7c jdk7-b27
|
||||
18dc4ba4739a537fd146f77da51db16efce28da2 jdk7-b28
|
||||
bfe4572fd301a6fcd120373cdb2eff5d2da0c72c jdk7-b29
|
||||
bee4731164a06ddece1297ae58db24aca6a1c626 jdk7-b30
|
||||
cd8b8f500face60d1566d850857a7fccadbd383a jdk7-b31
|
||||
a9f1805e3ba9ca520cad199d522c84af5433e85a jdk7-b32
|
||||
6838c1a3296aaa3572364d2ce7d70826cee96286 jdk7-b33
|
||||
90cf935adb353bb0af4b46fb0677e841fd24c000 jdk7-b34
|
||||
6d909d5803e3a22850e6c4e5a75b888742ee7e20 jdk7-b35
|
||||
d718a441936196b93d8bc9f084933af9a4c2a350 jdk7-b36
|
||||
c2036bf76829c03b99108fffab52e20910a9be4f jdk7-b37
|
||||
a2879b2837f5a4c87e9542efe69ef138194af8ff jdk7-b38
|
||||
126f365cec6c3c2c72de934fa1c64b5f082b55b5 jdk7-b39
|
||||
3c53424bbe3bb77e01b468b4b0140deec33e11fc jdk7-b40
|
||||
3cb2a607c347934f8e7e86f840a094c28b08d9ea jdk7-b41
|
||||
caf58ffa084568990cbb3441f9ae188e36b31770 jdk7-b42
|
||||
41bd0a702bc8ec6feebd725a63e7c3227f82ab11 jdk7-b43
|
||||
5843778bda89b1d5ac8e1aa05e26930ac90b3145 jdk7-b44
|
||||
54dffad0bf066791a2793305875250c395011d5f jdk7-b45
|
||||
04b2620edc72de93671646e4720c5992c74ac8b5 jdk7-b46
|
||||
0c4657194eec95c08ba478aee9cfc3c295e41657 jdk7-b47
|
||||
1bf51a4c2627c2f0e0cbcc2cf0421bdb37f1f2b2 jdk7-b48
|
||||
6b84b04a80afe23262377c60913eebfc898f14c4 jdk7-b49
|
||||
5da0e6b9f4f18ef483c977337214b12ee0e1fc8f jdk7-b50
|
||||
a25c5ec5e40e07733d1ff9898a0abe36159288ff jdk7-b51
|
||||
7a90e89e36d103038f8667f6a7daae34ecfa1ad8 jdk7-b52
|
||||
d52186ee770dac57950536cd00ccbfdef360b04c jdk7-b53
|
||||
15096652c4d48dfb9fc0b2cb135304db94c65ba0 jdk7-b54
|
||||
c8b275d62d6b0a980c510e839b70292245863e85 jdk7-b55
|
||||
a8134c4ee2cf451cf9b5e1609f39d83ecd53acc5 jdk7-b56
|
||||
b44f05654c26fcd1f995e712992f9b07ffd7c0c6 jdk7-b57
|
||||
d60a9ce3c3eabf28f5d50ae839d18be04a551bc2 jdk7-b58
|
||||
c33e7d38c9210741dbc285507403a4b20bd802a0 jdk7-b59
|
||||
5a10e4d0b14d7beac53a7b2213ae6864afe1fd3e jdk7-b60
|
||||
dbb955b1ee59b876dd1f133952b557b48b1d7732 jdk7-b61
|
||||
6107cbff3130c747d243c25a7874cd59db5744a8 jdk7-b62
|
||||
dfd8506f74c3731bb169ce93c72612d78ee0413b jdk7-b63
|
||||
d22867c5f1b295a0a2b3b4bc8999a2676f6e20c3 jdk7-b64
|
||||
7d3bf00f3cc4f8125de1842521e7567f37dc84b8 jdk7-b65
|
||||
62109d1b9e7310f29ab51ca6f1d71b899c0ce6b0 jdk7-b66
|
||||
eb24af1404aec8aa140c4cd4d13d2839b150dd41 jdk7-b67
|
||||
bca2225b66d78c4bf4d9801f54cac7715a598650 jdk7-b68
|
||||
1b662b1ed14eb4ae31d5138a36c433b13d941dc5 jdk7-b69
|
||||
207f694795c448c17753eff1a2f50363106960c2 jdk7-b70
|
||||
c5d39b6be65cba0effb5f466ea48fe43764d0e0c jdk7-b71
|
||||
df4bcd06e1d0ab306efa5a44f24a409dc0c0c742 jdk7-b72
|
||||
ce74bd35ce948d629a356e168797f44b593b1578 jdk7-b73
|
||||
4e7661eaa211e186674f6cbefec4aef1144ac2a0 jdk7-b74
|
||||
946518568340c4e511549318f19f47f06b7f5f9b jdk7-b75
|
||||
09e0b33177af2b98a03c9ca19eedf61440bd1cf6 jdk7-b76
|
||||
1d0121b741f029dc4b828e4b36ba6fda92907dd7 jdk7-b77
|
||||
4061c66ba1af1a2e27c2c839ba887407dd3ce050 jdk7-b78
|
||||
e9c98378f6b9256c0595ef2985ca5899f0c0e274 jdk7-b79
|
||||
e6abd38682d237306d6c147c17538ec9e7f8e3a7 jdk7-b80
|
||||
dcc938ac40cc45f1ef454d76020b5db5d943001c jdk7-b81
|
||||
a30062be6d9ca1d48579826f870f85974300004e jdk7-b82
|
||||
34c8199936a1682aa8587857f44cfaf37c2b6381 jdk7-b83
|
||||
b1e55627a6980b9508854ed0c0f21d4f981b4494 jdk7-b84
|
||||
b6f633a93ae0ec4555ff4bf756f5e2150c9bdede jdk7-b85
|
||||
c94d9cc81f495d97817eba9d71b84fc45f7661a5 jdk7-b86
|
||||
b7456c473862048fa70ed8092313a4ef0a55d403 jdk7-b87
|
||||
7077b95d42f6b3942a8751bba033801ff50e5889 jdk7-b88
|
||||
44158f6d3b94c0fa020e33632532473d92d1ea96 jdk7-b89
|
||||
1d1927f9ec097b62c913921e2dfa5dbaf5dc325b jdk7-b90
|
||||
308ad8f68b8dd68e22d73dd490e110059b732422 jdk7-b91
|
||||
ff9031a745d9cc52318f2148e43ca3b07ee08098 jdk7-b92
|
||||
b5dab6a313fdff4c043250e4d9c8f66fd624d27e jdk7-b93
|
||||
8bb281f0f91582104d65d032be22522bfd2d8110 jdk7-b94
|
||||
654298d26561b76dfe3cfcffbbd7078080837300 jdk7-b95
|
||||
d260f892491e040ae385a8e6df59557a7d721abf jdk7-b96
|
||||
7e406ebed9a5968b584f3c3e6b60893b5d6d9741 jdk7-b97
|
||||
db6e660120446c407e2d908d52ec046592b21726 jdk7-b98
|
||||
c4c8a5bc54f66abc68cd185d9294042121922154 jdk7-b99
|
||||
2d6ba7a221915bdf0311acc5641c7f3875cb793e jdk7-b100
|
||||
2548ac036b8fca3326d058d758e6df8355a42469 jdk7-b101
|
||||
88db80c8e49cea352c2900f689600dc410761c1f jdk7-b102
|
||||
64770970865839b0443066370e7d476ef47e90cd jdk7-b103
|
||||
10bc903a228d3a8efdf46fb8c3fcf82a59b88bc5 jdk7-b104
|
||||
1ce7938efb03224ccc8b3cdd7803eb39e889539c jdk7-b105
|
||||
6bdae472f77205046703b685eff2ac4f7a0ecf4e jdk7-b106
|
||||
439de530aac531a360beedba6e2fe51e17292cc0 jdk7-b107
|
||||
044d31b99ef5609389fc771c422e722e5e224228 jdk7-b108
|
||||
e02b4d709e177d08d56130a4bc68061e4bbacc7d jdk7-b109
|
||||
a6442d6bc38a44152e0662688213ce4d2701f42a jdk7-b110
|
||||
69f3edf083477955b5bd2f754252c7504167d8e1 jdk7-b111
|
||||
f960f117f1623629f64203e2b09a92a8f6f14ff5 jdk7-b112
|
||||
1fee41c7ed2b3388970a756a85aa693c0de8407a jdk7-b113
|
||||
750c1ccb2f2d1ddfa95ab6c7f897fdab2f87f7e9 jdk7-b114
|
||||
9cb24917216bc68997154f6e9566c3de62acb2f4 jdk7-b115
|
||||
a4e6aa1f45ad23a6f083ed98d970b5006ea4d292 jdk7-b116
|
||||
228e73f288c543a8c34e2a54227103ae5649e6af jdk7-b117
|
||||
2e876e59938a853934aa738c811b26c452bd9fe8 jdk7-b118
|
||||
4951967a61b4dbbf514828879f57bd1a0d4b420b jdk7-b119
|
||||
8c840d3ab24f8d0f422b991638acb44b6ab1d98c jdk7-b120
|
||||
0ce0a2c3a6926677dc507839a820ab6625541e5a jdk7-b121
|
||||
6f09ea1c034f087916d2a8cf0d22be768400118f jdk7-b122
|
||||
142129d8599d1f56b29387e7f9a5fad53b6d61df jdk7-b123
|
||||
aa894c225b1a517b665ac2a58295217ea2245134 jdk7-b124
|
||||
f658ec2730fa29323c36d23c27e54c7219ef5e16 jdk7-b125
|
||||
f1df068076986679ea1105532a65529d63a89060 jdk7-b126
|
||||
f83cd8bd35c678f94e526990e03dc838d0ec2717 jdk7-b127
|
||||
7da3f5f30855dec6bf3a86529e87dee883b90c72 jdk7-b128
|
||||
6823ea7eb8eb6fab405d7edb7a5c2f690887a2fa jdk7-b129
|
||||
a36beda9b9de91231d92a2c529f21cc218fcf8d5 jdk7-b130
|
||||
d8af56da89bc0fc02a6b6ad78f51157a46d665ab jdk7-b131
|
||||
d61280d36755d1941fb487f554e8b7a6d0bca6a1 jdk7-b132
|
||||
fd444c61e7ed3d92b2a730da7c737b02191b682f jdk7-b133
|
||||
def8e16dd237a47fc067d66d4c616d7baaec6001 jdk7-b134
|
||||
f75a1efb141210901aabe00a834e0fc32bb8b337 jdk7-b135
|
||||
46acf76a533954cfd594bb88fdea79938abfbe20 jdk7-b136
|
||||
d1cf7d4ee16c341f5b8c7e7f1d68a8c412b6c693 jdk7-b137
|
||||
62b8e328f8c8c66c14b0713222116f2add473f3f jdk7-b138
|
||||
955488f34ca418f6cdab843d61c20d2c615637d9 jdk7-b139
|
||||
f4298bc3f4b6baa315643be06966f09684290068 jdk7-b140
|
||||
5d86d0c7692e8f4a58d430d68c03594e2d3403b3 jdk7-b141
|
||||
92bf0655022d4187e9b49c1400f98fb3392a4630 jdk7-b142
|
||||
4a05062d8c4dfa3edec3faf1052af28baba5adff jdk7-b143
|
||||
07a8728ad49ef6dfa469c3a8bf5ab1e9c80bed5c jdk7-b144
|
||||
8294c99e685a1f6d1d37c45cd97854cf74be771e jdk7-b145
|
||||
dca1e8a87e8f756f95b99bac8fe795750d42e1b0 jdk7-b146
|
||||
a2a589fc29543ed32919c78a1810ad93a6fcf5bc jdk7-b147
|
||||
de9223c94f9c710b3eebb599cd3586f36c8b94a9 jdk8-b01
|
||||
1b9d19620eb4606a25b1e28f86d66c8bfa867e06 jdk8-b02
|
||||
6815e85bf96d6d3875954f9777660372cd70d065 jdk8-b03
|
||||
31f5c34d78081572ad9a2401c0bb0c6b9711dd65 jdk8-b04
|
||||
c4f9ea1ecb55ff44e0dd21d2888ead308c86a3aa jdk8-b05
|
||||
429da7734bf491bccde2a752fae97e9f225896dc jdk8-b06
|
||||
bc5710332b294676661103bb20d47d2ea3ba8def jdk8-b07
|
||||
24ee504f80412770c6874836cd9e55b536427b1d jdk8-b08
|
||||
fbf3cabc9e3bb1fcf710941d777cb0400505fbe6 jdk8-b09
|
||||
f651ce87127980c58e3599daba964eba2f3b4026 jdk8-b10
|
||||
cc1f5ce8e504d350e0b0c28c5f84333f8d540132 jdk8-b11
|
||||
86db042b3385c338e17f7664447fdc7d406dd19e jdk8-b12
|
||||
4cc0ef72c812943743ef4765f1100e2fbe2b1a08 jdk8-b13
|
||||
9ffaa48dbfb0f5936c2b789867d0785faec7071d jdk8-b14
|
||||
b5060eae3b32fd9f884a09774338cd8186d7fafa jdk8-b15
|
||||
736a63b854f321c7824b7e47890135f80aee05e3 jdk8-b16
|
||||
f0eccb2946986fb9626efde7d8ed9c8192623f5c jdk8-b17
|
||||
885050364691ac1ac978305c63f3368a197fb04d jdk8-b18
|
||||
0ff7113a0882ec82d642cb9f0297b4e497807ced jdk8-b19
|
||||
6561530ea757c3f3a6fb171c9cc7b3885cdeca85 jdk8-b20
|
||||
b3a426170188f52981cf4573a2f14d487fddab0d jdk8-b21
|
||||
e8f03541af27e38aafb619b96863e17f65ffe53b jdk8-b22
|
||||
498124337041ad53cbaa7eb110f3d7acd6d4eac4 jdk8-b23
|
||||
7d3720d8c595d1519c31e9ff7366203fc2c61350 jdk8-b24
|
||||
0071a6d64113a35ba345bb1580c256de5ce17d3e jdk8-b25
|
||||
6c805d8ed4e5449ea5e4d158c7bdbd7b0b70efd1 jdk8-b26
|
||||
c51754cddc037b9609e202b9ed38363d8683e7a8 jdk8-b27
|
||||
16ba58282d117247f480aae7a79b88141ade52a3 jdk8-b28
|
||||
e070119aa56ee4dc5506c19d2c4d2eecab8ad429 jdk8-b29
|
||||
23da7804aca0c9c4e6e86532a1453125a76d95ee jdk8-b30
|
||||
bac81e9f7d57b75fba5ab31b571f3fe0dc08af69 jdk8-b31
|
||||
2c5208ccb863db936eab523f49450b3fcd230348 jdk8-b32
|
||||
a6e6d42203e6d35f9e8b31eac25b0021b4dd58ad jdk8-b33
|
||||
0ae89825c75c9492e44efb3aca3d9ee3d8a209df jdk8-b34
|
||||
f151d5833912a82cd4f203944da0305c3be83ecc jdk8-b35
|
||||
98ce9816ae089c959ba1e70fba98423a31c4e9fa jdk8-b36
|
||||
b3a91113026c99b0da010d41055719ab0d8938f0 jdk8-b37
|
||||
4cc5610a6dd6227da766ebf9742eb11ff5ded6c0 jdk8-b38
|
||||
35a5397278779a2f8f3013f81586dc8f30cb149d jdk8-b39
|
||||
6e4e654931b976304bf6e7b4d0d6db8f75bac5d9 jdk8-b40
|
||||
c029c972396cea042a0dc67c0f7ccf2fe68007d4 jdk8-b41
|
||||
5c5a64ec0839df5affe9394b99ff338c363acbca jdk8-b42
|
||||
69d8a827cdf9236be9694a46d75c710d71dac7d7 jdk8-b43
|
||||
7e981cb0ad6a194f1fa859f9ad47586db461f269 jdk8-b44
|
||||
9b19b2302c28f4da6d4078f66234abecfed5688a jdk8-b45
|
||||
600c9a1feb01633cbcf2341a43d1d21e6497ecd0 jdk8-b46
|
||||
b820143a6f1ce993c6e6f31db4d64de990f42654 jdk8-b47
|
||||
086271e35b0a419b38e8bda9bebd70693811df0a jdk8-b48
|
||||
cecd7026f30cbd83b0601925a7a5e059aec98138 jdk8-b49
|
||||
38fe5ab028908cf64dd73a43336ba3211577bfc3 jdk8-b50
|
||||
382651d28f2502d371eca751962232c0e535e57a jdk8-b51
|
||||
b67041a6cb508da18d2f5c7687e6a31e08bea4fc jdk8-b52
|
||||
c7aa5cca1c01689a7b1a92411daf83684af05a33 jdk8-b53
|
||||
7c6aa31ff1b2ae48c1c686ebe1aadf0c3da5be15 jdk8-b54
|
||||
319f583f66db47395fa86127dd3ddb729eb7c64f jdk8-b55
|
||||
ffe6bce5a521be40146af2ac03c509b7bac30595 jdk8-b56
|
||||
2c21c080b11b93efb3851e39e1363e45da805943 jdk8-b57
|
||||
479d3302a26d7607ba271d66973e59ebf58825b6 jdk8-b58
|
||||
3bd874584fc01aae92fbc8827e2bd04d8b6ace04 jdk8-b59
|
||||
5e3adc681779037a2d33b7be6f75680619085492 jdk8-b60
|
||||
cdaa6122185f9bf512dcd6600f56bfccc4824e8c jdk8-b61
|
||||
8d9d430b4244b95f5cf1ebe719f834a1ac5d6cd5 jdk8-b62
|
||||
21ee1dd7b809639284900a128b9b656a592ebc7a jdk8-b63
|
||||
70fa4b11f26522e69b51fd652215f60ce350bac3 jdk8-b64
|
||||
a2cf4d4a484378caea2e827ed604b2bbae58bdba jdk8-b65
|
||||
17820b958ae84f7c1cc6719319c8e2232f7a4f1d jdk8-b66
|
||||
76cc9bd3ece407d3a15d3bea537b57927973c5e7 jdk8-b67
|
||||
cb33628d4e8f11e879c371959e5948b66a53376f jdk8-b68
|
||||
adb5171c554e14cd86f618b5584f6e3d693d5889 jdk8-b69
|
||||
0d625373c69e2ad6f546fd88ab50c6c9aad01271 jdk8-b70
|
||||
a41ada2ed4ef735449531c6ebe6cec593d890a1c jdk8-b71
|
||||
6725b3961f987cf40f446d1c11cd324a3bec545f jdk8-b72
|
||||
fe94b40ffd9390f6cffcdf51c0389b0e6dde0c13 jdk8-b73
|
||||
f627eff819628822a0777af8062244352f2a29cf jdk8-b74
|
||||
f1478a6d25fddd311a84dcbfac50824cc1858bdd jdk8-b75
|
||||
f407160c280d1c5b00d314c535441ac26f195fee jdk8-b76
|
||||
d17eb2e13e362085e866d46235314c50cc4661cc jdk8-b77
|
||||
6d3dcd34b5b962ea1ef9eed0dafdee9e812401bc jdk8-b78
|
||||
a1313a8d90d17d363a3b2a645dc4030ec204b168 jdk8-b79
|
||||
3fa21fbf9be7e6b482af43aacb6a09acfa30bdb6 jdk8-b80
|
||||
e41d716405b209d3eddef8bd4240cec2bd34dcca jdk8-b81
|
||||
5e8c55025644730385a6f8fa029ecdb2d2c98a07 jdk8-b82
|
||||
bcebd3fdefc91abb9d7fa0c5af6211b3f8720da6 jdk8-b83
|
||||
d7ad0dfaa41151bd3a9ae46725b0aec3730a9cd0 jdk8-b84
|
||||
1872c12529090e1c1dbf567f02ad7ae6231b8f0c jdk8-b85
|
||||
da9a4c9312816451884aa6db6f18be51a07bff13 jdk8-b86
|
||||
5ebf6c63714de2c9dcf831074086d31daec819df jdk8-b87
|
||||
e517701a4d0e25ae9c7945bca6e1762a8c5d8aa6 jdk8-b88
|
||||
4dec41b3c5e3bb616f0c6f15830d940905aa5d16 jdk8-b89
|
||||
f09ab0c416185e3cba371e81bcb6a16060c90f44 jdk8-b90
|
||||
80b6c3172dc2cfceb022411292d290a967f9c728 jdk8-b91
|
||||
2fd6acba737b01e705e1f7c33588c922a3787f13 jdk8-b92
|
||||
b72ae39e1329fefae50d4690db4fde43f3841a95 jdk8-b93
|
||||
0d804e3b955dce406af6a79ac1cc35c696aff7fb jdk8-b94
|
||||
49fe9c8049132647ad38837a877dd473e6c9b0e5 jdk8-b95
|
||||
ea73f01b9053e7165e7ba80f242bafecbc6af712 jdk8-b96
|
||||
0a85476a0b9cb876d5666d45097dac68bef3fce1 jdk8-b97
|
||||
711eb4aa87de68de78250e0549980936bab53d54 jdk8-b98
|
||||
2d3875b0d18b3ad1c2bebf385a697e309e4005a4 jdk8-b99
|
||||
3d34036aae4ea90b2ca59712d5a69db3221f0875 jdk8-b100
|
||||
edb01c460d4cab21ff0ff13512df7b746efaa0e7 jdk8-b101
|
||||
bbe43d712fe08e650808d774861b256ccb34e500 jdk8-b102
|
||||
30a1d677a20c6a95f98043d8f20ce570304e3818 jdk8-b103
|
||||
b5ed503c26ad38869c247c5e32debec217fd056b jdk8-b104
|
||||
589f4fdc584e373a47cde0162e9eceec9165c381 jdk8-b105
|
||||
514b0b69fb9683ef52062fd962a3e0644431f64d jdk8-b106
|
||||
892889f445755790ae90e61775bfb59ddc6182b5 jdk8-b107
|
||||
74049f7a28b48c14910106a75d9f2504169c352e jdk8-b108
|
||||
af9a674e12a16da1a4bd53e4990ddb1121a21ef1 jdk8-b109
|
||||
b5d2bf482a3ea1cca08c994512804ffbc73de0a1 jdk8-b110
|
||||
b9a0f6c693f347a6f4b9bb994957f4eaa05bdedd jdk8-b111
|
||||
ad67c34f79c28a8e755f4a49f313868619d6702c jdk8-b112
|
||||
4a4dbcf7cb7d3e1a81beaa3b11cd909f69ebc79a jdk8-b113
|
||||
dfa34ab293faad9b543a24646dbb381bc3ab5586 jdk8-b114
|
||||
3dd9732b17034f45d111996d1d50287b05a3998c jdk8-b115
|
||||
aaf663f591aba43ec942263b15ba62759ce26a1e jdk8-b116
|
||||
31b0e03fcad73d7886b306b4c2e57ad270780d0d jdk8-b117
|
||||
f5b521ade7a35cea18df78ee86322207729f5611 jdk8-b118
|
||||
87b743b2263cc53955266411b7797b365a0fb050 jdk8-b119
|
||||
a1ee9743f4ee165eae59389a020f2552f895dac8 jdk8-b120
|
||||
13b877757b0b1c0d5813298df85364f41d7ba6fe jdk9-b00
|
||||
f130ca87de6637acae7d99fcd7a8573eea1cbaed jdk9-b01
|
||||
b32e2219736e42baaf45daf0ad67ed34f6033799 jdk9-b02
|
||||
7f655f31f9bcee618cf832f08176ad8c1ed3fdd3 jdk9-b03
|
||||
099891b1d86f3719e116ac717ffdafc90d037fb7 jdk9-b04
|
||||
dd311791ad6895a3989020dd6c6c46db87972ab8 jdk9-b05
|
||||
85dbdc227c5e11429b4fc4a8ba763f50107edd6e jdk9-b06
|
||||
c826d05f1fb0773f6a28caa763307dd30d90d36e jdk9-b07
|
||||
b47e021195757f8f45582124ea7cad48ccf5f872 jdk9-b08
|
||||
efe7dbc6088691757404e0c8745f894e3ca9c022 jdk9-b09
|
||||
8c0bdeecd7c0f9ce3f3762a51991f755cb3a972c jdk9-b10
|
||||
0809c9a4d36e6291f1c4384604c4bbf29e975722 jdk9-b11
|
||||
0d1f816217dce5e72187f167cc1816080cbeb453 jdk9-b12
|
||||
1a30593dcb9802faec3b6edb24d86ca088594e4e jdk9-b13
|
||||
97932f6ad950ae5a73a9da5c96e6e58503ff646b jdk9-b14
|
||||
74eb0778e4f2dbff6628e718378449fba27c4265 jdk9-b15
|
||||
4a09f5d30be844ac6f714bdb0f63d8c3c08b9a98 jdk9-b16
|
||||
410bccbded9e9cce80f1e13ad221e37ae97a3986 jdk9-b17
|
||||
c5495e25c7258ab5f96a1ae14610887d76d2be63 jdk9-b18
|
||||
2dcf544eb7ed5ac6a3f7813a32e33acea7442405 jdk9-b19
|
||||
89731ae72a761afdf4262e8b9513f302f6563f89 jdk9-b20
|
||||
28dd0c7beb3cad9cf95f17b4b5ad87eb447a4084 jdk9-b21
|
||||
9678e0db8ff6ed845d4c2ee4a3baf7f386a777e5 jdk9-b22
|
||||
39cfdc2dcaf3f195c55398e4e677ab053b07e3d2 jdk9-b23
|
||||
d9ce05f36ffec3e5e8af62a92455c1c66a63c320 jdk9-b24
|
||||
13a5c76976fe48e55c9727c25fae2d2ce7c05da0 jdk9-b25
|
||||
cd6f4557e7fea5799ff3762ed7a80a743e75d5fd jdk9-b26
|
||||
d06a6d3c66c08293b2a9650f3cc01fd55c620e65 jdk9-b27
|
||||
f4269e8f454eb77763ecee228a88ae102a9aef6e jdk9-b28
|
||||
c36c0092693707a8255561433647e8c3cd724ccd jdk9-b29
|
||||
b2287cac7813c70ed7f679d9a46fe774bd4005f8 jdk9-b30
|
||||
9d0e6639a4d71b63507dd94b1a028e963b27e798 jdk9-b31
|
||||
1b1ec4291abc0ba6da7bf79b754f08dd759a4a0c jdk9-b32
|
||||
f0c5e4b732da823bdaa4184133675f384e7cd68d jdk9-b33
|
||||
9618201c5df28a460631577fad1f61e96f775c34 jdk9-b34
|
||||
a137992d750c72f6f944f341aa19b0d0d96afe0c jdk9-b35
|
||||
41df50e7303daf73c0d661ef601c4fe250915de5 jdk9-b36
|
||||
b409bc51bc23cfd51f2bd04ea919ec83535af9d0 jdk9-b37
|
||||
948cceef81ba4cb34bc233e7cc5952951ff04e88 jdk9-b38
|
||||
4e7c4d692e934cb9023af8201e7c2b510e9c4ee1 jdk9-b39
|
||||
82f4cb44b2d7af2352f48568a64b7b6a5ae960cd jdk9-b40
|
||||
9fffb959eb4197ff806e4ac12244761815b4deee jdk9-b41
|
||||
3107be2ba9c6e208a0b86bc7100a141abbc5b5fb jdk9-b42
|
||||
6494b13f88a867026ee316b444d9a4fa589dd6bd jdk9-b43
|
||||
abbfccd659b91a7bb815d5e36fed635dcdd40f31 jdk9-b44
|
||||
bfc24ae2b900187585079bb11e66e459d1e525fe jdk9-b45
|
||||
722378bc599e38d9a1dd484de30f10dfd7b21438 jdk9-b46
|
||||
8327024a99559982b848e9c2191da9c0bf8838fd jdk9-b47
|
||||
b2f9702efbe95527ea3a991474fda23987ff1c5c jdk9-b48
|
||||
5b8db585a33c3cc48e70e688ceee57dd9271dc5d jdk9-b49
|
||||
1550b2f6b63d1411fa84dc7bbc6f04809aedb43f jdk9-b50
|
||||
6efe265424e3f1ea596408a1f71baf2de316c772 jdk9-b51
|
||||
d6224d6021459ac8b3832e822f5acc849fa944af jdk9-b52
|
||||
874d76e4699dfcd61ae1826c9fe0ddc1610ad598 jdk9-b53
|
||||
82cd31c5d6ca8d4c1653f4eb1c09eb2d9a3b2813 jdk9-b54
|
||||
c97e2d1bad9708d379793ba2a4c848eda14c741e jdk9-b55
|
||||
47544495db2d3d2edf0f85862d8715592fdb919f jdk9-b56
|
||||
ddb95d8f169b09544cc17e72a6baaff2400092f5 jdk9-b57
|
||||
f40752db7773ca0c737f2ad88371e35c57fdfed7 jdk9-b58
|
||||
da950f343762a856d69751570a4c07cfa68a415b jdk9-b59
|
||||
38f98cb6b33562a926ec3b79c7b34128be37647d jdk9-b60
|
||||
ac3f5a39d4ff14d70c365e12cf5ec8f2abd52a04 jdk9-b61
|
||||
e7dbbef69d12b6a74dfad331b7188e7f893e8d29 jdk9-b62
|
||||
989253a902c34dcb7564695161c9200a5fbb7412 jdk9-b63
|
||||
8ffdeabc7c2b9a8280bf46cae026ac46b4d31c26 jdk9-b64
|
||||
4915246064b2f89d5f00c96e758686b7fdad36a6 jdk9-b65
|
||||
ff3fc75f3214ad7e03595be1b0d0f38d887b6f0e jdk9-b66
|
||||
56166ce66037952fa21e9f680b31bf8eb47312c0 jdk9-b67
|
||||
5b500c93ce4822d47061cd518ff3f72d9d8cb5b5 jdk9-b68
|
||||
d69c968463f0ae5d0b45de3fc14fe65171b23948 jdk9-b69
|
||||
43d0179ee9de3bfffae3417f09e07eb6d8efc963 jdk9-b70
|
||||
f66c185284727f6e6ffd27e9c45ed2dd9da0a691 jdk9-b71
|
||||
61d2d0629b6dbf4c091dc86151ade1b3ef34fffe jdk9-b72
|
||||
9b3a9d72f07b40c648de79961679f42283af1bb5 jdk9-b73
|
||||
7c577fda1855d03c04546694d514678f596508c9 jdk9-b74
|
||||
f55df5cfe11c97e4b58998b76f5bd00a73cde12d jdk9-b75
|
||||
eeea9adfd1e3d075ef82148c00a4847a1aab4d26 jdk9-b76
|
||||
c25e882cee9622ec75c4e9d60633539a2f0a8809 jdk9-b77
|
||||
c8753d0be1778944dc512ec86a459941ea1ad2c3 jdk9-b78
|
||||
3966bd3b8167419aa05c6718a4af1cf54b1e3c58 jdk9-b79
|
||||
3c9f5bd909ae7187f24622ee4b69f8a5756a9271 jdk9-b80
|
||||
2050b3a0aadcb0e024bf798197421d58e54ec8bf jdk9-b81
|
||||
6521875cb63e1d0121b30af56ebbc36db078c4c6 jdk9-b82
|
||||
f61a63b7d1e52e307abc0bfc751203155d362ec4 jdk9-b83
|
||||
51b2db2fa04c16d767b66113dbf08c5349ce382a jdk9-b84
|
||||
8392405ab038b22e69a3728e17dbdd9e3d3a22ed jdk9-b85
|
||||
7db0663a5e968059fa7c772172187ebd60b6492d jdk9-b86
|
||||
1a52a30674cd28c24d4d388150336121f2e9ddf9 jdk9-b87
|
||||
16b4968f9bb8f34371b42c0ba483d76e91ba84d8 jdk9-b88
|
||||
4a0312f2894bcbe1fd20266c8fda8d983bd2fcf6 jdk9-b89
|
||||
d131f4b8433a79408f935eff9bf92a0664229b60 jdk9-b90
|
||||
8077fd2f055d31e50b46fcf62d9c035bc385a215 jdk9-b91
|
||||
f242d4332f563648426a1b0fa02d8741beba19ef jdk9-b92
|
||||
09206c6513b300e1ac8541f3be012e1a49312104 jdk9-b93
|
||||
25a2cab05cfbe6034b71d9e72d64c65b0572ce63 jdk9-b94
|
||||
5ac6287ec71aafe021cc839d8bc828108d23aaba jdk-9+95
|
||||
139f19d70350238e15e107945cea75082b6380b3 jdk-9+96
|
||||
4edcff1b9a8875eb6380a2165dfec599e8e3f7c0 jdk-9+97
|
||||
d00ad2d9049ac60815f70bff445e95df85648bd2 jdk-9+98
|
||||
f9bcdce2df26678c3fe468130b535c0342c69b89 jdk-9+99
|
||||
4379223f8806626852c46c52d4e7a27a584b406e jdk-9+100
|
||||
80f67512daa15cf37b4825c1c62a675d524d7c49 jdk-9+101
|
||||
2dc4c11fe48831854916d53c3913bdb7d49023ea jdk-9+102
|
||||
4a652e4ca9523422149958673033e0ac740d5e1e jdk-9+103
|
||||
086c682bd8c5f195c324f61e2c61fbcd0226d63b jdk-9+104
|
||||
db483b34fa7148d257a429acddbde9c13687dcae jdk-9+105
|
||||
6c644cca3f3fc2763e2ff7d669849a75d34543ba jdk-9+106
|
||||
1c076468bf7dad5b8f2ee5dcf66e2279caa3e208 jdk-9+107
|
||||
257b579d813201682931d6b42f0445ffe5b4210d jdk-9+108
|
||||
c870cb782aca71093d2584376f27f0cfbfec0e3a jdk-9+109
|
||||
4a95f4b1bd8bfce85dc02a593896749feab96c34 jdk-9+110
|
||||
a6614ff7bf09da74be1d0ef3d9755090d244697a jdk-9+111
|
||||
7359994942f8d8e723b584d66a3a92c2e9e95e5c jdk-9+112
|
||||
6072af7a98be3922f26bdce71b53bb3646cb2ac9 jdk-9+113
|
||||
c84d0cce090e161d736de69e941830adf8c2f87a jdk-9+114
|
||||
8d78fb40648dd221ce4ef19f9d5aa41ee1a3a884 jdk-9+115
|
||||
84aba7335005a3a47751dcf1f37935f97df9f99a jdk-9+116
|
||||
82b8d12a553f5617737c238cec060281d52e351c jdk-9+117
|
||||
7c04fcb12bd4a31570a238e663fa846dfa5ec3b8 jdk-9+118
|
||||
caf97b37ebec84288c112d21d3a60cb628cba1e8 jdk-9+119
|
||||
9330543436402b8f3bd070524846a464d8143557 jdk-9+120
|
||||
18e5cdecb37a2f03ba74f6c8f022858bcbaacf56 jdk-9+121
|
||||
7693aa00e131493ceb42b93305e2f014c9922a3b jdk-9+122
|
||||
d53037a90c441cb528dc41c30827985de0e67c62 jdk-9+123
|
||||
2a5697a98620c4f40e4a1a71478464399b8878de jdk-9+124
|
||||
3aa52182b3ad7c5b3a61cf05a59dd07e4c5884e5 jdk-9+125
|
||||
03e7b2c5ae345be3caf981d76ceb3efe5ff447f8 jdk-9+126
|
||||
8e45018bde9de4ad15b972ae62874bba52dba2d5 jdk-9+127
|
||||
5bf88dce615f6804f9e101a96ffa7c9dfb4fbbbe jdk-9+128
|
||||
e8373543a3f0f60589b7d72b1f9b172721124caf jdk-9+129
|
||||
e613affb88d178dc7c589f1679db113d589bddb4 jdk-9+130
|
||||
4d2a15091124488080d65848b704e25599b2aaeb jdk-9+131
|
||||
2e83d21d78cd9c1d52e6cd2599e9c8aa36ea1f52 jdk-9+132
|
||||
e17429a7e843c4a4ed3651458d0f950970edcbcc jdk-9+133
|
||||
a71210c0d9800eb6925b61ecd6198abd554f90ee jdk-9+134
|
||||
e384420383a5b79fa0012ebcb25d8f83cff7f777 jdk-9+135
|
||||
1b4b5d01aa11edf24b6fadbe3d2f3e411e3b02cd jdk-9+136
|
||||
9cb87c88ed851c0575b8ead753ea238ed5b544e9 jdk-9+137
|
||||
d273dfe9a126d3bffe92072547fef2cd1361b0eb jdk-9+138
|
||||
65477538bec32963dc41153d89c4417eb46c45fc jdk-9+139
|
||||
0875007901f7d364a08220b052f0c81003e9c8c5 jdk-9+140
|
||||
9aadd2163b568d76f8969ad2fb404a63733da359 jdk-9+141
|
||||
df0e03e3ca0ed1307793017dfc1a054c8726131c jdk-9+142
|
||||
d62173b931bf5b6bffc6e80a9060bb2e8b8efc75 jdk-9+143
|
||||
31f5023200d42185b70c4c00ba5672391e4642d0 jdk-9+144
|
||||
3ee4e7827413fa5c5c4fca58597b0ad89e921bfb jdk-9+145
|
||||
581331db696a62dd411926ba7fd437252252a71d jdk-9+146
|
||||
f4e854a77aa38749bd90f722b06974a56e7233d5 jdk-9+147
|
||||
5c71ea43933b6c7e8a85eb1a4eb2213011b95d82 jdk-9+148
|
||||
cf139f925da04c8bd7efd33270a0315d72b338d3 jdk-9+149
|
||||
17469f16fbb406ec9f0dd262ce776ab6efbc38f1 jdk-9+150
|
||||
37b95df0042ae0687324e1f7dc4a2519e230e704 jdk-9+151
|
||||
ab2c8b03c3284fcbdd157551a66f807e3a182d9b jdk-9+152
|
||||
d7034ff7f8e257e81c9f95c7785dd4eaaa3c2afc jdk-9+153
|
||||
8c70d170e62c0c58b5bc3ba666bd140399b98c9c jdk-10+0
|
||||
45b751afd11e6c05991cf4913c5a0ac3304fcc4e jdk-9+154
|
||||
f4aff695ffe05cfdb69d8af25a4ddc6a029754ea jdk-9+155
|
||||
06bce0388880b5ff8e040e4a9d72a3ea11dac321 jdk-9+156
|
||||
74116beae88a8f17a80301aa6c83865c82f10ece jdk-10+1
|
||||
4a79ad46e578112fce68f1af9dd931025cc235cb jdk-10+2
|
||||
d1cab6c7e608479be4ebfad48a25b0ed48600f62 jdk-10+3
|
||||
02253db2ace1422f576f58502fc7831ead77424b jdk-10+4
|
||||
f113ce12fe24fbd24acf02711372d9f1e1c12426 jdk-10+5
|
||||
1407b19a2ddf6baae162f5a1a5b96af473f4d7d1 jdk-10+6
|
||||
30e75693ae99fd8e47fd2f5116527aff1b59aff9 jdk-10+7
|
||||
c42dc7b58b4d4301ea676a76326fd9bbd403d595 jdk-10+8
|
||||
aa5b01f5e5620438fd39efdb2e2f6365a2c7d898 jdk-10+9
|
||||
b0f2b8ff25a2209b2c807785d75f20e5086bbfc2 jdk-10+10
|
||||
036dbf8b381798e5d31065109714d04d97bf98a4 jdk-10+11
|
||||
e6d70017f5b9adbb2ec82d826973d0251800a3c3 jdk-10+12
|
||||
9927a9f16738e240ab7014f0118f41e314ef8f99 jdk-10+13
|
||||
9ef5029b247b4d940080417a287440bbdbab995b jdk-10+14
|
||||
878e216039322cb3f0ecbd0944642a2b4e2593f3 jdk-10+15
|
||||
4bbea012e5676e8025ade2bcfab4d6581e6e9f4b jdk-10+16
|
||||
7db699468b4f84abbcc01647e5a964409737411a jdk-10+17
|
||||
3739654290616e533fc6f51bf9ad69ed47a6abba jdk-10+18
|
||||
14df107500cc3b8ab238c3e4ad2c74e12bfe6067 jdk-10+19
|
||||
4586bc5d28d13d3147b993e6237eaf29a7073bbb jdk-10+20
|
||||
a85884d55ce32799f5c7382b7ea4839052b362a2 jdk-10+21
|
||||
e5357aa85dadacc6562175ff74714fecfb4470cf jdk-10+22
|
||||
22850b3a55240253841b9a425ad60a7fcdb22d47 jdk-10+23
|
||||
3b201865d5c1f244f555cad58da599c9261286d8 jdk-10+24
|
||||
8eb5e3ccee560c28ac9b1df2670adac2b3d36fad jdk-10+25
|
||||
1129253d3bc728a2963ba411ab9dd1adf358fb6b jdk-10+26
|
||||
b87d7b5d5dedc1185e5929470f945b7378cdb3ad jdk-10+27
|
||||
92f08900cb3c0d694e5c529a676c1c9e5909193f jdk-10+28
|
||||
a6e591e12f122768f675428e1e5a838fd0e9c7ec jdk-10+29
|
||||
8fee80b92e65149f7414250fd5e34b6f35d417b4 jdk-10+30
|
||||
e6278add9ff28fab70fe1cc4c1d65f7363dc9445 jdk-10+31
|
||||
a2008587c13fa05fa2dbfcb09fe987576fbedfd1 jdk-10+32
|
||||
bbd692ad4fa300ecca7939ffbe3b1d5e52a28cc6 jdk-10+33
|
||||
89deac44e51517841491ba86ff44aa82a5ca96b3 jdk-10+34
|
||||
d8c634b016c628622c9abbdc6bf50509e5dedbec jdk-10+35
|
||||
0ee20aad71c4f33c426372b4c8bcc1235ce2ec08 jdk-11+0
|
||||
959f2f7cbaa6d2ee45d50029744efb219721576c jdk-10+36
|
||||
4f830b447edf04fb4a52151a5ad44d9bb60723cd jdk-10+37
|
||||
e569e83139fdfbecfeb3cd9014d560917787f158 jdk-10+38
|
||||
5b834ec962366e00d4445352a999a3ac14e26f64 jdk-10+39
|
||||
860326263d1f6a83996d7da0f4c66806ae4aa1eb jdk-10+40
|
||||
3eae36c6baa5f916a3024cf1513e22357e00185d jdk-10+41
|
||||
4b62b815b4f49970b91a952929cf50115c263cb3 jdk-10+42
|
||||
107413b070b92c88bde6230ceb4a19b579781068 jdk-10+43
|
||||
dfa46cfe56346884a61efdc30dc50f7505d66761 jdk-11+1
|
||||
03ae177c26b016353e5ea1cab6ffd051dfa086ca jdk-11+2
|
||||
663f20fc51091bd7f95d18448850ba091207b7bd jdk-10+44
|
||||
4f96cf952e71cb8a127334494faf28880c26181b jdk-10+45
|
||||
1fd4d6068f54561cfc67d54fc9ca84af7212c4f8 jdk-11+3
|
||||
e59941f7247d451fa7df9eaef3fce0f492f8420c jdk-11+4
|
||||
d5c43e9f08fb9a7c74aae0d48daf17f2ad2afaef jdk-11+5
|
||||
3acb379b86725c47e7f33358cb22efa8752ae532 jdk-11+6
|
||||
f7363de371c9a1f668bd0a01b7df3d1ddb9cc58b jdk-11+7
|
||||
755e1b55a4dff510f9639cdb5c5e82549a7e09b3 jdk-11+8
|
||||
0c3e252cea44f06aef570ef464950ab97c669970 jdk-11+9
|
||||
6fa770f9f8ab296e1ce255ec17ccf6d4e1051886 jdk-10+46
|
||||
69d7398038c54774d9395b6810e0cca335edc02c jdk-11+10
|
||||
e1e60f75cd39312a7f59d2a4f91d624e5aecc95e jdk-11+11
|
||||
3ab6ba9f94a9045a526d645af26c933235371d6f jdk-11+12
|
||||
758deedaae8406ae60147486107a54e9864aa7b0 jdk-11+13
|
||||
3595bd343b65f8c37818ebe6a4c343ddeb1a5f88 jdk-11+14
|
||||
a11c1cb542bbd1671d25b85efe7d09b983c48525 jdk-11+15
|
||||
02934b0d661b82b7fe1052a04998d2091352e08d jdk-11+16
|
||||
64e4b1686141e57a681936a8283983341484676e jdk-11+17
|
||||
e1b3def126240d5433902f3cb0e91a4c27f6db50 jdk-11+18
|
||||
fb8b3f4672774e15654958295558a1af1b576919 jdk-11+19
|
||||
fb8b3f4672774e15654958295558a1af1b576919 jdk-11+19
|
||||
36ca515343e00b021dcfc902e986d26ec994a2e5 jdk-11+19
|
||||
9816d7cc655e53ba081f938b656e31971b8f097a jdk-11+20
|
||||
14708e1acdc3974f4539027cbbcfa6d69f83cf51 jdk-11+21
|
||||
9937ef7499dcd7673714517fd5e450410c14ba4e jdk-11+22
|
||||
1edcf36fe15f79d6228d1a63eb680878e2386480 jdk-11+23
|
||||
ea900a7dc7d77dee30865c60eabd87fc24b1037c jdk-11+24
|
||||
331888ea4a788df801b1edf8836646cd25fc758b jdk-11+25
|
||||
945ba9278a272a5477ffb1b3ea1b04174fed8036 jdk-11+26
|
||||
9d7d74c6f2cbe522e39fa22dc557fdd3f79b32ad jdk-11+27
|
||||
76072a077ee1d815152d45d1692c4b36c53c5c49 jdk-11+28
|
||||
c01cc45790f871adec30acc90742b521d57a2fff jdk-11.0.1+0
|
||||
1353ec839c82de926bfacd2c7976b6b652d4afb0 jdk-11.0.1+1
|
||||
a285bd7cfedb40cb3086e61e17fc04c96b739d03 jdk-11.0.1+2
|
||||
a285bd7cfedb40cb3086e61e17fc04c96b739d03 jdk-11.0.1+2
|
||||
0000000000000000000000000000000000000000 jdk-11.0.1+2
|
||||
fc55f0667af5ea3b21e40a59e2a88b1b82e65e62 jdk-11.0.1+2
|
||||
781b5d8f2f75ae4dfdafc85630e5dbd31e324ed1 jdk-11.0.1+3
|
||||
b5b1dd7e6f9d86aedf7141e9279342fae257bd67 jdk-11.0.1+4
|
||||
d6efeebf554c918bfab50f89939eb11121e18432 jdk-11.0.1+5
|
||||
db768cfe2141b3eb9ef53d7104002a0532c8c977 jdk-11.0.1+6
|
||||
88a221c0bad0cee441767106776628550d660a82 jdk-11.0.1+7
|
||||
c2b23a17d3ff92235aed8e8d04642d7a6eaecf54 jdk-11.0.1+8
|
||||
adb9933aa8c68e6dec6b441133f3955fe7366206 jdk-11.0.1+9
|
||||
a86e14193fc8ea98835fd3e2f867447164c7af53 jdk-11.0.1+10
|
||||
0343f9aacae2d4a9e6df4e61087837166a6a477c jdk-11.0.1+11
|
||||
c0431cf9c38e5c56eedc680e007a94c4279a8f13 jdk-11.0.1+12
|
||||
8513ac27b65198d2e6562fb7da6e9c99b9fdcf51 jdk-11.0.1+13
|
||||
7da060835810b5fbd4a7493ea1c98e9a4338f30d jdk-11.0.2+0
|
||||
2be95a1bf50877cafba791c2f342953bd4a6412e jdk-11.0.2+1
|
||||
b4b16f510f48e2dd4bea007b60fddf69af0f6c10 jdk-11.0.2+2
|
||||
8a8606a3bdf2dbe0698bef375e6a4b47df0efb1a jdk-11.0.2+3
|
||||
0db90dec8c39bc38058afa11b7fda607ee259d01 jdk-11.0.2+4
|
||||
ff1f7723c4e88822fd60bcacd55824e1d3da6d36 jdk-11.0.2+5
|
||||
c6fd7ff3e96f3e6f4913d026a90c6c454a7a35c8 jdk-11.0.2+6
|
||||
a01e0cc0105972acc3b5e213dbe2b84acaee5be3 jdk-11.0.2+7
|
||||
a01e0cc0105972acc3b5e213dbe2b84acaee5be3 jdk-11.0.2-ga
|
||||
fe85e2f43a1c893cb410308106b0f31b814aebb8 jdk-11.0.2+8
|
||||
144d476b6efe527c5e9ebf19af93398913c5450f jdk-11.0.2+9
|
||||
a01e0cc0105972acc3b5e213dbe2b84acaee5be3 jdk-11.0.2-ga
|
||||
0000000000000000000000000000000000000000 jdk-11.0.2-ga
|
||||
144d476b6efe527c5e9ebf19af93398913c5450f jdk-11.0.2-ga
|
||||
cd1c042181e934a1a91f9ee59a0066f64c8bad7a jdk-11.0.4+0
|
||||
98e7354165d3a2443a8b845a5a526cc55d1b0dd7 jdk-11.0.3+0
|
||||
cd1c042181e934a1a91f9ee59a0066f64c8bad7a jdk-11.0.3+1
|
||||
9de3f198995c6c384fd6431c97089c311ec6a7ff jdk-11.0.3+2
|
||||
d17a1764a0f318ab72beadb589c998d40951493a jdk-11.0.3+3
|
||||
43d6759c3b2e36c1118e9753a080372294e1f17a jdk-11.0.3+4
|
||||
c9865fee1a6d39a7bd2a5313f54c812d9a0852f5 jdk-11.0.3+5
|
||||
8e139b8b4f62c0a1c4b13fa216f6fd975df81c1c jdk-11.0.3+6
|
||||
175eb80c253addb5b49a91c53daa7e204f124581 jdk-11.0.3+7
|
||||
175eb80c253addb5b49a91c53daa7e204f124581 jdk-11.0.3-ga
|
||||
b3f7a4c524f2e37a8068ca797859df86d9865aad jdk-11.0.4+1
|
||||
3b9194001c2eebea3109777c2b308cd784a5dcc7 jdk-11.0.4+2
|
||||
3b6fc7cd594608b7125eb0b75bdc05132e7b5f39 jdk-11.0.4+3
|
||||
e442b78d7687744475676724bd27b1d52f096d38 jdk-11.0.4+4
|
||||
371ce104ac19a12012dfe3749240b0309bfc86ee jdk-11.0.4+5
|
||||
3594cd8691f224cc7f8909c2fb14eaea0e190097 jdk-11.0.5+0
|
||||
9ab8738bf30663e01924f40e04d6d04751271b77 jdk-11.0.4+6
|
||||
640251cdca0577fd8aa4a51ddb7c71c3b874033c jdk-11.0.4+7
|
||||
ce601e800f56af59edfda40e19a92a8d3121a1cd jdk-11.0.4+8
|
||||
26958299a5f8012736b99782c835ec685e18dd43 jdk-11.0.4+9
|
||||
3f5829d9d7629ba3893456e20731949a570cc277 jdk-11.0.4+10
|
||||
6a4d57474e1c971cccf4165b3d9d023928510010 jdk-11.0.4+11
|
||||
6a4d57474e1c971cccf4165b3d9d023928510010 jdk-11.0.4-ga
|
||||
3ba9c532128b1feccf59ab8ce812b1fce2b6f681 jdk-11.0.5+1
|
||||
b249a2a2034e3392c647c61d401a41ac7237d635 jdk-11.0.5+2
|
||||
d84dae4fba034adc749e3f28fc444b3d95b8f670 jdk-11.0.5+3
|
||||
315e873712092d48fbfa23885bdf2c6fd654c1ab jdk-11.0.5+4
|
||||
d43c5ab1a337b94fffee1cab871543da06f8113c jdk-11.0.5+5
|
||||
7431ec494a2988fa69742812168c3119805a7855 jdk-11.0.6+0
|
||||
deaef57bf366fdab908b97a9760d0fa6e273abcd jdk-11.0.5+6
|
||||
046604d257d7bc698ee213d70af09793f5008ff1 jdk-11.0.5+7
|
||||
2c29e9b3a2856350d55a188635c36c5b23c1c9e3 jdk-11.0.5+8
|
||||
ee7128cf507a670ae84841b202a7a06711608359 jdk-11.0.5+9
|
||||
6385eb06af947d8ec5fd51a4733bc8187efb88b5 jdk-11.0.5+10
|
||||
6385eb06af947d8ec5fd51a4733bc8187efb88b5 jdk-11.0.5-ga
|
||||
6eb89e59a06a2f83f7fe0399da4bf4ca638d46f3 jdk-11.0.6+1
|
||||
8d3e0c2c009815cae59ad3c9bf9e4b1f090efc8b jdk-11.0.6+2
|
||||
f8b2e95a1d41585a757729ed28ce35d43aba1b3f jdk-11.0.6+3
|
||||
577a1fc440666e3c0724e07f6a8d736b2c7905cf jdk-11.0.6+4
|
||||
bfce7426e091127450a70b7d07941c0f9e02d347 jdk-11.0.6+5
|
||||
b7446ddfa2aae29a7132a576c88fab0c5609c8f2 jdk-11.0.7+0
|
||||
aa260c24480a2bd7d21ad1c863e6fe9a3973011e jdk-11.0.6+6
|
||||
42500af9232ed5b2990ff618a1e92ef6ccc0b9af jdk-11.0.6+7
|
||||
0c54fb645a7388cb7e3d587b4df75a2edd7826e2 jdk-11.0.6+8
|
||||
1859de77ee6cd7e10ac0b9e71027d9f974a6e481 jdk-11.0.6+9
|
||||
837b7afec083aaddeef0a6c3e6501b2200eaf1d4 jdk-11.0.6+10
|
||||
837b7afec083aaddeef0a6c3e6501b2200eaf1d4 jdk-11.0.6-ga
|
||||
8cdfd6139b1efc9064b10f24a82848b1bb4a0550 jdk-11.0.7+1
|
||||
15cc1c8a63718c394e9cd1f35d735bb74a850084 jdk-11.0.7+2
|
||||
f2d8162261ae3c1e50eb0667b3c9669caa67c652 jdk-11.0.7+3
|
||||
d3d1f7f67de13fd5c227424b9ddc514c0ca32aff jdk-11.0.7+4
|
||||
f03574cfc0d728ca7b5146ca22c707717f9f899f jdk-11.0.7+5
|
||||
571c180c510648853799883c554f77411129287d jdk-11.0.8+0
|
||||
17d2e0c27889a00a3df7de9bcea0e8caf0d1771a jdk-11.0.7+6
|
||||
f56b853d452bd339e3f4360cf4be42cc90f9284c jdk-11.0.7+7
|
||||
3c570d183ab2afc0b204a8e980be69e7fbe761ef jdk-11.0.7+8
|
||||
7201cd0c64776aa574d252b03a4c92b25d0a7d7f jdk-11.0.7+9
|
||||
44ce940b344b9f240be4807f5b8f06e178e3aecd jdk-11.0.7+10
|
||||
44ce940b344b9f240be4807f5b8f06e178e3aecd jdk-11.0.7-ga
|
||||
2eb415c82056bdc308d23ee6761f422de46dc5e5 jdk-11.0.8+1
|
||||
88eaa453331e9aeca979d58509538ebb74831ce4 jdk-11.0.8+2
|
||||
2c0c9cfe2a4e1340f7db106e2220dbd0d5b86092 jdk-11.0.8+3
|
||||
aa6c93b4f1acf4166d74d0252b35c53ad71d8540 jdk-11.0.8+4
|
||||
8df1a601187c0b4cb9e525075bd7b85ee3d72595 jdk-11.0.8+5
|
||||
90ce1674f8384b0747e5269047a2359cdd9b6bdd jdk-11.0.9+0
|
||||
e42c6d1a1993c720a4643140190bb1ba6f1bbf9f jdk-11.0.8+6
|
||||
46d4984bb3c6dd1b0f5135505b77921d23c69841 jdk-11.0.8+7
|
||||
40b646e9d8fbb2d70992b61e4f4b08ca5652c907 jdk-11.0.8+8
|
||||
59f8565ee5e224697a9e09ee2c557836733bc579 jdk-11.0.8+9
|
||||
0b0d55cb09b29360ab254edeef32a3b386e9713e jdk-11.0.8+10
|
||||
0b0d55cb09b29360ab254edeef32a3b386e9713e jdk-11.0.8-ga
|
||||
5cc275af8419178813299cc0ed81a2a85dadfdcd jdk-11.0.9+1
|
||||
3112657edde9491fb83f098f1a8b7e9275bcb2f7 jdk-11.0.9+2
|
||||
d8a0513b92ee262d4e64c1e13d43e1b3f3e5c5d5 jdk-11.0.9+3
|
||||
cb299db4a5698b814f6b3ba1f3d73d01f6a0e1f6 jdk-11.0.9+4
|
||||
55237fa85afb404bc0dc0f4948a6459d8d3e5dac jdk-11.0.9+5
|
||||
c07e785e36f587b95e151de382844cea3d1a5868 jdk-11.0.9+6
|
||||
d484fdfcc7d5c21812de8a0712236d077b0f2dde jdk-11.0.10+0
|
||||
1ba4c16a8afa3f5aaa7830fc1f14a0137cc2553b jdk-11.0.9+7
|
||||
8711e8554e15ae2fa38718d5c7dc858da10e8a4a jdk-11.0.9+8
|
||||
e872676174c7f171a9864becba83cb783cfec9d0 jdk-11.0.9+9
|
||||
6ac1b68e7c0034e08a96d7d37e93e5075a6e8d61 jdk-11.0.9+10
|
||||
4397fa4529b2794ddcdf3445c0611fe383243fb4 jdk-11.0.9+11
|
||||
4397fa4529b2794ddcdf3445c0611fe383243fb4 jdk-11.0.9-ga
|
||||
4fd46d208f0a4b55924af8e0c2fb6bcf46e18ec6 jdk-11.0.9.1+0
|
||||
27723943c0dd65a191cbefe031cec001521e4b13 jdk-11.0.9.1+1
|
||||
31affc22b3b5f5d43783ffadf57f22848bad9db8 jdk-11.0.9.1-ga
|
||||
f3168de4eb0dd74bf8e81537f62742bde5e412c3 jdk-11.0.10+1
|
||||
a35aa07b57bab3690224e3af939ee085d50eb476 jdk-11.0.10+2
|
||||
bca12c00a776f8cee7a0eeaf788499b9eab9cf9d jdk-11.0.10+3
|
||||
9504fa6f98f5aad0aa1ac36d5bff3260a32020c8 jdk-11.0.10+4
|
||||
5f5c3544ccb4d0bbc638e665524b292860dd9515 jdk-11.0.10+5
|
||||
cbd009b79ac52cca36b5bda2cf1ef033a1288a3e jdk-11.0.11+0
|
||||
4b9bc2a1dde0631958393125997855382325964d jdk-11.0.10+6
|
||||
c45f74d45787a857d35b5a66c9b0304c91a9c5d0 jdk-11.0.10+7
|
||||
43428f69099f6f87f6e1922deacbf13e1adb751f jdk-11.0.10+8
|
||||
8b3498547395ee80a6e731078056b2aeb3e3c5e8 jdk-11.0.10+9
|
||||
8b3498547395ee80a6e731078056b2aeb3e3c5e8 jdk-11.0.10-ga
|
||||
4ed322bf6b0098353ceaecf35662fadf457cd81d jdk-11.0.11+1
|
||||
b68647c6ecc1e73111d8047448d75966f255460f jdk-11.0.11+2
|
||||
14cc036b17a5f4be5b0643e6b24ed32563684ab9 jdk-11.0.11+3
|
||||
c4405735470a92e2c45490b89a8099252f3481d2 jdk-11.0.11+4
|
||||
38430a8a4488582612c6a87ab58d109cc5217e8b jdk-11.0.11+5
|
||||
595a965d85afdd01c30dbc7b2efd75f4cb202816 jdk-11.0.12+0
|
||||
e41ae00add1d76a8f25adb558933382947ea840d jdk-11.0.11+6
|
||||
14f9928caac31368d27f13e4e21ca25c1e0be950 jdk-11.0.11+7
|
||||
9f0347b029d3a0349f23befcfb68ee02d85d9034 jdk-11.0.11+8
|
||||
15862747ee15445292b4b9949b4f0f4badba4812 jdk-11.0.11+9
|
||||
15862747ee15445292b4b9949b4f0f4badba4812 jdk-11.0.11-ga
|
||||
5720ffa08f8514b9f0ea8b3a49e05a872c9c0efe jdk-11.0.12+1
|
||||
70a4031a8bef3e693f34864fdd482429c73dc76a jdk-11.0.12+2
|
||||
873a691b1ae4fa8b55ca5d08fa21aca3a4904fb8 jdk-11.0.12+3
|
||||
40d1e784e1937aaea696a9654cc2d944d3d78996 jdk-11.0.12+4
|
||||
6aa6f6860508fca3a97aea1de7a36574498d22bf jdk-11.0.12+5
|
||||
91e81ac088545abdc3eaaa707853d31a6cf99af3 jdk-11.0.12+6
|
||||
f412f2537f1502a9697a9684c77bea8d848db1ab jdk-11.0.12+7
|
||||
f412f2537f1502a9697a9684c77bea8d848db1ab jdk-11.0.12-ga
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
[general]
|
||||
project=jdk-updates
|
||||
jbs=JDK
|
||||
version=11.0.16
|
||||
version=11.0.17
|
||||
|
||||
[checks]
|
||||
error=author,committer,reviewers,merge,issues,executable,symlink,message,hg-tag,whitespace
|
||||
|
|
|
|||
12
README
12
README
|
|
@ -1,12 +0,0 @@
|
|||
|
||||
Welcome to the JDK!
|
||||
===================
|
||||
|
||||
For information about building the JDK, including how to retrieve all
|
||||
of the source code, please see either of these files:
|
||||
|
||||
* doc/building.html (html version)
|
||||
* doc/building.md (markdown version)
|
||||
|
||||
See http://openjdk.java.net/ for more information about the OpenJDK
|
||||
Community and the JDK.
|
||||
|
|
@ -58,3 +58,4 @@ Technologies included in Alibaba Dragonwell have been published in following pap
|
|||
|
||||
- Fangxi Yin, Denghui Dong, Sanhong Li, Jianmei Guo, Kingsum Chow [**Java Performance Troubleshooting and Optimization at Alibaba**](https://www.icse2018.org/details/icse-2018-Software-Engineering-in-Practice/4/Java-Performance-Troubleshooting-and-Optimization-at-Alibaba) In _ICSE-SEIP 2018_, pp. 11–12
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
# Welcome to the JDK!
|
||||
|
||||
For build instructions please see the
|
||||
[online documentation](https://openjdk.java.net/groups/build/doc/building.html),
|
||||
or either of these files:
|
||||
|
||||
- [doc/building.html](doc/building.html) (html version)
|
||||
- [doc/building.md](doc/building.md) (markdown version)
|
||||
|
||||
See <https://openjdk.java.net/> for more information about
|
||||
the OpenJDK Community and the JDK.
|
||||
|
|
@ -384,6 +384,7 @@ CC: Sun C++ 5.13 SunOS_i386 151846-10 2015/10/30</code></pre>
|
|||
<li>To install on an apt-based Linux, try running <code>sudo apt-get install libfreetype6-dev</code>.</li>
|
||||
<li>To install on an rpm-based Linux, try running <code>sudo yum install freetype-devel</code>.</li>
|
||||
<li>To install on Alpine Linux, try running <code>sudo apk add freetype-dev</code>.</li>
|
||||
<li>To install on macOS, try running <code>brew install freetype</code>.</li>
|
||||
<li>To install on Solaris, try running <code>pkg install system/library/freetype-2</code>.</li>
|
||||
</ul>
|
||||
<p>Use <code>--with-freetype-include=<path></code> and <code>--with-freetype-lib=<path></code> if <code>configure</code> does not automatically locate the platform FreeType files.</p>
|
||||
|
|
|
|||
|
|
@ -473,6 +473,7 @@ rather than bundling the JDK's own copy.
|
|||
* To install on an rpm-based Linux, try running `sudo yum install
|
||||
freetype-devel`.
|
||||
* To install on Alpine Linux, try running `sudo apk add freetype-dev`.
|
||||
* To install on macOS, try running `brew install freetype`.
|
||||
* To install on Solaris, try running `pkg install system/library/freetype-2`.
|
||||
|
||||
Use `--with-freetype-include=<path>` and `--with-freetype-lib=<path>`
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -272,7 +272,7 @@ else # HAS_SPEC=true
|
|||
else
|
||||
$(ECHO) "Re-running configure using default settings"
|
||||
endif
|
||||
( cd $(OUTPUTDIR) && PATH="$(ORIGINAL_PATH)" \
|
||||
( cd $(CONFIGURE_START_DIR) && PATH="$(ORIGINAL_PATH)" AUTOCONF="$(AUTOCONF)" \
|
||||
CUSTOM_ROOT="$(CUSTOM_ROOT)" \
|
||||
CUSTOM_CONFIG_DIR="$(CUSTOM_CONFIG_DIR)" \
|
||||
$(BASH) $(TOPDIR)/configure $(CONFIGURE_COMMAND_LINE) )
|
||||
|
|
|
|||
|
|
@ -38,11 +38,8 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
|
|||
|
||||
MACOSX_PLIST_SRC := $(TOPDIR)/make/data/bundle
|
||||
|
||||
BUNDLE_ID := $(MACOSX_BUNDLE_ID_BASE).$(VERSION_SHORT)
|
||||
BUNDLE_NAME := $(MACOSX_BUNDLE_NAME_BASE) $(VERSION_SHORT)
|
||||
BUNDLE_INFO := $(MACOSX_BUNDLE_NAME_BASE) $(VERSION_STRING)
|
||||
BUNDLE_PLATFORM_VERSION := $(VERSION_FEATURE).$(VERSION_INTERIM)
|
||||
BUNDLE_VERSION := $(VERSION_NUMBER)
|
||||
ifeq ($(COMPANY_NAME), N/A)
|
||||
BUNDLE_VENDOR := UNDEFINED
|
||||
else
|
||||
|
|
@ -75,24 +72,26 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
|
|||
SOURCE_FILES := $(MACOSX_PLIST_SRC)/JDK-Info.plist, \
|
||||
OUTPUT_FILE := $(JDK_MACOSX_CONTENTS_DIR)/Info.plist, \
|
||||
REPLACEMENTS := \
|
||||
@@ID@@ => $(BUNDLE_ID).jdk ; \
|
||||
@@ID@@ => $(MACOSX_BUNDLE_ID_BASE).jdk ; \
|
||||
@@NAME@@ => $(BUNDLE_NAME) ; \
|
||||
@@INFO@@ => $(BUNDLE_INFO) ; \
|
||||
@@PLATFORM_VERSION@@ => $(BUNDLE_PLATFORM_VERSION) ; \
|
||||
@@VERSION@@ => $(BUNDLE_VERSION) ; \
|
||||
@@VENDOR@@ => $(BUNDLE_VENDOR) , \
|
||||
@@VERSION@@ => $(VERSION_NUMBER) ; \
|
||||
@@BUILD_VERSION@@ => $(MACOSX_BUNDLE_BUILD_VERSION) ; \
|
||||
@@VENDOR@@ => $(BUNDLE_VENDOR) ; \
|
||||
@@MACOSX_VERSION_MIN@@ => $(MACOSX_VERSION_MIN) , \
|
||||
))
|
||||
|
||||
$(eval $(call SetupTextFileProcessing, BUILD_JRE_PLIST, \
|
||||
SOURCE_FILES := $(MACOSX_PLIST_SRC)/JRE-Info.plist, \
|
||||
OUTPUT_FILE := $(JRE_MACOSX_CONTENTS_DIR)/Info.plist, \
|
||||
REPLACEMENTS := \
|
||||
@@ID@@ => $(BUNDLE_ID).jre ; \
|
||||
@@ID@@ => $(MACOSX_BUNDLE_ID_BASE).jre ; \
|
||||
@@NAME@@ => $(BUNDLE_NAME) ; \
|
||||
@@INFO@@ => $(BUNDLE_INFO) ; \
|
||||
@@PLATFORM_VERSION@@ => $(BUNDLE_PLATFORM_VERSION) ; \
|
||||
@@VERSION@@ => $(BUNDLE_VERSION) ; \
|
||||
@@VENDOR@@ => $(BUNDLE_VENDOR) , \
|
||||
@@VERSION@@ => $(VERSION_NUMBER) ; \
|
||||
@@BUILD_VERSION@@ => $(BUNDLE_BUILD_VERSION) ; \
|
||||
@@VENDOR@@ => $(BUNDLE_VENDOR) ; \
|
||||
@@MACOSX_VERSION_MIN@@ => $(MACOSX_VERSION_MIN) , \
|
||||
))
|
||||
|
||||
$(SUPPORT_OUTPUTDIR)/images/_jdk_bundle_attribute_set: $(COPY_JDK_IMAGE)
|
||||
|
|
|
|||
|
|
@ -32,43 +32,6 @@ include FindTests.gmk
|
|||
# We will always run multiple tests serially
|
||||
.NOTPARALLEL:
|
||||
|
||||
################################################################################
|
||||
# Setup global test running parameters
|
||||
################################################################################
|
||||
|
||||
# Each factor variable comes in 3 variants. The first one is reserved for users
|
||||
# to use on command line. The other two are for predifined configurations in JDL
|
||||
# and for machine specific configurations respectively.
|
||||
TEST_JOBS_FACTOR ?= 1
|
||||
TEST_JOBS_FACTOR_JDL ?= 1
|
||||
TEST_JOBS_FACTOR_MACHINE ?= 1
|
||||
|
||||
ifeq ($(TEST_JOBS), 0)
|
||||
CORES_DIVIDER := 2
|
||||
ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
|
||||
# For smaller SPARC machines we see reasonable scaling of throughput up to
|
||||
# cpus/4 without affecting test reliability. On the bigger machines, cpus/4
|
||||
# causes intermittent timeouts.
|
||||
ifeq ($(shell $(EXPR) $(NUM_CORES) \> 16), 1)
|
||||
CORES_DIVIDER := 5
|
||||
else
|
||||
CORES_DIVIDER := 4
|
||||
endif
|
||||
endif
|
||||
MEMORY_DIVIDER := 2048
|
||||
TEST_JOBS := $(shell $(AWK) \
|
||||
'BEGIN { \
|
||||
c = $(NUM_CORES) / $(CORES_DIVIDER); \
|
||||
m = $(MEMORY_SIZE) / $(MEMORY_DIVIDER); \
|
||||
if (c > m) c = m; \
|
||||
c = c * $(TEST_JOBS_FACTOR); \
|
||||
c = c * $(TEST_JOBS_FACTOR_JDL); \
|
||||
c = c * $(TEST_JOBS_FACTOR_MACHINE); \
|
||||
if (c < 1) c = 1; \
|
||||
printf "%.0f", c; \
|
||||
}')
|
||||
endif
|
||||
|
||||
################################################################################
|
||||
# Parse global control variables
|
||||
################################################################################
|
||||
|
|
@ -241,11 +204,41 @@ TEST_JOBS_FACTOR_JDL ?= 1
|
|||
TEST_JOBS_FACTOR_MACHINE ?= 1
|
||||
|
||||
ifeq ($(TEST_JOBS), 0)
|
||||
# Concurrency based on min(cores / 2, 12) * TEST_JOBS_FACTOR
|
||||
CORES_DIVIDER := 2
|
||||
ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
|
||||
# For smaller SPARC machines we see reasonable scaling of throughput up to
|
||||
# cpus/4 without affecting test reliability. On the bigger machines, cpus/4
|
||||
# causes intermittent timeouts.
|
||||
ifeq ($(shell $(EXPR) $(NUM_CORES) \> 16), 1)
|
||||
CORES_DIVIDER := 5
|
||||
else
|
||||
CORES_DIVIDER := 4
|
||||
endif
|
||||
endif
|
||||
# For some big multi-core machines with low ulimit -u setting we hit the max
|
||||
# threads/process limit. In such a setup the memory/cores-only-guided
|
||||
# TEST_JOBS config is insufficient. From experience a concurrency setting of
|
||||
# 14 works reasonably well for low ulimit values (<= 4096). Thus, use
|
||||
# divider 4096/14. For high ulimit -u values this shouldn't make a difference.
|
||||
ULIMIT_DIVIDER := (4096/14)
|
||||
PROC_ULIMIT := -1
|
||||
ifneq ($(OPENJDK_TARGET_OS), windows)
|
||||
PROC_ULIMIT := $(shell $(ULIMIT) -u)
|
||||
ifeq ($(PROC_ULIMIT), unlimited)
|
||||
PROC_ULIMIT := -1
|
||||
endif
|
||||
endif
|
||||
MEMORY_DIVIDER := 2048
|
||||
TEST_JOBS := $(shell $(AWK) \
|
||||
'BEGIN { \
|
||||
c = $(NUM_CORES) / 2; \
|
||||
if (c > 12) c = 12; \
|
||||
c = $(NUM_CORES) / $(CORES_DIVIDER); \
|
||||
m = $(MEMORY_SIZE) / $(MEMORY_DIVIDER); \
|
||||
u = $(PROC_ULIMIT); \
|
||||
if (u > -1) { \
|
||||
u = u / $(ULIMIT_DIVIDER); \
|
||||
if (u < c) c = u; \
|
||||
} \
|
||||
if (c > m) c = m; \
|
||||
c = c * $(TEST_JOBS_FACTOR); \
|
||||
c = c * $(TEST_JOBS_FACTOR_JDL); \
|
||||
c = c * $(TEST_JOBS_FACTOR_MACHINE); \
|
||||
|
|
|
|||
|
|
@ -175,6 +175,7 @@ UNZIP := unzip
|
|||
EXPR := expr
|
||||
FILE := file
|
||||
HG := hg
|
||||
ULIMIT := ulimit
|
||||
|
||||
# On Solaris gnu versions of some tools are required.
|
||||
ifeq ($(OPENJDK_BUILD_OS), solaris)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -168,7 +168,7 @@ AC_DEFUN([ADD_JVM_ARG_IF_OK],
|
|||
[
|
||||
$ECHO "Check if jvm arg is ok: $1" >&AS_MESSAGE_LOG_FD
|
||||
$ECHO "Command: $3 $1 -version" >&AS_MESSAGE_LOG_FD
|
||||
OUTPUT=`$3 $1 -version 2>&1`
|
||||
OUTPUT=`$3 $1 $USER_BOOT_JDK_OPTIONS -version 2>&1`
|
||||
FOUND_WARN=`$ECHO "$OUTPUT" | $GREP -i warn`
|
||||
FOUND_VERSION=`$ECHO $OUTPUT | $GREP " version \""`
|
||||
if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
|
||||
|
|
@ -402,6 +402,8 @@ AC_DEFUN_ONCE([BASIC_INIT],
|
|||
[
|
||||
# Save the original command line. This is passed to us by the wrapper configure script.
|
||||
AC_SUBST(CONFIGURE_COMMAND_LINE)
|
||||
# AUTOCONF might be set in the environment by the user. Preserve for "make reconfigure".
|
||||
AC_SUBST(AUTOCONF)
|
||||
# Save the path variable before it gets changed
|
||||
ORIGINAL_PATH="$PATH"
|
||||
AC_SUBST(ORIGINAL_PATH)
|
||||
|
|
@ -539,6 +541,26 @@ AC_DEFUN([BASIC_REQUIRE_SPECIAL],
|
|||
BASIC_CHECK_NONEMPTY($1)
|
||||
])
|
||||
|
||||
###############################################################################
|
||||
# Like BASIC_REQUIRE_PROGS but also allows for bash built-ins
|
||||
# $1: variable to set
|
||||
# $2: executable name (or list of names) to look for
|
||||
# $3: [path]
|
||||
AC_DEFUN([BASIC_REQUIRE_BUILTIN_PROGS],
|
||||
[
|
||||
BASIC_SETUP_TOOL($1, [AC_PATH_PROGS($1, $2, , $3)])
|
||||
if test "x[$]$1" = x; then
|
||||
AC_MSG_NOTICE([Required tool $2 not found in PATH, checking built-in])
|
||||
if help $2 > /dev/null 2>&1; then
|
||||
AC_MSG_NOTICE([Found $2 as shell built-in. Using it])
|
||||
$1="$2"
|
||||
else
|
||||
AC_MSG_ERROR([Required tool $2 also not found as built-in.])
|
||||
fi
|
||||
fi
|
||||
BASIC_CHECK_NONEMPTY($1)
|
||||
])
|
||||
|
||||
###############################################################################
|
||||
# Setup the most fundamental tools that relies on not much else to set up,
|
||||
# but is used by much of the early bootstrap code.
|
||||
|
|
@ -617,7 +639,7 @@ AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS],
|
|||
AC_DEFUN_ONCE([BASIC_SETUP_PATHS],
|
||||
[
|
||||
# Save the current directory this script was started from
|
||||
CURDIR="$PWD"
|
||||
CONFIGURE_START_DIR="$PWD"
|
||||
|
||||
# We might need to rewrite ORIGINAL_PATH, if it includes "#", to quote them
|
||||
# for make. We couldn't do this when we retrieved ORIGINAL_PATH, since SED
|
||||
|
|
@ -640,9 +662,10 @@ AC_DEFUN_ONCE([BASIC_SETUP_PATHS],
|
|||
AC_MSG_CHECKING([for top-level directory])
|
||||
AC_MSG_RESULT([$TOPDIR])
|
||||
AC_SUBST(TOPDIR)
|
||||
AC_SUBST(CONFIGURE_START_DIR)
|
||||
|
||||
# We can only call BASIC_FIXUP_PATH after BASIC_CHECK_PATHS_WINDOWS.
|
||||
BASIC_FIXUP_PATH(CURDIR)
|
||||
BASIC_FIXUP_PATH(CONFIGURE_START_DIR)
|
||||
BASIC_FIXUP_PATH(TOPDIR)
|
||||
|
||||
if test "x$CUSTOM_ROOT" != x; then
|
||||
|
|
@ -873,9 +896,10 @@ AC_DEFUN_ONCE([BASIC_SETUP_OUTPUT_DIR],
|
|||
|
||||
# Test from where we are running configure, in or outside of src root.
|
||||
AC_MSG_CHECKING([where to store configuration])
|
||||
if test "x$CURDIR" = "x$TOPDIR" || test "x$CURDIR" = "x$CUSTOM_ROOT" \
|
||||
|| test "x$CURDIR" = "x$TOPDIR/make/autoconf" \
|
||||
|| test "x$CURDIR" = "x$TOPDIR/make" ; then
|
||||
if test "x$CONFIGURE_START_DIR" = "x$TOPDIR" \
|
||||
|| test "x$CONFIGURE_START_DIR" = "x$CUSTOM_ROOT" \
|
||||
|| test "x$CONFIGURE_START_DIR" = "x$TOPDIR/make/autoconf" \
|
||||
|| test "x$CONFIGURE_START_DIR" = "x$TOPDIR/make" ; then
|
||||
# We are running configure from the src root.
|
||||
# Create a default ./build/target-variant-debuglevel output root.
|
||||
if test "x${CONF_NAME}" = x; then
|
||||
|
|
@ -896,9 +920,9 @@ AC_DEFUN_ONCE([BASIC_SETUP_OUTPUT_DIR],
|
|||
# If configuration is situated in normal build directory, just use the build
|
||||
# directory name as configuration name, otherwise use the complete path.
|
||||
if test "x${CONF_NAME}" = x; then
|
||||
CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${TOPDIR}/build/!!"`
|
||||
CONF_NAME=`$ECHO $CONFIGURE_START_DIR | $SED -e "s!^${TOPDIR}/build/!!"`
|
||||
fi
|
||||
OUTPUTDIR="$CURDIR"
|
||||
OUTPUTDIR="$CONFIGURE_START_DIR"
|
||||
AC_MSG_RESULT([in current directory])
|
||||
|
||||
# WARNING: This might be a bad thing to do. You need to be sure you want to
|
||||
|
|
@ -918,14 +942,14 @@ AC_DEFUN_ONCE([BASIC_SETUP_OUTPUT_DIR],
|
|||
-e 's/ //g' \
|
||||
| $TR -d '\n'`
|
||||
if test "x$filtered_files" != x; then
|
||||
AC_MSG_NOTICE([Current directory is $CURDIR.])
|
||||
AC_MSG_NOTICE([Current directory is $CONFIGURE_START_DIR.])
|
||||
AC_MSG_NOTICE([Since this is not the source root, configure will output the configuration here])
|
||||
AC_MSG_NOTICE([(as opposed to creating a configuration in <src_root>/build/<conf-name>).])
|
||||
AC_MSG_NOTICE([However, this directory is not empty. This is not allowed, since it could])
|
||||
AC_MSG_NOTICE([seriously mess up just about everything.])
|
||||
AC_MSG_NOTICE([Try 'cd $TOPDIR' and restart configure])
|
||||
AC_MSG_NOTICE([(or create a new empty directory and cd to it).])
|
||||
AC_MSG_ERROR([Will not continue creating configuration in $CURDIR])
|
||||
AC_MSG_ERROR([Will not continue creating configuration in $CONFIGURE_START_DIR])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
|
@ -1127,6 +1151,8 @@ AC_DEFUN([BASIC_CHECK_TAR],
|
|||
TAR_TYPE="bsd"
|
||||
elif test "x$($TAR -v | $GREP "bsdtar")" != "x"; then
|
||||
TAR_TYPE="bsd"
|
||||
elif test "x$($TAR --version | $GREP "busybox")" != "x"; then
|
||||
TAR_TYPE="busybox"
|
||||
elif test "x$OPENJDK_BUILD_OS" = "xsolaris"; then
|
||||
TAR_TYPE="solaris"
|
||||
fi
|
||||
|
|
@ -1142,6 +1168,9 @@ AC_DEFUN([BASIC_CHECK_TAR],
|
|||
# When using gnu tar for Solaris targets, need to use compatibility mode
|
||||
TAR_CREATE_EXTRA_PARAM="--format=ustar"
|
||||
fi
|
||||
elif test "x$TAR_TYPE" = "xbusybox"; then
|
||||
TAR_INCLUDE_PARAM="T"
|
||||
TAR_SUPPORTS_TRANSFORM="false"
|
||||
else
|
||||
TAR_INCLUDE_PARAM="I"
|
||||
TAR_SUPPORTS_TRANSFORM="false"
|
||||
|
|
@ -1267,6 +1296,9 @@ AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS],
|
|||
elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
|
||||
BASIC_REQUIRE_PROGS(ELFEDIT, elfedit)
|
||||
fi
|
||||
if ! test "x$OPENJDK_TARGET_OS" = "xwindows"; then
|
||||
BASIC_REQUIRE_BUILTIN_PROGS(ULIMIT, ulimit)
|
||||
fi
|
||||
])
|
||||
|
||||
###############################################################################
|
||||
|
|
|
|||
|
|
@ -396,7 +396,7 @@ AC_DEFUN_ONCE([BASIC_COMPILE_FIXPATH],
|
|||
$MKDIR -p $FIXPATH_DIR $CONFIGURESUPPORT_OUTPUTDIR/bin
|
||||
cd $FIXPATH_DIR
|
||||
$CC $FIXPATH_SRC_W -Fe$FIXPATH_BIN_W > $FIXPATH_DIR/fixpath1.log 2>&1
|
||||
cd $CURDIR
|
||||
cd $CONFIGURE_START_DIR
|
||||
|
||||
if test ! -x $FIXPATH_BIN; then
|
||||
AC_MSG_RESULT([no])
|
||||
|
|
@ -435,7 +435,7 @@ AC_DEFUN_ONCE([BASIC_COMPILE_FIXPATH],
|
|||
cd $FIXPATH_DIR
|
||||
$FIXPATH $CC $FIXPATH_SRC -Fe$FIXPATH_DIR/fixpath2.exe \
|
||||
> $FIXPATH_DIR/fixpath2.log 2>&1
|
||||
cd $CURDIR
|
||||
cd $CONFIGURE_START_DIR
|
||||
if test ! -x $FIXPATH_DIR/fixpath2.exe; then
|
||||
AC_MSG_RESULT([no])
|
||||
cat $FIXPATH_DIR/fixpath2.log
|
||||
|
|
|
|||
|
|
@ -74,7 +74,18 @@ AC_DEFUN([BOOTJDK_DO_CHECK],
|
|||
BOOT_JDK_FOUND=no
|
||||
else
|
||||
# Oh, this is looking good! We probably have found a proper JDK. Is it the correct version?
|
||||
BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $HEAD -n 1`
|
||||
BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" $USER_BOOT_JDK_OPTIONS -version 2>&1 | $HEAD -n 1`
|
||||
if [ [[ "$BOOT_JDK_VERSION" =~ "Picked up" ]] ]; then
|
||||
AC_MSG_NOTICE([You have _JAVA_OPTIONS or JAVA_TOOL_OPTIONS set. This can mess up the build. Please use --with-boot-jdk-jvmargs instead.])
|
||||
AC_MSG_NOTICE([Java reports: "$BOOT_JDK_VERSION".])
|
||||
AC_MSG_ERROR([Cannot continue])
|
||||
fi
|
||||
if [ [[ "$BOOT_JDK_VERSION" =~ "Unrecognized option" ]] ]; then
|
||||
AC_MSG_NOTICE([The specified --with-boot-jdk-jvmargs is invalid for the tested java])
|
||||
AC_MSG_NOTICE([Error message: "$BOOT_JDK_VERSION".])
|
||||
AC_MSG_NOTICE([Please fix arguments, or point to an explicit boot JDK which accept these arguments])
|
||||
AC_MSG_ERROR([Cannot continue])
|
||||
fi
|
||||
|
||||
# Extra M4 quote needed to protect [] in grep expression.
|
||||
[FOUND_CORRECT_VERSION=`$ECHO $BOOT_JDK_VERSION \
|
||||
|
|
@ -90,7 +101,7 @@ AC_DEFUN([BOOTJDK_DO_CHECK],
|
|||
AC_MSG_CHECKING([for Boot JDK])
|
||||
AC_MSG_RESULT([$BOOT_JDK])
|
||||
AC_MSG_CHECKING([Boot JDK version])
|
||||
BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '`
|
||||
BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" $USER_BOOT_JDK_OPTIONS -version 2>&1 | $TR '\n\r' ' '`
|
||||
AC_MSG_RESULT([$BOOT_JDK_VERSION])
|
||||
fi # end check jdk version
|
||||
fi # end check javac
|
||||
|
|
@ -283,6 +294,11 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK],
|
|||
AC_ARG_WITH(boot-jdk, [AS_HELP_STRING([--with-boot-jdk],
|
||||
[path to Boot JDK (used to bootstrap build) @<:@probed@:>@])])
|
||||
|
||||
AC_ARG_WITH(boot-jdk-jvmargs, [AS_HELP_STRING([--with-boot-jdk-jvmargs],
|
||||
[specify additional arguments to be passed to Boot JDK tools @<:@none@:>@])])
|
||||
|
||||
USER_BOOT_JDK_OPTIONS="$with_boot_jdk_jvmargs"
|
||||
|
||||
# We look for the Boot JDK through various means, going from more certain to
|
||||
# more of a guess-work. After each test, BOOT_JDK_FOUND is set to "yes" if
|
||||
# we detected something (if so, the path to the jdk is in BOOT_JDK). But we
|
||||
|
|
@ -372,10 +388,6 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS],
|
|||
# Specify jvm options for anything that is run with the Boot JDK.
|
||||
# Not all JVM:s accept the same arguments on the command line.
|
||||
#
|
||||
AC_ARG_WITH(boot-jdk-jvmargs, [AS_HELP_STRING([--with-boot-jdk-jvmargs],
|
||||
[specify JVM arguments to be passed to all java invocations of boot JDK, overriding the default values,
|
||||
e.g --with-boot-jdk-jvmargs="-Xmx8G -enableassertions"])])
|
||||
|
||||
AC_MSG_CHECKING([flags for boot jdk java command] )
|
||||
|
||||
# Force en-US environment
|
||||
|
|
@ -389,8 +401,8 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS],
|
|||
ADD_JVM_ARG_IF_OK([-Xshare:auto],boot_jdk_jvmargs,[$JAVA])
|
||||
fi
|
||||
|
||||
# Apply user provided options.
|
||||
ADD_JVM_ARG_IF_OK([$with_boot_jdk_jvmargs],boot_jdk_jvmargs,[$JAVA])
|
||||
# Finally append user provided options to allow them to override.
|
||||
ADD_JVM_ARG_IF_OK([$USER_BOOT_JDK_OPTIONS],boot_jdk_jvmargs,[$JAVA])
|
||||
|
||||
AC_MSG_RESULT([$boot_jdk_jvmargs])
|
||||
|
||||
|
|
|
|||
|
|
@ -76,34 +76,6 @@ AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS],
|
|||
AC_SUBST(JDK_RC_PLATFORM_NAME)
|
||||
AC_SUBST(HOTSPOT_VM_DISTRO)
|
||||
|
||||
# Set the MACOSX Bundle Name base
|
||||
AC_ARG_WITH(macosx-bundle-name-base, [AS_HELP_STRING([--with-macosx-bundle-name-base],
|
||||
[Set the MacOSX Bundle Name base. This is the base name for calculating MacOSX Bundle Names.
|
||||
@<:@not specified@:>@])])
|
||||
if test "x$with_macosx_bundle_name_base" = xyes; then
|
||||
AC_MSG_ERROR([--with-macosx-bundle-name-base must have a value])
|
||||
elif [ ! [[ $with_macosx_bundle_name_base =~ ^[[:print:]]*$ ]] ]; then
|
||||
AC_MSG_ERROR([--with-macosx-bundle-name-base contains non-printing characters: $with_macosx_bundle_name_base])
|
||||
elif test "x$with_macosx_bundle_name_base" != x; then
|
||||
# Set MACOSX_BUNDLE_NAME_BASE to the configured value.
|
||||
MACOSX_BUNDLE_NAME_BASE="$with_macosx_bundle_name_base"
|
||||
fi
|
||||
AC_SUBST(MACOSX_BUNDLE_NAME_BASE)
|
||||
|
||||
# Set the MACOSX Bundle ID base
|
||||
AC_ARG_WITH(macosx-bundle-id-base, [AS_HELP_STRING([--with-macosx-bundle-id-base],
|
||||
[Set the MacOSX Bundle ID base. This is the base ID for calculating MacOSX Bundle IDs.
|
||||
@<:@not specified@:>@])])
|
||||
if test "x$with_macosx_bundle_id_base" = xyes; then
|
||||
AC_MSG_ERROR([--with-macosx-bundle-id-base must have a value])
|
||||
elif [ ! [[ $with_macosx_bundle_id_base =~ ^[[:print:]]*$ ]] ]; then
|
||||
AC_MSG_ERROR([--with-macosx-bundle-id-base contains non-printing characters: $with_macosx_bundle_id_base])
|
||||
elif test "x$with_macosx_bundle_id_base" != x; then
|
||||
# Set MACOSX_BUNDLE_ID_BASE to the configured value.
|
||||
MACOSX_BUNDLE_ID_BASE="$with_macosx_bundle_id_base"
|
||||
fi
|
||||
AC_SUBST(MACOSX_BUNDLE_ID_BASE)
|
||||
|
||||
# Set the JDK RC name
|
||||
AC_ARG_WITH(jdk-rc-name, [AS_HELP_STRING([--with-jdk-rc-name],
|
||||
[Set JDK RC name. This is used for FileDescription and ProductName properties
|
||||
|
|
@ -512,6 +484,60 @@ AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS],
|
|||
VENDOR_VERSION_STRING="$with_vendor_version_string"
|
||||
fi
|
||||
|
||||
# Set the MACOSX Bundle Name base
|
||||
AC_ARG_WITH(macosx-bundle-name-base, [AS_HELP_STRING([--with-macosx-bundle-name-base],
|
||||
[Set the MacOSX Bundle Name base. This is the base name for calculating MacOSX Bundle Names.
|
||||
@<:@not specified@:>@])])
|
||||
if test "x$with_macosx_bundle_name_base" = xyes; then
|
||||
AC_MSG_ERROR([--with-macosx-bundle-name-base must have a value])
|
||||
elif [ ! [[ $with_macosx_bundle_name_base =~ ^[[:print:]]*$ ]] ]; then
|
||||
AC_MSG_ERROR([--with-macosx-bundle-name-base contains non-printing characters: $with_macosx_bundle_name_base])
|
||||
elif test "x$with_macosx_bundle_name_base" != x; then
|
||||
# Set MACOSX_BUNDLE_NAME_BASE to the configured value.
|
||||
MACOSX_BUNDLE_NAME_BASE="$with_macosx_bundle_name_base"
|
||||
fi
|
||||
AC_SUBST(MACOSX_BUNDLE_NAME_BASE)
|
||||
|
||||
# Set the MACOSX Bundle ID base
|
||||
AC_ARG_WITH(macosx-bundle-id-base, [AS_HELP_STRING([--with-macosx-bundle-id-base],
|
||||
[Set the MacOSX Bundle ID base. This is the base ID for calculating MacOSX Bundle IDs.
|
||||
@<:@not specified@:>@])])
|
||||
if test "x$with_macosx_bundle_id_base" = xyes; then
|
||||
AC_MSG_ERROR([--with-macosx-bundle-id-base must have a value])
|
||||
elif [ ! [[ $with_macosx_bundle_id_base =~ ^[[:print:]]*$ ]] ]; then
|
||||
AC_MSG_ERROR([--with-macosx-bundle-id-base contains non-printing characters: $with_macosx_bundle_id_base])
|
||||
elif test "x$with_macosx_bundle_id_base" != x; then
|
||||
# Set MACOSX_BUNDLE_ID_BASE to the configured value.
|
||||
MACOSX_BUNDLE_ID_BASE="$with_macosx_bundle_id_base"
|
||||
else
|
||||
# If using the default value, append the VERSION_PRE if there is one
|
||||
# to make it possible to tell official builds apart from developer builds
|
||||
if test "x$VERSION_PRE" != x; then
|
||||
MACOSX_BUNDLE_ID_BASE="$MACOSX_BUNDLE_ID_BASE-$VERSION_PRE"
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(MACOSX_BUNDLE_ID_BASE)
|
||||
|
||||
# Set the MACOSX CFBundleVersion field
|
||||
AC_ARG_WITH(macosx-bundle-build-version, [AS_HELP_STRING([--with-macosx-bundle-build-version],
|
||||
[Set the MacOSX Bundle CFBundleVersion field. This key is a machine-readable
|
||||
string composed of one to three period-separated integers and should represent the
|
||||
build version. Defaults to the build number.])])
|
||||
if test "x$with_macosx_bundle_build_version" = xyes; then
|
||||
AC_MSG_ERROR([--with-macosx-bundle-build-version must have a value])
|
||||
elif [ ! [[ $with_macosx_bundle_build_version =~ ^[0-9\.]*$ ]] ]; then
|
||||
AC_MSG_ERROR([--with-macosx-bundle-build-version contains non numbers and periods: $with_macosx_bundle_build_version])
|
||||
elif test "x$with_macosx_bundle_build_version" != x; then
|
||||
MACOSX_BUNDLE_BUILD_VERSION="$with_macosx_bundle_build_version"
|
||||
else
|
||||
MACOSX_BUNDLE_BUILD_VERSION="$VERSION_BUILD"
|
||||
# If VERSION_OPT consists of only numbers and periods, add it.
|
||||
if [ [[ $VERSION_OPT =~ ^[0-9\.]+$ ]] ]; then
|
||||
MACOSX_BUNDLE_BUILD_VERSION+=".$VERSION_OPT"
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(MACOSX_BUNDLE_BUILD_VERSION)
|
||||
|
||||
# We could define --with flags for these, if really needed
|
||||
VERSION_CLASSFILE_MAJOR="$DEFAULT_VERSION_CLASSFILE_MAJOR"
|
||||
VERSION_CLASSFILE_MINOR="$DEFAULT_VERSION_CLASSFILE_MINOR"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2022, 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
|
||||
|
|
@ -214,6 +214,9 @@ AC_DEFUN_ONCE([LIB_SETUP_ZLIB],
|
|||
LIBZ_LIBS=""
|
||||
if test "x$USE_EXTERNAL_LIBZ" = "xfalse"; then
|
||||
LIBZ_CFLAGS="$LIBZ_CFLAGS -I$TOPDIR/src/java.base/share/native/libzip/zlib"
|
||||
if test "x$OPENJDK_TARGET_OS" = xmacosx; then
|
||||
LIBZ_CFLAGS="$LIBZ_CFLAGS -DHAVE_UNISTD_H"
|
||||
fi
|
||||
else
|
||||
LIBZ_LIBS="-lz"
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -32,10 +32,15 @@
|
|||
|
||||
# The command line given to configure.
|
||||
CONFIGURE_COMMAND_LINE:=@CONFIGURE_COMMAND_LINE@
|
||||
# The current directory when configure was run
|
||||
CONFIGURE_START_DIR:=@CONFIGURE_START_DIR@
|
||||
|
||||
# A self-referential reference to this file.
|
||||
SPEC:=@SPEC@
|
||||
|
||||
# Path to autoconf if overriden by the user, to be used by "make reconfigure"
|
||||
AUTOCONF := @AUTOCONF@
|
||||
|
||||
# SPACE and COMMA are defined in MakeBase.gmk, but they are also used in
|
||||
# some definitions here, and are needed if MakeBase.gmk is not included before
|
||||
# this file.
|
||||
|
|
@ -164,6 +169,7 @@ COMPANY_NAME:=@COMPANY_NAME@
|
|||
HOTSPOT_VM_DISTRO:=@HOTSPOT_VM_DISTRO@
|
||||
MACOSX_BUNDLE_NAME_BASE=@MACOSX_BUNDLE_NAME_BASE@
|
||||
MACOSX_BUNDLE_ID_BASE=@MACOSX_BUNDLE_ID_BASE@
|
||||
MACOSX_BUNDLE_BUILD_VERSION=@MACOSX_BUNDLE_BUILD_VERSION@
|
||||
USERNAME:=@USERNAME@
|
||||
VENDOR_URL:=@VENDOR_URL@
|
||||
VENDOR_URL_BUG:=@VENDOR_URL_BUG@
|
||||
|
|
@ -757,6 +763,7 @@ JIB_HOME:=@JIB_HOME@
|
|||
XCODEBUILD=@XCODEBUILD@
|
||||
DTRACE := @DTRACE@
|
||||
FIXPATH:=@FIXPATH@
|
||||
ULIMIT:=@ULIMIT@
|
||||
|
||||
TAR_TYPE:=@TAR_TYPE@
|
||||
TAR_CREATE_EXTRA_PARAM:=@TAR_CREATE_EXTRA_PARAM@
|
||||
|
|
|
|||
|
|
@ -446,7 +446,7 @@ AC_DEFUN([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV],
|
|||
# Change directory so we don't need to mess with Windows paths in redirects.
|
||||
cd $VS_ENV_TMP_DIR
|
||||
cmd /c extract-vs-env.bat | $CAT
|
||||
cd $CURDIR
|
||||
cd $CONFIGURE_START_DIR
|
||||
|
||||
if test ! -s $VS_ENV_TMP_DIR/set-vs-env.sh; then
|
||||
AC_MSG_NOTICE([Could not succesfully extract the envionment variables needed for the VS setup.])
|
||||
|
|
|
|||
|
|
@ -28,12 +28,12 @@
|
|||
|
||||
DEFAULT_VERSION_FEATURE=11
|
||||
DEFAULT_VERSION_INTERIM=0
|
||||
DEFAULT_VERSION_UPDATE=16
|
||||
DEFAULT_VERSION_UPDATE=17
|
||||
DEFAULT_VERSION_PATCH=0
|
||||
DEFAULT_VERSION_EXTRA1=0
|
||||
DEFAULT_VERSION_EXTRA2=0
|
||||
DEFAULT_VERSION_EXTRA3=0
|
||||
DEFAULT_VERSION_DATE=2022-07-19
|
||||
DEFAULT_VERSION_DATE=2022-10-18
|
||||
DEFAULT_VERSION_CLASSFILE_MAJOR=55 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`"
|
||||
DEFAULT_VERSION_CLASSFILE_MINOR=0
|
||||
DEFAULT_ACCEPTABLE_BOOT_VERSIONS="10 11"
|
||||
|
|
|
|||
|
|
@ -916,10 +916,9 @@ var getJibProfilesDependencies = function (input, common) {
|
|||
jtreg: {
|
||||
server: "jpg",
|
||||
product: "jtreg",
|
||||
version: "5.1",
|
||||
build_number: "b01",
|
||||
checksum_file: "MD5_VALUES",
|
||||
file: "bundles/jtreg_bin-5.1.zip",
|
||||
version: "6",
|
||||
build_number: "1",
|
||||
file: "bundles/jtreg-6+1.zip",
|
||||
environment_name: "JT_HOME",
|
||||
environment_path: input.get("jtreg", "install_path") + "/jtreg/bin"
|
||||
},
|
||||
|
|
@ -1183,13 +1182,17 @@ var versionArgs = function(input, common) {
|
|||
"--with-version-pre=" + version_numbers.get("DEFAULT_PROMOTED_VERSION_PRE"),
|
||||
"--without-version-opt");
|
||||
} else if (input.build_type == "ci") {
|
||||
var optString = input.build_id_data.ciBuildNumber;
|
||||
var ciBuildNumber = input.build_id_data.ciBuildNumber;
|
||||
var preString = input.build_id_data.projectName;
|
||||
if (preString == "jdk") {
|
||||
preString = version_numbers.get("DEFAULT_PROMOTED_VERSION_PRE");
|
||||
}
|
||||
args = concat(args, "--with-version-pre=" + preString,
|
||||
"--with-version-opt=" + optString);
|
||||
"--with-version-opt=" + ciBuildNumber);
|
||||
if (input.target_os == "macosx") {
|
||||
args = concat(args, "--with-macosx-bundle-build-version="
|
||||
+ common.build_number + "." + ciBuildNumber);
|
||||
}
|
||||
} else {
|
||||
args = concat(args, "--with-version-opt=" + common.build_id);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,8 +26,8 @@
|
|||
# Versions and download locations for dependencies used by pre-submit testing.
|
||||
|
||||
BOOT_JDK_VERSION=11
|
||||
JTREG_VERSION=5.1
|
||||
JTREG_BUILD=b01
|
||||
JTREG_VERSION=6
|
||||
JTREG_BUILD=1
|
||||
GTEST_VERSION=1.8.1
|
||||
|
||||
LINUX_X64_BOOT_JDK_FILENAME=openjdk-11.0.14.1_linux-x64_bin.tar.gz
|
||||
|
|
|
|||
|
|
@ -17,11 +17,11 @@
|
|||
<key>CFBundlePackageType</key>
|
||||
<string>BNDL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<string>@@VERSION@@</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>@@VERSION@@</string>
|
||||
<string>@@BUILD_VERSION@@</string>
|
||||
<key>NSMicrophoneUsageDescription</key>
|
||||
<string>The application is requesting access to the microphone.</string>
|
||||
<key>JavaVM</key>
|
||||
|
|
@ -33,9 +33,9 @@
|
|||
<key>JVMMinimumFrameworkVersion</key>
|
||||
<string>13.2.9</string>
|
||||
<key>JVMMinimumSystemVersion</key>
|
||||
<string>10.6.0</string>
|
||||
<string>@@MACOSX_VERSION_MIN@@</string>
|
||||
<key>JVMPlatformVersion</key>
|
||||
<string>@@PLATFORM_VERSION@@</string>
|
||||
<string>@@VERSION@@</string>
|
||||
<key>JVMVendor</key>
|
||||
<string>@@VENDOR@@</string>
|
||||
<key>JVMVersion</key>
|
||||
|
|
|
|||
|
|
@ -17,11 +17,11 @@
|
|||
<key>CFBundlePackageType</key>
|
||||
<string>BNDL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<string>@@VERSION@@</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>@@VERSION@@</string>
|
||||
<string>@@BUILD_VERSION@@</string>
|
||||
<key>NSMicrophoneUsageDescription</key>
|
||||
<string>The application is requesting access to the microphone.</string>
|
||||
<key>JavaVM</key>
|
||||
|
|
@ -29,9 +29,9 @@
|
|||
<key>JVMMinimumFrameworkVersion</key>
|
||||
<string>13.2.9</string>
|
||||
<key>JVMMinimumSystemVersion</key>
|
||||
<string>10.6.0</string>
|
||||
<string>@@MACOSX_VERSION_MIN@@</string>
|
||||
<key>JVMPlatformVersion</key>
|
||||
<string>@@PLATFORM_VERSION@@</string>
|
||||
<string>@@VERSION@@</string>
|
||||
<key>JVMVendor</key>
|
||||
<string>@@VENDOR@@</string>
|
||||
<key>JVMVersion</key>
|
||||
|
|
|
|||
|
|
@ -7,10 +7,11 @@
|
|||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>@@VERSION@@</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>@@BUILD_VERSION@@</string>
|
||||
<key>NSMicrophoneUsageDescription</key>
|
||||
<string>The application is requesting access to the microphone.</string>
|
||||
@@EXTRA@@
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2000, 2022, 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,7 +32,7 @@ formatVersion=3
|
|||
# Version of the currency code information in this class.
|
||||
# It is a serial number that accompanies with each amendment.
|
||||
|
||||
dataVersion=170
|
||||
dataVersion=172
|
||||
|
||||
# List of all valid ISO 4217 currency codes.
|
||||
# To ensure compatibility, do not remove codes.
|
||||
|
|
@ -51,7 +51,7 @@ all=ADP020-AED784-AFA004-AFN971-ALL008-AMD051-ANG532-AOA973-ARS032-ATS040-AUD036
|
|||
MTL470-MUR480-MVR462-MWK454-MXN484-MXV979-MYR458-MZM508-MZN943-NAD516-NGN566-\
|
||||
NIO558-NLG528-NOK578-NPR524-NZD554-OMR512-PAB590-PEN604-PGK598-PHP608-\
|
||||
PKR586-PLN985-PTE620-PYG600-QAR634-ROL642-RON946-RSD941-RUB643-RUR810-RWF646-SAR682-\
|
||||
SBD090-SCR690-SDD736-SDG938-SEK752-SGD702-SHP654-SIT705-SKK703-SLL694-SOS706-\
|
||||
SBD090-SCR690-SDD736-SDG938-SEK752-SGD702-SHP654-SIT705-SKK703-SLE925-SLL694-SOS706-\
|
||||
SRD968-SRG740-SSP728-STD678-STN930-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TMT934-TND788-TOP776-\
|
||||
TPE626-TRL792-TRY949-TTD780-TWD901-TZS834-UAH980-UGX800-USD840-USN997-USS998-UYI940-\
|
||||
UYU858-UZS860-VEB862-VED926-VEF937-VES928-VND704-VUV548-WST882-XAF950-XAG961-XAU959-XBA955-\
|
||||
|
|
@ -317,6 +317,8 @@ KI=AUD
|
|||
KP=KPW
|
||||
# KOREA (THE REPUBLIC OF)
|
||||
KR=KRW
|
||||
# KOSOVO - Not in ISO 3166/4217
|
||||
XK=EUR
|
||||
# KUWAIT
|
||||
KW=KWD
|
||||
# KYRGYZSTAN
|
||||
|
|
@ -482,7 +484,7 @@ CS=CSD
|
|||
# SEYCHELLES
|
||||
SC=SCR
|
||||
# SIERRA LEONE
|
||||
SL=SLL
|
||||
SL=SLE
|
||||
# SINGAPORE
|
||||
SG=SGD
|
||||
# SLOVAKIA
|
||||
|
|
|
|||
|
|
@ -21,4 +21,4 @@
|
|||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
tzdata2022a
|
||||
tzdata2022c
|
||||
|
|
|
|||
|
|
@ -182,6 +182,7 @@ Link Africa/Abidjan Africa/Freetown # Sierra Leone
|
|||
Link Africa/Abidjan Africa/Lome # Togo
|
||||
Link Africa/Abidjan Africa/Nouakchott # Mauritania
|
||||
Link Africa/Abidjan Africa/Ouagadougou # Burkina Faso
|
||||
Link Africa/Abidjan Atlantic/Reykjavik # Iceland
|
||||
Link Africa/Abidjan Atlantic/St_Helena # St Helena
|
||||
|
||||
# Djibouti
|
||||
|
|
@ -192,7 +193,7 @@ Link Africa/Abidjan Atlantic/St_Helena # St Helena
|
|||
# Egypt
|
||||
|
||||
# Milne says Cairo used 2:05:08.9, the local mean time of the Abbasizeh
|
||||
# observatory; round to nearest. Milne also says that the official time for
|
||||
# observatory. Milne also says that the official time for
|
||||
# Egypt was mean noon at the Great Pyramid, 2:04:30.5, but apparently this
|
||||
# did not apply to Cairo, Alexandria, or Port Said.
|
||||
|
||||
|
|
@ -377,6 +378,7 @@ Rule Egypt 2014 only - Jul 31 24:00 1:00 S
|
|||
Rule Egypt 2014 only - Sep lastThu 24:00 0 -
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
#STDOFF 2:05:08.9
|
||||
Zone Africa/Cairo 2:05:09 - LMT 1900 Oct
|
||||
2:00 Egypt EE%sT
|
||||
|
||||
|
|
@ -430,7 +432,7 @@ Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1 1:00u
|
|||
# At midnight on 30 June 1928 the clocks throughout Kenya was put forward
|
||||
# half an hour by the Alteration of Time Ordinance, 1928.
|
||||
# https://gazettes.africa/archive/ke/1928/ke-government-gazette-dated-1928-05-11-no-28.pdf
|
||||
# [Ordinance No. 11 of 1928, The Offical Gazette, 1928-06-26, p 813]
|
||||
# [Ordinance No. 11 of 1928, The Official Gazette, 1928-06-26, p 813]
|
||||
# https://books.google.com/books?id=2S0S6os32ZUC&pg=PA813
|
||||
#
|
||||
# The 1928 ordinance was repealed by the Alteration of Time (repeal) Ordinance,
|
||||
|
|
@ -1333,21 +1335,9 @@ Link Africa/Lagos Africa/Niamey # Niger
|
|||
Link Africa/Lagos Africa/Porto-Novo # Benin
|
||||
|
||||
# Réunion
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
|
||||
4:00 - +04
|
||||
# See Asia/Dubai.
|
||||
#
|
||||
# Scattered Islands (Îles Éparses) administered from Réunion are as follows.
|
||||
# The following information about them is taken from
|
||||
# Îles Éparses (<http://www.outre-mer.gouv.fr/domtom/ile.htm>, 1997-07-22,
|
||||
# in French; no longer available as of 1999-08-17).
|
||||
# We have no info about their time zone histories.
|
||||
#
|
||||
# Bassas da India - uninhabited
|
||||
# Europa Island - inhabited from 1905 to 1910 by two families
|
||||
# Glorioso Is - inhabited until at least 1958
|
||||
# Juan de Nova - uninhabited
|
||||
# Tromelin - inhabited until at least 1958
|
||||
# The Crozet Islands also observe Réunion time; see the 'antarctica' file.
|
||||
|
||||
# Rwanda
|
||||
# See Africa/Maputo.
|
||||
|
|
@ -1379,9 +1369,10 @@ Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
|
|||
# From Michael Deckers (2018-12-30):
|
||||
# https://www.legis-palop.org/download.jsp?idFile=102818
|
||||
# ... [The legal time of the country, which coincides with universal
|
||||
# coordinated time, will be restituted at 2 o'clock on day 1 of January, 2019.]
|
||||
# coordinated time, will be reinstituted at 2 o'clock on day 1 of January, 2019.]
|
||||
|
||||
Zone Africa/Sao_Tome 0:26:56 - LMT 1884
|
||||
#STDOFF -0:36:44.68
|
||||
-0:36:45 - LMT 1912 Jan 1 00:00u # Lisbon MT
|
||||
0:00 - GMT 2018 Jan 1 01:00
|
||||
1:00 - WAT 2019 Jan 1 02:00
|
||||
|
|
@ -1391,28 +1382,7 @@ Zone Africa/Sao_Tome 0:26:56 - LMT 1884
|
|||
# See Africa/Abidjan.
|
||||
|
||||
# Seychelles
|
||||
|
||||
# From P Chan (2020-11-27):
|
||||
# Standard Time was adopted on 1907-01-01.
|
||||
#
|
||||
# Standard Time Ordinance (Chapter 237)
|
||||
# The Laws of Seychelles in Force on the 31st December, 1971, Vol. 6, p 571
|
||||
# https://books.google.com/books?id=efE-AQAAIAAJ&pg=PA571
|
||||
#
|
||||
# From Tim Parenti (2020-12-05):
|
||||
# A footnote on https://books.google.com/books?id=DYdDAQAAMAAJ&pg=PA1689
|
||||
# confirms that Ordinance No. 9 of 1906 "was brought into force on the 1st
|
||||
# January, 1907."
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Mahe 3:41:48 - LMT 1907 Jan 1 # Victoria
|
||||
4:00 - +04
|
||||
# From Paul Eggert (2001-05-30):
|
||||
# Aldabra, Farquhar, and Desroches, originally dependencies of the
|
||||
# Seychelles, were transferred to the British Indian Ocean Territory
|
||||
# in 1965 and returned to Seychelles control in 1976. We don't know
|
||||
# whether this affected their time zone, so omit this for now.
|
||||
# Possibly the islands were uninhabited.
|
||||
# See Asia/Dubai.
|
||||
|
||||
# Sierra Leone
|
||||
# See Africa/Abidjan.
|
||||
|
|
|
|||
|
|
@ -180,9 +180,7 @@ Zone Antarctica/Mawson 0 - -00 1954 Feb 13
|
|||
# St Paul Island - near Amsterdam, uninhabited
|
||||
# fishing stations operated variously 1819/1931
|
||||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Kerguelen 0 - -00 1950 # Port-aux-Français
|
||||
5:00 - +05
|
||||
# Kerguelen - see Indian/Maldives.
|
||||
#
|
||||
# year-round base in the main continent
|
||||
# Dumont d'Urville - see Pacific/Port_Moresby.
|
||||
|
|
@ -265,31 +263,7 @@ Zone Antarctica/Troll 0 - -00 2005 Feb 12
|
|||
# year-round from 1960/61 to 1992
|
||||
|
||||
# Vostok, since 1957-12-16, temporarily closed 1994-02/1994-11
|
||||
# From Craig Mundell (1994-12-15):
|
||||
# http://quest.arc.nasa.gov/antarctica/QA/computers/Directions,Time,ZIP
|
||||
# Vostok, which is one of the Russian stations, is set on the same
|
||||
# time as Moscow, Russia.
|
||||
#
|
||||
# From Lee Hotz (2001-03-08):
|
||||
# I queried the folks at Columbia who spent the summer at Vostok and this is
|
||||
# what they had to say about time there:
|
||||
# "in the US Camp (East Camp) we have been on New Zealand (McMurdo)
|
||||
# time, which is 12 hours ahead of GMT. The Russian Station Vostok was
|
||||
# 6 hours behind that (although only 2 miles away, i.e. 6 hours ahead
|
||||
# of GMT). This is a time zone I think two hours east of Moscow. The
|
||||
# natural time zone is in between the two: 8 hours ahead of GMT."
|
||||
#
|
||||
# From Paul Eggert (2001-05-04):
|
||||
# This seems to be hopelessly confusing, so I asked Lee Hotz about it
|
||||
# in person. He said that some Antarctic locations set their local
|
||||
# time so that noon is the warmest part of the day, and that this
|
||||
# changes during the year and does not necessarily correspond to mean
|
||||
# solar noon. So the Vostok time might have been whatever the clocks
|
||||
# happened to be during their visit. So we still don't really know what time
|
||||
# it is at Vostok. But we'll guess +06.
|
||||
#
|
||||
Zone Antarctica/Vostok 0 - -00 1957 Dec 16
|
||||
6:00 - +06
|
||||
# See Asia/Urumqi.
|
||||
|
||||
# S Africa - year-round bases
|
||||
# Marion Island, -4653+03752
|
||||
|
|
|
|||
|
|
@ -278,10 +278,7 @@ Zone Indian/Chagos 4:49:40 - LMT 1907
|
|||
6:00 - +06
|
||||
|
||||
# Brunei
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan
|
||||
7:30 - +0730 1933
|
||||
8:00 - +08
|
||||
# See Asia/Kuching.
|
||||
|
||||
# Burma / Myanmar
|
||||
|
||||
|
|
@ -299,6 +296,7 @@ Zone Asia/Yangon 6:24:47 - LMT 1880 # or Rangoon
|
|||
6:30 - +0630 1942 May
|
||||
9:00 - +09 1945 May 3
|
||||
6:30 - +0630
|
||||
Link Asia/Yangon Indian/Cocos
|
||||
|
||||
# Cambodia
|
||||
# See Asia/Bangkok.
|
||||
|
|
@ -367,12 +365,9 @@ Rule Shang 1919 only - Sep 30 24:00 0 S
|
|||
# in the city at the time for people who use different time standard to adjust
|
||||
# their clock to their preferred time.
|
||||
#
|
||||
# a. For the 1940 May 31 spring forward, the essay claim that it was
|
||||
# coordinared between the international settlement authority and the French
|
||||
# concession authority and have gathered support from Hong Kong and Xiamen,
|
||||
# that it would spring forward an hour from May 31 "midnight", and the essay
|
||||
# claim "Hong Kong government implemented the spring forward in the same time
|
||||
# on the same date as Shanghai".
|
||||
# a. For the 1940 May 31 spring forward, the essay [says] ... "Hong
|
||||
# Kong government implemented the spring forward in the same time on
|
||||
# the same date as Shanghai".
|
||||
#
|
||||
# b. For the 1940 fall back, it was said that they initially intended to do
|
||||
# so on September 30 00:59 at night, however they postponed it to October 12
|
||||
|
|
@ -568,7 +563,7 @@ Rule PRC 1987 1991 - Apr Sun>=11 2:00 1:00 D
|
|||
# Zhongyuan Time ("Central plain Time") UT +08
|
||||
# Now part of Asia/Shanghai.
|
||||
# most of China
|
||||
# Milne gives 8:05:43.2 for Xujiahui Observatory time; round to nearest.
|
||||
# Milne gives 8:05:43.2 for Xujiahui Observatory time....
|
||||
# Guo says Shanghai switched to UT +08 "from the end of the 19th century".
|
||||
#
|
||||
# Long-shu Time (probably as Long and Shu were two names of the area) UT +07
|
||||
|
|
@ -687,6 +682,7 @@ Rule PRC 1987 1991 - Apr Sun>=11 2:00 1:00 D
|
|||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
# Beijing time, used throughout China; represented by Shanghai.
|
||||
#STDOFF 8:05:43.2
|
||||
Zone Asia/Shanghai 8:05:43 - LMT 1901
|
||||
8:00 Shang C%sT 1949 May 28
|
||||
8:00 PRC C%sT
|
||||
|
|
@ -694,11 +690,12 @@ Zone Asia/Shanghai 8:05:43 - LMT 1901
|
|||
# / Wulumuqi. (Please use Asia/Shanghai if you prefer Beijing time.)
|
||||
Zone Asia/Urumqi 5:50:20 - LMT 1928
|
||||
6:00 - +06
|
||||
Link Asia/Urumqi Antarctica/Vostok
|
||||
|
||||
|
||||
# Hong Kong
|
||||
|
||||
# Milne gives 7:36:41.7; round this.
|
||||
# Milne gives 7:36:41.7.
|
||||
|
||||
# From Lee Yiu Chung (2009-10-24):
|
||||
# I found there are some mistakes for the...DST rule for Hong
|
||||
|
|
@ -882,7 +879,8 @@ Rule HK 1973 only - Dec 30 3:30 1:00 S
|
|||
Rule HK 1979 only - May 13 3:30 1:00 S
|
||||
Rule HK 1979 only - Oct 21 3:30 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Hong_Kong 7:36:42 - LMT 1904 Oct 30 0:36:42
|
||||
#STDOFF 7:36:41.7
|
||||
Zone Asia/Hong_Kong 7:36:42 - LMT 1904 Oct 29 17:00u
|
||||
8:00 - HKT 1941 Jun 15 3:00
|
||||
8:00 1:00 HKST 1941 Oct 1 4:00
|
||||
8:00 0:30 HKWT 1941 Dec 25
|
||||
|
|
@ -1357,7 +1355,7 @@ Zone Asia/Kolkata 5:53:28 - LMT 1854 Jun 28 # Kolkata
|
|||
#
|
||||
# From Paul Eggert (2014-09-06):
|
||||
# The 1876 Report of the Secretary of the [US] Navy, p 306 says that Batavia
|
||||
# civil time was 7:07:12.5; round to even for Jakarta.
|
||||
# civil time was 7:07:12.5.
|
||||
#
|
||||
# From Gwillim Law (2001-05-28), overriding Shanks & Pottenger:
|
||||
# http://www.sumatera-inc.com/go_to_invest/about_indonesia.asp#standtime
|
||||
|
|
@ -1393,10 +1391,11 @@ Zone Asia/Kolkata 5:53:28 - LMT 1854 Jun 28 # Kolkata
|
|||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
# Java, Sumatra
|
||||
#STDOFF 7:07:12.5
|
||||
Zone Asia/Jakarta 7:07:12 - LMT 1867 Aug 10
|
||||
# Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
|
||||
# but this must be a typo.
|
||||
7:07:12 - BMT 1923 Dec 31 23:47:12 # Batavia
|
||||
7:07:12 - BMT 1923 Dec 31 16:40u # Batavia
|
||||
7:20 - +0720 1932 Nov
|
||||
7:30 - +0730 1942 Mar 23
|
||||
9:00 - +09 1945 Sep 23
|
||||
|
|
@ -1428,6 +1427,111 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
|
|||
|
||||
# Iran
|
||||
|
||||
# From Roozbeh Pournader (2022-05-30):
|
||||
# Here's an order from the Cabinet to the rest of the government to switch to
|
||||
# Tehran time, which is mentioned to be already at +03:30:
|
||||
# https://qavanin.ir/Law/TreeText/180138
|
||||
# Just in case that goes away, I also saved a copy at archive.org:
|
||||
# https://web.archive.org/web/20220530111940/https://qavanin.ir/Law/TreeText/180138
|
||||
# Here's my translation:
|
||||
#
|
||||
# "Circular on Matching the Hours of Governmental and Official Circles
|
||||
# in Provinces
|
||||
# Approved 1314/03/22 [=1935-06-13]
|
||||
# According to the ruling of the Honorable Cabinet, it is ordered that from
|
||||
# now on in all internal provinces of the country, governmental and official
|
||||
# circles set their time to match Tehran time (three hours and half before
|
||||
# Greenwich)....
|
||||
#
|
||||
# I still haven't found out when Tehran itself switched to +03:30....
|
||||
#
|
||||
# From Paul Eggert (2022-06-05):
|
||||
# Although the above says Tehran was at +03:30 before 1935-06-13, we don't
|
||||
# know when it switched to +03:30. For now, use 1935-06-13 as the switch date.
|
||||
# Although most likely wrong, we have no better info.
|
||||
|
||||
# From Roozbeh Pournader (2022-06-01):
|
||||
# This is from Kayhan newspaper, one of the major Iranian newspapers, from
|
||||
# March 20, 1978, page 2:
|
||||
#
|
||||
# "Pull the clocks 60 minutes forward
|
||||
# As we informed before, from the fourth day of the month Farvardin of the
|
||||
# new year [=1978-03-24], clocks will be pulled forward, and people's daily
|
||||
# work and life program will start one hour earlier than the current program.
|
||||
# On the 1st day of the month Farvardin of this year [=1977-03-21], they had
|
||||
# pulled the clocks forward by one hour, but in the month of Mehr
|
||||
# [=1977-09-23], the clocks were pulled back by 30 minutes.
|
||||
# In this way, from the 4th day of the month Farvardin, clocks will be ahead
|
||||
# of the previous years by one hour and a half.
|
||||
# According to the new program, during the night of 4th of Farvardin, when
|
||||
# the midnight, meaning 24 o'clock is announced, the hands of the clock must
|
||||
# be pulled forward by one hour and thus consider midnight 1 o'clock in the
|
||||
# forenoon."
|
||||
#
|
||||
# This implies that in September 1977, when the daylight savings time was
|
||||
# done with, Iran didn't go back to +03:30, but immediately to +04:00.
|
||||
#
|
||||
#
|
||||
# This is from the major Iranian newspaper Ettela'at, dated [1978-08-03]...,
|
||||
# page 32. It looks like they decided to get the clocks back to +4:00
|
||||
# just in time for Ramadan that year:
|
||||
#
|
||||
# "Tomorrow Night, Pull the Clocks Back by One Hour
|
||||
# At 1 o'clock in the forenoon of Saturday 14 Mordad [=1978-08-05], the
|
||||
# clocks will be pulled one hour back and instead of 1 o'clock in the
|
||||
# forenoon, Radio Iran will announce 24 o'clock.
|
||||
# This decision was made in the Cabinet of Ministers meeting of 25 Tir
|
||||
# [=1978-07-16], [...]
|
||||
# At the beginning of the year 2537 [=March 1978: Iran was using a different
|
||||
# year number for a few years then, based on the Coronation of Cyrus the
|
||||
# Great], the country's official time was pulled forward by one hour and now
|
||||
# the official time is one hour and a half ahead compared to last year,
|
||||
# because in Farvardin of last year [=March 1977], the official time was
|
||||
# pulled forward one hour and this continued until the second half of last
|
||||
# year [=September 1977] until in the second half of last year the official
|
||||
# time was pulled back half an hour and that half hour still remains."
|
||||
#
|
||||
# This matches the time of the true noon published in the newspapers, as they
|
||||
# clearly go from +05:00 to +04:00 after that date (which happened during a
|
||||
# long weekend in Iran).
|
||||
|
||||
# From Roozbeh Pournader (2022-05-31):
|
||||
# [Movahedi S. Cultural preconceptions of time: Can we use operational time
|
||||
# to meddle in God's Time? Comp Stud Soc Hist. 1985;27(3):385-400]
|
||||
# https://www.jstor.org/stable/178704
|
||||
# Here's the quotes from the paper:
|
||||
# 1. '"Iran's official time keeper moved the clock one hour forward as from
|
||||
# March 22, 1977 (Farvardin 2, 2536) to make maximum use of daylight and save
|
||||
# in energy consumption. Thus Iran joined such other countries as Britain in
|
||||
# observing what is known as 'daylight saving.' The proposal was originally
|
||||
# put forward by the Ministry of Energy, in no way having any influence on
|
||||
# observing religious ceremonies. Moving time one hour forward in summer
|
||||
# means that at 11:00 o'clock on March 21, the official time was set as
|
||||
# midnight March 22. Then September 24 will actually begin one hour later
|
||||
# than the end of September 23 [...]." Iran's time base thus continued to be
|
||||
# Greenwich Mean Time plus three and one-half hours (plus four and one-half
|
||||
# hours in summer).'
|
||||
#
|
||||
# The article sources this from Iran Almanac and Book of Facts, 1977, Tehran:
|
||||
# Echo of Iran, which is on Google Books at
|
||||
# https://www.google.com/books/edition/Iran_Almanac_and_Book_of_Facts/9ybVAAAAMAAJ.
|
||||
# (I confirmed it by searching for snippets.)
|
||||
#
|
||||
# 2. "After the fall of the shah, the revolutionary government returned to
|
||||
# daylight-saving time (DST) on 26 May 1979."
|
||||
#
|
||||
# This seems to have been announced just one day in advance, on 25 May 1979.
|
||||
#
|
||||
# The change in 1977 clearly seems to be the first daylight savings effort in
|
||||
# Iran. But the article doesn't mention what happened in 1978 (which was
|
||||
# still during the shah's government), or how things continued in 1979
|
||||
# onwards (which was during the Islamic Republic).
|
||||
|
||||
# From Francis Santoni (2022-06-01):
|
||||
# for Iran and 1977 the effective change is only 20 October
|
||||
# (UIT No. 143 17.XI.1977) and not 23 September (UIT No. 141 13.IX.1977).
|
||||
# UIT is the Operational Bulletin of International Telecommunication Union.
|
||||
|
||||
# From Roozbeh Pournader (2003-03-15):
|
||||
# This is an English translation of what I just found (originally in Persian).
|
||||
# The Gregorian dates in brackets are mine:
|
||||
|
|
@ -1462,65 +1566,12 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
|
|||
# leap year calculation involved. There has never been any serious
|
||||
# plan to change that law....
|
||||
#
|
||||
# From Paul Eggert (2018-11-30):
|
||||
# Go with Shanks & Pottenger before Sept. 1991, and with Pournader thereafter.
|
||||
# I used the following code in GNU Emacs 26.1 to generate the "Rule Iran"
|
||||
# lines from 2008 through 2087. Emacs 26.1 uses Ed Reingold's
|
||||
# cal-persia implementation of Birashk's approximation, which in the
|
||||
# 2008-2087 range disagrees with the astronomical Persian calendar
|
||||
# for Persian years 1404 (Gregorian 2025) and 1437 (Gregorian 2058), so
|
||||
# the following code special-cases those years. See Table 15.1, page 264, of:
|
||||
# Edward M. Reingold and Nachum Dershowitz, Calendrical Calculations:
|
||||
# The Ultimate Edition, Cambridge University Press (2018).
|
||||
# https://www.cambridge.org/fr/academic/subjects/computer-science/computing-general-interest/calendrical-calculations-ultimate-edition-4th-edition
|
||||
# Page 258, footnote 2, of this book says there is some dispute over what will
|
||||
# happen in 2091 (and some other years after that), so this code
|
||||
# stops in 2087, as 2088 and 2089 agree with the "max" rule below.
|
||||
# (cl-loop
|
||||
# initially (require 'cal-persia)
|
||||
# with first-persian-year = 1387
|
||||
# with last-persian-year = 1466
|
||||
# ;; Exceptional years in the above range,
|
||||
# ;; from Reingold & Dershowitz Table 15.1, page 264:
|
||||
# with exceptional-persian-years = '(1404 1437)
|
||||
# with range-start = nil
|
||||
# for persian-year from first-persian-year to last-persian-year
|
||||
# do
|
||||
# (let*
|
||||
# ((exceptional-year-offset
|
||||
# (if (member persian-year exceptional-persian-years) 1 0))
|
||||
# (beg-dst-absolute
|
||||
# (+ (calendar-persian-to-absolute (list 1 1 persian-year))
|
||||
# exceptional-year-offset))
|
||||
# (end-dst-absolute
|
||||
# (+ (calendar-persian-to-absolute (list 6 30 persian-year))
|
||||
# exceptional-year-offset))
|
||||
# (next-year-beg-dst-absolute
|
||||
# (+ (calendar-persian-to-absolute (list 1 1 (1+ persian-year)))
|
||||
# (if (member (1+ persian-year) exceptional-persian-years) 1 0)))
|
||||
# (beg-dst (calendar-gregorian-from-absolute beg-dst-absolute))
|
||||
# (end-dst (calendar-gregorian-from-absolute end-dst-absolute))
|
||||
# (next-year-beg-dst (calendar-gregorian-from-absolute
|
||||
# next-year-beg-dst-absolute))
|
||||
# (year (calendar-extract-year beg-dst))
|
||||
# (range-end (if range-start year "only")))
|
||||
# (setq range-start (or range-start year))
|
||||
# (when (or (/= (calendar-extract-day beg-dst)
|
||||
# (calendar-extract-day next-year-beg-dst))
|
||||
# (= persian-year last-persian-year))
|
||||
# (insert
|
||||
# (format
|
||||
# "Rule\tIran\t%d\t%s\t-\t%s\t%2d\t24:00\t1:00\t-\n"
|
||||
# range-start range-end
|
||||
# (calendar-month-name (calendar-extract-month beg-dst) t)
|
||||
# (calendar-extract-day beg-dst)))
|
||||
# (insert
|
||||
# (format
|
||||
# "Rule\tIran\t%d\t%s\t-\t%s\t%2d\t24:00\t0\t-\n"
|
||||
# range-start range-end
|
||||
# (calendar-month-name (calendar-extract-month end-dst) t)
|
||||
# (calendar-extract-day end-dst)))
|
||||
# (setq range-start nil))))
|
||||
# From Paul Eggert (2022-06-30):
|
||||
# Go with Pournader for 1935 through spring 1979, and for timestamps
|
||||
# after August 1991; go with with Shanks & Pottenger for other timestamps.
|
||||
# Go with Santoni's citation of the UIT for fall 1977, as 20 October 1977
|
||||
# is 28 Mehr 1356, consistent with the "Mehr" in Pournader's source.
|
||||
# Assume that the UIT's "1930" is UTC, i.e., 24:00 local time.
|
||||
#
|
||||
# From Oscar van Vlijmen (2005-03-30), writing about future
|
||||
# discrepancies between cal-persia and the Iranian calendar:
|
||||
|
|
@ -1554,10 +1605,23 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
|
|||
# be changed back to its previous state on the 24 hours of the
|
||||
# thirtieth day of Shahrivar.
|
||||
#
|
||||
# From Ali Mirjamali (2022-05-10):
|
||||
# Official IR News Agency announcement: irna.ir/xjJ3TT
|
||||
# ...
|
||||
# Highlights: DST will be cancelled for the next Iranian year 1402
|
||||
# (i.e 2023-March-21) and forthcoming years.
|
||||
#
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Iran 1978 1980 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 1978 only - Oct 20 24:00 0 -
|
||||
# Work around a bug in zic 2022a and earlier.
|
||||
Rule Iran 1910 only - Jan 1 00:00 0 -
|
||||
#
|
||||
Rule Iran 1977 only - Mar 21 23:00 1:00 -
|
||||
Rule Iran 1977 only - Oct 20 24:00 0 -
|
||||
Rule Iran 1978 only - Mar 24 24:00 1:00 -
|
||||
Rule Iran 1978 only - Aug 5 01:00 0 -
|
||||
Rule Iran 1979 only - May 26 24:00 1:00 -
|
||||
Rule Iran 1979 only - Sep 18 24:00 0 -
|
||||
Rule Iran 1980 only - Mar 20 24:00 1:00 -
|
||||
Rule Iran 1980 only - Sep 22 24:00 0 -
|
||||
Rule Iran 1991 only - May 2 24:00 1:00 -
|
||||
Rule Iran 1992 1995 - Mar 21 24:00 1:00 -
|
||||
|
|
@ -1588,85 +1652,13 @@ Rule Iran 2017 2019 - Mar 21 24:00 1:00 -
|
|||
Rule Iran 2017 2019 - Sep 21 24:00 0 -
|
||||
Rule Iran 2020 only - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2020 only - Sep 20 24:00 0 -
|
||||
Rule Iran 2021 2023 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2021 2023 - Sep 21 24:00 0 -
|
||||
Rule Iran 2024 only - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2024 only - Sep 20 24:00 0 -
|
||||
Rule Iran 2025 2027 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2025 2027 - Sep 21 24:00 0 -
|
||||
Rule Iran 2028 2029 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2028 2029 - Sep 20 24:00 0 -
|
||||
Rule Iran 2030 2031 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2030 2031 - Sep 21 24:00 0 -
|
||||
Rule Iran 2032 2033 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2032 2033 - Sep 20 24:00 0 -
|
||||
Rule Iran 2034 2035 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2034 2035 - Sep 21 24:00 0 -
|
||||
Rule Iran 2036 2037 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2036 2037 - Sep 20 24:00 0 -
|
||||
Rule Iran 2038 2039 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2038 2039 - Sep 21 24:00 0 -
|
||||
Rule Iran 2040 2041 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2040 2041 - Sep 20 24:00 0 -
|
||||
Rule Iran 2042 2043 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2042 2043 - Sep 21 24:00 0 -
|
||||
Rule Iran 2044 2045 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2044 2045 - Sep 20 24:00 0 -
|
||||
Rule Iran 2046 2047 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2046 2047 - Sep 21 24:00 0 -
|
||||
Rule Iran 2048 2049 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2048 2049 - Sep 20 24:00 0 -
|
||||
Rule Iran 2050 2051 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2050 2051 - Sep 21 24:00 0 -
|
||||
Rule Iran 2052 2053 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2052 2053 - Sep 20 24:00 0 -
|
||||
Rule Iran 2054 2055 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2054 2055 - Sep 21 24:00 0 -
|
||||
Rule Iran 2056 2057 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2056 2057 - Sep 20 24:00 0 -
|
||||
Rule Iran 2058 2059 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2058 2059 - Sep 21 24:00 0 -
|
||||
Rule Iran 2060 2062 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2060 2062 - Sep 20 24:00 0 -
|
||||
Rule Iran 2063 only - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2063 only - Sep 21 24:00 0 -
|
||||
Rule Iran 2064 2066 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2064 2066 - Sep 20 24:00 0 -
|
||||
Rule Iran 2067 only - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2067 only - Sep 21 24:00 0 -
|
||||
Rule Iran 2068 2070 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2068 2070 - Sep 20 24:00 0 -
|
||||
Rule Iran 2071 only - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2071 only - Sep 21 24:00 0 -
|
||||
Rule Iran 2072 2074 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2072 2074 - Sep 20 24:00 0 -
|
||||
Rule Iran 2075 only - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2075 only - Sep 21 24:00 0 -
|
||||
Rule Iran 2076 2078 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2076 2078 - Sep 20 24:00 0 -
|
||||
Rule Iran 2079 only - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2079 only - Sep 21 24:00 0 -
|
||||
Rule Iran 2080 2082 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2080 2082 - Sep 20 24:00 0 -
|
||||
Rule Iran 2083 only - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2083 only - Sep 21 24:00 0 -
|
||||
Rule Iran 2084 2086 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2084 2086 - Sep 20 24:00 0 -
|
||||
Rule Iran 2087 only - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2087 only - Sep 21 24:00 0 -
|
||||
#
|
||||
# The following rules are approximations starting in the year 2088.
|
||||
# These are the best post-2088 approximations available, given the
|
||||
# restrictions of a single rule using ordinary Gregorian dates.
|
||||
# At some point this table will need to be extended, though quite
|
||||
# possibly Iran will change the rules first.
|
||||
Rule Iran 2088 max - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2088 max - Sep 20 24:00 0 -
|
||||
Rule Iran 2021 2022 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2021 2022 - Sep 21 24:00 0 -
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Tehran 3:25:44 - LMT 1916
|
||||
3:25:44 - TMT 1946 # Tehran Mean Time
|
||||
3:30 - +0330 1977 Nov
|
||||
3:25:44 - TMT 1935 Jun 13 # Tehran Mean Time
|
||||
3:30 Iran +0330/+0430 1977 Oct 20 24:00
|
||||
4:00 Iran +04/+05 1979
|
||||
3:30 Iran +0330/+0430
|
||||
|
||||
|
|
@ -2488,9 +2480,9 @@ Zone Asia/Amman 2:23:44 - LMT 1931
|
|||
# the third time belt (before 1930 this means +03).
|
||||
|
||||
# From Alexander Konzurovski (2018-12-20):
|
||||
# Qyzyolrda Region (Asia/Qyzylorda) is changing its time zone from
|
||||
# UTC+6 to UTC+5 effective December 21st, 2018. The legal document is
|
||||
# located here: http://adilet.zan.kz/rus/docs/P1800000817 (russian language).
|
||||
# (Asia/Qyzylorda) is changing its time zone from UTC+6 to UTC+5
|
||||
# effective December 21st, 2018....
|
||||
# http://adilet.zan.kz/rus/docs/P1800000817 (russian language).
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
#
|
||||
|
|
@ -2767,20 +2759,8 @@ Zone Asia/Beirut 2:22:00 - LMT 1880
|
|||
Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 -
|
||||
Rule NBorneo 1935 1941 - Dec 14 0:00 0 -
|
||||
#
|
||||
# peninsular Malaysia
|
||||
# taken from Mok Ly Yng (2003-10-30)
|
||||
# https://web.archive.org/web/20190822231045/http://www.math.nus.edu.sg/~mathelmr/teaching/timezone.html
|
||||
# This agrees with Singapore since 1905-06-01.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Kuala_Lumpur 6:46:46 - LMT 1901 Jan 1
|
||||
6:55:25 - SMT 1905 Jun 1 # Singapore M.T.
|
||||
7:00 - +07 1933 Jan 1
|
||||
7:00 0:20 +0720 1936 Jan 1
|
||||
7:20 - +0720 1941 Sep 1
|
||||
7:30 - +0730 1942 Feb 16
|
||||
9:00 - +09 1945 Sep 12
|
||||
7:30 - +0730 1982 Jan 1
|
||||
8:00 - +08
|
||||
# For peninsular Malaysia see Asia/Singapore.
|
||||
#
|
||||
# Sabah & Sarawak
|
||||
# From Paul Eggert (2014-08-12):
|
||||
# The data entries here are mostly from Shanks & Pottenger, but the 1942, 1945
|
||||
|
|
@ -2791,12 +2771,14 @@ Zone Asia/Kuching 7:21:20 - LMT 1926 Mar
|
|||
8:00 NBorneo +08/+0820 1942 Feb 16
|
||||
9:00 - +09 1945 Sep 12
|
||||
8:00 - +08
|
||||
Link Asia/Kuching Asia/Brunei
|
||||
|
||||
# Maldives
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Maldives 4:54:00 - LMT 1880 # Malé
|
||||
4:54:00 - MMT 1960 # Malé Mean Time
|
||||
5:00 - +05
|
||||
Link Indian/Maldives Indian/Kerguelen
|
||||
|
||||
# Mongolia
|
||||
|
||||
|
|
@ -3631,6 +3613,7 @@ Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
|
|||
9:00 - +09 1945 Sep 12
|
||||
7:30 - +0730 1982 Jan 1
|
||||
8:00 - +08
|
||||
Link Asia/Singapore Asia/Kuala_Lumpur
|
||||
|
||||
# Spratly Is
|
||||
# no information
|
||||
|
|
@ -3865,7 +3848,7 @@ Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
|
|||
Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
|
||||
5:00 - +05 1930 Jun 21
|
||||
6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
|
||||
5:00 1:00 +05/+06 1991 Sep 9 2:00s
|
||||
5:00 1:00 +06 1991 Sep 9 2:00s
|
||||
5:00 - +05
|
||||
|
||||
# Thailand
|
||||
|
|
@ -3875,6 +3858,7 @@ Zone Asia/Bangkok 6:42:04 - LMT 1880
|
|||
7:00 - +07
|
||||
Link Asia/Bangkok Asia/Phnom_Penh # Cambodia
|
||||
Link Asia/Bangkok Asia/Vientiane # Laos
|
||||
Link Asia/Bangkok Indian/Christmas
|
||||
|
||||
# Turkmenistan
|
||||
# From Shanks & Pottenger.
|
||||
|
|
@ -3890,6 +3874,8 @@ Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad
|
|||
Zone Asia/Dubai 3:41:12 - LMT 1920
|
||||
4:00 - +04
|
||||
Link Asia/Dubai Asia/Muscat # Oman
|
||||
Link Asia/Dubai Indian/Mahe
|
||||
Link Asia/Dubai Indian/Reunion
|
||||
|
||||
# Uzbekistan
|
||||
# Byalokoz 1919 says Uzbekistan was 4:27:53.
|
||||
|
|
@ -3901,7 +3887,8 @@ Zone Asia/Samarkand 4:27:53 - LMT 1924 May 2
|
|||
6:00 - +06 1982 Apr 1
|
||||
5:00 RussiaAsia +05/+06 1992
|
||||
5:00 - +05
|
||||
# Milne says Tashkent was 4:37:10.8; round to nearest.
|
||||
# Milne says Tashkent was 4:37:10.8.
|
||||
#STDOFF 4:37:10.8
|
||||
Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
|
||||
5:00 - +05 1930 Jun 21
|
||||
6:00 RussiaAsia +06/+07 1991 Mar 31 2:00
|
||||
|
|
@ -3920,7 +3907,7 @@ Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
|
|||
# The English-language name of Vietnam's most populous city is "Ho Chi Minh
|
||||
# City"; use Ho_Chi_Minh below to avoid a name of more than 14 characters.
|
||||
|
||||
# From Paul Eggert (2014-10-21) after a heads-up from Trần Ngọc Quân:
|
||||
# From Paul Eggert (2022-07-27) after a 2014 heads-up from Trần Ngọc Quân:
|
||||
# Trần Tiến Bình's authoritative book "Lịch Việt Nam: thế kỷ XX-XXI (1901-2100)"
|
||||
# (Nhà xuất bản Văn Hoá - Thông Tin, Hanoi, 2005), pp 49-50,
|
||||
# is quoted verbatim in:
|
||||
|
|
@ -3932,8 +3919,8 @@ Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
|
|||
# The 1906 transition was effective July 1 and standardized Indochina to
|
||||
# Phù Liễn Observatory, legally 104° 17' 17" east of Paris.
|
||||
# It's unclear whether this meant legal Paris Mean Time (00:09:21) or
|
||||
# the Paris Meridian (2° 20' 14.03" E); the former yields 07:06:30.1333...
|
||||
# and the latter 07:06:29.333... so either way it rounds to 07:06:30,
|
||||
# the Paris Meridian; for now guess the former and round the exact
|
||||
# 07:06:30.1333... to 07:06:30.13 as the legal spec used 66 2/3 ms precision.
|
||||
# which is used below even though the modern-day Phù Liễn Observatory
|
||||
# is closer to 07:06:31. Abbreviate Phù Liễn Mean Time as PLMT.
|
||||
#
|
||||
|
|
@ -3960,7 +3947,8 @@ Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
|
|||
# NXB Thuận Hoá, Huế, 1995.
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Ho_Chi_Minh 7:06:40 - LMT 1906 Jul 1
|
||||
#STDOFF 7:06:30.13
|
||||
Zone Asia/Ho_Chi_Minh 7:06:30 - LMT 1906 Jul 1
|
||||
7:06:30 - PLMT 1911 May 1 # Phù Liễn MT
|
||||
7:00 - +07 1942 Dec 31 23:00
|
||||
8:00 - +08 1945 Mar 14 23:00
|
||||
|
|
|
|||
|
|
@ -275,16 +275,10 @@ Zone Antarctica/Macquarie 0 - -00 1899 Nov
|
|||
10:00 AT AE%sT
|
||||
|
||||
# Christmas
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Christmas 7:02:52 - LMT 1895 Feb
|
||||
7:00 - +07
|
||||
# See Asia/Bangkok.
|
||||
|
||||
# Cocos (Keeling) Is
|
||||
# These islands were ruled by the Ross family from about 1830 to 1978.
|
||||
# We don't know when standard time was introduced; for now, we guess 1900.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Cocos 6:27:40 - LMT 1900
|
||||
6:30 - +0630
|
||||
# See Asia/Yangon.
|
||||
|
||||
|
||||
# Fiji
|
||||
|
|
@ -501,6 +495,11 @@ Link Pacific/Guam Pacific/Saipan # N Mariana Is
|
|||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
|
||||
12:00 - +12
|
||||
Link Pacific/Tarawa Pacific/Funafuti
|
||||
Link Pacific/Tarawa Pacific/Majuro
|
||||
Link Pacific/Tarawa Pacific/Wake
|
||||
Link Pacific/Tarawa Pacific/Wallis
|
||||
|
||||
Zone Pacific/Kanton 0 - -00 1937 Aug 31
|
||||
-12:00 - -12 1979 Oct
|
||||
-11:00 - -11 1994 Dec 31
|
||||
|
|
@ -514,15 +513,8 @@ Zone Pacific/Kiritimati -10:29:20 - LMT 1901
|
|||
# See Pacific/Guam.
|
||||
|
||||
# Marshall Is
|
||||
# See Pacific/Tarawa for most locations.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Majuro 11:24:48 - LMT 1901
|
||||
11:00 - +11 1914 Oct
|
||||
9:00 - +09 1919 Feb 1
|
||||
11:00 - +11 1937
|
||||
10:00 - +10 1941 Apr 1
|
||||
9:00 - +09 1944 Jan 30
|
||||
11:00 - +11 1969 Oct
|
||||
12:00 - +12
|
||||
Zone Pacific/Kwajalein 11:09:20 - LMT 1901
|
||||
11:00 - +11 1937
|
||||
10:00 - +10 1941 Apr 1
|
||||
|
|
@ -532,22 +524,9 @@ Zone Pacific/Kwajalein 11:09:20 - LMT 1901
|
|||
12:00 - +12
|
||||
|
||||
# Micronesia
|
||||
# For Chuuk and Yap see Pacific/Port_Moresby.
|
||||
# For Pohnpei see Pacific/Guadalcanal.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Chuuk -13:52:52 - LMT 1844 Dec 31
|
||||
10:07:08 - LMT 1901
|
||||
10:00 - +10 1914 Oct
|
||||
9:00 - +09 1919 Feb 1
|
||||
10:00 - +10 1941 Apr 1
|
||||
9:00 - +09 1945 Aug
|
||||
10:00 - +10
|
||||
Zone Pacific/Pohnpei -13:27:08 - LMT 1844 Dec 31 # Kolonia
|
||||
10:32:52 - LMT 1901
|
||||
11:00 - +11 1914 Oct
|
||||
9:00 - +09 1919 Feb 1
|
||||
11:00 - +11 1937
|
||||
10:00 - +10 1941 Apr 1
|
||||
9:00 - +09 1945 Aug
|
||||
11:00 - +11
|
||||
Zone Pacific/Kosrae -13:08:04 - LMT 1844 Dec 31
|
||||
10:51:56 - LMT 1901
|
||||
11:00 - +11 1914 Oct
|
||||
|
|
@ -617,12 +596,12 @@ Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 -
|
|||
Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2
|
||||
11:30 NZ NZ%sT 1946 Jan 1
|
||||
12:00 NZ NZ%sT
|
||||
Link Pacific/Auckland Antarctica/McMurdo
|
||||
|
||||
Zone Pacific/Chatham 12:13:48 - LMT 1868 Nov 2
|
||||
12:15 - +1215 1946 Jan 1
|
||||
12:45 Chatham +1245/+1345
|
||||
|
||||
Link Pacific/Auckland Antarctica/McMurdo
|
||||
|
||||
# Auckland Is
|
||||
# uninhabited; Māori and Moriori, colonial settlers, pastoralists, sealers,
|
||||
# and scientific personnel have wintered
|
||||
|
|
@ -681,7 +660,7 @@ Zone Pacific/Rarotonga 13:20:56 - LMT 1899 Dec 26 # Avarua
|
|||
|
||||
|
||||
# Niue
|
||||
# See Pacific/Raratonga comments for 1952 transition.
|
||||
# See Pacific/Rarotonga comments for 1952 transition.
|
||||
#
|
||||
# From Tim Parenti (2021-09-13):
|
||||
# Consecutive contemporaneous editions of The Air Almanac listed -11:20 for
|
||||
|
|
@ -717,6 +696,7 @@ Zone Pacific/Port_Moresby 9:48:40 - LMT 1880
|
|||
9:48:32 - PMMT 1895 # Port Moresby Mean Time
|
||||
10:00 - +10
|
||||
Link Pacific/Port_Moresby Antarctica/DumontDUrville
|
||||
Link Pacific/Port_Moresby Pacific/Chuuk
|
||||
#
|
||||
# From Paul Eggert (2014-10-13):
|
||||
# Base the Bougainville entry on the Arawa-Kieta region, which appears to have
|
||||
|
|
@ -844,6 +824,7 @@ Zone Pacific/Apia 12:33:04 - LMT 1892 Jul 5
|
|||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara
|
||||
11:00 - +11
|
||||
Link Pacific/Guadalcanal Pacific/Pohnpei
|
||||
|
||||
# Tokelau
|
||||
#
|
||||
|
|
@ -884,9 +865,7 @@ Zone Pacific/Tongatapu 12:19:12 - LMT 1945 Sep 10
|
|||
13:00 Tonga +13/+14
|
||||
|
||||
# Tuvalu
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Funafuti 11:56:52 - LMT 1901
|
||||
12:00 - +12
|
||||
# See Pacific/Tarawa.
|
||||
|
||||
|
||||
# US minor outlying islands
|
||||
|
|
@ -945,9 +924,7 @@ Zone Pacific/Funafuti 11:56:52 - LMT 1901
|
|||
# uninhabited since World War II; was probably like Pacific/Kiritimati
|
||||
|
||||
# Wake
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Wake 11:06:28 - LMT 1901
|
||||
12:00 - +12
|
||||
# See Pacific/Tarawa.
|
||||
|
||||
|
||||
# Vanuatu
|
||||
|
|
@ -986,9 +963,7 @@ Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
|
|||
11:00 Vanuatu +11/+12
|
||||
|
||||
# Wallis and Futuna
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Wallis 12:15:20 - LMT 1901
|
||||
12:00 - +12
|
||||
# See Pacific/Tarawa.
|
||||
|
||||
###############################################################################
|
||||
|
||||
|
|
@ -1306,6 +1281,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
|||
# to have the extra hour of sunshine removed from their area." See:
|
||||
# Daylight saving coming to WA in 2019. Guardian Express. 2018-04-01.
|
||||
# https://www.communitynews.com.au/guardian-express/news/exclusive-daylight-savings-coming-wa-summer-2018/
|
||||
# [The article ends with "Today's date is April 1."]
|
||||
|
||||
# Queensland
|
||||
|
||||
|
|
@ -1849,16 +1825,12 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
|||
# "In Marshall Islands, Friday is followed by Sunday", NY Times. 1993-08-22.
|
||||
# https://www.nytimes.com/1993/08/22/world/in-marshall-islands-friday-is-followed-by-sunday.html
|
||||
|
||||
# From Phake Nick (2018-10-27):
|
||||
# <https://wiki.suikawiki.org/n/南洋群島の標準時> ... pointed out that
|
||||
# currently tzdata say Pacific/Kwajalein switched from GMT+11 to GMT-12 in
|
||||
# 1969 October without explanation, however an 1993 article from NYT say it
|
||||
# synchorized its day with US mainland about 40 years ago and thus the switch
|
||||
# should occur at around 1950s instead.
|
||||
#
|
||||
# From Paul Eggert (2018-11-18):
|
||||
# The NYT (actually, AP) article is vague and possibly wrong about this.
|
||||
# The article says the earlier switch was "40 years ago when the United States
|
||||
# From Paul Eggert (2022-03-31):
|
||||
# Phake Nick (2018-10-27) noted <https://wiki.suikawiki.org/n/南洋群島の標準時>'s
|
||||
# citation of a 1993 AP article published in the New York Times saying
|
||||
# Kwajalein synchronized its day with the US mainland about 40 years earlier.
|
||||
# However the AP article is vague and possibly wrong about this. The article
|
||||
# says the earlier switch was "about 40 years ago when the United States
|
||||
# Army established a missile test range here". However, the Kwajalein Test
|
||||
# Center was established on 1960-10-01 and was run by the US Navy. It was
|
||||
# transferred to the US Army on 1964-07-01. See "Seize the High Ground"
|
||||
|
|
@ -1905,13 +1877,6 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
|||
# Like the Ladrones (see Guam commentary), assume the Spanish East Indies
|
||||
# kept American time until the Philippines switched at the end of 1844.
|
||||
|
||||
# Alan Eugene Davis writes (1996-03-16),
|
||||
# "I am certain, having lived there for the past decade, that 'Truk'
|
||||
# (now properly known as Chuuk) ... is in the time zone GMT+10."
|
||||
#
|
||||
# Shanks & Pottenger write that Truk switched from UT +10 to +11
|
||||
# on 1978-10-01; ignore this for now.
|
||||
|
||||
# From Paul Eggert (1999-10-29):
|
||||
# The Federated States of Micronesia Visitors Board writes in
|
||||
# The Federated States of Micronesia - Visitor Information (1999-01-26)
|
||||
|
|
@ -2242,7 +2207,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
|||
# through the third Sunday in January at 03:00, like Fiji, for now.
|
||||
|
||||
# From David Wade (2017-10-18):
|
||||
# In August government was disolved by the King. The current prime minister
|
||||
# In August government was dissolved by the King. The current prime minister
|
||||
# continued in office in care taker mode. It is easy to see that few
|
||||
# decisions will be made until elections 16th November.
|
||||
#
|
||||
|
|
@ -2250,26 +2215,6 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
|||
# For now, guess that DST is discontinued. That's what the IATA is guessing.
|
||||
|
||||
|
||||
# Wake
|
||||
|
||||
# From Vernice Anderson, Personal Secretary to Philip Jessup,
|
||||
# US Ambassador At Large (oral history interview, 1971-02-02):
|
||||
#
|
||||
# Saturday, the 14th [of October, 1950] - ... The time was all the
|
||||
# more confusing at that point, because we had crossed the
|
||||
# International Date Line, thus getting two Sundays. Furthermore, we
|
||||
# discovered that Wake Island had two hours of daylight saving time
|
||||
# making calculation of time in Washington difficult if not almost
|
||||
# impossible.
|
||||
#
|
||||
# https://www.trumanlibrary.org/oralhist/andrsonv.htm
|
||||
|
||||
# From Paul Eggert (2003-03-23):
|
||||
# We have no other report of DST in Wake Island, so omit this info for now.
|
||||
|
||||
# See also the commentary for Micronesia.
|
||||
|
||||
|
||||
###############################################################################
|
||||
|
||||
# The International Date Line
|
||||
|
|
|
|||
|
|
@ -27,10 +27,15 @@
|
|||
# 2009-05-17 by Arthur David Olson.
|
||||
|
||||
# This file provides links from old or merged timezone names to current ones.
|
||||
# Many names changed in late 1993. Several of these names are
|
||||
# Many names changed in late 1993, and many merged names moved here
|
||||
# in the period from 2013 through 2022. Several of these names are
|
||||
# also present in the file 'backzone', which has data important only
|
||||
# for pre-1970 timestamps and so is out of scope for tzdb proper.
|
||||
|
||||
# Although this file is optional and tzdb will work if you omit it by
|
||||
# building with 'make BACKWARD=', in practice downstream users
|
||||
# typically use this file for backward compatibility.
|
||||
|
||||
# Link TARGET LINK-NAME
|
||||
Link Africa/Nairobi Africa/Asmera
|
||||
Link Africa/Abidjan Africa/Timbuktu
|
||||
|
|
@ -71,7 +76,7 @@ Link Asia/Thimphu Asia/Thimbu
|
|||
Link Asia/Makassar Asia/Ujung_Pandang
|
||||
Link Asia/Ulaanbaatar Asia/Ulan_Bator
|
||||
Link Atlantic/Faroe Atlantic/Faeroe
|
||||
Link Europe/Oslo Atlantic/Jan_Mayen
|
||||
Link Europe/Berlin Atlantic/Jan_Mayen
|
||||
Link Australia/Sydney Australia/ACT
|
||||
Link Australia/Sydney Australia/Canberra
|
||||
Link Australia/Hobart Australia/Currie
|
||||
|
|
@ -106,6 +111,7 @@ Link Africa/Cairo Egypt
|
|||
Link Europe/Dublin Eire
|
||||
Link Etc/UTC Etc/UCT
|
||||
Link Europe/London Europe/Belfast
|
||||
Link Europe/Kyiv Europe/Kiev
|
||||
Link Europe/Chisinau Europe/Tiraspol
|
||||
Link Europe/London GB
|
||||
Link Europe/London GB-Eire
|
||||
|
|
@ -114,7 +120,7 @@ Link Etc/GMT GMT-0
|
|||
Link Etc/GMT GMT0
|
||||
Link Etc/GMT Greenwich
|
||||
Link Asia/Hong_Kong Hongkong
|
||||
Link Atlantic/Reykjavik Iceland
|
||||
Link Africa/Abidjan Iceland
|
||||
Link Asia/Tehran Iran
|
||||
Link Asia/Jerusalem Israel
|
||||
Link America/Jamaica Jamaica
|
||||
|
|
@ -130,10 +136,10 @@ Link America/Denver Navajo
|
|||
Link Asia/Shanghai PRC
|
||||
Link Pacific/Kanton Pacific/Enderbury
|
||||
Link Pacific/Honolulu Pacific/Johnston
|
||||
Link Pacific/Pohnpei Pacific/Ponape
|
||||
Link Pacific/Guadalcanal Pacific/Ponape
|
||||
Link Pacific/Pago_Pago Pacific/Samoa
|
||||
Link Pacific/Chuuk Pacific/Truk
|
||||
Link Pacific/Chuuk Pacific/Yap
|
||||
Link Pacific/Port_Moresby Pacific/Truk
|
||||
Link Pacific/Port_Moresby Pacific/Yap
|
||||
Link Europe/Warsaw Poland
|
||||
Link Europe/Lisbon Portugal
|
||||
Link Asia/Taipei ROC
|
||||
|
|
|
|||
|
|
@ -40,12 +40,16 @@
|
|||
# behind GMT but uses the completely misleading abbreviation "GMT".
|
||||
|
||||
Zone Etc/GMT 0 - GMT
|
||||
|
||||
# The following zone is used by tzcode functions like gmtime,
|
||||
# which load the "UTC" file to handle seconds properly.
|
||||
Zone Etc/UTC 0 - UTC
|
||||
|
||||
# The following link uses older naming conventions,
|
||||
# but it belongs here, not in the file 'backward',
|
||||
# as functions like gmtime load the "GMT" file to handle leap seconds properly.
|
||||
# We want this to work even on installations that omit the other older names.
|
||||
# as it is needed for tzcode releases through 2022a,
|
||||
# where functions like gmtime load "GMT" instead of the "Etc/UTC".
|
||||
# We want this to work even on installations that omit 'backward'.
|
||||
Link Etc/GMT GMT
|
||||
|
||||
Link Etc/UTC Etc/Universal
|
||||
|
|
|
|||
|
|
@ -326,8 +326,7 @@
|
|||
# UT-00:25:22 and cites the International Telegraph Bureau. As it is
|
||||
# not clear that there was any practical significance to the change
|
||||
# from UT-00:25:22 to UT-00:25:21.1 in civil timekeeping, omit this
|
||||
# transition for now and just use the latter value, omitting its
|
||||
# fraction since our format cannot represent fractions.
|
||||
# transition for now and just use the latter value.
|
||||
|
||||
# "Countess Markievicz ... claimed that the [1916] abolition of Dublin Mean Time
|
||||
# was among various actions undertaken by the 'English' government that
|
||||
|
|
@ -523,7 +522,7 @@ Rule GB-Eire 1990 1995 - Oct Sun>=22 1:00u 0 GMT
|
|||
# Use Europe/London for Jersey, Guernsey, and the Isle of Man.
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/London -0:01:15 - LMT 1847 Dec 1 0:00s
|
||||
Zone Europe/London -0:01:15 - LMT 1847 Dec 1
|
||||
0:00 GB-Eire %s 1968 Oct 27
|
||||
1:00 - BST 1971 Oct 31 2:00u
|
||||
0:00 GB-Eire %s 1996
|
||||
|
|
@ -561,7 +560,8 @@ Rule Eire 1990 1995 - Oct Sun>=22 1:00u -1:00 -
|
|||
Rule Eire 1996 max - Oct lastSun 1:00u -1:00 -
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2
|
||||
#STDOFF -0:25:21.1
|
||||
Zone Europe/Dublin -0:25:21 - LMT 1880 Aug 2
|
||||
-0:25:21 - DMT 1916 May 21 2:00s
|
||||
-0:25:21 1:00 IST 1916 Oct 1 2:00s
|
||||
0:00 GB-Eire %s 1921 Dec 6 # independence
|
||||
|
|
@ -984,6 +984,8 @@ Zone Europe/Brussels 0:17:30 - LMT 1880
|
|||
1:00 C-Eur CE%sT 1944 Sep 3
|
||||
1:00 Belgium CE%sT 1977
|
||||
1:00 EU CE%sT
|
||||
Link Europe/Brussels Europe/Amsterdam
|
||||
Link Europe/Brussels Europe/Luxembourg
|
||||
|
||||
# Bosnia and Herzegovina
|
||||
# See Europe/Belgrade.
|
||||
|
|
@ -1046,62 +1048,12 @@ Zone Europe/Prague 0:57:44 - LMT 1850
|
|||
# End of rearguard section.
|
||||
1:00 Czech CE%sT 1979
|
||||
1:00 EU CE%sT
|
||||
# Use Europe/Prague also for Slovakia.
|
||||
Link Europe/Prague Europe/Bratislava
|
||||
|
||||
|
||||
# Denmark, Faroe Islands, and Greenland
|
||||
# For Denmark see Europe/Berlin.
|
||||
|
||||
# From Jesper Nørgaard Welen (2005-04-26):
|
||||
# the law [introducing standard time] was in effect from 1894-01-01....
|
||||
# The page https://www.retsinformation.dk/eli/lta/1893/83
|
||||
# confirms this, and states that the law was put forth 1893-03-29.
|
||||
#
|
||||
# The EU [actually, EEC and Euratom] treaty with effect from 1973:
|
||||
# https://www.retsinformation.dk/eli/lta/1972/21100
|
||||
#
|
||||
# This provoked a new law from 1974 to make possible summer time changes
|
||||
# in subsequent decrees with the law
|
||||
# https://www.retsinformation.dk/eli/lta/1974/223
|
||||
#
|
||||
# It seems however that no decree was set forward until 1980. I have
|
||||
# not found any decree, but in another related law, the effecting DST
|
||||
# changes are stated explicitly to be from 1980-04-06 at 02:00 to
|
||||
# 1980-09-28 at 02:00. If this is true, this differs slightly from
|
||||
# the EU rule in that DST runs to 02:00, not 03:00. We don't know
|
||||
# when Denmark began using the EU rule correctly, but we have only
|
||||
# confirmation of the 1980-time, so I presume it was correct in 1981:
|
||||
# The law is about the management of the extra hour, concerning
|
||||
# working hours reported and effect on obligatory-rest rules (which
|
||||
# was suspended on that night):
|
||||
# https://web.archive.org/web/20140104053304/https://www.retsinformation.dk/Forms/R0710.aspx?id=60267
|
||||
|
||||
# From Jesper Nørgaard Welen (2005-06-11):
|
||||
# The Herning Folkeblad (1980-09-26) reported that the night between
|
||||
# Saturday and Sunday the clock is set back from three to two.
|
||||
|
||||
# From Paul Eggert (2005-06-11):
|
||||
# Hence the "02:00" of the 1980 law refers to standard time, not
|
||||
# wall-clock time, and so the EU rules were in effect in 1980.
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Denmark 1916 only - May 14 23:00 1:00 S
|
||||
Rule Denmark 1916 only - Sep 30 23:00 0 -
|
||||
Rule Denmark 1940 only - May 15 0:00 1:00 S
|
||||
Rule Denmark 1945 only - Apr 2 2:00s 1:00 S
|
||||
Rule Denmark 1945 only - Aug 15 2:00s 0 -
|
||||
Rule Denmark 1946 only - May 1 2:00s 1:00 S
|
||||
Rule Denmark 1946 only - Sep 1 2:00s 0 -
|
||||
Rule Denmark 1947 only - May 4 2:00s 1:00 S
|
||||
Rule Denmark 1947 only - Aug 10 2:00s 0 -
|
||||
Rule Denmark 1948 only - May 9 2:00s 1:00 S
|
||||
Rule Denmark 1948 only - Aug 8 2:00s 0 -
|
||||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Copenhagen 0:50:20 - LMT 1890
|
||||
0:50:20 - CMT 1894 Jan 1 # Copenhagen MT
|
||||
1:00 Denmark CE%sT 1942 Nov 2 2:00s
|
||||
1:00 C-Eur CE%sT 1945 Apr 2 2:00
|
||||
1:00 Denmark CE%sT 1980
|
||||
1:00 EU CE%sT
|
||||
Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Tórshavn
|
||||
0:00 - WET 1981
|
||||
0:00 EU WE%sT
|
||||
|
|
@ -1321,10 +1273,10 @@ Rule Finland 1942 only - Oct 4 1:00 0 -
|
|||
Rule Finland 1981 1982 - Mar lastSun 2:00 1:00 S
|
||||
Rule Finland 1981 1982 - Sep lastSun 3:00 0 -
|
||||
|
||||
# Milne says Helsinki (Helsingfors) time was 1:39:49.2 (official document);
|
||||
# round to nearest.
|
||||
# Milne says Helsinki (Helsingfors) time was 1:39:49.2 (official document).
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
#STDOFF 1:39:49.2
|
||||
Zone Europe/Helsinki 1:39:49 - LMT 1878 May 31
|
||||
1:39:49 - HMT 1921 May # Helsinki Mean Time
|
||||
2:00 Finland EE%sT 1983
|
||||
|
|
@ -1471,6 +1423,7 @@ Zone Europe/Paris 0:09:21 - LMT 1891 Mar 16
|
|||
0:00 France WE%sT 1945 Sep 16 3:00
|
||||
1:00 France CE%sT 1977
|
||||
1:00 EU CE%sT
|
||||
Link Europe/Paris Europe/Monaco
|
||||
|
||||
# Germany
|
||||
|
||||
|
|
@ -1514,21 +1467,11 @@ Zone Europe/Berlin 0:53:28 - LMT 1893 Apr
|
|||
1:00 SovietZone CE%sT 1946
|
||||
1:00 Germany CE%sT 1980
|
||||
1:00 EU CE%sT
|
||||
Link Europe/Berlin Arctic/Longyearbyen
|
||||
Link Europe/Berlin Europe/Copenhagen
|
||||
Link Europe/Berlin Europe/Oslo
|
||||
Link Europe/Berlin Europe/Stockholm
|
||||
|
||||
# From Tobias Conradi (2011-09-12):
|
||||
# Büsingen <http://www.buesingen.de>, surrounded by the Swiss canton
|
||||
# Schaffhausen, did not start observing DST in 1980 as the rest of DE
|
||||
# (West Germany at that time) and DD (East Germany at that time) did.
|
||||
# DD merged into DE, the area is currently covered by code DE in ISO 3166-1,
|
||||
# which in turn is covered by the zone Europe/Berlin.
|
||||
#
|
||||
# Source for the time in Büsingen 1980:
|
||||
# http://www.srf.ch/player/video?id=c012c029-03b7-4c2b-9164-aa5902cd58d3
|
||||
|
||||
# From Arthur David Olson (2012-03-03):
|
||||
# Büsingen and Zurich have shared clocks since 1970.
|
||||
|
||||
Link Europe/Zurich Europe/Busingen
|
||||
|
||||
# Georgia
|
||||
# Please see the "asia" file for Asia/Tbilisi.
|
||||
|
|
@ -1537,7 +1480,7 @@ Link Europe/Zurich Europe/Busingen
|
|||
|
||||
# Gibraltar
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Gibraltar -0:21:24 - LMT 1880 Aug 2 0:00s
|
||||
Zone Europe/Gibraltar -0:21:24 - LMT 1880 Aug 2
|
||||
0:00 GB-Eire %s 1957 Apr 14 2:00
|
||||
1:00 - CET 1982
|
||||
1:00 EU CE%sT
|
||||
|
|
@ -1648,62 +1591,7 @@ Zone Europe/Budapest 1:16:20 - LMT 1890 Nov 1
|
|||
1:00 EU CE%sT
|
||||
|
||||
# Iceland
|
||||
#
|
||||
# From Adam David (1993-11-06):
|
||||
# The name of the timezone in Iceland for system / mail / news purposes is GMT.
|
||||
#
|
||||
# (1993-12-05):
|
||||
# This material is paraphrased from the 1988 edition of the University of
|
||||
# Iceland Almanak.
|
||||
#
|
||||
# From January 1st, 1908 the whole of Iceland was standardised at 1 hour
|
||||
# behind GMT. Previously, local mean solar time was used in different parts
|
||||
# of Iceland, the almanak had been based on Reykjavík mean solar time which
|
||||
# was 1 hour and 28 minutes behind GMT.
|
||||
#
|
||||
# "first day of winter" referred to [below] means the first day of the 26 weeks
|
||||
# of winter, according to the old icelandic calendar that dates back to the
|
||||
# time the norsemen first settled Iceland. The first day of winter is always
|
||||
# Saturday, but is not dependent on the Julian or Gregorian calendars.
|
||||
#
|
||||
# (1993-12-10):
|
||||
# I have a reference from the Oxford Icelandic-English dictionary for the
|
||||
# beginning of winter, which ties it to the ecclesiastical calendar (and thus
|
||||
# to the julian/gregorian calendar) over the period in question.
|
||||
# the winter begins on the Saturday next before St. Luke's day
|
||||
# (old style), or on St. Luke's day, if a Saturday.
|
||||
# St. Luke's day ought to be traceable from ecclesiastical sources. "old style"
|
||||
# might be a reference to the Julian calendar as opposed to Gregorian, or it
|
||||
# might mean something else (???).
|
||||
#
|
||||
# From Paul Eggert (2014-11-22):
|
||||
# The information below is taken from the 1988 Almanak; see
|
||||
# http://www.almanak.hi.is/klukkan.html
|
||||
#
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Iceland 1917 1919 - Feb 19 23:00 1:00 -
|
||||
Rule Iceland 1917 only - Oct 21 1:00 0 -
|
||||
Rule Iceland 1918 1919 - Nov 16 1:00 0 -
|
||||
Rule Iceland 1921 only - Mar 19 23:00 1:00 -
|
||||
Rule Iceland 1921 only - Jun 23 1:00 0 -
|
||||
Rule Iceland 1939 only - Apr 29 23:00 1:00 -
|
||||
Rule Iceland 1939 only - Oct 29 2:00 0 -
|
||||
Rule Iceland 1940 only - Feb 25 2:00 1:00 -
|
||||
Rule Iceland 1940 1941 - Nov Sun>=2 1:00s 0 -
|
||||
Rule Iceland 1941 1942 - Mar Sun>=2 1:00s 1:00 -
|
||||
# 1943-1946 - first Sunday in March until first Sunday in winter
|
||||
Rule Iceland 1943 1946 - Mar Sun>=1 1:00s 1:00 -
|
||||
Rule Iceland 1942 1948 - Oct Sun>=22 1:00s 0 -
|
||||
# 1947-1967 - first Sunday in April until first Sunday in winter
|
||||
Rule Iceland 1947 1967 - Apr Sun>=1 1:00s 1:00 -
|
||||
# 1949 and 1967 Oct transitions delayed by 1 week
|
||||
Rule Iceland 1949 only - Oct 30 1:00s 0 -
|
||||
Rule Iceland 1950 1966 - Oct Sun>=22 1:00s 0 -
|
||||
Rule Iceland 1967 only - Oct 29 1:00s 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Atlantic/Reykjavik -1:28 - LMT 1908
|
||||
-1:00 Iceland -01/+00 1968 Apr 7 1:00s
|
||||
0:00 - GMT
|
||||
# See Africa/Abidjan.
|
||||
|
||||
# Italy
|
||||
#
|
||||
|
|
@ -1819,19 +1707,19 @@ Rule Italy 1978 only - Oct 1 0:00s 0 -
|
|||
Rule Italy 1979 only - Sep 30 0:00s 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Rome 0:49:56 - LMT 1866 Dec 12
|
||||
0:49:56 - RMT 1893 Oct 31 23:49:56 # Rome Mean
|
||||
0:49:56 - RMT 1893 Oct 31 23:00u # Rome Mean
|
||||
1:00 Italy CE%sT 1943 Sep 10
|
||||
1:00 C-Eur CE%sT 1944 Jun 4
|
||||
1:00 Italy CE%sT 1980
|
||||
1:00 EU CE%sT
|
||||
Link Europe/Rome Europe/Vatican
|
||||
Link Europe/Rome Europe/San_Marino
|
||||
|
||||
|
||||
# Kosovo
|
||||
# See Europe/Belgrade.
|
||||
|
||||
|
||||
Link Europe/Rome Europe/Vatican
|
||||
Link Europe/Rome Europe/San_Marino
|
||||
|
||||
# Latvia
|
||||
|
||||
# From Liene Kanepe (1998-09-17):
|
||||
|
|
@ -1915,16 +1803,7 @@ Zone Europe/Riga 1:36:34 - LMT 1880
|
|||
2:00 EU EE%sT
|
||||
|
||||
# Liechtenstein
|
||||
|
||||
# From Paul Eggert (2013-09-09):
|
||||
# Shanks & Pottenger say Vaduz is like Zurich.
|
||||
|
||||
# From Alois Treindl (2019-07-04):
|
||||
# I was able to access the online archive of the Vaduz paper Vaterland ...
|
||||
# I could confirm from the paper that Liechtenstein did in fact follow
|
||||
# the same DST in 1941 and 1942 as Switzerland did.
|
||||
|
||||
Link Europe/Zurich Europe/Vaduz
|
||||
# See Europe/Zurich.
|
||||
|
||||
|
||||
# Lithuania
|
||||
|
|
@ -1980,40 +1859,7 @@ Zone Europe/Vilnius 1:41:16 - LMT 1880
|
|||
2:00 EU EE%sT
|
||||
|
||||
# Luxembourg
|
||||
# Whitman disagrees with most of these dates in minor ways;
|
||||
# go with Shanks & Pottenger.
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Lux 1916 only - May 14 23:00 1:00 S
|
||||
Rule Lux 1916 only - Oct 1 1:00 0 -
|
||||
Rule Lux 1917 only - Apr 28 23:00 1:00 S
|
||||
Rule Lux 1917 only - Sep 17 1:00 0 -
|
||||
Rule Lux 1918 only - Apr Mon>=15 2:00s 1:00 S
|
||||
Rule Lux 1918 only - Sep Mon>=15 2:00s 0 -
|
||||
Rule Lux 1919 only - Mar 1 23:00 1:00 S
|
||||
Rule Lux 1919 only - Oct 5 3:00 0 -
|
||||
Rule Lux 1920 only - Feb 14 23:00 1:00 S
|
||||
Rule Lux 1920 only - Oct 24 2:00 0 -
|
||||
Rule Lux 1921 only - Mar 14 23:00 1:00 S
|
||||
Rule Lux 1921 only - Oct 26 2:00 0 -
|
||||
Rule Lux 1922 only - Mar 25 23:00 1:00 S
|
||||
Rule Lux 1922 only - Oct Sun>=2 1:00 0 -
|
||||
Rule Lux 1923 only - Apr 21 23:00 1:00 S
|
||||
Rule Lux 1923 only - Oct Sun>=2 2:00 0 -
|
||||
Rule Lux 1924 only - Mar 29 23:00 1:00 S
|
||||
Rule Lux 1924 1928 - Oct Sun>=2 1:00 0 -
|
||||
Rule Lux 1925 only - Apr 5 23:00 1:00 S
|
||||
Rule Lux 1926 only - Apr 17 23:00 1:00 S
|
||||
Rule Lux 1927 only - Apr 9 23:00 1:00 S
|
||||
Rule Lux 1928 only - Apr 14 23:00 1:00 S
|
||||
Rule Lux 1929 only - Apr 20 23:00 1:00 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Luxembourg 0:24:36 - LMT 1904 Jun
|
||||
1:00 Lux CE%sT 1918 Nov 25
|
||||
0:00 Lux WE%sT 1929 Oct 6 2:00s
|
||||
0:00 Belgium WE%sT 1940 May 14 3:00
|
||||
1:00 C-Eur WE%sT 1944 Sep 18 3:00
|
||||
1:00 Belgium CE%sT 1977
|
||||
1:00 EU CE%sT
|
||||
# See Europe/Brussels.
|
||||
|
||||
# North Macedonia
|
||||
# See Europe/Belgrade.
|
||||
|
|
@ -2032,7 +1878,7 @@ Rule Malta 1975 1979 - Apr Sun>=15 2:00 1:00 S
|
|||
Rule Malta 1975 1980 - Sep Sun>=15 2:00 0 -
|
||||
Rule Malta 1980 only - Mar 31 2:00 1:00 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta
|
||||
Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 # Valletta
|
||||
1:00 Italy CE%sT 1973 Mar 31
|
||||
1:00 Malta CE%sT 1981
|
||||
1:00 EU CE%sT
|
||||
|
|
@ -2114,126 +1960,16 @@ Zone Europe/Chisinau 1:55:20 - LMT 1880
|
|||
2:00 Moldova EE%sT
|
||||
|
||||
# Monaco
|
||||
#
|
||||
# From Michael Deckers (2020-06-12):
|
||||
# In the "Journal de Monaco" of 1892-05-24, online at
|
||||
# https://journaldemonaco.gouv.mc/var/jdm/storage/original/application/b1c67c12c5af11b41ea888fb048e4fe8.pdf
|
||||
# we read: ...
|
||||
# [In virtue of a Sovereign Ordinance of the May 13 of the current [year],
|
||||
# legal time in the Principality will be set to, from the date of June 1,
|
||||
# 1892 onwards, to the meridian of Paris, as in France.]
|
||||
# In the "Journal de Monaco" of 1911-03-28, online at
|
||||
# https://journaldemonaco.gouv.mc/var/jdm/storage/original/application/de74ffb7db53d4f599059fe8f0ed482a.pdf
|
||||
# we read an ordinance of 1911-03-16: ...
|
||||
# [Legal time in the Principality will be set, from the date of promulgation
|
||||
# of the present ordinance, to legal time in France.... Consequently, legal
|
||||
# time will be retarded by 9 minutes and 21 seconds.]
|
||||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Monaco 0:29:32 - LMT 1892 Jun 1
|
||||
0:09:21 - PMT 1911 Mar 29 # Paris Mean Time
|
||||
0:00 France WE%sT 1945 Sep 16 3:00
|
||||
1:00 France CE%sT 1977
|
||||
1:00 EU CE%sT
|
||||
# See Europe/Paris.
|
||||
|
||||
# Montenegro
|
||||
# See Europe/Belgrade.
|
||||
|
||||
# Netherlands
|
||||
|
||||
# Howse writes that the Netherlands' railways used GMT between 1892 and 1940,
|
||||
# but for other purposes the Netherlands used Amsterdam mean time.
|
||||
|
||||
# However, Robert H. van Gent writes (2001-04-01):
|
||||
# Howse's statement is only correct up to 1909. From 1909-05-01 (00:00:00
|
||||
# Amsterdam mean time) onwards, the whole of the Netherlands (including
|
||||
# the Dutch railways) was required by law to observe Amsterdam mean time
|
||||
# (19 minutes 32.13 seconds ahead of GMT). This had already been the
|
||||
# common practice (except for the railways) for many decades but it was
|
||||
# not until 1909 when the Dutch government finally defined this by law.
|
||||
# On 1937-07-01 this was changed to 20 minutes (exactly) ahead of GMT and
|
||||
# was generally known as Dutch Time ("Nederlandse Tijd").
|
||||
#
|
||||
# (2001-04-08):
|
||||
# 1892-05-01 was the date when the Dutch railways were by law required to
|
||||
# observe GMT while the remainder of the Netherlands adhered to the common
|
||||
# practice of following Amsterdam mean time.
|
||||
#
|
||||
# (2001-04-09):
|
||||
# In 1835 the authorities of the province of North Holland requested the
|
||||
# municipal authorities of the towns and cities in the province to observe
|
||||
# Amsterdam mean time but I do not know in how many cases this request was
|
||||
# actually followed.
|
||||
#
|
||||
# From 1852 onwards the Dutch telegraph offices were by law required to
|
||||
# observe Amsterdam mean time. As the time signals from the observatory of
|
||||
# Leiden were also distributed by the telegraph system, I assume that most
|
||||
# places linked up with the telegraph (and railway) system automatically
|
||||
# adopted Amsterdam mean time.
|
||||
#
|
||||
# Although the early Dutch railway companies initially observed a variety
|
||||
# of times, most of them had adopted Amsterdam mean time by 1858 but it
|
||||
# was not until 1866 when they were all required by law to observe
|
||||
# Amsterdam mean time.
|
||||
|
||||
# The data entries before 1945 are taken from
|
||||
# https://www.staff.science.uu.nl/~gent0113/wettijd/wettijd.htm
|
||||
|
||||
# From Paul Eggert (2021-05-09):
|
||||
# I invented the abbreviations AMT for Amsterdam Mean Time and NST for
|
||||
# Netherlands Summer Time, used in the Netherlands from 1835 to 1937.
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Neth 1916 only - May 1 0:00 1:00 NST # Netherlands Summer Time
|
||||
Rule Neth 1916 only - Oct 1 0:00 0 AMT # Amsterdam Mean Time
|
||||
Rule Neth 1917 only - Apr 16 2:00s 1:00 NST
|
||||
Rule Neth 1917 only - Sep 17 2:00s 0 AMT
|
||||
Rule Neth 1918 1921 - Apr Mon>=1 2:00s 1:00 NST
|
||||
Rule Neth 1918 1921 - Sep lastMon 2:00s 0 AMT
|
||||
Rule Neth 1922 only - Mar lastSun 2:00s 1:00 NST
|
||||
Rule Neth 1922 1936 - Oct Sun>=2 2:00s 0 AMT
|
||||
Rule Neth 1923 only - Jun Fri>=1 2:00s 1:00 NST
|
||||
Rule Neth 1924 only - Mar lastSun 2:00s 1:00 NST
|
||||
Rule Neth 1925 only - Jun Fri>=1 2:00s 1:00 NST
|
||||
# From 1926 through 1939 DST began 05-15, except that it was delayed by a week
|
||||
# in years when 05-15 fell in the Pentecost weekend.
|
||||
Rule Neth 1926 1931 - May 15 2:00s 1:00 NST
|
||||
Rule Neth 1932 only - May 22 2:00s 1:00 NST
|
||||
Rule Neth 1933 1936 - May 15 2:00s 1:00 NST
|
||||
Rule Neth 1937 only - May 22 2:00s 1:00 NST
|
||||
Rule Neth 1937 only - Jul 1 0:00 1:00 S
|
||||
Rule Neth 1937 1939 - Oct Sun>=2 2:00s 0 -
|
||||
Rule Neth 1938 1939 - May 15 2:00s 1:00 S
|
||||
Rule Neth 1945 only - Apr 2 2:00s 1:00 S
|
||||
Rule Neth 1945 only - Sep 16 2:00s 0 -
|
||||
#
|
||||
# Amsterdam Mean Time was +00:19:32.13, but the .13 is omitted
|
||||
# below because the current format requires STDOFF to be an integer.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Amsterdam 0:19:32 - LMT 1835
|
||||
0:19:32 Neth %s 1937 Jul 1
|
||||
0:20 Neth +0020/+0120 1940 May 16 0:00
|
||||
1:00 C-Eur CE%sT 1945 Apr 2 2:00
|
||||
1:00 Neth CE%sT 1977
|
||||
1:00 EU CE%sT
|
||||
# See Europe/Brussels.
|
||||
|
||||
# Norway
|
||||
# http://met.no/met/met_lex/q_u/sommertid.html (2004-01) agrees with Shanks &
|
||||
# Pottenger.
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Norway 1916 only - May 22 1:00 1:00 S
|
||||
Rule Norway 1916 only - Sep 30 0:00 0 -
|
||||
Rule Norway 1945 only - Apr 2 2:00s 1:00 S
|
||||
Rule Norway 1945 only - Oct 1 2:00s 0 -
|
||||
Rule Norway 1959 1964 - Mar Sun>=15 2:00s 1:00 S
|
||||
Rule Norway 1959 1965 - Sep Sun>=15 2:00s 0 -
|
||||
Rule Norway 1965 only - Apr 25 2:00s 1:00 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Oslo 0:43:00 - LMT 1895 Jan 1
|
||||
1:00 Norway CE%sT 1940 Aug 10 23:00
|
||||
1:00 C-Eur CE%sT 1945 Apr 2 2:00
|
||||
1:00 Norway CE%sT 1980
|
||||
1:00 EU CE%sT
|
||||
# See Europe/Berlin.
|
||||
|
||||
# Svalbard & Jan Mayen
|
||||
|
||||
|
|
@ -2280,9 +2016,9 @@ Zone Europe/Oslo 0:43:00 - LMT 1895 Jan 1
|
|||
# the German armed forces at the Svalbard weather station code-named
|
||||
# Haudegen did not surrender to the Allies until September 1945.
|
||||
#
|
||||
# All these events predate our cutoff date of 1970, so use Europe/Oslo
|
||||
# All these events predate our cutoff date of 1970, so use Europe/Berlin
|
||||
# for these regions.
|
||||
Link Europe/Oslo Arctic/Longyearbyen
|
||||
|
||||
|
||||
# Poland
|
||||
|
||||
|
|
@ -2336,7 +2072,6 @@ Zone Europe/Warsaw 1:24:00 - LMT 1880
|
|||
# According to a Portuguese decree (1911-05-26)
|
||||
# https://dre.pt/application/dir/pdf1sdip/1911/05/12500/23132313.pdf
|
||||
# Lisbon was at -0:36:44.68, but switched to GMT on 1912-01-01 at 00:00.
|
||||
# Round the old offset to -0:36:45. This agrees with Willett....
|
||||
#
|
||||
# From Michael Deckers (2018-02-15):
|
||||
# article 5 [of the 1911 decree; Deckers's translation] ...:
|
||||
|
|
@ -2423,6 +2158,7 @@ Rule Port 1981 1982 - Mar lastSun 1:00s 1:00 S
|
|||
Rule Port 1983 only - Mar lastSun 2:00s 1:00 S
|
||||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
#STDOFF -0:36:44.68
|
||||
Zone Europe/Lisbon -0:36:45 - LMT 1884
|
||||
-0:36:45 - LMT 1912 Jan 1 0:00u # Lisbon MT
|
||||
0:00 Port WE%sT 1966 Apr 3 2:00
|
||||
|
|
@ -2431,9 +2167,13 @@ Zone Europe/Lisbon -0:36:45 - LMT 1884
|
|||
0:00 W-Eur WE%sT 1992 Sep 27 1:00s
|
||||
1:00 EU CE%sT 1996 Mar 31 1:00u
|
||||
0:00 EU WE%sT
|
||||
# This Zone can be simplified once we assume zic %z.
|
||||
Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada
|
||||
-1:54:32 - HMT 1912 Jan 1 2:00u # Horta MT
|
||||
# Vanguard section, for zic and other parsers that support %z.
|
||||
# -2:00 Port %z 1966 Apr 3 2:00
|
||||
# -1:00 Port %z 1983 Sep 25 1:00s
|
||||
# -1:00 W-Eur %z 1992 Sep 27 1:00s
|
||||
# Rearguard section, for parsers lacking %z; see ziguard.awk.
|
||||
-2:00 Port -02/-01 1942 Apr 25 22:00s
|
||||
-2:00 Port +00 1942 Aug 15 22:00s
|
||||
-2:00 Port -02/-01 1943 Apr 17 22:00s
|
||||
|
|
@ -2445,11 +2185,14 @@ Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada
|
|||
-2:00 Port -02/-01 1966 Apr 3 2:00
|
||||
-1:00 Port -01/+00 1983 Sep 25 1:00s
|
||||
-1:00 W-Eur -01/+00 1992 Sep 27 1:00s
|
||||
# End of rearguard section.
|
||||
0:00 EU WE%sT 1993 Mar 28 1:00u
|
||||
-1:00 EU -01/+00
|
||||
# This Zone can be simplified once we assume zic %z.
|
||||
Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal
|
||||
-1:07:36 - FMT 1912 Jan 1 1:00u # Funchal MT
|
||||
# Vanguard section, for zic and other parsers that support %z.
|
||||
# -1:00 Port %z 1966 Apr 3 2:00
|
||||
# Rearguard section, for parsers lacking %z; see ziguard.awk.
|
||||
-1:00 Port -01/+00 1942 Apr 25 22:00s
|
||||
-1:00 Port +01 1942 Aug 15 22:00s
|
||||
-1:00 Port -01/+00 1943 Apr 17 22:00s
|
||||
|
|
@ -2459,6 +2202,7 @@ Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal
|
|||
-1:00 Port -01/+00 1945 Apr 21 22:00s
|
||||
-1:00 Port +01 1945 Aug 25 22:00s
|
||||
-1:00 Port -01/+00 1966 Apr 3 2:00
|
||||
# End of rearguard section.
|
||||
0:00 Port WE%sT 1983 Sep 25 1:00s
|
||||
0:00 EU WE%sT
|
||||
|
||||
|
|
@ -2877,20 +2621,19 @@ Zone Europe/Simferopol 2:16:24 - LMT 1880
|
|||
2:00 - EET 1992 Mar 20
|
||||
# Central Crimea used Moscow time 1994/1997.
|
||||
#
|
||||
# From Paul Eggert (2006-03-22):
|
||||
# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
|
||||
# from Kiev to Moscow time sometime after the January 1994 elections.
|
||||
# From Paul Eggert (2022-07-21):
|
||||
# The _Economist_ (1994-05-28, p 45) reported that central Crimea switched
|
||||
# from Kyiv to Moscow time sometime after the January 1994 elections.
|
||||
# Shanks (1999) says "date of change uncertain", but implies that it happened
|
||||
# sometime between the 1994 DST switches. Shanks & Pottenger simply say
|
||||
# 1994-09-25 03:00, but that can't be right. For now, guess it
|
||||
# changed in May.
|
||||
# changed in May. This change evidently didn't last long; see below.
|
||||
2:00 C-Eur EE%sT 1994 May
|
||||
# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev.
|
||||
3:00 E-Eur MSK/MSD 1996 Mar 31 0:00s
|
||||
# From IATA SSIM (1994/1997), which also said that Kerch is still like Kyiv.
|
||||
3:00 C-Eur MSK/MSD 1996 Mar 31 0:00s
|
||||
3:00 1:00 MSD 1996 Oct 27 3:00s
|
||||
# IATA SSIM (1997-09) says Crimea switched to EET/EEST.
|
||||
# IATA SSIM (1997-09) said Crimea switched to EET/EEST.
|
||||
# Assume it happened in March by not changing the clocks.
|
||||
3:00 Russia MSK/MSD 1997
|
||||
3:00 - MSK 1997 Mar lastSun 1:00u
|
||||
# From Alexander Krivenyshev (2014-03-17):
|
||||
# time change at 2:00 (2am) on March 30, 2014
|
||||
|
|
@ -3059,11 +2802,12 @@ Zone Europe/Ulyanovsk 3:13:36 - LMT 1919 Jul 1 0:00u
|
|||
# Note: Effective 2005-12-01, (59) Perm Oblast and (81) Komi-Permyak
|
||||
# Autonomous Okrug merged to form (90, RU-PER) Perm Krai.
|
||||
|
||||
# Milne says Yekaterinburg was 4:02:32.9; round to nearest.
|
||||
# Milne says Yekaterinburg was 4:02:32.9.
|
||||
# Byalokoz 1919 says its provincial time was based on Perm, at 3:45:05.
|
||||
# Assume it switched on 1916-07-03, the time of the new standard.
|
||||
# The 1919 and 1930 transitions are from Shanks.
|
||||
|
||||
#STDOFF 4:02:32.9
|
||||
Zone Asia/Yekaterinburg 4:02:33 - LMT 1916 Jul 3
|
||||
3:45:05 - PMT 1919 Jul 15 4:00
|
||||
4:00 - +04 1930 Jun 21
|
||||
|
|
@ -3375,8 +3119,8 @@ Zone Asia/Vladivostok 8:47:31 - LMT 1922 Nov 15
|
|||
# 14-28 **** Tomponsky District
|
||||
# 14-30 **** Ust-Maysky District
|
||||
|
||||
# From Arthur David Olson (2012-05-09):
|
||||
# Tomponskij and Ust'-Majskij switched from Vladivostok time to Yakutsk time
|
||||
# From Arthur David Olson (2022-03-21):
|
||||
# Tomponsky and Ust-Maysky switched from Vladivostok time to Yakutsk time
|
||||
# in 2011.
|
||||
|
||||
# From Paul Eggert (2012-11-25):
|
||||
|
|
@ -3501,8 +3245,8 @@ Zone Asia/Srednekolymsk 10:14:52 - LMT 1924 May 2
|
|||
# Asia/Ust-Nera covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
|
||||
# 14-22 **** Oymyakonsky District
|
||||
|
||||
# From Arthur David Olson (2012-05-09):
|
||||
# Ojmyakonskij [and the Kuril Islands] switched from
|
||||
# From Arthur David Olson (2022-03-21):
|
||||
# Oymyakonsky and the Kuril Islands switched from
|
||||
# Magadan time to Vladivostok time in 2011.
|
||||
#
|
||||
# From Tim Parenti (2014-07-06), per Alexander Krivenyshev (2014-07-02):
|
||||
|
|
@ -3576,7 +3320,7 @@ Link Europe/Belgrade Europe/Skopje # North Macedonia
|
|||
Link Europe/Belgrade Europe/Zagreb # Croatia
|
||||
|
||||
# Slovakia
|
||||
Link Europe/Prague Europe/Bratislava
|
||||
# See Europe/Prague.
|
||||
|
||||
# Slovenia
|
||||
# See Europe/Belgrade.
|
||||
|
|
@ -3665,7 +3409,7 @@ Rule SpainAfrica 1977 only - Sep 28 0:00 0 -
|
|||
Rule SpainAfrica 1978 only - Jun 1 0:00 1:00 S
|
||||
Rule SpainAfrica 1978 only - Aug 4 0:00 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Madrid -0:14:44 - LMT 1900 Dec 31 23:45:16
|
||||
Zone Europe/Madrid -0:14:44 - LMT 1901 Jan 1 0:00u
|
||||
0:00 Spain WE%sT 1940 Mar 16 23:00
|
||||
1:00 Spain CE%sT 1979
|
||||
1:00 EU CE%sT
|
||||
|
|
@ -3687,61 +3431,7 @@ Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
|
|||
# Ignore this for now, as the Canaries are part of the EU.
|
||||
|
||||
# Sweden
|
||||
|
||||
# From Ivan Nilsson (2001-04-13), superseding Shanks & Pottenger:
|
||||
#
|
||||
# The law "Svensk författningssamling 1878, no 14" about standard time in 1879:
|
||||
# From the beginning of 1879 (that is 01-01 00:00) the time for all
|
||||
# places in the country is "the mean solar time for the meridian at
|
||||
# three degrees, or twelve minutes of time, to the west of the
|
||||
# meridian of the Observatory of Stockholm". The law is dated 1878-05-31.
|
||||
#
|
||||
# The observatory at that time had the meridian 18° 03' 30"
|
||||
# eastern longitude = 01:12:14 in time. Less 12 minutes gives the
|
||||
# national standard time as 01:00:14 ahead of GMT....
|
||||
#
|
||||
# About the beginning of CET in Sweden. The lawtext ("Svensk
|
||||
# författningssamling 1899, no 44") states, that "from the beginning
|
||||
# of 1900... ... the same as the mean solar time for the meridian at
|
||||
# the distance of one hour of time from the meridian of the English
|
||||
# observatory at Greenwich, or at 12 minutes 14 seconds to the west
|
||||
# from the meridian of the Observatory of Stockholm". The law is dated
|
||||
# 1899-06-16. In short: At 1900-01-01 00:00:00 the new standard time
|
||||
# in Sweden is 01:00:00 ahead of GMT.
|
||||
#
|
||||
# 1916: The lawtext ("Svensk författningssamling 1916, no 124") states
|
||||
# that "1916-05-15 is considered to begin one hour earlier". It is
|
||||
# pretty obvious that at 05-14 23:00 the clocks are set to 05-15 00:00....
|
||||
# Further the law says, that "1916-09-30 is considered to end one hour later".
|
||||
#
|
||||
# The laws regulating [DST] are available on the site of the Swedish
|
||||
# Parliament beginning with 1985 - the laws regulating 1980/1984 are
|
||||
# not available on the site (to my knowledge they are only available
|
||||
# in Swedish): <http://www.riksdagen.se/english/work/sfst.asp> (type
|
||||
# "sommartid" without the quotes in the field "Fritext" and then click
|
||||
# the Sök-button).
|
||||
#
|
||||
# (2001-05-13):
|
||||
#
|
||||
# I have now found a newspaper stating that at 1916-10-01 01:00
|
||||
# summertime the church-clocks etc were set back one hour to show
|
||||
# 1916-10-01 00:00 standard time. The article also reports that some
|
||||
# people thought the switch to standard time would take place already
|
||||
# at 1916-10-01 00:00 summer time, but they had to wait for another
|
||||
# hour before the event took place.
|
||||
#
|
||||
# Source: The newspaper "Dagens Nyheter", 1916-10-01, page 7 upper left.
|
||||
|
||||
# An extra-special abbreviation style is SET for Swedish Time (svensk
|
||||
# normaltid) 1879-1899, 3° west of the Stockholm Observatory.
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1
|
||||
1:00:14 - SET 1900 Jan 1 # Swedish Time
|
||||
1:00 - CET 1916 May 14 23:00
|
||||
1:00 1:00 CEST 1916 Oct 1 1:00
|
||||
1:00 - CET 1980
|
||||
1:00 EU CE%sT
|
||||
# See Europe/Berlin.
|
||||
|
||||
# Switzerland
|
||||
# From Howse:
|
||||
|
|
@ -3835,6 +3525,19 @@ Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1
|
|||
# 1853-07-16, though it probably occurred at some other date in Zurich, and
|
||||
# legal civil time probably changed at still some other transition date.
|
||||
|
||||
# From Tobias Conradi (2011-09-12):
|
||||
# Büsingen <http://www.buesingen.de>, surrounded by the Swiss canton
|
||||
# Schaffhausen, did not start observing DST in 1980 as the rest of DE
|
||||
# (West Germany at that time) and DD (East Germany at that time) did.
|
||||
# DD merged into DE, the area is currently covered by code DE in ISO 3166-1,
|
||||
# which in turn is covered by the zone Europe/Berlin.
|
||||
#
|
||||
# Source for the time in Büsingen 1980:
|
||||
# http://www.srf.ch/player/video?id=c012c029-03b7-4c2b-9164-aa5902cd58d3
|
||||
#
|
||||
# From Arthur David Olson (2012-03-03):
|
||||
# Büsingen and Zurich have shared clocks since 1970.
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Swiss 1941 1942 - May Mon>=1 1:00 1:00 S
|
||||
Rule Swiss 1941 1942 - Oct Mon>=1 2:00 0 -
|
||||
|
|
@ -3843,6 +3546,9 @@ Zone Europe/Zurich 0:34:08 - LMT 1853 Jul 16 # See above comment.
|
|||
0:29:46 - BMT 1894 Jun # Bern Mean Time
|
||||
1:00 Swiss CE%sT 1981
|
||||
1:00 EU CE%sT
|
||||
Link Europe/Zurich Europe/Busingen
|
||||
Link Europe/Zurich Europe/Vaduz
|
||||
|
||||
|
||||
# Turkey
|
||||
|
||||
|
|
@ -4051,7 +3757,7 @@ Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
|
|||
|
||||
# Ukraine
|
||||
#
|
||||
# From Alois Triendl (2014-03-01):
|
||||
# From Alois Treindl (2014-03-01):
|
||||
# REGULATION A N O V A on March 20, 1992 N 139 ... means that from
|
||||
# 1992 on, Ukraine had DST with begin time at 02:00 am, on last Sunday
|
||||
# in March, and end time 03:00 am, last Sunday in September....
|
||||
|
|
@ -4111,7 +3817,7 @@ Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
|
|||
# The law documents themselves are at
|
||||
# http://w1.c1.rada.gov.ua/pls/zweb_n/webproc4_1?id=&pf3511=41484
|
||||
|
||||
# From Vladimir in Moscow via Alois Treindl re Kiev time 1991/2 (2014-02-28):
|
||||
# From Vladimir in Moscow via Alois Treindl re Kyiv time 1991/2 (2014-02-28):
|
||||
# First in Ukraine they changed Time zone from UTC+3 to UTC+2 with DST:
|
||||
# 03 25 1990 02:00 -03.00 1 Time Zone 3 with DST
|
||||
# 07 01 1990 02:00 -02.00 1 Time Zone 2 with DST
|
||||
|
|
@ -4139,23 +3845,23 @@ Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
|
|||
# * Ukrainian Government's Resolution of 20.03.1992, No. 139.
|
||||
# http://www.uazakon.com/documents/date_8u/pg_grcasa.htm
|
||||
|
||||
# From Paul Eggert (2018-10-03):
|
||||
# From Paul Eggert (2022-04-12):
|
||||
# As is usual in tzdb, Ukrainian zones use the most common English spellings.
|
||||
# For example, tzdb uses Europe/Kiev, as "Kiev" is the most common spelling in
|
||||
# English for Ukraine's capital, even though it is certainly wrong as a
|
||||
# transliteration of the Ukrainian "Київ". This is similar to tzdb's use of
|
||||
# Europe/Prague, which is certainly wrong as a transliteration of the Czech
|
||||
# "Praha". ("Kiev" came from old Slavic via Russian to English, and "Prague"
|
||||
# came from old Slavic via French to English, so the two cases have something
|
||||
# in common.) Admittedly English-language spelling of Ukrainian names is
|
||||
# controversial, and some day "Kyiv" may become substantially more popular in
|
||||
# English; in the meantime, stick with the traditional English "Kiev" as that
|
||||
# means less disruption for our users.
|
||||
# In particular, tzdb's name Europe/Kyiv uses the most common spelling in
|
||||
# English for Ukraine's capital. Although tzdb's former name was Europe/Kiev,
|
||||
# "Kyiv" is now more common due to widespread reporting of the current conflict.
|
||||
# Conversely, tzdb continues to use the names Europe/Uzhgorod and
|
||||
# Europe/Zaporozhye; this is similar to tzdb's use of Europe/Prague, which is
|
||||
# certainly wrong as a transliteration of the Czech "Praha".
|
||||
# English-language spelling of Ukrainian names is in flux, and
|
||||
# some day "Uzhhorod" or "Zaporizhzhia" may become substantially more
|
||||
# common in English; in the meantime, do not change these
|
||||
# English spellings as that means less disruption for our users.
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
# This represents most of Ukraine. See above for the spelling of "Kiev".
|
||||
Zone Europe/Kiev 2:02:04 - LMT 1880
|
||||
2:02:04 - KMT 1924 May 2 # Kiev Mean Time
|
||||
# This represents most of Ukraine. See above for the spelling of "Kyiv".
|
||||
Zone Europe/Kyiv 2:02:04 - LMT 1880
|
||||
2:02:04 - KMT 1924 May 2 # Kyiv Mean Time
|
||||
2:00 - EET 1930 Jun 21
|
||||
3:00 - MSK 1941 Sep 20
|
||||
1:00 C-Eur CE%sT 1943 Nov 6
|
||||
|
|
@ -4178,7 +3884,7 @@ Zone Europe/Uzhgorod 1:29:12 - LMT 1890 Oct
|
|||
2:00 C-Eur EE%sT 1996 May 13
|
||||
2:00 EU EE%sT
|
||||
# Zaporozh'ye and eastern Lugansk oblasts observed DST 1990/1991.
|
||||
# "Zaporizhia" is the transliteration of the Ukrainian name, but
|
||||
# "Zaporizhzhia" is the transliteration of the Ukrainian name, but
|
||||
# "Zaporozh'ye" is more common in English. Use the common English
|
||||
# spelling, except omit the apostrophe as it is not allowed in
|
||||
# portable Posix file names.
|
||||
|
|
|
|||
|
|
@ -95,11 +95,11 @@ Leap 2016 Dec 31 23:59:60 + S
|
|||
# Any additional leap seconds will come after this.
|
||||
# This Expires line is commented out for now,
|
||||
# so that pre-2020a zic implementations do not reject this file.
|
||||
#Expires 2022 Dec 28 00:00:00
|
||||
#Expires 2023 Jun 28 00:00:00
|
||||
|
||||
# POSIX timestamps for the data in this file:
|
||||
#updated 1467936000 (2016-07-08 00:00:00 UTC)
|
||||
#expires 1672185600 (2022-12-28 00:00:00 UTC)
|
||||
#expires 1687910400 (2023-06-28 00:00:00 UTC)
|
||||
|
||||
# Updated through IERS Bulletin C63
|
||||
# File expires on: 28 December 2022
|
||||
# Updated through IERS Bulletin C64
|
||||
# File expires on: 28 June 2023
|
||||
|
|
|
|||
|
|
@ -367,8 +367,7 @@ Zone PST8PDT -8:00 US P%sT
|
|||
# From Paul Eggert (2014-09-06):
|
||||
# Monthly Notices of the Royal Astronomical Society 44, 4 (1884-02-08), 208
|
||||
# says that New York City Hall time was 3 minutes 58.4 seconds fast of
|
||||
# Eastern time (i.e., -4:56:01.6) just before the 1883 switch. Round to the
|
||||
# nearest second.
|
||||
# Eastern time (i.e., -4:56:01.6) just before the 1883 switch.
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER
|
||||
Rule NYC 1920 only - Mar lastSun 2:00 1:00 D
|
||||
|
|
@ -377,7 +376,8 @@ Rule NYC 1921 1966 - Apr lastSun 2:00 1:00 D
|
|||
Rule NYC 1921 1954 - Sep lastSun 2:00 0 S
|
||||
Rule NYC 1955 1966 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/New_York -4:56:02 - LMT 1883 Nov 18 12:03:58
|
||||
#STDOFF -4:56:01.6
|
||||
Zone America/New_York -4:56:02 - LMT 1883 Nov 18 17:00u
|
||||
-5:00 US E%sT 1920
|
||||
-5:00 NYC E%sT 1942
|
||||
-5:00 US E%sT 1946
|
||||
|
|
@ -2841,7 +2841,7 @@ Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56
|
|||
|
||||
# Barbados
|
||||
|
||||
# For 1899 Milne gives -3:58:29.2; round that.
|
||||
# For 1899 Milne gives -3:58:29.2.
|
||||
|
||||
# From P Chan (2020-12-09 and 2020-12-11):
|
||||
# Standard time of GMT-4 was adopted in 1911.
|
||||
|
|
@ -2885,6 +2885,7 @@ Rule Barb 1978 1980 - Apr Sun>=15 2:00 1:00 D
|
|||
Rule Barb 1979 only - Sep 30 2:00 0 S
|
||||
Rule Barb 1980 only - Sep 25 2:00 0 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
#STDOFF -3:58:29.2
|
||||
Zone America/Barbados -3:58:29 - LMT 1911 Aug 28 # Bridgetown
|
||||
-4:00 Barb A%sT 1944
|
||||
-4:00 Barb AST/-0330 1945
|
||||
|
|
@ -2945,10 +2946,10 @@ Zone America/Belize -5:52:48 - LMT 1912 Apr 1
|
|||
|
||||
# Bermuda
|
||||
|
||||
# From Paul Eggert (2020-11-24):
|
||||
# From Paul Eggert (2022-07-27):
|
||||
# For 1899 Milne gives -4:19:18.3 as the meridian of the clock tower,
|
||||
# Bermuda dockyard, Ireland I. This agrees with standard offset given in the
|
||||
# Daylight Saving Act, 1917 cited below. Round that to the nearest second.
|
||||
# Daylight Saving Act, 1917 cited below.
|
||||
# It is not known when this time became standard for Bermuda; guess 1890.
|
||||
# The transition to -04 was specified by:
|
||||
# 1930: The Time Zone Act, 1929 (1929: No. 39) [1929-11-08]
|
||||
|
|
@ -3043,6 +3044,7 @@ Rule Bermuda 1956 only - May Sun>=22 2:00 1:00 D
|
|||
Rule Bermuda 1956 only - Oct lastSun 2:00 0 S
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
#STDOFF -4:19:18.3
|
||||
Zone Atlantic/Bermuda -4:19:18 - LMT 1890 # Hamilton
|
||||
-4:19:18 Bermuda BMT/BST 1930 Jan 1 2:00
|
||||
-4:00 Bermuda A%sT 1974 Apr 28 2:00
|
||||
|
|
@ -3057,7 +3059,7 @@ Zone Atlantic/Bermuda -4:19:18 - LMT 1890 # Hamilton
|
|||
|
||||
# Costa Rica
|
||||
|
||||
# Milne gives -5:36:13.3 as San José mean time; round to nearest.
|
||||
# Milne gives -5:36:13.3 as San José mean time.
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule CR 1979 1980 - Feb lastSun 0:00 1:00 D
|
||||
|
|
@ -3069,6 +3071,7 @@ Rule CR 1991 only - Jul 1 0:00 0 S
|
|||
Rule CR 1992 only - Mar 15 0:00 0 S
|
||||
# There are too many San Josés elsewhere, so we'll use 'Costa Rica'.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
#STDOFF -5:36:13.3
|
||||
Zone America/Costa_Rica -5:36:13 - LMT 1890 # San José
|
||||
-5:36:13 - SJMT 1921 Jan 15 # San José Mean Time
|
||||
-6:00 CR C%sT
|
||||
|
|
@ -3491,7 +3494,7 @@ Zone America/Tegucigalpa -5:48:52 - LMT 1921 Apr
|
|||
# Jamaica
|
||||
# Shanks & Pottenger give -5:07:12, but Milne records -5:07:10.41 from an
|
||||
# unspecified official document, and says "This time is used throughout the
|
||||
# island". Go with Milne. Round to the nearest second as required by zic.
|
||||
# island". Go with Milne.
|
||||
#
|
||||
# Shanks & Pottenger give April 28 for the 1974 spring-forward transition, but
|
||||
# Lance Neita writes that Prime Minister Michael Manley decreed it January 5.
|
||||
|
|
@ -3504,6 +3507,7 @@ Zone America/Tegucigalpa -5:48:52 - LMT 1921 Apr
|
|||
# http://www.jamaicaobserver.com/columns/The-politician-in-all-of-us_17573647
|
||||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
#STDOFF -5:07:10.41
|
||||
Zone America/Jamaica -5:07:10 - LMT 1890 # Kingston
|
||||
-5:07:10 - KMT 1912 Feb # Kingston Mean Time
|
||||
-5:00 - EST 1974
|
||||
|
|
@ -3701,6 +3705,7 @@ Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre
|
|||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Grand_Turk -4:44:32 - LMT 1890
|
||||
#STDOFF -5:07:10.41
|
||||
-5:07:10 - KMT 1912 Feb # Kingston Mean Time
|
||||
-5:00 - EST 1979
|
||||
-5:00 US E%sT 2015 Mar 8 2:00
|
||||
|
|
|
|||
|
|
@ -423,6 +423,7 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 -
|
|||
#
|
||||
# Buenos Aires (BA), Capital Federal (CF),
|
||||
Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May # Córdoba Mean Time
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
|
|
@ -440,6 +441,7 @@ Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
|
|||
# - Santiago del Estero switched to -4:00 on 1991-04-01,
|
||||
# then to -3:00 on 1991-04-26.
|
||||
#
|
||||
#STDOFF -4:16:48.25
|
||||
Zone America/Argentina/Cordoba -4:16:48 - LMT 1894 Oct 31
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
|
|
@ -452,6 +454,7 @@ Zone America/Argentina/Cordoba -4:16:48 - LMT 1894 Oct 31
|
|||
#
|
||||
# Salta (SA), La Pampa (LP), Neuquén (NQ), Rio Negro (RN)
|
||||
Zone America/Argentina/Salta -4:21:40 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
|
|
@ -464,6 +467,7 @@ Zone America/Argentina/Salta -4:21:40 - LMT 1894 Oct 31
|
|||
#
|
||||
# Tucumán (TM)
|
||||
Zone America/Argentina/Tucuman -4:20:52 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
|
|
@ -477,6 +481,7 @@ Zone America/Argentina/Tucuman -4:20:52 - LMT 1894 Oct 31
|
|||
#
|
||||
# La Rioja (LR)
|
||||
Zone America/Argentina/La_Rioja -4:27:24 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
|
|
@ -491,6 +496,7 @@ Zone America/Argentina/La_Rioja -4:27:24 - LMT 1894 Oct 31
|
|||
#
|
||||
# San Juan (SJ)
|
||||
Zone America/Argentina/San_Juan -4:34:04 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
|
|
@ -505,6 +511,7 @@ Zone America/Argentina/San_Juan -4:34:04 - LMT 1894 Oct 31
|
|||
#
|
||||
# Jujuy (JY)
|
||||
Zone America/Argentina/Jujuy -4:21:12 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
|
|
@ -520,6 +527,7 @@ Zone America/Argentina/Jujuy -4:21:12 - LMT 1894 Oct 31
|
|||
#
|
||||
# Catamarca (CT), Chubut (CH)
|
||||
Zone America/Argentina/Catamarca -4:23:08 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
|
|
@ -534,6 +542,7 @@ Zone America/Argentina/Catamarca -4:23:08 - LMT 1894 Oct 31
|
|||
#
|
||||
# Mendoza (MZ)
|
||||
Zone America/Argentina/Mendoza -4:35:16 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
|
|
@ -556,6 +565,7 @@ Rule SanLuis 2008 2009 - Mar Sun>=8 0:00 0 -
|
|||
Rule SanLuis 2007 2008 - Oct Sun>=8 0:00 1:00 -
|
||||
|
||||
Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
|
|
@ -574,6 +584,7 @@ Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31
|
|||
#
|
||||
# Santa Cruz (SC)
|
||||
Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
|
|
@ -586,6 +597,7 @@ Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
|
|||
#
|
||||
# Tierra del Fuego, Antártida e Islas del Atlántico Sur (TF)
|
||||
Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
|
|
@ -668,7 +680,7 @@ Zone America/La_Paz -4:32:36 - LMT 1890
|
|||
|
||||
# From Rodrigo Severo (2004-10-04):
|
||||
# It's just the biannual change made necessary by the much hyped, supposedly
|
||||
# modern Brazilian eletronic voting machines which, apparently, can't deal
|
||||
# modern Brazilian ... voting machines which, apparently, can't deal
|
||||
# with a time change between the first and the second rounds of the elections.
|
||||
|
||||
# From Steffen Thorsen (2007-09-20):
|
||||
|
|
@ -1164,7 +1176,7 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
|
|||
# this is known to work for DST transitions starting in 2008 and
|
||||
# may well be true for earlier transitions.
|
||||
|
||||
# From Tim Parenti (2022-03-15):
|
||||
# From Tim Parenti (2022-07-06):
|
||||
# For a brief period of roughly six weeks in 1946, DST was only observed on an
|
||||
# emergency basis in specific regions of central Chile; namely, "the national
|
||||
# territory between the provinces of Coquimbo and Concepción, inclusive".
|
||||
|
|
@ -1182,7 +1194,14 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
|
|||
# Law Number 8,522, promulgated 1946-08-27, reunified Chilean clocks at their
|
||||
# new "Summer Time" of -04, reckoned as that of "the meridian of the
|
||||
# Astronomical Observatory of Lo Espejo, advanced by 42 minutes and 45
|
||||
# seconds".
|
||||
# seconds". Although this law specified the new Summer Time to start on 1
|
||||
# September each year, a special "transitional article" started it a few days
|
||||
# early, as soon as the law took effect. As the law was to take force "from
|
||||
# the date of its publication in the 'Diario Oficial', which happened the
|
||||
# following day, presume the change took place in Santiago and its environs
|
||||
# from 24:00 -03 to 23:00 -04 on Wednesday 1946-08-28. Although this was a
|
||||
# no-op for wall clocks in the north and south of the country, put their formal
|
||||
# start to DST an hour later when they reached 24:00 -04.
|
||||
# https://www.diariooficial.interior.gob.cl/versiones-anteriores/do-h/19460828/#page/1
|
||||
# After a brief "Winter Time" stint at -05 beginning 1947-04-01, Law Number
|
||||
# 8,777, promulgated 1947-05-17, established year-round -04 "from 23:00 on the
|
||||
|
|
@ -1302,11 +1321,19 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
|
|||
# So we extend the new rules on Saturdays at 24:00 mainland time indefinitely.
|
||||
# From Juan Correa (2019-02-04):
|
||||
# http://www.diariooficial.interior.gob.cl/publicaciones/2018/11/23/42212/01/1498738.pdf
|
||||
# From Paul Eggert (2019-09-01):
|
||||
# The above says the Magallanes exception expires 2022-04-02 at 24:00,
|
||||
# so in theory, they will revert to -04/-03 after that.
|
||||
# For now, assume that they will not revert,
|
||||
# since they have extended the expiration date once already.
|
||||
|
||||
# From Juan Correa (2022-04-02):
|
||||
# I found there was a decree published last Thursday that will keep
|
||||
# Magallanes region to UTC -3 "indefinitely". The decree is available at
|
||||
# https://www.diariooficial.interior.gob.cl/publicaciones/2022/03/31/43217-B/01/2108910.pdf
|
||||
|
||||
# From Juan Correa (2022-08-09):
|
||||
# the Internal Affairs Ministry (Ministerio del Interior) informed DST
|
||||
# for America/Santiago will start on midnight of September 11th;
|
||||
# and will end on April 1st, 2023. Magallanes region (America/Punta_Arenas)
|
||||
# will keep UTC -3 "indefinitely"... This is because on September 4th
|
||||
# we will have a voting whether to approve a new Constitution....
|
||||
# https://www.interior.gob.cl/noticias/2022/08/09/comunicado-el-proximo-sabado-10-de-septiembre-los-relojes-se-deben-adelantar-una-hora/
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Chile 1927 1931 - Sep 1 0:00 1:00 -
|
||||
|
|
@ -1344,7 +1371,9 @@ Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 -
|
|||
Rule Chile 2016 2018 - May Sun>=9 3:00u 0 -
|
||||
Rule Chile 2016 2018 - Aug Sun>=9 4:00u 1:00 -
|
||||
Rule Chile 2019 max - Apr Sun>=2 3:00u 0 -
|
||||
Rule Chile 2019 max - Sep Sun>=2 4:00u 1:00 -
|
||||
Rule Chile 2019 2021 - Sep Sun>=2 4:00u 1:00 -
|
||||
Rule Chile 2022 only - Sep Sun>=9 4:00u 1:00 -
|
||||
Rule Chile 2023 max - Sep Sun>=2 4:00u 1:00 -
|
||||
# IATA SSIM anomalies: (1992-02) says 1992-03-14;
|
||||
# (1996-09) says 1998-03-08. Ignore these.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
|
|
@ -1357,9 +1386,9 @@ Zone America/Santiago -4:42:45 - LMT 1890
|
|||
-5:00 Chile -05/-04 1932 Sep 1
|
||||
-4:00 - -04 1942 Jun 1
|
||||
-5:00 - -05 1942 Aug 1
|
||||
-4:00 - -04 1946 Jul 15
|
||||
-4:00 1:00 -03 1946 Sep 1 # central Chile
|
||||
-4:00 - -04 1947 Apr 1
|
||||
-4:00 - -04 1946 Jul 14 24:00
|
||||
-4:00 1:00 -03 1946 Aug 28 24:00 # central CL
|
||||
-5:00 1:00 -04 1947 Mar 31 24:00
|
||||
-5:00 - -05 1947 May 21 23:00
|
||||
-4:00 Chile -04/-03
|
||||
Zone America/Punta_Arenas -4:43:40 - LMT 1890
|
||||
|
|
@ -1371,7 +1400,8 @@ Zone America/Punta_Arenas -4:43:40 - LMT 1890
|
|||
-5:00 Chile -05/-04 1932 Sep 1
|
||||
-4:00 - -04 1942 Jun 1
|
||||
-5:00 - -05 1942 Aug 1
|
||||
-4:00 - -04 1947 Apr 1
|
||||
-4:00 - -04 1946 Aug 28 24:00
|
||||
-5:00 1:00 -04 1947 Mar 31 24:00
|
||||
-5:00 - -05 1947 May 21 23:00
|
||||
-4:00 Chile -04/-03 2016 Dec 4
|
||||
-3:00 - -03
|
||||
|
|
@ -1405,13 +1435,14 @@ Zone Antarctica/Palmer 0 - -00 1965
|
|||
|
||||
# Colombia
|
||||
|
||||
# Milne gives 4:56:16.4 for Bogotá time in 1899; round to nearest. He writes,
|
||||
# Milne gives 4:56:16.4 for Bogotá time in 1899. He writes,
|
||||
# "A variation of fifteen minutes in the public clocks of Bogota is not rare."
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule CO 1992 only - May 3 0:00 1:00 -
|
||||
Rule CO 1993 only - Apr 4 0:00 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
#STDOFF -4:56:16.4
|
||||
Zone America/Bogota -4:56:16 - LMT 1884 Mar 13
|
||||
-4:56:16 - BMT 1914 Nov 23 # Bogotá Mean Time
|
||||
-5:00 CO -05/-04
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ CA +690650-1050310 America/Cambridge_Bay Mountain - NU (west)
|
|||
CA +6227-11421 America/Yellowknife Mountain - NT (central)
|
||||
CA +682059-1334300 America/Inuvik Mountain - NT (west)
|
||||
CA +4906-11631 America/Creston MST - BC (Creston)
|
||||
CA +5946-12014 America/Dawson_Creek MST - BC (Dawson Cr, Ft St John)
|
||||
CA +5546-12014 America/Dawson_Creek MST - BC (Dawson Cr, Ft St John)
|
||||
CA +5848-12242 America/Fort_Nelson MST - BC (Ft Nelson)
|
||||
CA +6043-13503 America/Whitehorse MST - Yukon (east)
|
||||
CA +6404-13925 America/Dawson MST - Yukon (west)
|
||||
|
|
@ -423,7 +423,7 @@ TT +1039-06131 America/Port_of_Spain
|
|||
TV -0831+17913 Pacific/Funafuti
|
||||
TW +2503+12130 Asia/Taipei
|
||||
TZ -0648+03917 Africa/Dar_es_Salaam
|
||||
UA +5026+03031 Europe/Kiev Ukraine (most areas)
|
||||
UA +5026+03031 Europe/Kyiv Ukraine (most areas)
|
||||
UA +4837+02218 Europe/Uzhgorod Transcarpathia
|
||||
UA +4750+03510 Europe/Zaporozhye Zaporozhye and east Lugansk
|
||||
UG +0019+03225 Africa/Kampala
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2016, 2021, 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,7 +77,7 @@ $(eval $(call SetupNativeCompilation, BUILD_GTEST_LIBJVM, \
|
|||
CFLAGS_windows := -EHsc, \
|
||||
CFLAGS_solaris := -DGTEST_HAS_EXCEPTIONS=0 -library=stlport4 +d, \
|
||||
CFLAGS_macosx := -DGTEST_OS_MAC=1, \
|
||||
DISABLED_WARNINGS_gcc := undef, \
|
||||
DISABLED_WARNINGS_gcc := undef stringop-overflow, \
|
||||
DISABLED_WARNINGS_clang := undef switch format-nonliteral \
|
||||
tautological-undefined-compare $(BUILD_LIBJVM_DISABLED_WARNINGS_clang), \
|
||||
DISABLED_WARNINGS_solstudio := identexpected, \
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ endif
|
|||
|
||||
LAUNCHER_SRC := $(TOPDIR)/src/java.base/share/native/launcher
|
||||
LAUNCHER_CFLAGS += -I$(TOPDIR)/src/java.base/share/native/launcher \
|
||||
-I$(TOPDIR)/src/java.desktop/share/native/include \
|
||||
-I$(TOPDIR)/src/java.base/share/native/libjli \
|
||||
-I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libjli \
|
||||
-I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/native/libjli \
|
||||
|
|
@ -119,9 +120,7 @@ define SetupBuildLauncherBody
|
|||
$1_LIBS :=
|
||||
ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
ifeq ($$($1_MACOSX_PRIVILEGED), true)
|
||||
$1_PLIST_SRC_FILE := Info-privileged.plist
|
||||
else
|
||||
$1_PLIST_SRC_FILE := Info-cmdline.plist
|
||||
$1_PLIST_EXTRA := <key>SecTaskAccess</key><string>allowed</string>
|
||||
endif
|
||||
|
||||
$1_CFLAGS += -DPACKAGE_PATH='"$(PACKAGE_PATH)"'
|
||||
|
|
@ -129,11 +128,13 @@ define SetupBuildLauncherBody
|
|||
$1_PLIST_FILE := $$(SUPPORT_OUTPUTDIR)/native/$$(MODULE)/$1/Info.plist
|
||||
|
||||
$$(eval $$(call SetupTextFileProcessing, BUILD_PLIST_$1, \
|
||||
SOURCE_FILES := $$(TOPDIR)/src/java.base/macosx/native/launcher/$$($1_PLIST_SRC_FILE), \
|
||||
SOURCE_FILES := $(TOPDIR)/make/data/bundle/cmdline-Info.plist, \
|
||||
OUTPUT_FILE := $$($1_PLIST_FILE), \
|
||||
REPLACEMENTS := \
|
||||
@@ID@@ => $(MACOSX_BUNDLE_ID_BASE).$(VERSION_SHORT).$1 ; \
|
||||
@@ID@@ => $(MACOSX_BUNDLE_ID_BASE).$1 ; \
|
||||
@@VERSION@@ => $(VERSION_NUMBER) ; \
|
||||
@@BUILD_VERSION@@ => $(MACOSX_BUNDLE_BUILD_VERSION) ; \
|
||||
@@EXTRA@@ => $$($1_PLIST_EXTRA), \
|
||||
))
|
||||
|
||||
$1_LDFLAGS += -Wl,-all_load -sectcreate __TEXT __info_plist $$($1_PLIST_FILE)
|
||||
|
|
@ -215,4 +216,8 @@ define SetupBuildLauncherBody
|
|||
$$(BUILD_LAUNCHER_$1): $(call FindStaticLib, java.base, java, /libjava) \
|
||||
$$($1_WINDOWS_JLI_LIB)
|
||||
endif
|
||||
|
||||
ifeq ($(call isTargetOs, macosx), true)
|
||||
$$(BUILD_LAUNCHER_$1): $$($1_PLIST_FILE)
|
||||
endif
|
||||
endef
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2022, 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
|
||||
|
|
@ -462,6 +462,7 @@ ifeq ($(findstring $(OPENJDK_TARGET_OS), windows macosx),)
|
|||
common/awt/debug \
|
||||
common/font \
|
||||
common/java2d/opengl \
|
||||
include \
|
||||
#
|
||||
|
||||
LIBAWT_HEADLESS_CFLAGS := $(CUPS_CFLAGS) $(FONTCONFIG_CFLAGS) $(X_CFLAGS) \
|
||||
|
|
@ -585,6 +586,7 @@ LIBFONTMANAGER_EXTRA_HEADER_DIRS := \
|
|||
libawt/java2d \
|
||||
libawt/java2d/pipe \
|
||||
libawt/java2d/loops \
|
||||
include \
|
||||
#
|
||||
|
||||
LIBFONTMANAGER_CFLAGS += $(LIBFREETYPE_CFLAGS)
|
||||
|
|
@ -775,6 +777,8 @@ ifeq ($(ENABLE_HEADLESS_ONLY), false)
|
|||
common/awt/systemscale \
|
||||
#
|
||||
|
||||
LIBSPLASHSCREEN_HEADER_DIRS += include
|
||||
|
||||
ifeq ($(USE_EXTERNAL_LIBGIF), false)
|
||||
LIBSPLASHSCREEN_HEADER_DIRS += libsplashscreen/giflib
|
||||
else
|
||||
|
|
@ -810,6 +814,7 @@ ifeq ($(ENABLE_HEADLESS_ONLY), false)
|
|||
|
||||
ifeq ($(USE_EXTERNAL_LIBZ), false)
|
||||
LIBSPLASHSCREEN_EXTRA_SRC += java.base:libzip/zlib
|
||||
LIBZ_DISABLED_WARNINGS_CLANG := format-nonliteral
|
||||
endif
|
||||
|
||||
ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
|
|
@ -869,7 +874,8 @@ ifeq ($(ENABLE_HEADLESS_ONLY), false)
|
|||
EXTRA_HEADER_DIRS := $(LIBSPLASHSCREEN_HEADER_DIRS), \
|
||||
DISABLED_WARNINGS_gcc := sign-compare type-limits unused-result \
|
||||
maybe-uninitialized shift-negative-value implicit-fallthrough, \
|
||||
DISABLED_WARNINGS_clang := incompatible-pointer-types deprecated-declarations, \
|
||||
DISABLED_WARNINGS_clang := incompatible-pointer-types deprecated-declarations \
|
||||
$(LIBZ_DISABLED_WARNINGS_CLANG), \
|
||||
DISABLED_WARNINGS_solstudio := E_NEWLINE_NOT_LAST E_DECLARATION_IN_CODE \
|
||||
E_STATEMENT_NOT_REACHED, \
|
||||
DISABLED_WARNINGS_microsoft := 4018 4244 4267, \
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2022, 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
|
||||
|
|
@ -149,6 +149,7 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBZIP, \
|
|||
$(LIBZ_CFLAGS), \
|
||||
CFLAGS_unix := $(BUILD_LIBZIP_MMAP) -UDEBUG, \
|
||||
DISABLED_WARNINGS_gcc := unused-function implicit-fallthrough, \
|
||||
DISABLED_WARNINGS_clang := format-nonliteral, \
|
||||
LDFLAGS := $(LDFLAGS_JDKLIB) \
|
||||
$(call SET_SHARED_LIBRARY_ORIGIN), \
|
||||
LIBS_unix := -ljvm -ljava $(LIBZ_LIBS), \
|
||||
|
|
|
|||
|
|
@ -2716,7 +2716,7 @@ encode %{
|
|||
enc_class aarch64_enc_ldrshw(iRegI dst, memory mem) %{
|
||||
Register dst_reg = as_Register($dst$$reg);
|
||||
loadStore(MacroAssembler(&cbuf), &MacroAssembler::ldrshw, dst_reg, $mem->opcode(),
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp);
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp, 2);
|
||||
%}
|
||||
|
||||
// This encoding class is generated automatically from ad_encode.m4.
|
||||
|
|
@ -2724,7 +2724,7 @@ encode %{
|
|||
enc_class aarch64_enc_ldrsh(iRegI dst, memory mem) %{
|
||||
Register dst_reg = as_Register($dst$$reg);
|
||||
loadStore(MacroAssembler(&cbuf), &MacroAssembler::ldrsh, dst_reg, $mem->opcode(),
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp);
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp, 2);
|
||||
%}
|
||||
|
||||
// This encoding class is generated automatically from ad_encode.m4.
|
||||
|
|
@ -2732,7 +2732,7 @@ encode %{
|
|||
enc_class aarch64_enc_ldrh(iRegI dst, memory mem) %{
|
||||
Register dst_reg = as_Register($dst$$reg);
|
||||
loadStore(MacroAssembler(&cbuf), &MacroAssembler::ldrh, dst_reg, $mem->opcode(),
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp);
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp, 2);
|
||||
%}
|
||||
|
||||
// This encoding class is generated automatically from ad_encode.m4.
|
||||
|
|
@ -2740,7 +2740,7 @@ encode %{
|
|||
enc_class aarch64_enc_ldrh(iRegL dst, memory mem) %{
|
||||
Register dst_reg = as_Register($dst$$reg);
|
||||
loadStore(MacroAssembler(&cbuf), &MacroAssembler::ldrh, dst_reg, $mem->opcode(),
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp);
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp, 2);
|
||||
%}
|
||||
|
||||
// This encoding class is generated automatically from ad_encode.m4.
|
||||
|
|
@ -2748,7 +2748,7 @@ encode %{
|
|||
enc_class aarch64_enc_ldrw(iRegI dst, memory mem) %{
|
||||
Register dst_reg = as_Register($dst$$reg);
|
||||
loadStore(MacroAssembler(&cbuf), &MacroAssembler::ldrw, dst_reg, $mem->opcode(),
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp);
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp, 4);
|
||||
%}
|
||||
|
||||
// This encoding class is generated automatically from ad_encode.m4.
|
||||
|
|
@ -2756,7 +2756,7 @@ encode %{
|
|||
enc_class aarch64_enc_ldrw(iRegL dst, memory mem) %{
|
||||
Register dst_reg = as_Register($dst$$reg);
|
||||
loadStore(MacroAssembler(&cbuf), &MacroAssembler::ldrw, dst_reg, $mem->opcode(),
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp);
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp, 4);
|
||||
%}
|
||||
|
||||
// This encoding class is generated automatically from ad_encode.m4.
|
||||
|
|
@ -2764,7 +2764,7 @@ encode %{
|
|||
enc_class aarch64_enc_ldrsw(iRegL dst, memory mem) %{
|
||||
Register dst_reg = as_Register($dst$$reg);
|
||||
loadStore(MacroAssembler(&cbuf), &MacroAssembler::ldrsw, dst_reg, $mem->opcode(),
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp);
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp, 4);
|
||||
%}
|
||||
|
||||
// This encoding class is generated automatically from ad_encode.m4.
|
||||
|
|
@ -2772,7 +2772,7 @@ encode %{
|
|||
enc_class aarch64_enc_ldr(iRegL dst, memory mem) %{
|
||||
Register dst_reg = as_Register($dst$$reg);
|
||||
loadStore(MacroAssembler(&cbuf), &MacroAssembler::ldr, dst_reg, $mem->opcode(),
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp);
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp, 8);
|
||||
%}
|
||||
|
||||
// This encoding class is generated automatically from ad_encode.m4.
|
||||
|
|
|
|||
|
|
@ -36,6 +36,17 @@ define(LOAD,`
|
|||
dnl
|
||||
dnl
|
||||
dnl
|
||||
define(LOADL,`
|
||||
// This encoding class is generated automatically from ad_encode.m4.
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
enc_class aarch64_enc_$2($1 dst, memory mem) %{
|
||||
$3Register dst_reg = as_$3Register($dst$$reg);
|
||||
loadStore(MacroAssembler(&cbuf), &MacroAssembler::$2, dst_reg, $mem->opcode(),
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp, $4);
|
||||
%}')dnl
|
||||
dnl
|
||||
dnl
|
||||
dnl
|
||||
define(LOADV,`
|
||||
// This encoding class is generated automatically from ad_encode.m4.
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
|
|
@ -106,14 +117,14 @@ LOAD(iRegI,ldrsbw)
|
|||
LOAD(iRegI,ldrsb)
|
||||
LOAD(iRegI,ldrb)
|
||||
LOAD(iRegL,ldrb)
|
||||
LOAD(iRegI,ldrshw)
|
||||
LOAD(iRegI,ldrsh)
|
||||
LOAD(iRegI,ldrh)
|
||||
LOAD(iRegL,ldrh)
|
||||
LOAD(iRegI,ldrw)
|
||||
LOAD(iRegL,ldrw)
|
||||
LOAD(iRegL,ldrsw)
|
||||
LOAD(iRegL,ldr)
|
||||
LOADL(iRegI,ldrshw,,2)
|
||||
LOADL(iRegI,ldrsh,,2)
|
||||
LOADL(iRegI,ldrh,,2)
|
||||
LOADL(iRegL,ldrh,,2)
|
||||
LOADL(iRegI,ldrw,,4)
|
||||
LOADL(iRegL,ldrw,,4)
|
||||
LOADL(iRegL,ldrsw,,4)
|
||||
LOADL(iRegL,ldr,,8)
|
||||
LOAD(vRegF,ldrs,Float)
|
||||
LOAD(vRegD,ldrd,Float)
|
||||
LOADV(vecD,ldrvS,S)
|
||||
|
|
|
|||
|
|
@ -752,8 +752,23 @@ address MacroAssembler::trampoline_call(Address entry, CodeBuffer *cbuf) {
|
|||
|| entry.rspec().type() == relocInfo::static_call_type
|
||||
|| entry.rspec().type() == relocInfo::virtual_call_type, "wrong reloc type");
|
||||
|
||||
bool need_trampoline = far_branches();
|
||||
if (!need_trampoline && entry.rspec().type() == relocInfo::runtime_call_type && !CodeCache::contains(entry.target())) {
|
||||
// If it is a runtime call of an address outside small CodeCache,
|
||||
// we need to check whether it is in range.
|
||||
address target = entry.target();
|
||||
assert(target < CodeCache::low_bound() || target >= CodeCache::high_bound(), "target is inside CodeCache");
|
||||
// Case 1: -------T-------L====CodeCache====H-------
|
||||
// ^-------longest branch---|
|
||||
// Case 2: -------L====CodeCache====H-------T-------
|
||||
// |-------longest branch ---^
|
||||
address longest_branch_start = (target < CodeCache::low_bound()) ? CodeCache::high_bound() - NativeInstruction::instruction_size
|
||||
: CodeCache::low_bound();
|
||||
need_trampoline = !reachable_from_branch_at(longest_branch_start, target);
|
||||
}
|
||||
|
||||
// We need a trampoline if branches are far.
|
||||
if (far_branches()) {
|
||||
if (need_trampoline) {
|
||||
bool in_scratch_emit_size = false;
|
||||
#ifdef COMPILER2
|
||||
// We don't want to emit a trampoline if C2 is generating dummy
|
||||
|
|
@ -774,7 +789,7 @@ address MacroAssembler::trampoline_call(Address entry, CodeBuffer *cbuf) {
|
|||
|
||||
if (cbuf) cbuf->set_insts_mark();
|
||||
relocate(entry.rspec());
|
||||
if (!far_branches()) {
|
||||
if (!need_trampoline) {
|
||||
bl(entry.target());
|
||||
} else {
|
||||
bl(pc());
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
// Copyright (c) 2012, 2020 SAP SE. All rights reserved.
|
||||
// Copyright (c) 2012, 2022 SAP SE. 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
|
||||
|
|
@ -257,70 +257,70 @@ register %{
|
|||
// ----------------------------
|
||||
// Vector-Scalar Registers
|
||||
// ----------------------------
|
||||
reg_def VSR0 ( SOC, SOC, Op_VecX, 0, NULL);
|
||||
reg_def VSR1 ( SOC, SOC, Op_VecX, 1, NULL);
|
||||
reg_def VSR2 ( SOC, SOC, Op_VecX, 2, NULL);
|
||||
reg_def VSR3 ( SOC, SOC, Op_VecX, 3, NULL);
|
||||
reg_def VSR4 ( SOC, SOC, Op_VecX, 4, NULL);
|
||||
reg_def VSR5 ( SOC, SOC, Op_VecX, 5, NULL);
|
||||
reg_def VSR6 ( SOC, SOC, Op_VecX, 6, NULL);
|
||||
reg_def VSR7 ( SOC, SOC, Op_VecX, 7, NULL);
|
||||
reg_def VSR8 ( SOC, SOC, Op_VecX, 8, NULL);
|
||||
reg_def VSR9 ( SOC, SOC, Op_VecX, 9, NULL);
|
||||
reg_def VSR10 ( SOC, SOC, Op_VecX, 10, NULL);
|
||||
reg_def VSR11 ( SOC, SOC, Op_VecX, 11, NULL);
|
||||
reg_def VSR12 ( SOC, SOC, Op_VecX, 12, NULL);
|
||||
reg_def VSR13 ( SOC, SOC, Op_VecX, 13, NULL);
|
||||
reg_def VSR14 ( SOC, SOC, Op_VecX, 14, NULL);
|
||||
reg_def VSR15 ( SOC, SOC, Op_VecX, 15, NULL);
|
||||
reg_def VSR16 ( SOC, SOC, Op_VecX, 16, NULL);
|
||||
reg_def VSR17 ( SOC, SOC, Op_VecX, 17, NULL);
|
||||
reg_def VSR18 ( SOC, SOC, Op_VecX, 18, NULL);
|
||||
reg_def VSR19 ( SOC, SOC, Op_VecX, 19, NULL);
|
||||
reg_def VSR20 ( SOC, SOC, Op_VecX, 20, NULL);
|
||||
reg_def VSR21 ( SOC, SOC, Op_VecX, 21, NULL);
|
||||
reg_def VSR22 ( SOC, SOC, Op_VecX, 22, NULL);
|
||||
reg_def VSR23 ( SOC, SOC, Op_VecX, 23, NULL);
|
||||
reg_def VSR24 ( SOC, SOC, Op_VecX, 24, NULL);
|
||||
reg_def VSR25 ( SOC, SOC, Op_VecX, 25, NULL);
|
||||
reg_def VSR26 ( SOC, SOC, Op_VecX, 26, NULL);
|
||||
reg_def VSR27 ( SOC, SOC, Op_VecX, 27, NULL);
|
||||
reg_def VSR28 ( SOC, SOC, Op_VecX, 28, NULL);
|
||||
reg_def VSR29 ( SOC, SOC, Op_VecX, 29, NULL);
|
||||
reg_def VSR30 ( SOC, SOC, Op_VecX, 30, NULL);
|
||||
reg_def VSR31 ( SOC, SOC, Op_VecX, 31, NULL);
|
||||
reg_def VSR32 ( SOC, SOC, Op_VecX, 32, NULL);
|
||||
reg_def VSR33 ( SOC, SOC, Op_VecX, 33, NULL);
|
||||
reg_def VSR34 ( SOC, SOC, Op_VecX, 34, NULL);
|
||||
reg_def VSR35 ( SOC, SOC, Op_VecX, 35, NULL);
|
||||
reg_def VSR36 ( SOC, SOC, Op_VecX, 36, NULL);
|
||||
reg_def VSR37 ( SOC, SOC, Op_VecX, 37, NULL);
|
||||
reg_def VSR38 ( SOC, SOC, Op_VecX, 38, NULL);
|
||||
reg_def VSR39 ( SOC, SOC, Op_VecX, 39, NULL);
|
||||
reg_def VSR40 ( SOC, SOC, Op_VecX, 40, NULL);
|
||||
reg_def VSR41 ( SOC, SOC, Op_VecX, 41, NULL);
|
||||
reg_def VSR42 ( SOC, SOC, Op_VecX, 42, NULL);
|
||||
reg_def VSR43 ( SOC, SOC, Op_VecX, 43, NULL);
|
||||
reg_def VSR44 ( SOC, SOC, Op_VecX, 44, NULL);
|
||||
reg_def VSR45 ( SOC, SOC, Op_VecX, 45, NULL);
|
||||
reg_def VSR46 ( SOC, SOC, Op_VecX, 46, NULL);
|
||||
reg_def VSR47 ( SOC, SOC, Op_VecX, 47, NULL);
|
||||
reg_def VSR48 ( SOC, SOC, Op_VecX, 48, NULL);
|
||||
reg_def VSR49 ( SOC, SOC, Op_VecX, 49, NULL);
|
||||
reg_def VSR50 ( SOC, SOC, Op_VecX, 50, NULL);
|
||||
reg_def VSR51 ( SOC, SOC, Op_VecX, 51, NULL);
|
||||
reg_def VSR52 ( SOC, SOC, Op_VecX, 52, NULL);
|
||||
reg_def VSR53 ( SOC, SOC, Op_VecX, 53, NULL);
|
||||
reg_def VSR54 ( SOC, SOC, Op_VecX, 54, NULL);
|
||||
reg_def VSR55 ( SOC, SOC, Op_VecX, 55, NULL);
|
||||
reg_def VSR56 ( SOC, SOC, Op_VecX, 56, NULL);
|
||||
reg_def VSR57 ( SOC, SOC, Op_VecX, 57, NULL);
|
||||
reg_def VSR58 ( SOC, SOC, Op_VecX, 58, NULL);
|
||||
reg_def VSR59 ( SOC, SOC, Op_VecX, 59, NULL);
|
||||
reg_def VSR60 ( SOC, SOC, Op_VecX, 60, NULL);
|
||||
reg_def VSR61 ( SOC, SOC, Op_VecX, 61, NULL);
|
||||
reg_def VSR62 ( SOC, SOC, Op_VecX, 62, NULL);
|
||||
reg_def VSR63 ( SOC, SOC, Op_VecX, 63, NULL);
|
||||
reg_def VSR0 ( SOC, SOC, Op_VecX, 0, VMRegImpl::Bad());
|
||||
reg_def VSR1 ( SOC, SOC, Op_VecX, 1, VMRegImpl::Bad());
|
||||
reg_def VSR2 ( SOC, SOC, Op_VecX, 2, VMRegImpl::Bad());
|
||||
reg_def VSR3 ( SOC, SOC, Op_VecX, 3, VMRegImpl::Bad());
|
||||
reg_def VSR4 ( SOC, SOC, Op_VecX, 4, VMRegImpl::Bad());
|
||||
reg_def VSR5 ( SOC, SOC, Op_VecX, 5, VMRegImpl::Bad());
|
||||
reg_def VSR6 ( SOC, SOC, Op_VecX, 6, VMRegImpl::Bad());
|
||||
reg_def VSR7 ( SOC, SOC, Op_VecX, 7, VMRegImpl::Bad());
|
||||
reg_def VSR8 ( SOC, SOC, Op_VecX, 8, VMRegImpl::Bad());
|
||||
reg_def VSR9 ( SOC, SOC, Op_VecX, 9, VMRegImpl::Bad());
|
||||
reg_def VSR10 ( SOC, SOC, Op_VecX, 10, VMRegImpl::Bad());
|
||||
reg_def VSR11 ( SOC, SOC, Op_VecX, 11, VMRegImpl::Bad());
|
||||
reg_def VSR12 ( SOC, SOC, Op_VecX, 12, VMRegImpl::Bad());
|
||||
reg_def VSR13 ( SOC, SOC, Op_VecX, 13, VMRegImpl::Bad());
|
||||
reg_def VSR14 ( SOC, SOC, Op_VecX, 14, VMRegImpl::Bad());
|
||||
reg_def VSR15 ( SOC, SOC, Op_VecX, 15, VMRegImpl::Bad());
|
||||
reg_def VSR16 ( SOC, SOC, Op_VecX, 16, VMRegImpl::Bad());
|
||||
reg_def VSR17 ( SOC, SOC, Op_VecX, 17, VMRegImpl::Bad());
|
||||
reg_def VSR18 ( SOC, SOC, Op_VecX, 18, VMRegImpl::Bad());
|
||||
reg_def VSR19 ( SOC, SOC, Op_VecX, 19, VMRegImpl::Bad());
|
||||
reg_def VSR20 ( SOC, SOC, Op_VecX, 20, VMRegImpl::Bad());
|
||||
reg_def VSR21 ( SOC, SOC, Op_VecX, 21, VMRegImpl::Bad());
|
||||
reg_def VSR22 ( SOC, SOC, Op_VecX, 22, VMRegImpl::Bad());
|
||||
reg_def VSR23 ( SOC, SOC, Op_VecX, 23, VMRegImpl::Bad());
|
||||
reg_def VSR24 ( SOC, SOC, Op_VecX, 24, VMRegImpl::Bad());
|
||||
reg_def VSR25 ( SOC, SOC, Op_VecX, 25, VMRegImpl::Bad());
|
||||
reg_def VSR26 ( SOC, SOC, Op_VecX, 26, VMRegImpl::Bad());
|
||||
reg_def VSR27 ( SOC, SOC, Op_VecX, 27, VMRegImpl::Bad());
|
||||
reg_def VSR28 ( SOC, SOC, Op_VecX, 28, VMRegImpl::Bad());
|
||||
reg_def VSR29 ( SOC, SOC, Op_VecX, 29, VMRegImpl::Bad());
|
||||
reg_def VSR30 ( SOC, SOC, Op_VecX, 30, VMRegImpl::Bad());
|
||||
reg_def VSR31 ( SOC, SOC, Op_VecX, 31, VMRegImpl::Bad());
|
||||
reg_def VSR32 ( SOC, SOC, Op_VecX, 32, VMRegImpl::Bad());
|
||||
reg_def VSR33 ( SOC, SOC, Op_VecX, 33, VMRegImpl::Bad());
|
||||
reg_def VSR34 ( SOC, SOC, Op_VecX, 34, VMRegImpl::Bad());
|
||||
reg_def VSR35 ( SOC, SOC, Op_VecX, 35, VMRegImpl::Bad());
|
||||
reg_def VSR36 ( SOC, SOC, Op_VecX, 36, VMRegImpl::Bad());
|
||||
reg_def VSR37 ( SOC, SOC, Op_VecX, 37, VMRegImpl::Bad());
|
||||
reg_def VSR38 ( SOC, SOC, Op_VecX, 38, VMRegImpl::Bad());
|
||||
reg_def VSR39 ( SOC, SOC, Op_VecX, 39, VMRegImpl::Bad());
|
||||
reg_def VSR40 ( SOC, SOC, Op_VecX, 40, VMRegImpl::Bad());
|
||||
reg_def VSR41 ( SOC, SOC, Op_VecX, 41, VMRegImpl::Bad());
|
||||
reg_def VSR42 ( SOC, SOC, Op_VecX, 42, VMRegImpl::Bad());
|
||||
reg_def VSR43 ( SOC, SOC, Op_VecX, 43, VMRegImpl::Bad());
|
||||
reg_def VSR44 ( SOC, SOC, Op_VecX, 44, VMRegImpl::Bad());
|
||||
reg_def VSR45 ( SOC, SOC, Op_VecX, 45, VMRegImpl::Bad());
|
||||
reg_def VSR46 ( SOC, SOC, Op_VecX, 46, VMRegImpl::Bad());
|
||||
reg_def VSR47 ( SOC, SOC, Op_VecX, 47, VMRegImpl::Bad());
|
||||
reg_def VSR48 ( SOC, SOC, Op_VecX, 48, VMRegImpl::Bad());
|
||||
reg_def VSR49 ( SOC, SOC, Op_VecX, 49, VMRegImpl::Bad());
|
||||
reg_def VSR50 ( SOC, SOC, Op_VecX, 50, VMRegImpl::Bad());
|
||||
reg_def VSR51 ( SOC, SOC, Op_VecX, 51, VMRegImpl::Bad());
|
||||
reg_def VSR52 ( SOC, SOC, Op_VecX, 52, VMRegImpl::Bad());
|
||||
reg_def VSR53 ( SOC, SOC, Op_VecX, 53, VMRegImpl::Bad());
|
||||
reg_def VSR54 ( SOC, SOC, Op_VecX, 54, VMRegImpl::Bad());
|
||||
reg_def VSR55 ( SOC, SOC, Op_VecX, 55, VMRegImpl::Bad());
|
||||
reg_def VSR56 ( SOC, SOC, Op_VecX, 56, VMRegImpl::Bad());
|
||||
reg_def VSR57 ( SOC, SOC, Op_VecX, 57, VMRegImpl::Bad());
|
||||
reg_def VSR58 ( SOC, SOC, Op_VecX, 58, VMRegImpl::Bad());
|
||||
reg_def VSR59 ( SOC, SOC, Op_VecX, 59, VMRegImpl::Bad());
|
||||
reg_def VSR60 ( SOC, SOC, Op_VecX, 60, VMRegImpl::Bad());
|
||||
reg_def VSR61 ( SOC, SOC, Op_VecX, 61, VMRegImpl::Bad());
|
||||
reg_def VSR62 ( SOC, SOC, Op_VecX, 62, VMRegImpl::Bad());
|
||||
reg_def VSR63 ( SOC, SOC, Op_VecX, 63, VMRegImpl::Bad());
|
||||
|
||||
// ----------------------------
|
||||
// Specify priority of register selection within phases of register
|
||||
|
|
|
|||
|
|
@ -313,7 +313,7 @@ inline NativeInstruction* nativeInstruction_at(address address) {
|
|||
// (used to manipulate inline caches, primitive & dll calls, etc.)
|
||||
inline NativeCall* nativeCall_at(address instr);
|
||||
inline NativeCall* nativeCall_overwriting_at(address instr,
|
||||
address destination);
|
||||
address destination = NULL);
|
||||
inline NativeCall* nativeCall_before(address return_address);
|
||||
class NativeCall: public NativeInstruction {
|
||||
public:
|
||||
|
|
@ -342,7 +342,7 @@ class NativeCall: public NativeInstruction {
|
|||
|
||||
// Creation
|
||||
friend inline NativeCall* nativeCall_at(address instr);
|
||||
friend NativeCall* nativeCall_overwriting_at(address instr, address destination = NULL) {
|
||||
friend NativeCall* nativeCall_overwriting_at(address instr, address destination) {
|
||||
// insert a "blank" call:
|
||||
NativeCall* call = (NativeCall*)instr;
|
||||
call->set_long_at(0 * BytesPerInstWord, call_instruction(destination, instr));
|
||||
|
|
@ -411,7 +411,7 @@ class NativeCallReg: public NativeInstruction {
|
|||
// == sethi %hi54(addr), O7 ; jumpl O7, %lo10(addr), O7 ; <delay>
|
||||
// That is, it is essentially the same as a NativeJump.
|
||||
class NativeFarCall;
|
||||
inline NativeFarCall* nativeFarCall_overwriting_at(address instr, address destination);
|
||||
inline NativeFarCall* nativeFarCall_overwriting_at(address instr, address destination = NULL);
|
||||
inline NativeFarCall* nativeFarCall_at(address instr);
|
||||
class NativeFarCall: public NativeInstruction {
|
||||
public:
|
||||
|
|
@ -450,7 +450,7 @@ class NativeFarCall: public NativeInstruction {
|
|||
return call;
|
||||
}
|
||||
|
||||
friend inline NativeFarCall* nativeFarCall_overwriting_at(address instr, address destination = NULL) {
|
||||
friend inline NativeFarCall* nativeFarCall_overwriting_at(address instr, address destination) {
|
||||
Unimplemented();
|
||||
NativeFarCall* call = (NativeFarCall*)instr;
|
||||
return call;
|
||||
|
|
|
|||
|
|
@ -148,8 +148,8 @@ class RegisterSaver {
|
|||
};
|
||||
|
||||
public:
|
||||
static OopMap* save_live_registers(MacroAssembler* masm, int additional_frame_words, int* total_frame_words, bool save_vectors);
|
||||
static void restore_live_registers(MacroAssembler* masm, bool restore_vectors = false);
|
||||
static OopMap* save_live_registers(MacroAssembler* masm, int additional_frame_words, int* total_frame_words, bool save_wide_vectors);
|
||||
static void restore_live_registers(MacroAssembler* masm, bool restore_wide_vectors = false);
|
||||
|
||||
// Offsets into the register save area
|
||||
// Used by deoptimization when it is managing result register
|
||||
|
|
@ -166,19 +166,19 @@ class RegisterSaver {
|
|||
static void restore_result_registers(MacroAssembler* masm);
|
||||
};
|
||||
|
||||
OopMap* RegisterSaver::save_live_registers(MacroAssembler* masm, int additional_frame_words, int* total_frame_words, bool save_vectors) {
|
||||
OopMap* RegisterSaver::save_live_registers(MacroAssembler* masm, int additional_frame_words, int* total_frame_words, bool save_wide_vectors) {
|
||||
int off = 0;
|
||||
int num_xmm_regs = XMMRegisterImpl::number_of_registers;
|
||||
if (UseAVX < 3) {
|
||||
num_xmm_regs = num_xmm_regs/2;
|
||||
}
|
||||
#if COMPILER2_OR_JVMCI
|
||||
if (save_vectors && UseAVX == 0) {
|
||||
save_vectors = false; // vectors larger than 16 byte long are supported only with AVX
|
||||
if (save_wide_vectors && UseAVX == 0) {
|
||||
save_wide_vectors = false; // vectors larger than 16 byte long are supported only with AVX
|
||||
}
|
||||
assert(!save_vectors || MaxVectorSize <= 64, "Only up to 64 byte long vectors are supported");
|
||||
assert(!save_wide_vectors || MaxVectorSize <= 64, "Only up to 64 byte long vectors are supported");
|
||||
#else
|
||||
save_vectors = false; // vectors are generated only by C2 and JVMCI
|
||||
save_wide_vectors = false; // vectors are generated only by C2 and JVMCI
|
||||
#endif
|
||||
|
||||
// Always make the frame size 16-byte aligned, both vector and non vector stacks are always allocated
|
||||
|
|
@ -199,7 +199,7 @@ OopMap* RegisterSaver::save_live_registers(MacroAssembler* masm, int additional_
|
|||
__ push_CPU_state(); // Push a multiple of 16 bytes
|
||||
|
||||
// push cpu state handles this on EVEX enabled targets
|
||||
if (save_vectors) {
|
||||
if (save_wide_vectors) {
|
||||
// Save upper half of YMM registers(0..15)
|
||||
int base_addr = XSAVE_AREA_YMM_BEGIN;
|
||||
for (int n = 0; n < 16; n++) {
|
||||
|
|
@ -221,11 +221,12 @@ OopMap* RegisterSaver::save_live_registers(MacroAssembler* masm, int additional_
|
|||
}
|
||||
} else {
|
||||
if (VM_Version::supports_evex()) {
|
||||
// Save upper bank of ZMM registers(16..31) for double/float usage
|
||||
// Save upper bank of XMM registers(16..31) for scalar or 16-byte vector usage
|
||||
int base_addr = XSAVE_AREA_UPPERBANK;
|
||||
off = 0;
|
||||
int vector_len = VM_Version::supports_avx512vl() ? Assembler::AVX_128bit : Assembler::AVX_512bit;
|
||||
for (int n = 16; n < num_xmm_regs; n++) {
|
||||
__ movsd(Address(rsp, base_addr+(off++*64)), as_XMMRegister(n));
|
||||
__ evmovdqul(Address(rsp, base_addr+(off++*64)), as_XMMRegister(n), vector_len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -282,7 +283,7 @@ OopMap* RegisterSaver::save_live_registers(MacroAssembler* masm, int additional_
|
|||
}
|
||||
|
||||
#if COMPILER2_OR_JVMCI
|
||||
if (save_vectors) {
|
||||
if (save_wide_vectors) {
|
||||
// Save upper half of YMM registers(0..15)
|
||||
off = ymm0_off;
|
||||
delta = ymm1_off - ymm0_off;
|
||||
|
|
@ -345,7 +346,7 @@ OopMap* RegisterSaver::save_live_registers(MacroAssembler* masm, int additional_
|
|||
return map;
|
||||
}
|
||||
|
||||
void RegisterSaver::restore_live_registers(MacroAssembler* masm, bool restore_vectors) {
|
||||
void RegisterSaver::restore_live_registers(MacroAssembler* masm, bool restore_wide_vectors) {
|
||||
int num_xmm_regs = XMMRegisterImpl::number_of_registers;
|
||||
if (UseAVX < 3) {
|
||||
num_xmm_regs = num_xmm_regs/2;
|
||||
|
|
@ -356,18 +357,18 @@ void RegisterSaver::restore_live_registers(MacroAssembler* masm, bool restore_ve
|
|||
}
|
||||
|
||||
#if COMPILER2_OR_JVMCI
|
||||
if (restore_vectors) {
|
||||
if (restore_wide_vectors) {
|
||||
assert(UseAVX > 0, "Vectors larger than 16 byte long are supported only with AVX");
|
||||
assert(MaxVectorSize <= 64, "Only up to 64 byte long vectors are supported");
|
||||
}
|
||||
#else
|
||||
assert(!restore_vectors, "vectors are generated only by C2");
|
||||
assert(!restore_wide_vectors, "vectors are generated only by C2");
|
||||
#endif
|
||||
|
||||
__ vzeroupper();
|
||||
|
||||
// On EVEX enabled targets everything is handled in pop fpu state
|
||||
if (restore_vectors) {
|
||||
if (restore_wide_vectors) {
|
||||
// Restore upper half of YMM registers (0..15)
|
||||
int base_addr = XSAVE_AREA_YMM_BEGIN;
|
||||
for (int n = 0; n < 16; n++) {
|
||||
|
|
@ -389,11 +390,12 @@ void RegisterSaver::restore_live_registers(MacroAssembler* masm, bool restore_ve
|
|||
}
|
||||
} else {
|
||||
if (VM_Version::supports_evex()) {
|
||||
// Restore upper bank of ZMM registers(16..31) for double/float usage
|
||||
// Restore upper bank of XMM registers(16..31) for scalar or 16-byte vector usage
|
||||
int base_addr = XSAVE_AREA_UPPERBANK;
|
||||
int off = 0;
|
||||
int vector_len = VM_Version::supports_avx512vl() ? Assembler::AVX_128bit : Assembler::AVX_512bit;
|
||||
for (int n = 16; n < num_xmm_regs; n++) {
|
||||
__ movsd(as_XMMRegister(n), Address(rsp, base_addr+(off++*64)));
|
||||
__ evmovdqul(as_XMMRegister(n), Address(rsp, base_addr+(off++*64)), vector_len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2936,7 +2938,7 @@ void SharedRuntime::generate_deopt_blob() {
|
|||
// Prolog for non exception case!
|
||||
|
||||
// Save everything in sight.
|
||||
map = RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words, /*save_vectors*/ true);
|
||||
map = RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words, /*save_wide_vectors*/ true);
|
||||
|
||||
// Normal deoptimization. Save exec mode for unpack_frames.
|
||||
__ movl(r14, Deoptimization::Unpack_deopt); // callee-saved
|
||||
|
|
@ -2954,7 +2956,7 @@ void SharedRuntime::generate_deopt_blob() {
|
|||
// return address is the pc describes what bci to do re-execute at
|
||||
|
||||
// No need to update map as each call to save_live_registers will produce identical oopmap
|
||||
(void) RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words, /*save_vectors*/ true);
|
||||
(void) RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words, /*save_wide_vectors*/ true);
|
||||
|
||||
__ movl(r14, Deoptimization::Unpack_reexecute); // callee-saved
|
||||
__ jmp(cont);
|
||||
|
|
@ -2973,7 +2975,7 @@ void SharedRuntime::generate_deopt_blob() {
|
|||
uncommon_trap_offset = __ pc() - start;
|
||||
|
||||
// Save everything in sight.
|
||||
RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words, /*save_vectors*/ true);
|
||||
RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words, /*save_wide_vectors*/ true);
|
||||
// fetch_unroll_info needs to call last_java_frame()
|
||||
__ set_last_Java_frame(noreg, noreg, NULL);
|
||||
|
||||
|
|
@ -3020,7 +3022,7 @@ void SharedRuntime::generate_deopt_blob() {
|
|||
__ push(0);
|
||||
|
||||
// Save everything in sight.
|
||||
map = RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words, /*save_vectors*/ true);
|
||||
map = RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words, /*save_wide_vectors*/ true);
|
||||
|
||||
// Now it is safe to overwrite any register
|
||||
|
||||
|
|
@ -3456,7 +3458,7 @@ SafepointBlob* SharedRuntime::generate_handler_blob(address call_ptr, int poll_t
|
|||
address call_pc = NULL;
|
||||
int frame_size_in_words;
|
||||
bool cause_return = (poll_type == POLL_AT_RETURN);
|
||||
bool save_vectors = (poll_type == POLL_AT_VECTOR_LOOP);
|
||||
bool save_wide_vectors = (poll_type == POLL_AT_VECTOR_LOOP);
|
||||
|
||||
if (UseRTMLocking) {
|
||||
// Abort RTM transaction before calling runtime
|
||||
|
|
@ -3471,7 +3473,7 @@ SafepointBlob* SharedRuntime::generate_handler_blob(address call_ptr, int poll_t
|
|||
}
|
||||
|
||||
// Save registers, fpu state, and flags
|
||||
map = RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words, save_vectors);
|
||||
map = RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words, save_wide_vectors);
|
||||
|
||||
// The following is basically a call_VM. However, we need the precise
|
||||
// address of the call in order to generate an oopmap. Hence, we do all the
|
||||
|
|
@ -3510,7 +3512,7 @@ SafepointBlob* SharedRuntime::generate_handler_blob(address call_ptr, int poll_t
|
|||
|
||||
// Exception pending
|
||||
|
||||
RegisterSaver::restore_live_registers(masm, save_vectors);
|
||||
RegisterSaver::restore_live_registers(masm, save_wide_vectors);
|
||||
|
||||
__ jump(RuntimeAddress(StubRoutines::forward_exception_entry()));
|
||||
|
||||
|
|
@ -3578,7 +3580,7 @@ SafepointBlob* SharedRuntime::generate_handler_blob(address call_ptr, int poll_t
|
|||
|
||||
__ bind(no_adjust);
|
||||
// Normal exit, restore registers and exit.
|
||||
RegisterSaver::restore_live_registers(masm, save_vectors);
|
||||
RegisterSaver::restore_live_registers(masm, save_wide_vectors);
|
||||
__ ret(0);
|
||||
|
||||
#ifdef ASSERT
|
||||
|
|
@ -3618,7 +3620,7 @@ RuntimeStub* SharedRuntime::generate_resolve_blob(address destination, const cha
|
|||
int start = __ offset();
|
||||
|
||||
// No need to save vector registers since they are caller-saved anyway.
|
||||
map = RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words, /*save_vectors*/ false);
|
||||
map = RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words, /*save_wide_vectors*/ false);
|
||||
|
||||
int frame_complete = __ offset();
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2019, 2022, 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,11 +34,15 @@
|
|||
#include "runtime/os.hpp"
|
||||
#include "utilities/globalDefinitions.hpp"
|
||||
|
||||
// controller names have to match the *_IDX indices
|
||||
static const char* cg_controller_name[] = { "cpu", "cpuset", "cpuacct", "memory", "pids" };
|
||||
|
||||
CgroupSubsystem* CgroupSubsystemFactory::create() {
|
||||
CgroupV1MemoryController* memory = NULL;
|
||||
CgroupV1Controller* cpuset = NULL;
|
||||
CgroupV1Controller* cpu = NULL;
|
||||
CgroupV1Controller* cpuacct = NULL;
|
||||
CgroupV1Controller* pids = NULL;
|
||||
CgroupInfo cg_infos[CG_INFO_LENGTH];
|
||||
u1 cg_type_flags = INVALID_CGROUPS_GENERIC;
|
||||
const char* proc_cgroups = "/proc/cgroups";
|
||||
|
|
@ -93,22 +97,29 @@ CgroupSubsystem* CgroupSubsystemFactory::create() {
|
|||
assert(is_cgroup_v1(&cg_type_flags), "Cgroup v1 expected");
|
||||
for (int i = 0; i < CG_INFO_LENGTH; i++) {
|
||||
CgroupInfo info = cg_infos[i];
|
||||
if (strcmp(info._name, "memory") == 0) {
|
||||
memory = new CgroupV1MemoryController(info._root_mount_path, info._mount_path);
|
||||
memory->set_subsystem_path(info._cgroup_path);
|
||||
} else if (strcmp(info._name, "cpuset") == 0) {
|
||||
cpuset = new CgroupV1Controller(info._root_mount_path, info._mount_path);
|
||||
cpuset->set_subsystem_path(info._cgroup_path);
|
||||
} else if (strcmp(info._name, "cpu") == 0) {
|
||||
cpu = new CgroupV1Controller(info._root_mount_path, info._mount_path);
|
||||
cpu->set_subsystem_path(info._cgroup_path);
|
||||
} else if (strcmp(info._name, "cpuacct") == 0) {
|
||||
cpuacct = new CgroupV1Controller(info._root_mount_path, info._mount_path);
|
||||
cpuacct->set_subsystem_path(info._cgroup_path);
|
||||
if (info._data_complete) { // pids controller might have incomplete data
|
||||
if (strcmp(info._name, "memory") == 0) {
|
||||
memory = new CgroupV1MemoryController(info._root_mount_path, info._mount_path);
|
||||
memory->set_subsystem_path(info._cgroup_path);
|
||||
} else if (strcmp(info._name, "cpuset") == 0) {
|
||||
cpuset = new CgroupV1Controller(info._root_mount_path, info._mount_path);
|
||||
cpuset->set_subsystem_path(info._cgroup_path);
|
||||
} else if (strcmp(info._name, "cpu") == 0) {
|
||||
cpu = new CgroupV1Controller(info._root_mount_path, info._mount_path);
|
||||
cpu->set_subsystem_path(info._cgroup_path);
|
||||
} else if (strcmp(info._name, "cpuacct") == 0) {
|
||||
cpuacct = new CgroupV1Controller(info._root_mount_path, info._mount_path);
|
||||
cpuacct->set_subsystem_path(info._cgroup_path);
|
||||
} else if (strcmp(info._name, "pids") == 0) {
|
||||
pids = new CgroupV1Controller(info._root_mount_path, info._mount_path);
|
||||
pids->set_subsystem_path(info._cgroup_path);
|
||||
}
|
||||
} else {
|
||||
log_debug(os, container)("CgroupInfo for %s not complete", cg_controller_name[i]);
|
||||
}
|
||||
}
|
||||
cleanup(cg_infos);
|
||||
return new CgroupV1Subsystem(cpuset, cpu, cpuacct, memory);
|
||||
return new CgroupV1Subsystem(cpuset, cpu, cpuacct, pids, memory);
|
||||
}
|
||||
|
||||
bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
|
||||
|
|
@ -122,9 +133,10 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
|
|||
char buf[MAXPATHLEN+1];
|
||||
char *p;
|
||||
bool is_cgroupsV2;
|
||||
// true iff all controllers, memory, cpu, cpuset, cpuacct are enabled
|
||||
// true iff all required controllers, memory, cpu, cpuset, cpuacct are enabled
|
||||
// at the kernel level.
|
||||
bool all_controllers_enabled;
|
||||
// pids might not be enabled on older Linux distros (SLES 12.1, RHEL 7.1)
|
||||
bool all_required_controllers_enabled;
|
||||
|
||||
/*
|
||||
* Read /proc/cgroups so as to be able to distinguish cgroups v2 vs cgroups v1.
|
||||
|
|
@ -136,10 +148,9 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
|
|||
*/
|
||||
cgroups = fopen(proc_cgroups, "r");
|
||||
if (cgroups == NULL) {
|
||||
log_debug(os, container)("Can't open %s, %s",
|
||||
proc_cgroups, os::strerror(errno));
|
||||
*flags = INVALID_CGROUPS_GENERIC;
|
||||
return false;
|
||||
log_debug(os, container)("Can't open %s, %s", proc_cgroups, os::strerror(errno));
|
||||
*flags = INVALID_CGROUPS_GENERIC;
|
||||
return false;
|
||||
}
|
||||
|
||||
while ((p = fgets(buf, MAXPATHLEN, cgroups)) != NULL) {
|
||||
|
|
@ -167,19 +178,30 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
|
|||
cg_infos[CPUACCT_IDX]._name = os::strdup(name);
|
||||
cg_infos[CPUACCT_IDX]._hierarchy_id = hierarchy_id;
|
||||
cg_infos[CPUACCT_IDX]._enabled = (enabled == 1);
|
||||
} else if (strcmp(name, "pids") == 0) {
|
||||
log_debug(os, container)("Detected optional pids controller entry in %s", proc_cgroups);
|
||||
cg_infos[PIDS_IDX]._name = os::strdup(name);
|
||||
cg_infos[PIDS_IDX]._hierarchy_id = hierarchy_id;
|
||||
cg_infos[PIDS_IDX]._enabled = (enabled == 1);
|
||||
}
|
||||
}
|
||||
fclose(cgroups);
|
||||
|
||||
is_cgroupsV2 = true;
|
||||
all_controllers_enabled = true;
|
||||
all_required_controllers_enabled = true;
|
||||
for (int i = 0; i < CG_INFO_LENGTH; i++) {
|
||||
is_cgroupsV2 = is_cgroupsV2 && cg_infos[i]._hierarchy_id == 0;
|
||||
all_controllers_enabled = all_controllers_enabled && cg_infos[i]._enabled;
|
||||
// pids controller is optional. All other controllers are required
|
||||
if (i != PIDS_IDX) {
|
||||
is_cgroupsV2 = is_cgroupsV2 && cg_infos[i]._hierarchy_id == 0;
|
||||
all_required_controllers_enabled = all_required_controllers_enabled && cg_infos[i]._enabled;
|
||||
}
|
||||
if (log_is_enabled(Debug, os, container) && !cg_infos[i]._enabled) {
|
||||
log_debug(os, container)("controller %s is not enabled\n", cg_controller_name[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (!all_controllers_enabled) {
|
||||
// one or more controllers disabled, disable container support
|
||||
if (!all_required_controllers_enabled) {
|
||||
// one or more required controllers disabled, disable container support
|
||||
log_debug(os, container)("One or more required controllers disabled at kernel level.");
|
||||
cleanup(cg_infos);
|
||||
*flags = INVALID_CGROUPS_GENERIC;
|
||||
|
|
@ -220,21 +242,31 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
|
|||
|
||||
while (!is_cgroupsV2 && (token = strsep(&controllers, ",")) != NULL) {
|
||||
if (strcmp(token, "memory") == 0) {
|
||||
assert(hierarchy_id == cg_infos[MEMORY_IDX]._hierarchy_id, "/proc/cgroups and /proc/self/cgroup hierarchy mismatch");
|
||||
assert(hierarchy_id == cg_infos[MEMORY_IDX]._hierarchy_id, "/proc/cgroups and /proc/self/cgroup hierarchy mismatch for memory");
|
||||
cg_infos[MEMORY_IDX]._cgroup_path = os::strdup(cgroup_path);
|
||||
} else if (strcmp(token, "cpuset") == 0) {
|
||||
assert(hierarchy_id == cg_infos[CPUSET_IDX]._hierarchy_id, "/proc/cgroups and /proc/self/cgroup hierarchy mismatch");
|
||||
assert(hierarchy_id == cg_infos[CPUSET_IDX]._hierarchy_id, "/proc/cgroups and /proc/self/cgroup hierarchy mismatch for cpuset");
|
||||
cg_infos[CPUSET_IDX]._cgroup_path = os::strdup(cgroup_path);
|
||||
} else if (strcmp(token, "cpu") == 0) {
|
||||
assert(hierarchy_id == cg_infos[CPU_IDX]._hierarchy_id, "/proc/cgroups and /proc/self/cgroup hierarchy mismatch");
|
||||
assert(hierarchy_id == cg_infos[CPU_IDX]._hierarchy_id, "/proc/cgroups and /proc/self/cgroup hierarchy mismatch for cpu");
|
||||
cg_infos[CPU_IDX]._cgroup_path = os::strdup(cgroup_path);
|
||||
} else if (strcmp(token, "cpuacct") == 0) {
|
||||
assert(hierarchy_id == cg_infos[CPUACCT_IDX]._hierarchy_id, "/proc/cgroups and /proc/self/cgroup hierarchy mismatch");
|
||||
assert(hierarchy_id == cg_infos[CPUACCT_IDX]._hierarchy_id, "/proc/cgroups and /proc/self/cgroup hierarchy mismatch for cpuacc");
|
||||
cg_infos[CPUACCT_IDX]._cgroup_path = os::strdup(cgroup_path);
|
||||
} else if (strcmp(token, "pids") == 0) {
|
||||
assert(hierarchy_id == cg_infos[PIDS_IDX]._hierarchy_id, "/proc/cgroups (%d) and /proc/self/cgroup (%d) hierarchy mismatch for pids",
|
||||
cg_infos[PIDS_IDX]._hierarchy_id, hierarchy_id);
|
||||
cg_infos[PIDS_IDX]._cgroup_path = os::strdup(cgroup_path);
|
||||
}
|
||||
}
|
||||
if (is_cgroupsV2) {
|
||||
// On some systems we have mixed cgroups v1 and cgroups v2 controllers (e.g. freezer on cg1 and
|
||||
// all relevant controllers on cg2). Only set the cgroup path when we see a hierarchy id of 0.
|
||||
if (hierarchy_id != 0) {
|
||||
continue;
|
||||
}
|
||||
for (int i = 0; i < CG_INFO_LENGTH; i++) {
|
||||
assert(cg_infos[i]._cgroup_path == NULL, "cgroup path must only be set once");
|
||||
cg_infos[i]._cgroup_path = os::strdup(cgroup_path);
|
||||
}
|
||||
}
|
||||
|
|
@ -281,13 +313,15 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
|
|||
|
||||
/* Cgroup v1 relevant info
|
||||
*
|
||||
* Find the cgroup mount point for memory, cpuset, cpu, cpuacct
|
||||
* Find the cgroup mount point for memory, cpuset, cpu, cpuacct, pids
|
||||
*
|
||||
* Example for docker:
|
||||
* 219 214 0:29 /docker/7208cebd00fa5f2e342b1094f7bed87fa25661471a4637118e65f1c995be8a34 /sys/fs/cgroup/memory ro,nosuid,nodev,noexec,relatime - cgroup cgroup rw,memory
|
||||
*
|
||||
* Example for host:
|
||||
* 34 28 0:29 / /sys/fs/cgroup/memory rw,nosuid,nodev,noexec,relatime shared:16 - cgroup cgroup rw,memory
|
||||
*
|
||||
* 44 31 0:39 / /sys/fs/cgroup/pids rw,nosuid,nodev,noexec,relatime shared:23 - cgroup cgroup rw,pids
|
||||
*/
|
||||
if (sscanf(p, "%*d %*d %*d:%*d %s %s %*[^-]- %s %*s %s", tmproot, tmpmount, tmp_fs_type, tmpcgroups) == 4) {
|
||||
if (strcmp("cgroup", tmp_fs_type) != 0) {
|
||||
|
|
@ -333,6 +367,12 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
|
|||
cg_infos[CPUACCT_IDX]._mount_path = os::strdup(tmpmount);
|
||||
cg_infos[CPUACCT_IDX]._root_mount_path = os::strdup(tmproot);
|
||||
cg_infos[CPUACCT_IDX]._data_complete = true;
|
||||
} else if (strcmp(token, "pids") == 0) {
|
||||
any_cgroup_mounts_found = true;
|
||||
assert(cg_infos[PIDS_IDX]._mount_path == NULL, "stomping of _mount_path");
|
||||
cg_infos[PIDS_IDX]._mount_path = os::strdup(tmpmount);
|
||||
cg_infos[PIDS_IDX]._root_mount_path = os::strdup(tmproot);
|
||||
cg_infos[PIDS_IDX]._data_complete = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -387,10 +427,13 @@ bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos,
|
|||
*flags = INVALID_CGROUPS_V1;
|
||||
return false;
|
||||
}
|
||||
if (log_is_enabled(Debug, os, container) && !cg_infos[PIDS_IDX]._data_complete) {
|
||||
log_debug(os, container)("Optional cgroup v1 pids subsystem not found");
|
||||
// keep the other controller info, pids is optional
|
||||
}
|
||||
// Cgroups v1 case, we have all the info we need.
|
||||
*flags = CGROUPS_V1;
|
||||
return true;
|
||||
|
||||
};
|
||||
|
||||
void CgroupSubsystemFactory::cleanup(CgroupInfo* cg_infos) {
|
||||
|
|
@ -458,7 +501,10 @@ int CgroupSubsystem::active_processor_count() {
|
|||
cpu_count = limit_count = os::Linux::active_processor_count();
|
||||
int quota = cpu_quota();
|
||||
int period = cpu_period();
|
||||
int share = cpu_shares();
|
||||
|
||||
// It's not a good idea to use cpu_shares() to limit the number
|
||||
// of CPUs used by the JVM. See JDK-8281181.
|
||||
int share = UseContainerCpuShares ? cpu_shares() : -1;
|
||||
|
||||
if (quota > -1 && period > 0) {
|
||||
quota_count = ceilf((float)quota / (float)period);
|
||||
|
|
@ -514,3 +560,22 @@ jlong CgroupSubsystem::memory_limit_in_bytes() {
|
|||
memory_limit->set_value(mem_limit, OSCONTAINER_CACHE_TIMEOUT);
|
||||
return mem_limit;
|
||||
}
|
||||
|
||||
jlong CgroupSubsystem::limit_from_str(char* limit_str) {
|
||||
if (limit_str == NULL) {
|
||||
return OSCONTAINER_ERROR;
|
||||
}
|
||||
// Unlimited memory in cgroups is the literal string 'max' for
|
||||
// some controllers, for example the pids controller.
|
||||
if (strcmp("max", limit_str) == 0) {
|
||||
os::free(limit_str);
|
||||
return (jlong)-1;
|
||||
}
|
||||
julong limit;
|
||||
if (sscanf(limit_str, JULONG_FORMAT, &limit) != 1) {
|
||||
os::free(limit_str);
|
||||
return OSCONTAINER_ERROR;
|
||||
}
|
||||
os::free(limit_str);
|
||||
return (jlong)limit;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2019, 2021, 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
|
||||
|
|
@ -61,12 +61,13 @@
|
|||
#define INVALID_CGROUPS_NO_MOUNT 5
|
||||
#define INVALID_CGROUPS_GENERIC 6
|
||||
|
||||
// Four controllers: cpu, cpuset, cpuacct, memory
|
||||
#define CG_INFO_LENGTH 4
|
||||
// Five controllers: cpu, cpuset, cpuacct, memory, pids
|
||||
#define CG_INFO_LENGTH 5
|
||||
#define CPUSET_IDX 0
|
||||
#define CPU_IDX 1
|
||||
#define CPUACCT_IDX 2
|
||||
#define MEMORY_IDX 3
|
||||
#define PIDS_IDX 4
|
||||
|
||||
typedef char * cptr;
|
||||
|
||||
|
|
@ -240,10 +241,13 @@ class CgroupSubsystem: public CHeapObj<mtInternal> {
|
|||
public:
|
||||
jlong memory_limit_in_bytes();
|
||||
int active_processor_count();
|
||||
jlong limit_from_str(char* limit_str);
|
||||
|
||||
virtual int cpu_quota() = 0;
|
||||
virtual int cpu_period() = 0;
|
||||
virtual int cpu_shares() = 0;
|
||||
virtual jlong pids_max() = 0;
|
||||
virtual jlong pids_current() = 0;
|
||||
virtual jlong memory_usage_in_bytes() = 0;
|
||||
virtual jlong memory_and_swap_limit_in_bytes() = 0;
|
||||
virtual jlong memory_soft_limit_in_bytes() = 0;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2019, 2021, 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
|
||||
|
|
@ -136,19 +136,39 @@ jlong CgroupV1Subsystem::memory_and_swap_limit_in_bytes() {
|
|||
const char* matchline = "hierarchical_memsw_limit";
|
||||
const char* format = "%s " JULONG_FORMAT;
|
||||
GET_CONTAINER_INFO_LINE(julong, _memory->controller(), "/memory.stat", matchline,
|
||||
"Hierarchical Memory and Swap Limit is : " JULONG_FORMAT, format, hier_memlimit)
|
||||
if (hier_memlimit >= _unlimited_memory) {
|
||||
"Hierarchical Memory and Swap Limit is : " JULONG_FORMAT, format, hier_memswlimit)
|
||||
if (hier_memswlimit >= _unlimited_memory) {
|
||||
log_trace(os, container)("Hierarchical Memory and Swap Limit is: Unlimited");
|
||||
} else {
|
||||
return (jlong)hier_memlimit;
|
||||
jlong swappiness = read_mem_swappiness();
|
||||
if (swappiness == 0) {
|
||||
const char* matchmemline = "hierarchical_memory_limit";
|
||||
GET_CONTAINER_INFO_LINE(julong, _memory->controller(), "/memory.stat", matchmemline,
|
||||
"Hierarchical Memory Limit is : " JULONG_FORMAT, format, hier_memlimit)
|
||||
log_trace(os, container)("Memory and Swap Limit has been reset to " JULONG_FORMAT " because swappiness is 0", hier_memlimit);
|
||||
return (jlong)hier_memlimit;
|
||||
}
|
||||
return (jlong)hier_memswlimit;
|
||||
}
|
||||
}
|
||||
return (jlong)-1;
|
||||
} else {
|
||||
jlong swappiness = read_mem_swappiness();
|
||||
if (swappiness == 0) {
|
||||
jlong memlimit = read_memory_limit_in_bytes();
|
||||
log_trace(os, container)("Memory and Swap Limit has been reset to " JULONG_FORMAT " because swappiness is 0", memlimit);
|
||||
return memlimit;
|
||||
}
|
||||
return (jlong)memswlimit;
|
||||
}
|
||||
}
|
||||
|
||||
jlong CgroupV1Subsystem::read_mem_swappiness() {
|
||||
GET_CONTAINER_INFO(julong, _memory->controller(), "/memory.swappiness",
|
||||
"Swappiness is: " JULONG_FORMAT, JULONG_FORMAT, swappiness);
|
||||
return swappiness;
|
||||
}
|
||||
|
||||
jlong CgroupV1Subsystem::memory_soft_limit_in_bytes() {
|
||||
GET_CONTAINER_INFO(julong, _memory->controller(), "/memory.soft_limit_in_bytes",
|
||||
"Memory Soft Limit is: " JULONG_FORMAT, JULONG_FORMAT, memsoftlimit);
|
||||
|
|
@ -241,3 +261,43 @@ int CgroupV1Subsystem::cpu_shares() {
|
|||
|
||||
return shares;
|
||||
}
|
||||
|
||||
|
||||
char* CgroupV1Subsystem::pids_max_val() {
|
||||
GET_CONTAINER_INFO_CPTR(cptr, _pids, "/pids.max",
|
||||
"Maximum number of tasks is: %s", "%s %*d", pidsmax, 1024);
|
||||
if (pidsmax == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
return os::strdup(pidsmax);
|
||||
}
|
||||
|
||||
/* pids_max
|
||||
*
|
||||
* Return the maximum number of tasks available to the process
|
||||
*
|
||||
* return:
|
||||
* maximum number of tasks
|
||||
* -1 for unlimited
|
||||
* OSCONTAINER_ERROR for not supported
|
||||
*/
|
||||
jlong CgroupV1Subsystem::pids_max() {
|
||||
if (_pids == NULL) return OSCONTAINER_ERROR;
|
||||
char * pidsmax_str = pids_max_val();
|
||||
return limit_from_str(pidsmax_str);
|
||||
}
|
||||
|
||||
/* pids_current
|
||||
*
|
||||
* The number of tasks currently in the cgroup (and its descendants) of the process
|
||||
*
|
||||
* return:
|
||||
* current number of tasks
|
||||
* OSCONTAINER_ERROR for not supported
|
||||
*/
|
||||
jlong CgroupV1Subsystem::pids_current() {
|
||||
if (_pids == NULL) return OSCONTAINER_ERROR;
|
||||
GET_CONTAINER_INFO(jlong, _pids, "/pids.current",
|
||||
"Current number of tasks is: " JLONG_FORMAT, JLONG_FORMAT, pids_current);
|
||||
return pids_current;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2019, 2021, 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
|
||||
|
|
@ -87,6 +87,9 @@ class CgroupV1Subsystem: public CgroupSubsystem {
|
|||
|
||||
int cpu_shares();
|
||||
|
||||
jlong pids_max();
|
||||
jlong pids_current();
|
||||
|
||||
const char * container_type() {
|
||||
return "cgroupv1";
|
||||
}
|
||||
|
|
@ -101,15 +104,22 @@ class CgroupV1Subsystem: public CgroupSubsystem {
|
|||
CgroupV1Controller* _cpuset = NULL;
|
||||
CachingCgroupController* _cpu = NULL;
|
||||
CgroupV1Controller* _cpuacct = NULL;
|
||||
CgroupV1Controller* _pids = NULL;
|
||||
|
||||
char * pids_max_val();
|
||||
|
||||
jlong read_mem_swappiness();
|
||||
|
||||
public:
|
||||
CgroupV1Subsystem(CgroupV1Controller* cpuset,
|
||||
CgroupV1Controller* cpu,
|
||||
CgroupV1Controller* cpuacct,
|
||||
CgroupV1Controller* pids,
|
||||
CgroupV1MemoryController* memory) {
|
||||
_cpuset = cpuset;
|
||||
_cpu = new CachingCgroupController(cpu);
|
||||
_cpuacct = cpuacct;
|
||||
_pids = pids;
|
||||
_memory = new CachingCgroupController(memory);
|
||||
_unlimited_memory = (LONG_MAX / os::vm_page_size()) * os::vm_page_size();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -203,24 +203,6 @@ jlong CgroupV2Subsystem::read_memory_limit_in_bytes() {
|
|||
return limit;
|
||||
}
|
||||
|
||||
jlong CgroupV2Subsystem::limit_from_str(char* limit_str) {
|
||||
if (limit_str == NULL) {
|
||||
return OSCONTAINER_ERROR;
|
||||
}
|
||||
// Unlimited memory in Cgroups V2 is the literal string 'max'
|
||||
if (strcmp("max", limit_str) == 0) {
|
||||
os::free(limit_str);
|
||||
return (jlong)-1;
|
||||
}
|
||||
julong limit;
|
||||
if (sscanf(limit_str, JULONG_FORMAT, &limit) != 1) {
|
||||
os::free(limit_str);
|
||||
return OSCONTAINER_ERROR;
|
||||
}
|
||||
os::free(limit_str);
|
||||
return (jlong)limit;
|
||||
}
|
||||
|
||||
char* CgroupV2Subsystem::mem_limit_val() {
|
||||
GET_CONTAINER_INFO_CPTR(cptr, _unified, "/memory.max",
|
||||
"Raw value for memory limit is: %s", "%s", mem_limit_str, 1024);
|
||||
|
|
@ -244,3 +226,40 @@ char* CgroupV2Controller::construct_path(char* mount_path, char *cgroup_path) {
|
|||
return os::strdup(buf);
|
||||
}
|
||||
|
||||
char* CgroupV2Subsystem::pids_max_val() {
|
||||
GET_CONTAINER_INFO_CPTR(cptr, _unified, "/pids.max",
|
||||
"Maximum number of tasks is: %s", "%s %*d", pidsmax, 1024);
|
||||
if (pidsmax == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
return os::strdup(pidsmax);
|
||||
}
|
||||
|
||||
/* pids_max
|
||||
*
|
||||
* Return the maximum number of tasks available to the process
|
||||
*
|
||||
* return:
|
||||
* maximum number of tasks
|
||||
* -1 for unlimited
|
||||
* OSCONTAINER_ERROR for not supported
|
||||
*/
|
||||
jlong CgroupV2Subsystem::pids_max() {
|
||||
char * pidsmax_str = pids_max_val();
|
||||
return limit_from_str(pidsmax_str);
|
||||
}
|
||||
|
||||
/* pids_current
|
||||
*
|
||||
* The number of tasks currently in the cgroup (and its descendants) of the process
|
||||
*
|
||||
* return:
|
||||
* current number of tasks
|
||||
* OSCONTAINER_ERROR for not supported
|
||||
*/
|
||||
jlong CgroupV2Subsystem::pids_current() {
|
||||
GET_CONTAINER_INFO(jlong, _unified, "/pids.current",
|
||||
"Current number of tasks is: " JLONG_FORMAT, JLONG_FORMAT, pids_current);
|
||||
return pids_current;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ class CgroupV2Subsystem: public CgroupSubsystem {
|
|||
char *mem_swp_limit_val();
|
||||
char *mem_soft_limit_val();
|
||||
char *cpu_quota_val();
|
||||
jlong limit_from_str(char* limit_str);
|
||||
char *pids_max_val();
|
||||
|
||||
public:
|
||||
CgroupV2Subsystem(CgroupController * unified) {
|
||||
|
|
@ -79,6 +79,9 @@ class CgroupV2Subsystem: public CgroupSubsystem {
|
|||
jlong memory_max_usage_in_bytes();
|
||||
char * cpu_cpuset_cpus();
|
||||
char * cpu_cpuset_memory_nodes();
|
||||
jlong pids_max();
|
||||
jlong pids_current();
|
||||
|
||||
const char * container_type() {
|
||||
return "cgroupv2";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2005, 2022, 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,6 +62,10 @@
|
|||
product(bool, UseContainerSupport, true, \
|
||||
"Enable detection and runtime container configuration support") \
|
||||
\
|
||||
product(bool, UseContainerCpuShares, false, \
|
||||
"Include CPU shares in the CPU availability" \
|
||||
" calculation.") \
|
||||
\
|
||||
product(bool, PreferContainerQuotaForCPUCount, true, \
|
||||
"Calculate the container CPU availability based on the value" \
|
||||
" of quotas (if set), when true. Otherwise, use the CPU" \
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2017, 2021, 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
|
||||
|
|
@ -138,3 +138,13 @@ int OSContainer::cpu_shares() {
|
|||
assert(cgroup_subsystem != NULL, "cgroup subsystem not available");
|
||||
return cgroup_subsystem->cpu_shares();
|
||||
}
|
||||
|
||||
jlong OSContainer::pids_max() {
|
||||
assert(cgroup_subsystem != NULL, "cgroup subsystem not available");
|
||||
return cgroup_subsystem->pids_max();
|
||||
}
|
||||
|
||||
jlong OSContainer::pids_current() {
|
||||
assert(cgroup_subsystem != NULL, "cgroup subsystem not available");
|
||||
return cgroup_subsystem->pids_current();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2017, 2021, 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,6 +62,8 @@ class OSContainer: AllStatic {
|
|||
|
||||
static int cpu_shares();
|
||||
|
||||
static jlong pids_max();
|
||||
static jlong pids_current();
|
||||
};
|
||||
|
||||
inline bool OSContainer::is_containerized() {
|
||||
|
|
|
|||
|
|
@ -2460,9 +2460,22 @@ void os::Linux::print_uptime_info(outputStream* st) {
|
|||
}
|
||||
}
|
||||
|
||||
static void print_container_helper(outputStream* st, jlong j, const char* metrics) {
|
||||
st->print("%s: ", metrics);
|
||||
if (j > 0) {
|
||||
if (j >= 1024) {
|
||||
st->print_cr(UINT64_FORMAT " k", uint64_t(j) / 1024);
|
||||
} else {
|
||||
st->print_cr(UINT64_FORMAT, uint64_t(j));
|
||||
}
|
||||
} else {
|
||||
st->print_cr("%s", j == OSCONTAINER_ERROR ? "not supported" : "unlimited");
|
||||
}
|
||||
}
|
||||
|
||||
void os::Linux::print_container_info(outputStream* st) {
|
||||
if (!OSContainer::is_containerized()) {
|
||||
st->print_cr("container information not found.");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -2515,45 +2528,30 @@ void os::Linux::print_container_info(outputStream* st) {
|
|||
st->print("%s\n", i == OSCONTAINER_ERROR ? "not supported" : "no shares");
|
||||
}
|
||||
|
||||
jlong j = OSContainer::memory_limit_in_bytes();
|
||||
st->print("memory_limit_in_bytes: ");
|
||||
print_container_helper(st, OSContainer::memory_limit_in_bytes(), "memory_limit_in_bytes");
|
||||
print_container_helper(st, OSContainer::memory_and_swap_limit_in_bytes(), "memory_and_swap_limit_in_bytes");
|
||||
print_container_helper(st, OSContainer::memory_soft_limit_in_bytes(), "memory_soft_limit_in_bytes");
|
||||
print_container_helper(st, OSContainer::memory_usage_in_bytes(), "memory_usage_in_bytes");
|
||||
print_container_helper(st, OSContainer::memory_max_usage_in_bytes(), "memory_max_usage_in_bytes");
|
||||
|
||||
jlong j = OSContainer::pids_max();
|
||||
st->print("maximum number of tasks: ");
|
||||
if (j > 0) {
|
||||
st->print(JLONG_FORMAT "\n", j);
|
||||
st->print_cr(JLONG_FORMAT, j);
|
||||
} else {
|
||||
st->print("%s\n", j == OSCONTAINER_ERROR ? "not supported" : "unlimited");
|
||||
st->print_cr("%s", j == OSCONTAINER_ERROR ? "not supported" : "unlimited");
|
||||
}
|
||||
|
||||
j = OSContainer::memory_and_swap_limit_in_bytes();
|
||||
st->print("memory_and_swap_limit_in_bytes: ");
|
||||
j = OSContainer::pids_current();
|
||||
st->print("current number of tasks: ");
|
||||
if (j > 0) {
|
||||
st->print(JLONG_FORMAT "\n", j);
|
||||
st->print_cr(JLONG_FORMAT, j);
|
||||
} else {
|
||||
st->print("%s\n", j == OSCONTAINER_ERROR ? "not supported" : "unlimited");
|
||||
if (j == OSCONTAINER_ERROR) {
|
||||
st->print_cr("not supported");
|
||||
}
|
||||
}
|
||||
|
||||
j = OSContainer::memory_soft_limit_in_bytes();
|
||||
st->print("memory_soft_limit_in_bytes: ");
|
||||
if (j > 0) {
|
||||
st->print(JLONG_FORMAT "\n", j);
|
||||
} else {
|
||||
st->print("%s\n", j == OSCONTAINER_ERROR ? "not supported" : "unlimited");
|
||||
}
|
||||
|
||||
j = OSContainer::OSContainer::memory_usage_in_bytes();
|
||||
st->print("memory_usage_in_bytes: ");
|
||||
if (j > 0) {
|
||||
st->print(JLONG_FORMAT "\n", j);
|
||||
} else {
|
||||
st->print("%s\n", j == OSCONTAINER_ERROR ? "not supported" : "unlimited");
|
||||
}
|
||||
|
||||
j = OSContainer::OSContainer::memory_max_usage_in_bytes();
|
||||
st->print("memory_max_usage_in_bytes: ");
|
||||
if (j > 0) {
|
||||
st->print(JLONG_FORMAT "\n", j);
|
||||
} else {
|
||||
st->print("%s\n", j == OSCONTAINER_ERROR ? "not supported" : "unlimited");
|
||||
}
|
||||
st->cr();
|
||||
}
|
||||
|
||||
|
|
@ -5656,7 +5654,8 @@ static int _cpu_count(const cpu_set_t* cpus) {
|
|||
// dynamic check - see 6515172 for details.
|
||||
// If anything goes wrong we fallback to returning the number of online
|
||||
// processors - which can be greater than the number available to the process.
|
||||
int os::Linux::active_processor_count() {
|
||||
static int get_active_processor_count() {
|
||||
// Note: keep this function, with its CPU_xx macros, *outside* the os namespace (see JDK-8289477).
|
||||
cpu_set_t cpus; // can represent at most 1024 (CPU_SETSIZE) processors
|
||||
cpu_set_t* cpus_p = &cpus;
|
||||
int cpus_size = sizeof(cpu_set_t);
|
||||
|
|
@ -5728,6 +5727,10 @@ int os::Linux::active_processor_count() {
|
|||
return cpu_count;
|
||||
}
|
||||
|
||||
int os::Linux::active_processor_count() {
|
||||
return get_active_processor_count();
|
||||
}
|
||||
|
||||
// Determine the active processor count from one of
|
||||
// three different sources:
|
||||
//
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
frame JavaThread::pd_last_frame() {
|
||||
assert(has_last_Java_frame(), "must have last_Java_sp() when suspended");
|
||||
|
||||
intptr_t* sp = last_Java_sp();
|
||||
intptr_t* sp = OrderAccess::load_acquire(&_anchor._last_Java_sp);
|
||||
address pc = _anchor.last_Java_pc();
|
||||
|
||||
// Last_Java_pc ist not set, if we come here from compiled code.
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
frame JavaThread::pd_last_frame() {
|
||||
assert(has_last_Java_frame(), "must have last_Java_sp() when suspended");
|
||||
|
||||
intptr_t* sp = last_Java_sp();
|
||||
intptr_t* sp = OrderAccess::load_acquire(&_anchor._last_Java_sp);
|
||||
address pc = _anchor.last_Java_pc();
|
||||
|
||||
// Last_Java_pc ist not set, if we come here from compiled code.
|
||||
|
|
|
|||
|
|
@ -210,8 +210,10 @@ void BlockListBuilder::handle_exceptions(BlockBegin* current, int cur_bci) {
|
|||
}
|
||||
|
||||
void BlockListBuilder::handle_jsr(BlockBegin* current, int sr_bci, int next_bci) {
|
||||
// start a new block after jsr-bytecode and link this block into cfg
|
||||
make_block_at(next_bci, current);
|
||||
if (next_bci < method()->code_size()) {
|
||||
// start a new block after jsr-bytecode and link this block into cfg
|
||||
make_block_at(next_bci, current);
|
||||
}
|
||||
|
||||
// start a new block at the subroutine entry at mark it with special flag
|
||||
BlockBegin* sr_block = make_block_at(sr_bci, current);
|
||||
|
|
@ -231,6 +233,8 @@ void BlockListBuilder::set_leaders() {
|
|||
// branch target and a modification of the successor lists.
|
||||
const BitMap& bci_block_start = method()->bci_block_start();
|
||||
|
||||
int end_bci = method()->code_size();
|
||||
|
||||
ciBytecodeStream s(method());
|
||||
while (s.next() != ciBytecodeStream::EOBC()) {
|
||||
int cur_bci = s.cur_bci();
|
||||
|
|
@ -301,7 +305,9 @@ void BlockListBuilder::set_leaders() {
|
|||
case Bytecodes::_if_acmpne: // fall through
|
||||
case Bytecodes::_ifnull: // fall through
|
||||
case Bytecodes::_ifnonnull:
|
||||
make_block_at(s.next_bci(), current);
|
||||
if (s.next_bci() < end_bci) {
|
||||
make_block_at(s.next_bci(), current);
|
||||
}
|
||||
make_block_at(s.get_dest(), current);
|
||||
current = NULL;
|
||||
break;
|
||||
|
|
@ -4056,20 +4062,28 @@ bool GraphBuilder::try_method_handle_inline(ciMethod* callee, bool ignore_return
|
|||
const int args_base = state()->stack_size() - callee->arg_size();
|
||||
ValueType* type = state()->stack_at(args_base)->type();
|
||||
if (type->is_constant()) {
|
||||
ciMethod* target = type->as_ObjectType()->constant_value()->as_method_handle()->get_vmtarget();
|
||||
// We don't do CHA here so only inline static and statically bindable methods.
|
||||
if (target->is_static() || target->can_be_statically_bound()) {
|
||||
if (ciMethod::is_consistent_info(callee, target)) {
|
||||
Bytecodes::Code bc = target->is_static() ? Bytecodes::_invokestatic : Bytecodes::_invokevirtual;
|
||||
ignore_return = ignore_return || (callee->return_type()->is_void() && !target->return_type()->is_void());
|
||||
if (try_inline(target, /*holder_known*/ !callee->is_static(), ignore_return, bc)) {
|
||||
return true;
|
||||
ciObject* mh = type->as_ObjectType()->constant_value();
|
||||
if (mh->is_method_handle()) {
|
||||
ciMethod* target = mh->as_method_handle()->get_vmtarget();
|
||||
|
||||
// We don't do CHA here so only inline static and statically bindable methods.
|
||||
if (target->is_static() || target->can_be_statically_bound()) {
|
||||
if (ciMethod::is_consistent_info(callee, target)) {
|
||||
Bytecodes::Code bc = target->is_static() ? Bytecodes::_invokestatic : Bytecodes::_invokevirtual;
|
||||
ignore_return = ignore_return || (callee->return_type()->is_void() && !target->return_type()->is_void());
|
||||
if (try_inline(target, /*holder_known*/ !callee->is_static(), ignore_return, bc)) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
print_inlining(target, "signatures mismatch", /*success*/ false);
|
||||
}
|
||||
} else {
|
||||
print_inlining(target, "signatures mismatch", /*success*/ false);
|
||||
assert(false, "no inlining through MH::invokeBasic"); // missing optimization opportunity due to suboptimal LF shape
|
||||
print_inlining(target, "not static or statically bindable", /*success*/ false);
|
||||
}
|
||||
} else {
|
||||
print_inlining(target, "not static or statically bindable", /*success*/ false);
|
||||
assert(mh->is_null_object(), "not a null");
|
||||
print_inlining(callee, "receiver is always null", /*success*/ false);
|
||||
}
|
||||
} else {
|
||||
print_inlining(callee, "receiver not constant", /*success*/ false);
|
||||
|
|
|
|||
|
|
@ -2336,7 +2336,7 @@ class LIR_OpVisitState: public StackObj {
|
|||
typedef enum { inputMode, firstMode = inputMode, tempMode, outputMode, numModes, invalidMode = -1 } OprMode;
|
||||
|
||||
enum {
|
||||
maxNumberOfOperands = 20,
|
||||
maxNumberOfOperands = 21,
|
||||
maxNumberOfInfos = 4
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -601,8 +601,10 @@ bool ciInstanceKlass::is_leaf_type() {
|
|||
ciInstanceKlass* ciInstanceKlass::implementor() {
|
||||
ciInstanceKlass* impl = _implementor;
|
||||
if (impl == NULL) {
|
||||
// Go into the VM to fetch the implementor.
|
||||
{
|
||||
if (is_shared()) {
|
||||
impl = this; // assume a well-known interface never has a unique implementor
|
||||
} else {
|
||||
// Go into the VM to fetch the implementor.
|
||||
VM_ENTRY_MARK;
|
||||
MutexLocker ml(Compile_lock);
|
||||
Klass* k = get_instanceKlass()->implementor();
|
||||
|
|
@ -616,9 +618,7 @@ ciInstanceKlass* ciInstanceKlass::implementor() {
|
|||
}
|
||||
}
|
||||
// Memoize this result.
|
||||
if (!is_shared()) {
|
||||
_implementor = impl;
|
||||
}
|
||||
_implementor = impl;
|
||||
}
|
||||
return impl;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2006, 2022, 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,12 +33,13 @@
|
|||
|
||||
|
||||
ciBlock *ciMethodBlocks::block_containing(int bci) {
|
||||
assert(bci >= 0 && bci < _code_size, "valid bytecode range");
|
||||
ciBlock *blk = _bci_to_block[bci];
|
||||
return blk;
|
||||
}
|
||||
|
||||
bool ciMethodBlocks::is_block_start(int bci) {
|
||||
assert(bci >=0 && bci < _code_size, "valid bytecode range");
|
||||
assert(bci >= 0 && bci < _code_size, "valid bytecode range");
|
||||
ciBlock *b = _bci_to_block[bci];
|
||||
assert(b != NULL, "must have block for bytecode");
|
||||
return b->start_bci() == bci;
|
||||
|
|
@ -146,7 +147,9 @@ void ciMethodBlocks::do_analysis() {
|
|||
case Bytecodes::_ifnonnull :
|
||||
{
|
||||
cur_block->set_control_bci(bci);
|
||||
ciBlock *fall_through = make_block_at(s.next_bci());
|
||||
if (s.next_bci() < limit_bci) {
|
||||
ciBlock *fall_through = make_block_at(s.next_bci());
|
||||
}
|
||||
int dest_bci = s.get_dest();
|
||||
ciBlock *dest = make_block_at(dest_bci);
|
||||
break;
|
||||
|
|
@ -166,7 +169,9 @@ void ciMethodBlocks::do_analysis() {
|
|||
case Bytecodes::_jsr :
|
||||
{
|
||||
cur_block->set_control_bci(bci);
|
||||
ciBlock *ret = make_block_at(s.next_bci());
|
||||
if (s.next_bci() < limit_bci) {
|
||||
ciBlock *ret = make_block_at(s.next_bci());
|
||||
}
|
||||
int dest_bci = s.get_dest();
|
||||
ciBlock *dest = make_block_at(dest_bci);
|
||||
break;
|
||||
|
|
@ -224,7 +229,9 @@ void ciMethodBlocks::do_analysis() {
|
|||
case Bytecodes::_jsr_w :
|
||||
{
|
||||
cur_block->set_control_bci(bci);
|
||||
ciBlock *ret = make_block_at(s.next_bci());
|
||||
if (s.next_bci() < limit_bci) {
|
||||
ciBlock *ret = make_block_at(s.next_bci());
|
||||
}
|
||||
int dest_bci = s.get_far_dest();
|
||||
ciBlock *dest = make_block_at(dest_bci);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -621,14 +621,23 @@ bool CodeCache::contains(nmethod *nm) {
|
|||
return contains((void *)nm);
|
||||
}
|
||||
|
||||
static bool is_in_asgct() {
|
||||
Thread* current_thread = Thread::current_or_null_safe();
|
||||
return current_thread != NULL && current_thread->is_Java_thread() && ((JavaThread*)current_thread)->in_asgct();
|
||||
}
|
||||
|
||||
// This method is safe to call without holding the CodeCache_lock, as long as a dead CodeBlob is not
|
||||
// looked up (i.e., one that has been marked for deletion). It only depends on the _segmap to contain
|
||||
// valid indices, which it will always do, as long as the CodeBlob is not in the process of being recycled.
|
||||
CodeBlob* CodeCache::find_blob(void* start) {
|
||||
CodeBlob* result = find_blob_unsafe(start);
|
||||
// We could potentially look up non_entrant methods
|
||||
guarantee(result == NULL || !result->is_zombie() || result->is_locked_by_vm() || VMError::is_error_reported(), "unsafe access to zombie method");
|
||||
return result;
|
||||
bool is_zombie = result != NULL && result->is_zombie();
|
||||
bool is_result_safe = !is_zombie || result->is_locked_by_vm() || VMError::is_error_reported();
|
||||
guarantee(is_result_safe || is_in_asgct(), "unsafe access to zombie method");
|
||||
// When in ASGCT the previous gurantee will pass for a zombie method but we still don't want that code blob returned in order
|
||||
// to minimize the chance of accessing dead memory
|
||||
return is_result_safe ? result : NULL;
|
||||
}
|
||||
|
||||
// Lookup that does not fail if you lookup a zombie method (if you call this, be sure to know
|
||||
|
|
|
|||
|
|
@ -263,10 +263,11 @@ void MethodLiveness::init_basic_blocks() {
|
|||
case Bytecodes::_ifnull:
|
||||
case Bytecodes::_ifnonnull:
|
||||
// Two way branch. Set predecessors at each destination.
|
||||
dest = _block_map->at(bytes.next_bci());
|
||||
assert(dest != NULL, "must be a block immediately following this one.");
|
||||
dest->add_normal_predecessor(current_block);
|
||||
|
||||
if (bytes.next_bci() < method_len) {
|
||||
dest = _block_map->at(bytes.next_bci());
|
||||
assert(dest != NULL, "must be a block immediately following this one.");
|
||||
dest->add_normal_predecessor(current_block);
|
||||
}
|
||||
dest = _block_map->at(bytes.get_dest());
|
||||
assert(dest != NULL, "branch desination must start a block.");
|
||||
dest->add_normal_predecessor(current_block);
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@ G1HeapTransition::Data::Data(G1CollectedHeap* g1_heap) {
|
|||
_survivor_length = g1_heap->survivor_regions_count();
|
||||
_old_length = g1_heap->old_regions_count();
|
||||
_humongous_length = g1_heap->humongous_regions_count();
|
||||
_metaspace_used_bytes = MetaspaceUtils::used_bytes();
|
||||
}
|
||||
|
||||
G1HeapTransition::G1HeapTransition(G1CollectedHeap* g1_heap) : _g1_heap(g1_heap), _before(g1_heap) { }
|
||||
|
|
@ -117,5 +116,5 @@ void G1HeapTransition::print() {
|
|||
log_trace(gc, heap)(" Used: " SIZE_FORMAT "K, Waste: " SIZE_FORMAT "K",
|
||||
usage._humongous_used / K, ((after._humongous_length * HeapRegion::GrainBytes) - usage._humongous_used) / K);
|
||||
|
||||
MetaspaceUtils::print_metaspace_change(_before._metaspace_used_bytes);
|
||||
MetaspaceUtils::print_metaspace_change(_before._meta_sizes);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
#define SHARE_VM_GC_G1_G1HEAPTRANSITION_HPP
|
||||
|
||||
#include "gc/shared/plab.hpp"
|
||||
#include "memory/metaspace/metaspaceSizesSnapshot.hpp"
|
||||
|
||||
class G1CollectedHeap;
|
||||
|
||||
|
|
@ -35,7 +36,7 @@ class G1HeapTransition {
|
|||
size_t _survivor_length;
|
||||
size_t _old_length;
|
||||
size_t _humongous_length;
|
||||
size_t _metaspace_used_bytes;
|
||||
const metaspace::MetaspaceSizesSnapshot _meta_sizes;
|
||||
|
||||
Data(G1CollectedHeap* g1_heap);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
#include "gc/shared/softRefPolicy.hpp"
|
||||
#include "gc/shared/strongRootsScope.hpp"
|
||||
#include "memory/metaspace.hpp"
|
||||
#include "memory/metaspace/metaspaceSizesSnapshot.hpp"
|
||||
#include "utilities/growableArray.hpp"
|
||||
#include "utilities/ostream.hpp"
|
||||
|
||||
|
|
@ -267,19 +268,18 @@ public:
|
|||
PreGCValues(ParallelScavengeHeap* heap) :
|
||||
_heap_used(heap->used()),
|
||||
_young_gen_used(heap->young_gen()->used_in_bytes()),
|
||||
_old_gen_used(heap->old_gen()->used_in_bytes()),
|
||||
_metadata_used(MetaspaceUtils::used_bytes()) { };
|
||||
_old_gen_used(heap->old_gen()->used_in_bytes()) { }
|
||||
|
||||
size_t heap_used() const { return _heap_used; }
|
||||
size_t young_gen_used() const { return _young_gen_used; }
|
||||
size_t old_gen_used() const { return _old_gen_used; }
|
||||
size_t metadata_used() const { return _metadata_used; }
|
||||
const metaspace::MetaspaceSizesSnapshot& metaspace_sizes() const { return _meta_sizes; }
|
||||
|
||||
private:
|
||||
size_t _heap_used;
|
||||
size_t _young_gen_used;
|
||||
size_t _old_gen_used;
|
||||
size_t _metadata_used;
|
||||
const metaspace::MetaspaceSizesSnapshot _meta_sizes;
|
||||
};
|
||||
|
||||
// Class that can be used to print information about the
|
||||
|
|
|
|||
|
|
@ -190,11 +190,7 @@ bool PSMarkSweep::invoke_no_policy(bool clear_all_softrefs) {
|
|||
CodeCache::gc_prologue();
|
||||
BiasedLocking::preserve_marks();
|
||||
|
||||
// Capture metadata size before collection for sizing.
|
||||
size_t metadata_prev_used = MetaspaceUtils::used_bytes();
|
||||
|
||||
size_t old_gen_prev_used = old_gen->used_in_bytes();
|
||||
size_t young_gen_prev_used = young_gen->used_in_bytes();
|
||||
const PreGCValues pre_gc_values(heap);
|
||||
|
||||
allocate_stacks();
|
||||
|
||||
|
|
@ -351,9 +347,9 @@ bool PSMarkSweep::invoke_no_policy(bool clear_all_softrefs) {
|
|||
accumulated_time()->stop();
|
||||
}
|
||||
|
||||
young_gen->print_used_change(young_gen_prev_used);
|
||||
old_gen->print_used_change(old_gen_prev_used);
|
||||
MetaspaceUtils::print_metaspace_change(metadata_prev_used);
|
||||
young_gen->print_used_change(pre_gc_values.young_gen_used());
|
||||
old_gen->print_used_change(pre_gc_values.old_gen_used());
|
||||
MetaspaceUtils::print_metaspace_change(pre_gc_values.metaspace_sizes());
|
||||
|
||||
// Track memory usage and detect low memory
|
||||
MemoryService::track_memory_usage();
|
||||
|
|
|
|||
|
|
@ -1753,7 +1753,7 @@ bool PSParallelCompact::invoke_no_policy(bool maximum_heap_compaction) {
|
|||
// miscellaneous bookkeeping.
|
||||
pre_compact();
|
||||
|
||||
PreGCValues pre_gc_values(heap);
|
||||
const PreGCValues pre_gc_values(heap);
|
||||
|
||||
// Get the compaction manager reserved for the VM thread.
|
||||
ParCompactionManager* const vmthread_cm =
|
||||
|
|
@ -1902,7 +1902,7 @@ bool PSParallelCompact::invoke_no_policy(bool maximum_heap_compaction) {
|
|||
|
||||
young_gen->print_used_change(pre_gc_values.young_gen_used());
|
||||
old_gen->print_used_change(pre_gc_values.old_gen_used());
|
||||
MetaspaceUtils::print_metaspace_change(pre_gc_values.metadata_used());
|
||||
MetaspaceUtils::print_metaspace_change(pre_gc_values.metaspace_sizes());
|
||||
|
||||
// Track memory usage and detect low memory
|
||||
MemoryService::track_memory_usage();
|
||||
|
|
|
|||
|
|
@ -328,7 +328,7 @@ bool PSScavenge::invoke_no_policy() {
|
|||
reference_processor()->enable_discovery();
|
||||
reference_processor()->setup_policy(false);
|
||||
|
||||
PreGCValues pre_gc_values(heap);
|
||||
const PreGCValues pre_gc_values(heap);
|
||||
|
||||
// Reset our survivor overflow.
|
||||
set_survivor_overflow(false);
|
||||
|
|
@ -607,7 +607,7 @@ bool PSScavenge::invoke_no_policy() {
|
|||
|
||||
young_gen->print_used_change(pre_gc_values.young_gen_used());
|
||||
old_gen->print_used_change(pre_gc_values.old_gen_used());
|
||||
MetaspaceUtils::print_metaspace_change(pre_gc_values.metadata_used());
|
||||
MetaspaceUtils::print_metaspace_change(pre_gc_values.metaspace_sizes());
|
||||
|
||||
// Track memory usage and detect low memory
|
||||
MemoryService::track_memory_usage();
|
||||
|
|
|
|||
|
|
@ -564,8 +564,6 @@ void GenCollectedHeap::do_collection(bool full,
|
|||
|
||||
ClearedAllSoftRefs casr(do_clear_all_soft_refs, soft_ref_policy());
|
||||
|
||||
const size_t metadata_prev_used = MetaspaceUtils::used_bytes();
|
||||
|
||||
print_heap_before_gc();
|
||||
|
||||
{
|
||||
|
|
@ -590,6 +588,7 @@ void GenCollectedHeap::do_collection(bool full,
|
|||
|
||||
size_t young_prev_used = _young_gen->used();
|
||||
size_t old_prev_used = _old_gen->used();
|
||||
const metaspace::MetaspaceSizesSnapshot prev_meta_sizes;
|
||||
|
||||
bool run_verification = total_collections() >= VerifyGCStartAt;
|
||||
|
||||
|
|
@ -650,7 +649,7 @@ void GenCollectedHeap::do_collection(bool full,
|
|||
complete = complete || collected_old;
|
||||
|
||||
print_heap_change(young_prev_used, old_prev_used);
|
||||
MetaspaceUtils::print_metaspace_change(metadata_prev_used);
|
||||
MetaspaceUtils::print_metaspace_change(prev_meta_sizes);
|
||||
|
||||
// Adjust generation sizes.
|
||||
if (collected_old) {
|
||||
|
|
|
|||
|
|
@ -187,7 +187,7 @@ void ShenandoahControlThread::run_service() {
|
|||
heap->reset_bytes_allocated_since_gc_start();
|
||||
|
||||
// Capture metaspace usage before GC.
|
||||
const size_t metadata_prev_used = MetaspaceUtils::used_bytes();
|
||||
const metaspace::MetaspaceSizesSnapshot prev_meta_sizes;
|
||||
|
||||
// If GC was requested, we are sampling the counters even without actual triggers
|
||||
// from allocation machinery. This captures GC phases more accurately.
|
||||
|
|
@ -273,7 +273,7 @@ void ShenandoahControlThread::run_service() {
|
|||
heap->phase_timings()->flush_cycle_to_global();
|
||||
|
||||
// Print Metaspace change following GC (if logging is enabled).
|
||||
MetaspaceUtils::print_metaspace_change(metadata_prev_used);
|
||||
MetaspaceUtils::print_metaspace_change(prev_meta_sizes);
|
||||
|
||||
// GC is over, we are at idle now
|
||||
if (ShenandoahPacing) {
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ static const char* reference_type_name(ReferenceType type) {
|
|||
|
||||
default:
|
||||
ShouldNotReachHere();
|
||||
return NULL;
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -470,9 +470,36 @@ MetaspaceChunkFreeListSummary MetaspaceUtils::chunk_free_list_summary(Metaspace:
|
|||
return cm->chunk_free_list_summary();
|
||||
}
|
||||
|
||||
void MetaspaceUtils::print_metaspace_change(size_t prev_metadata_used) {
|
||||
log_info(gc, metaspace)("Metaspace: " SIZE_FORMAT "K->" SIZE_FORMAT "K(" SIZE_FORMAT "K)",
|
||||
prev_metadata_used/K, used_bytes()/K, reserved_bytes()/K);
|
||||
void MetaspaceUtils::print_metaspace_change(const metaspace::MetaspaceSizesSnapshot& pre_meta_values) {
|
||||
const metaspace::MetaspaceSizesSnapshot meta_values;
|
||||
|
||||
if (Metaspace::using_class_space()) {
|
||||
log_info(gc, metaspace)(HEAP_CHANGE_FORMAT" "
|
||||
HEAP_CHANGE_FORMAT" "
|
||||
HEAP_CHANGE_FORMAT,
|
||||
HEAP_CHANGE_FORMAT_ARGS("Metaspace",
|
||||
pre_meta_values.used(),
|
||||
pre_meta_values.committed(),
|
||||
meta_values.used(),
|
||||
meta_values.committed()),
|
||||
HEAP_CHANGE_FORMAT_ARGS("NonClass",
|
||||
pre_meta_values.non_class_used(),
|
||||
pre_meta_values.non_class_committed(),
|
||||
meta_values.non_class_used(),
|
||||
meta_values.non_class_committed()),
|
||||
HEAP_CHANGE_FORMAT_ARGS("Class",
|
||||
pre_meta_values.class_used(),
|
||||
pre_meta_values.class_committed(),
|
||||
meta_values.class_used(),
|
||||
meta_values.class_committed()));
|
||||
} else {
|
||||
log_info(gc, metaspace)(HEAP_CHANGE_FORMAT,
|
||||
HEAP_CHANGE_FORMAT_ARGS("Metaspace",
|
||||
pre_meta_values.used(),
|
||||
pre_meta_values.committed(),
|
||||
meta_values.used(),
|
||||
meta_values.committed()));
|
||||
}
|
||||
}
|
||||
|
||||
void MetaspaceUtils::print_on(outputStream* out) {
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#include "memory/memRegion.hpp"
|
||||
#include "memory/metaspaceChunkFreeListSummary.hpp"
|
||||
#include "memory/virtualspace.hpp"
|
||||
#include "memory/metaspace/metaspaceSizesSnapshot.hpp"
|
||||
#include "utilities/exceptions.hpp"
|
||||
#include "utilities/macros.hpp"
|
||||
|
||||
|
|
@ -427,8 +428,8 @@ public:
|
|||
static bool has_chunk_free_list(Metaspace::MetadataType mdtype);
|
||||
static MetaspaceChunkFreeListSummary chunk_free_list_summary(Metaspace::MetadataType mdtype);
|
||||
|
||||
// Print change in used metadata.
|
||||
static void print_metaspace_change(size_t prev_metadata_used);
|
||||
// Log change in used metadata.
|
||||
static void print_metaspace_change(const metaspace::MetaspaceSizesSnapshot& pre_meta_values);
|
||||
static void print_on(outputStream * out);
|
||||
|
||||
// Prints an ASCII representation of the given space.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2019, Twitter, Inc.
|
||||
* 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 "memory/metaspace.hpp"
|
||||
#include "memory/metaspace/metaspaceSizesSnapshot.hpp"
|
||||
|
||||
namespace metaspace {
|
||||
|
||||
MetaspaceSizesSnapshot::MetaspaceSizesSnapshot()
|
||||
: _used(MetaspaceUtils::used_bytes()),
|
||||
_committed(MetaspaceUtils::committed_bytes()),
|
||||
_non_class_used(MetaspaceUtils::used_bytes(Metaspace::NonClassType)),
|
||||
_non_class_committed(MetaspaceUtils::committed_bytes(Metaspace::NonClassType)),
|
||||
_class_used(MetaspaceUtils::used_bytes(Metaspace::ClassType)),
|
||||
_class_committed(MetaspaceUtils::committed_bytes(Metaspace::ClassType)) { }
|
||||
|
||||
} // namespace metaspace
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2019, Twitter, Inc.
|
||||
* 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_MEMORY_METASPACE_METASPACESIZESSNAPSHOT_HPP
|
||||
#define SHARE_MEMORY_METASPACE_METASPACESIZESSNAPSHOT_HPP
|
||||
|
||||
namespace metaspace {
|
||||
|
||||
class MetaspaceSizesSnapshot {
|
||||
public:
|
||||
MetaspaceSizesSnapshot();
|
||||
|
||||
size_t used() const { return _used; }
|
||||
size_t committed() const { return _committed; }
|
||||
size_t non_class_used() const { return _non_class_used; }
|
||||
size_t non_class_committed() const { return _non_class_committed; }
|
||||
size_t class_used() const { return _class_used; }
|
||||
size_t class_committed() const { return _class_committed; }
|
||||
|
||||
private:
|
||||
const size_t _used;
|
||||
const size_t _committed;
|
||||
const size_t _non_class_used;
|
||||
const size_t _non_class_committed;
|
||||
const size_t _class_used;
|
||||
const size_t _class_committed;
|
||||
};
|
||||
|
||||
} // namespace metaspace
|
||||
|
||||
#endif // SHARE_MEMORY_METASPACE_METASPACESIZESSNAPSHOT_HPP
|
||||
|
|
@ -1168,7 +1168,9 @@ void MethodData::initialize() {
|
|||
int extra_size = extra_data_count * DataLayout::compute_size_in_bytes(0);
|
||||
|
||||
// Let's zero the space for the extra data
|
||||
Copy::zero_to_bytes(((address)_data) + data_size, extra_size);
|
||||
if (extra_size > 0) {
|
||||
Copy::zero_to_bytes(((address)_data) + data_size, extra_size);
|
||||
}
|
||||
|
||||
// Add a cell to record information about modified arguments.
|
||||
// Set up _args_modified array after traps cells so that
|
||||
|
|
|
|||
|
|
@ -835,22 +835,30 @@ CallGenerator* CallGenerator::for_method_handle_inline(JVMState* jvms, ciMethod*
|
|||
Node* receiver = kit.argument(0);
|
||||
if (receiver->Opcode() == Op_ConP) {
|
||||
input_not_const = false;
|
||||
const TypeOopPtr* oop_ptr = receiver->bottom_type()->is_oopptr();
|
||||
ciMethod* target = oop_ptr->const_oop()->as_method_handle()->get_vmtarget();
|
||||
const int vtable_index = Method::invalid_vtable_index;
|
||||
const TypeOopPtr* recv_toop = receiver->bottom_type()->isa_oopptr();
|
||||
if (recv_toop != NULL) {
|
||||
ciMethod* target = recv_toop->const_oop()->as_method_handle()->get_vmtarget();
|
||||
const int vtable_index = Method::invalid_vtable_index;
|
||||
|
||||
if (!ciMethod::is_consistent_info(callee, target)) {
|
||||
if (!ciMethod::is_consistent_info(callee, target)) {
|
||||
print_inlining_failure(C, callee, jvms->depth() - 1, jvms->bci(),
|
||||
"signatures mismatch");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
CallGenerator *cg = C->call_generator(target, vtable_index,
|
||||
false /* call_does_dispatch */,
|
||||
jvms,
|
||||
true /* allow_inline */,
|
||||
PROB_ALWAYS);
|
||||
return cg;
|
||||
} else {
|
||||
assert(receiver->bottom_type() == TypePtr::NULL_PTR, "not a null: %s",
|
||||
Type::str(receiver->bottom_type()));
|
||||
print_inlining_failure(C, callee, jvms->depth() - 1, jvms->bci(),
|
||||
"signatures mismatch");
|
||||
return NULL;
|
||||
"receiver is always null");
|
||||
}
|
||||
|
||||
CallGenerator* cg = C->call_generator(target, vtable_index,
|
||||
false /* call_does_dispatch */,
|
||||
jvms,
|
||||
true /* allow_inline */,
|
||||
PROB_ALWAYS);
|
||||
return cg;
|
||||
} else {
|
||||
print_inlining_failure(C, callee, jvms->depth() - 1, jvms->bci(),
|
||||
"receiver not constant");
|
||||
|
|
|
|||
|
|
@ -1378,7 +1378,6 @@ AllocateNode::AllocateNode(Compile* C, const TypeFunc *atype,
|
|||
init_req( KlassNode , klass_node);
|
||||
init_req( InitialTest , initial_test);
|
||||
init_req( ALength , topnode);
|
||||
init_req( ValidLengthTest , topnode);
|
||||
C->add_macro_node(this);
|
||||
}
|
||||
|
||||
|
|
@ -1399,6 +1398,54 @@ void AllocateNode::compute_MemBar_redundancy(ciMethod* initializer)
|
|||
}
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
Node* AllocateArrayNode::Ideal(PhaseGVN *phase, bool can_reshape) {
|
||||
if (remove_dead_region(phase, can_reshape)) return this;
|
||||
// Don't bother trying to transform a dead node
|
||||
if (in(0) && in(0)->is_top()) return NULL;
|
||||
|
||||
const Type* type = phase->type(Ideal_length());
|
||||
if (type->isa_int() && type->is_int()->_hi < 0) {
|
||||
if (can_reshape) {
|
||||
PhaseIterGVN *igvn = phase->is_IterGVN();
|
||||
// Unreachable fall through path (negative array length),
|
||||
// the allocation can only throw so disconnect it.
|
||||
Node* proj = proj_out_or_null(TypeFunc::Control);
|
||||
Node* catchproj = NULL;
|
||||
if (proj != NULL) {
|
||||
for (DUIterator_Fast imax, i = proj->fast_outs(imax); i < imax; i++) {
|
||||
Node *cn = proj->fast_out(i);
|
||||
if (cn->is_Catch()) {
|
||||
catchproj = cn->as_Multi()->proj_out_or_null(CatchProjNode::fall_through_index);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (catchproj != NULL && catchproj->outcnt() > 0 &&
|
||||
(catchproj->outcnt() > 1 ||
|
||||
catchproj->unique_out()->Opcode() != Op_Halt)) {
|
||||
assert(catchproj->is_CatchProj(), "must be a CatchProjNode");
|
||||
Node* nproj = catchproj->clone();
|
||||
igvn->register_new_node_with_optimizer(nproj);
|
||||
|
||||
Node *frame = new ParmNode( phase->C->start(), TypeFunc::FramePtr );
|
||||
frame = phase->transform(frame);
|
||||
// Halt & Catch Fire
|
||||
Node* halt = new HaltNode(nproj, frame, "unexpected negative array length");
|
||||
phase->C->root()->add_req(halt);
|
||||
phase->transform(halt);
|
||||
|
||||
igvn->replace_node(catchproj, phase->C->top());
|
||||
return this;
|
||||
}
|
||||
} else {
|
||||
// Can't correct it during regular GVN so register for IGVN
|
||||
phase->C->record_for_igvn(this);
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Retrieve the length from the AllocateArrayNode. Narrow the type with a
|
||||
// CastII, if appropriate. If we are not allowed to create new nodes, and
|
||||
// a CastII is appropriate, return NULL.
|
||||
|
|
@ -1423,13 +1470,16 @@ Node *AllocateArrayNode::make_ideal_length(const TypeOopPtr* oop_type, PhaseTran
|
|||
"narrow type must be narrower than length type");
|
||||
|
||||
// Return NULL if new nodes are not allowed
|
||||
if (!allow_new_nodes) return NULL;
|
||||
if (!allow_new_nodes) {
|
||||
return NULL;
|
||||
}
|
||||
// Create a cast which is control dependent on the initialization to
|
||||
// propagate the fact that the array length must be positive.
|
||||
InitializeNode* init = initialization();
|
||||
assert(init != NULL, "initialization not found");
|
||||
length = new CastIINode(length, narrow_length_type);
|
||||
length->set_req(TypeFunc::Control, init->proj_out_or_null(TypeFunc::Control));
|
||||
if (init != NULL) {
|
||||
length = new CastIINode(length, narrow_length_type);
|
||||
length->set_req(TypeFunc::Control, init->proj_out_or_null(TypeFunc::Control));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -839,7 +839,6 @@ public:
|
|||
KlassNode, // type (maybe dynamic) of the obj.
|
||||
InitialTest, // slow-path test (may be constant)
|
||||
ALength, // array length (or TOP if none)
|
||||
ValidLengthTest,
|
||||
ParmLimit
|
||||
};
|
||||
|
||||
|
|
@ -849,7 +848,6 @@ public:
|
|||
fields[KlassNode] = TypeInstPtr::NOTNULL;
|
||||
fields[InitialTest] = TypeInt::BOOL;
|
||||
fields[ALength] = t; // length (can be a bad length)
|
||||
fields[ValidLengthTest] = TypeInt::BOOL;
|
||||
|
||||
const TypeTuple *domain = TypeTuple::make(ParmLimit, fields);
|
||||
|
||||
|
|
@ -947,16 +945,18 @@ public:
|
|||
//
|
||||
class AllocateArrayNode : public AllocateNode {
|
||||
public:
|
||||
AllocateArrayNode(Compile* C, const TypeFunc* atype, Node* ctrl, Node* mem, Node* abio, Node* size, Node* klass_node,
|
||||
Node* initial_test, Node* count_val, Node* valid_length_test)
|
||||
AllocateArrayNode(Compile* C, const TypeFunc *atype, Node *ctrl, Node *mem, Node *abio,
|
||||
Node* size, Node* klass_node, Node* initial_test,
|
||||
Node* count_val
|
||||
)
|
||||
: AllocateNode(C, atype, ctrl, mem, abio, size, klass_node,
|
||||
initial_test)
|
||||
{
|
||||
init_class_id(Class_AllocateArray);
|
||||
set_req(AllocateNode::ALength, count_val);
|
||||
set_req(AllocateNode::ValidLengthTest, valid_length_test);
|
||||
}
|
||||
virtual int Opcode() const;
|
||||
virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
|
||||
|
||||
// Dig the length operand out of a array allocation site.
|
||||
Node* Ideal_length() {
|
||||
|
|
|
|||
|
|
@ -2352,17 +2352,6 @@ const Type* CatchNode::Value(PhaseGVN* phase) const {
|
|||
// Rethrows always throw exceptions, never return
|
||||
if (call->entry_point() == OptoRuntime::rethrow_stub()) {
|
||||
f[CatchProjNode::fall_through_index] = Type::TOP;
|
||||
} else if (call->is_AllocateArray()) {
|
||||
Node* klass_node = call->in(AllocateNode::KlassNode);
|
||||
Node* length = call->in(AllocateNode::ALength);
|
||||
const Type* length_type = phase->type(length);
|
||||
const Type* klass_type = phase->type(klass_node);
|
||||
Node* valid_length_test = call->in(AllocateNode::ValidLengthTest);
|
||||
const Type* valid_length_test_t = phase->type(valid_length_test);
|
||||
if (length_type == Type::TOP || klass_type == Type::TOP || valid_length_test_t == Type::TOP ||
|
||||
valid_length_test_t->is_int()->is_con(0)) {
|
||||
f[CatchProjNode::fall_through_index] = Type::TOP;
|
||||
}
|
||||
} else if( call->req() > TypeFunc::Parms ) {
|
||||
const Type *arg0 = phase->type( call->in(TypeFunc::Parms) );
|
||||
// Check for null receiver to virtual or interface calls
|
||||
|
|
|
|||
|
|
@ -1688,6 +1688,19 @@ void PhaseChaitin::fixup_spills() {
|
|||
if( cisc->oper_input_base() > 1 && mach->oper_input_base() <= 1 ) {
|
||||
assert( cisc->oper_input_base() == 2, "Only adding one edge");
|
||||
cisc->ins_req(1,src); // Requires a memory edge
|
||||
} else {
|
||||
// There is no space reserved for a memory edge before the inputs for
|
||||
// instructions which have "stackSlotX" parameter instead of "memory".
|
||||
// For example, "MoveF2I_stack_reg". We always need a memory edge from
|
||||
// src to cisc, else we might schedule cisc before src, loading from a
|
||||
// spill location before storing the spill. On some platforms, we land
|
||||
// in this else case because mach->oper_input_base() > 1, i.e. we have
|
||||
// multiple inputs. In some rare cases there are even multiple memory
|
||||
// operands, before and after spilling.
|
||||
// (e.g. spilling "addFPR24_reg_mem" to "addFPR24_mem_cisc")
|
||||
// In either case, there is no space in the inputs for the memory edge
|
||||
// so we add an additional precedence / memory edge.
|
||||
cisc->add_prec(src);
|
||||
}
|
||||
block->map_node(cisc, j); // Insert into basic block
|
||||
n->subsume_by(cisc, C); // Correct graph
|
||||
|
|
|
|||
|
|
@ -2179,10 +2179,8 @@ void Compile::inline_incrementally(PhaseIterGVN& igvn) {
|
|||
|
||||
bool Compile::optimize_loops(int& loop_opts_cnt, PhaseIterGVN& igvn, LoopOptsMode mode) {
|
||||
if(loop_opts_cnt > 0) {
|
||||
debug_only( int cnt = 0; );
|
||||
while(major_progress() && (loop_opts_cnt > 0)) {
|
||||
while (major_progress() && (loop_opts_cnt > 0)) {
|
||||
TracePhase tp("idealLoop", &timers[_t_idealLoop]);
|
||||
assert( cnt++ < 40, "infinite cycle in loop optimization" );
|
||||
PhaseIdealLoop ideal_loop(igvn, mode);
|
||||
loop_opts_cnt--;
|
||||
if (failing()) return false;
|
||||
|
|
@ -2489,7 +2487,11 @@ void Compile::Code_Gen() {
|
|||
{
|
||||
TracePhase tp("matcher", &timers[_t_matcher]);
|
||||
matcher.match();
|
||||
if (failing()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// In debug mode can dump m._nodes.dump() for mapping of ideal to machine
|
||||
// nodes. Mapping is only valid at the root of each matched subtree.
|
||||
NOT_PRODUCT( verify_graph_edges(); )
|
||||
|
|
@ -3452,7 +3454,7 @@ void Compile::final_graph_reshaping_impl( Node *n, Final_Reshape_Counts &frc) {
|
|||
n->set_req(MemBarNode::Precedent, top());
|
||||
while (wq.size() > 0) {
|
||||
Node* m = wq.pop();
|
||||
if (m->outcnt() == 0) {
|
||||
if (m->outcnt() == 0 && m != top()) {
|
||||
for (uint j = 0; j < m->req(); j++) {
|
||||
Node* in = m->in(j);
|
||||
if (in != NULL) {
|
||||
|
|
@ -3699,7 +3701,7 @@ bool Compile::final_graph_reshaping() {
|
|||
// 'fall-thru' path, so expected kids is 1 less.
|
||||
if (n->is_PCTable() && n->in(0) && n->in(0)->in(0)) {
|
||||
if (n->in(0)->in(0)->is_Call()) {
|
||||
CallNode* call = n->in(0)->in(0)->as_Call();
|
||||
CallNode *call = n->in(0)->in(0)->as_Call();
|
||||
if (call->entry_point() == OptoRuntime::rethrow_stub()) {
|
||||
required_outcnt--; // Rethrow always has 1 less kid
|
||||
} else if (call->req() > TypeFunc::Parms &&
|
||||
|
|
@ -3708,25 +3710,22 @@ bool Compile::final_graph_reshaping() {
|
|||
// detected that the virtual call will always result in a null
|
||||
// pointer exception. The fall-through projection of this CatchNode
|
||||
// will not be populated.
|
||||
Node* arg0 = call->in(TypeFunc::Parms);
|
||||
Node *arg0 = call->in(TypeFunc::Parms);
|
||||
if (arg0->is_Type() &&
|
||||
arg0->as_Type()->type()->higher_equal(TypePtr::NULL_PTR)) {
|
||||
required_outcnt--;
|
||||
}
|
||||
} else if (call->entry_point() == OptoRuntime::new_array_Java() ||
|
||||
call->entry_point() == OptoRuntime::new_array_nozero_Java()) {
|
||||
// Check for illegal array length. In such case, the optimizer has
|
||||
} else if (call->entry_point() == OptoRuntime::new_array_Java() &&
|
||||
call->req() > TypeFunc::Parms+1 &&
|
||||
call->is_CallStaticJava()) {
|
||||
// Check for negative array length. In such case, the optimizer has
|
||||
// detected that the allocation attempt will always result in an
|
||||
// exception. There is no fall-through projection of this CatchNode .
|
||||
assert(call->is_CallStaticJava(), "static call expected");
|
||||
assert(call->req() == call->jvms()->endoff() + 1, "missing extra input");
|
||||
Node* valid_length_test = call->in(call->req()-1);
|
||||
call->del_req(call->req()-1);
|
||||
if (valid_length_test->find_int_con(1) == 0) {
|
||||
Node *arg1 = call->in(TypeFunc::Parms+1);
|
||||
if (arg1->is_Type() &&
|
||||
arg1->as_Type()->type()->join(TypeInt::POS)->empty()) {
|
||||
required_outcnt--;
|
||||
}
|
||||
assert(n->outcnt() == required_outcnt, "malformed control flow");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3735,14 +3734,6 @@ bool Compile::final_graph_reshaping() {
|
|||
record_method_not_compilable("malformed control flow");
|
||||
return true; // Not all targets reachable!
|
||||
}
|
||||
} else if (n->is_PCTable() && n->in(0) && n->in(0)->in(0) && n->in(0)->in(0)->is_Call()) {
|
||||
CallNode* call = n->in(0)->in(0)->as_Call();
|
||||
if (call->entry_point() == OptoRuntime::new_array_Java() ||
|
||||
call->entry_point() == OptoRuntime::new_array_nozero_Java()) {
|
||||
assert(call->is_CallStaticJava(), "static call expected");
|
||||
assert(call->req() == call->jvms()->endoff() + 1, "missing extra input");
|
||||
call->del_req(call->req()-1); // valid length test useless now
|
||||
}
|
||||
}
|
||||
// Check that I actually visited all kids. Unreached kids
|
||||
// must be infinite loops.
|
||||
|
|
|
|||
|
|
@ -2592,9 +2592,7 @@ void GraphKit::make_slow_call_ex(Node* call, ciInstanceKlass* ex_klass, bool sep
|
|||
// Make a catch node with just two handlers: fall-through and catch-all
|
||||
Node* i_o = _gvn.transform( new ProjNode(call, TypeFunc::I_O, separate_io_proj) );
|
||||
Node* catc = _gvn.transform( new CatchNode(control(), i_o, 2) );
|
||||
Node* norm = new CatchProjNode(catc, CatchProjNode::fall_through_index, CatchProjNode::no_handler_bci);
|
||||
_gvn.set_type_bottom(norm);
|
||||
C->record_for_igvn(norm);
|
||||
Node* norm = _gvn.transform( new CatchProjNode(catc, CatchProjNode::fall_through_index, CatchProjNode::no_handler_bci) );
|
||||
Node* excp = _gvn.transform( new CatchProjNode(catc, CatchProjNode::catch_all_index, CatchProjNode::no_handler_bci) );
|
||||
|
||||
{ PreserveJVMState pjvms(this);
|
||||
|
|
@ -3743,28 +3741,20 @@ Node* GraphKit::new_array(Node* klass_node, // array klass (maybe variable)
|
|||
initial_slow_test = initial_slow_test->as_Bool()->as_int_value(&_gvn);
|
||||
}
|
||||
|
||||
const TypeOopPtr* ary_type = _gvn.type(klass_node)->is_klassptr()->as_instance_type();
|
||||
Node* valid_length_test = _gvn.intcon(1);
|
||||
if (ary_type->klass()->is_array_klass()) {
|
||||
BasicType bt = ary_type->klass()->as_array_klass()->element_type()->basic_type();
|
||||
jint max = TypeAryPtr::max_array_length(bt);
|
||||
Node* valid_length_cmp = _gvn.transform(new CmpUNode(length, intcon(max)));
|
||||
valid_length_test = _gvn.transform(new BoolNode(valid_length_cmp, BoolTest::le));
|
||||
}
|
||||
|
||||
// Create the AllocateArrayNode and its result projections
|
||||
AllocateArrayNode* alloc
|
||||
= new AllocateArrayNode(C, AllocateArrayNode::alloc_type(TypeInt::INT),
|
||||
control(), mem, i_o(),
|
||||
size, klass_node,
|
||||
initial_slow_test,
|
||||
length, valid_length_test);
|
||||
length);
|
||||
|
||||
// Cast to correct type. Note that the klass_node may be constant or not,
|
||||
// and in the latter case the actual array type will be inexact also.
|
||||
// (This happens via a non-constant argument to inline_native_newArray.)
|
||||
// In any case, the value of klass_node provides the desired array type.
|
||||
const TypeInt* length_type = _gvn.find_int_type(length);
|
||||
const TypeOopPtr* ary_type = _gvn.type(klass_node)->is_klassptr()->as_instance_type();
|
||||
if (ary_type->isa_aryptr() && length_type != NULL) {
|
||||
// Try to get a better type than POS for the size
|
||||
ary_type = ary_type->is_aryptr()->cast_to_size(length_type);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2021, 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
|
||||
|
|
@ -633,7 +633,7 @@ const TypeInt* IfNode::filtered_int_type(PhaseGVN* gvn, Node *val, Node* if_proj
|
|||
return cmp2_t;
|
||||
case BoolTest::lt:
|
||||
lo = TypeInt::INT->_lo;
|
||||
if (hi - 1 < hi) {
|
||||
if (hi != min_jint) {
|
||||
hi = hi - 1;
|
||||
}
|
||||
break;
|
||||
|
|
@ -641,7 +641,7 @@ const TypeInt* IfNode::filtered_int_type(PhaseGVN* gvn, Node *val, Node* if_proj
|
|||
lo = TypeInt::INT->_lo;
|
||||
break;
|
||||
case BoolTest::gt:
|
||||
if (lo + 1 > lo) {
|
||||
if (lo != max_jint) {
|
||||
lo = lo + 1;
|
||||
}
|
||||
hi = TypeInt::INT->_hi;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2022, 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
|
||||
|
|
@ -487,9 +487,12 @@ void PhaseCFG::implicit_null_check(Block* block, Node *proj, Node *val, int allo
|
|||
|
||||
|
||||
//------------------------------select-----------------------------------------
|
||||
// Select a nice fellow from the worklist to schedule next. If there is only
|
||||
// one choice, then use it. Projections take top priority for correctness
|
||||
// reasons - if I see a projection, then it is next. There are a number of
|
||||
// Select a nice fellow from the worklist to schedule next. If there is only one
|
||||
// choice, then use it. CreateEx nodes that are initially ready must start their
|
||||
// blocks and are given the highest priority, by being placed at the beginning
|
||||
// of the worklist. Next after initially-ready CreateEx nodes are projections,
|
||||
// which must follow their parents, and CreateEx nodes with local input
|
||||
// dependencies. Next are constants and CheckCastPP nodes. There are a number of
|
||||
// other special cases, for instructions that consume condition codes, et al.
|
||||
// These are chosen immediately. Some instructions are required to immediately
|
||||
// precede the last instruction in the block, and these are taken last. Of the
|
||||
|
|
@ -527,15 +530,28 @@ Node* PhaseCFG::select(
|
|||
Node *n = worklist[i]; // Get Node on worklist
|
||||
|
||||
int iop = n->is_Mach() ? n->as_Mach()->ideal_Opcode() : 0;
|
||||
if( n->is_Proj() || // Projections always win
|
||||
n->Opcode()== Op_Con || // So does constant 'Top'
|
||||
iop == Op_CreateEx || // Create-exception must start block
|
||||
iop == Op_CheckCastPP
|
||||
) {
|
||||
if (iop == Op_CreateEx || n->is_Proj()) {
|
||||
// CreateEx nodes that are initially ready must start the block (after Phi
|
||||
// and Parm nodes which are pre-scheduled) and get top priority. This is
|
||||
// currently enforced by placing them at the beginning of the initial
|
||||
// worklist and selecting them eagerly here. After these, projections and
|
||||
// other CreateEx nodes are selected with equal priority.
|
||||
worklist.map(i,worklist.pop());
|
||||
return n;
|
||||
}
|
||||
|
||||
if (n->Opcode() == Op_Con || iop == Op_CheckCastPP) {
|
||||
// Constants and CheckCastPP nodes have higher priority than the rest of
|
||||
// the nodes tested below. Record as current winner, but keep looking for
|
||||
// higher-priority nodes in the worklist.
|
||||
choice = 4;
|
||||
// Latency and score are only used to break ties among low-priority nodes.
|
||||
latency = 0;
|
||||
score = 0;
|
||||
idx = i;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Final call in a block must be adjacent to 'catch'
|
||||
Node *e = block->end();
|
||||
if( e->is_Catch() && e->in(0)->in(0) == n )
|
||||
|
|
@ -554,7 +570,7 @@ Node* PhaseCFG::select(
|
|||
}
|
||||
}
|
||||
|
||||
uint n_choice = 2;
|
||||
uint n_choice = 2;
|
||||
|
||||
// See if this instruction is consumed by a branch. If so, then (as the
|
||||
// branch is the last instruction in the basic block) force it to the
|
||||
|
|
@ -1043,8 +1059,8 @@ bool PhaseCFG::schedule_local(Block* block, GrowableArray<int>& ready_cnt, Vecto
|
|||
// ties in scheduling by worklist order.
|
||||
delay.push(m);
|
||||
} else if (m->is_Mach() && m->as_Mach()->ideal_Opcode() == Op_CreateEx) {
|
||||
// Force the CreateEx to the top of the list so it's processed
|
||||
// first and ends up at the start of the block.
|
||||
// Place CreateEx nodes that are initially ready at the beginning of the
|
||||
// worklist so they are selected first and scheduled at the block start.
|
||||
worklist.insert(0, m);
|
||||
} else {
|
||||
worklist.push(m); // Then on to worklist!
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2021, 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
|
||||
|
|
@ -824,12 +824,12 @@ bool IdealLoopTree::policy_unroll(PhaseIdealLoop *phase) {
|
|||
const TypeInt* iv_type = phase->_igvn.type(phi)->is_int();
|
||||
int next_stride = stride_con * 2; // stride after this unroll
|
||||
if (next_stride > 0) {
|
||||
if (iv_type->_lo + next_stride <= iv_type->_lo || // overflow
|
||||
if (iv_type->_lo > max_jint - next_stride || // overflow
|
||||
iv_type->_lo + next_stride > iv_type->_hi) {
|
||||
return false; // over-unrolling
|
||||
}
|
||||
} else if (next_stride < 0) {
|
||||
if (iv_type->_hi + next_stride >= iv_type->_hi || // overflow
|
||||
if (iv_type->_hi < min_jint - next_stride || // overflow
|
||||
iv_type->_hi + next_stride < iv_type->_lo) {
|
||||
return false; // over-unrolling
|
||||
}
|
||||
|
|
@ -840,8 +840,8 @@ bool IdealLoopTree::policy_unroll(PhaseIdealLoop *phase) {
|
|||
// After unroll limit will be adjusted: new_limit = limit-stride.
|
||||
// Bailout if adjustment overflow.
|
||||
const TypeInt* limit_type = phase->_igvn.type(limit_n)->is_int();
|
||||
if ((stride_con > 0 && ((limit_type->_hi - stride_con) >= limit_type->_hi)) ||
|
||||
(stride_con < 0 && ((limit_type->_lo - stride_con) <= limit_type->_lo)))
|
||||
if ((stride_con > 0 && ((min_jint + stride_con) > limit_type->_hi)) ||
|
||||
(stride_con < 0 && ((max_jint + stride_con) < limit_type->_lo)))
|
||||
return false; // overflow
|
||||
|
||||
// Adjust body_size to determine if we unroll or not
|
||||
|
|
@ -1472,6 +1472,15 @@ void PhaseIdealLoop::insert_pre_post_loops(IdealLoopTree *loop, Node_List &old_n
|
|||
set_idom(new_pre_exit, pre_end, dd_main_head);
|
||||
set_loop(new_pre_exit, outer_loop->_parent);
|
||||
|
||||
if (peel_only) {
|
||||
// Nodes in the peeled iteration that were marked as reductions within the
|
||||
// original loop might not be reductions within their new outer loop.
|
||||
for (uint i = 0; i < loop->_body.size(); i++) {
|
||||
Node* n = old_new[loop->_body[i]->_idx];
|
||||
n->remove_flag(Node::Flag_is_reduction);
|
||||
}
|
||||
}
|
||||
|
||||
// Step B2: Build a zero-trip guard for the main-loop. After leaving the
|
||||
// pre-loop, the main-loop may not execute at all. Later in life this
|
||||
// zero-trip guard will become the minimum-trip guard when we unroll
|
||||
|
|
|
|||
|
|
@ -2532,13 +2532,14 @@ uint IdealLoopTree::est_loop_flow_merge_sz() const {
|
|||
|
||||
for (uint k = 0; k < outcnt; k++) {
|
||||
Node* out = node->raw_out(k);
|
||||
|
||||
if (out == NULL) continue;
|
||||
if (out->is_CFG()) {
|
||||
if (!is_member(_phase->get_loop(out))) {
|
||||
ctrl_edge_out_cnt++;
|
||||
}
|
||||
} else {
|
||||
} else if (_phase->has_ctrl(out)) {
|
||||
Node* ctrl = _phase->get_ctrl(out);
|
||||
assert(ctrl != NULL, "must be");
|
||||
assert(ctrl->is_CFG(), "must be");
|
||||
if (!is_member(_phase->get_loop(ctrl))) {
|
||||
data_edge_out_cnt++;
|
||||
|
|
@ -2555,6 +2556,17 @@ uint IdealLoopTree::est_loop_flow_merge_sz() const {
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef ASSERT
|
||||
bool IdealLoopTree::has_reduction_nodes() const {
|
||||
for (uint i = 0; i < _body.size(); i++) {
|
||||
if (_body[i]->is_reduction()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif // ASSERT
|
||||
|
||||
#ifndef PRODUCT
|
||||
//------------------------------dump_head--------------------------------------
|
||||
// Dump 1 liner for loop header info
|
||||
|
|
@ -3152,6 +3164,12 @@ void PhaseIdealLoop::build_and_optimize() {
|
|||
// all the code before the peeled area, so the verify pass will always
|
||||
// complain about it.
|
||||
}
|
||||
|
||||
// Check for bailout, and return
|
||||
if (C->failing()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Do verify graph edges in any case
|
||||
NOT_PRODUCT( C->verify_graph_edges(); );
|
||||
|
||||
|
|
|
|||
|
|
@ -658,6 +658,11 @@ public:
|
|||
|
||||
void remove_main_post_loops(CountedLoopNode *cl, PhaseIdealLoop *phase);
|
||||
|
||||
#ifdef ASSERT
|
||||
// Tell whether the body contains nodes marked as reductions.
|
||||
bool has_reduction_nodes() const;
|
||||
#endif // ASSERT
|
||||
|
||||
#ifndef PRODUCT
|
||||
void dump_head() const; // Dump loop head only
|
||||
void dump() const; // Dump this loop recursively
|
||||
|
|
@ -1387,7 +1392,6 @@ SHENANDOAHGC_ONLY(private:)
|
|||
|
||||
uint require_nodes(uint require, uint minreq = REQUIRE_MIN) {
|
||||
precond(require > 0);
|
||||
_nodes_required += MAX2(100u, require); // Keep requests at minimum 100.
|
||||
_nodes_required += MAX2(require, minreq);
|
||||
return _nodes_required;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1297,8 +1297,7 @@ void PhaseMacroExpand::expand_allocate_common(
|
|||
AllocateNode* alloc, // allocation node to be expanded
|
||||
Node* length, // array length for an array allocation
|
||||
const TypeFunc* slow_call_type, // Type of slow call
|
||||
address slow_call_address, // Address of slow call
|
||||
Node* valid_length_test // whether length is valid or not
|
||||
address slow_call_address // Address of slow call
|
||||
)
|
||||
{
|
||||
|
||||
|
|
@ -1642,12 +1641,6 @@ void PhaseMacroExpand::expand_allocate_common(
|
|||
// Copy debug information and adjust JVMState information, then replace
|
||||
// allocate node with the call
|
||||
copy_call_debug_info((CallNode *) alloc, call);
|
||||
// For array allocations, copy the valid length check to the call node so Compile::final_graph_reshaping() can verify
|
||||
// that the call has the expected number of CatchProj nodes (in case the allocation always fails and the fallthrough
|
||||
// path dies).
|
||||
if (valid_length_test != NULL) {
|
||||
call->add_req(valid_length_test);
|
||||
}
|
||||
if (!always_slow) {
|
||||
call->set_cnt(PROB_UNLIKELY_MAG(4)); // Same effect as RC_UNCOMMON.
|
||||
} else {
|
||||
|
|
@ -2084,12 +2077,11 @@ Node* PhaseMacroExpand::prefetch_allocation(Node* i_o, Node*& needgc_false,
|
|||
void PhaseMacroExpand::expand_allocate(AllocateNode *alloc) {
|
||||
expand_allocate_common(alloc, NULL,
|
||||
OptoRuntime::new_instance_Type(),
|
||||
OptoRuntime::new_instance_Java(), NULL);
|
||||
OptoRuntime::new_instance_Java());
|
||||
}
|
||||
|
||||
void PhaseMacroExpand::expand_allocate_array(AllocateArrayNode *alloc) {
|
||||
Node* length = alloc->in(AllocateNode::ALength);
|
||||
Node* valid_length_test = alloc->in(AllocateNode::ValidLengthTest);
|
||||
InitializeNode* init = alloc->initialization();
|
||||
Node* klass_node = alloc->in(AllocateNode::KlassNode);
|
||||
ciKlass* k = _igvn.type(klass_node)->is_klassptr()->klass();
|
||||
|
|
@ -2104,7 +2096,7 @@ void PhaseMacroExpand::expand_allocate_array(AllocateArrayNode *alloc) {
|
|||
}
|
||||
expand_allocate_common(alloc, length,
|
||||
OptoRuntime::new_array_Type(),
|
||||
slow_call_address, valid_length_test);
|
||||
slow_call_address);
|
||||
}
|
||||
|
||||
//-------------------mark_eliminated_box----------------------------------
|
||||
|
|
|
|||
|
|
@ -102,8 +102,7 @@ private:
|
|||
void expand_allocate_common(AllocateNode* alloc,
|
||||
Node* length,
|
||||
const TypeFunc* slow_call_type,
|
||||
address slow_call_address,
|
||||
Node* valid_length_test);
|
||||
address slow_call_address);
|
||||
Node *value_from_mem(Node *mem, Node *ctl, BasicType ft, const Type *ftype, const TypeOopPtr *adr_t, AllocateNode *alloc);
|
||||
Node *value_from_mem_phi(Node *mem, BasicType ft, const Type *ftype, const TypeOopPtr *adr_t, AllocateNode *alloc, Node_Stack *value_phis, int level);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1998, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2021, 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
|
||||
|
|
@ -548,7 +548,7 @@ void Parse::do_lookupswitch() {
|
|||
}
|
||||
prev = match_int+1;
|
||||
}
|
||||
if (prev-1 != max_jint) {
|
||||
if (prev != min_jint) {
|
||||
defaults += (float)max_jint - prev + 1;
|
||||
}
|
||||
float default_cnt = 1;
|
||||
|
|
|
|||
|
|
@ -128,8 +128,8 @@ bool PhaseIdealLoop::split_up( Node *n, Node *blk1, Node *blk2 ) {
|
|||
}
|
||||
} else {
|
||||
// We might see an Opaque1 from a loop limit check here
|
||||
assert(use->is_If() || use->is_CMove() || use->Opcode() == Op_Opaque1 || use->is_AllocateArray(), "unexpected node type");
|
||||
Node *use_c = (use->is_If() || use->is_AllocateArray()) ? use->in(0) : get_ctrl(use);
|
||||
assert(use->is_If() || use->is_CMove() || use->Opcode() == Op_Opaque1, "unexpected node type");
|
||||
Node *use_c = use->is_If() ? use->in(0) : get_ctrl(use);
|
||||
if (use_c == blk1 || use_c == blk2) {
|
||||
assert(use->is_CMove(), "unexpected node type");
|
||||
continue;
|
||||
|
|
@ -166,15 +166,14 @@ bool PhaseIdealLoop::split_up( Node *n, Node *blk1, Node *blk2 ) {
|
|||
--j;
|
||||
} else {
|
||||
// We might see an Opaque1 from a loop limit check here
|
||||
assert(u->is_If() || u->is_CMove() || u->Opcode() == Op_Opaque1 || u->is_AllocateArray(), "unexpected node type");
|
||||
assert(u->is_AllocateArray() || u->in(1) == bol, "");
|
||||
assert(!u->is_AllocateArray() || u->in(AllocateNode::ValidLengthTest) == bol, "wrong input to AllocateArray");
|
||||
assert(u->is_If() || u->is_CMove() || u->Opcode() == Op_Opaque1, "unexpected node type");
|
||||
assert(u->in(1) == bol, "");
|
||||
// Get control block of either the CMove or the If input
|
||||
Node *u_ctrl = (u->is_If() || u->is_AllocateArray()) ? u->in(0) : get_ctrl(u);
|
||||
Node *u_ctrl = u->is_If() ? u->in(0) : get_ctrl(u);
|
||||
assert((u_ctrl != blk1 && u_ctrl != blk2) || u->is_CMove(), "won't converge");
|
||||
Node *x = bol->clone();
|
||||
register_new_node(x, u_ctrl);
|
||||
_igvn.replace_input_of(u, u->is_AllocateArray() ? AllocateNode::ValidLengthTest : 1, x);
|
||||
_igvn.replace_input_of(u, 1, x);
|
||||
--j;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2297,6 +2297,11 @@ void SuperWord::output() {
|
|||
return;
|
||||
}
|
||||
|
||||
// Check that the loop to be vectorized does not have inconsistent reduction
|
||||
// information, which would likely lead to a miscompilation.
|
||||
assert(!lpt()->has_reduction_nodes() || cl->is_reduction_loop(),
|
||||
"non-reduction loop contains reduction nodes");
|
||||
|
||||
#ifndef PRODUCT
|
||||
if (TraceLoopOpts) {
|
||||
tty->print("SuperWord::output ");
|
||||
|
|
|
|||
|
|
@ -551,6 +551,9 @@ void AsyncGetCallTrace(ASGCT_CallTrace *trace, jint depth, void* ucontext) {
|
|||
return;
|
||||
}
|
||||
|
||||
// !important! make sure all to call thread->set_in_asgct(false) before every return
|
||||
thread->set_in_asgct(true);
|
||||
|
||||
switch (thread->thread_state()) {
|
||||
case _thread_new:
|
||||
case _thread_uninitialized:
|
||||
|
|
@ -608,6 +611,7 @@ void AsyncGetCallTrace(ASGCT_CallTrace *trace, jint depth, void* ucontext) {
|
|||
trace->num_frames = ticks_unknown_state; // -7
|
||||
break;
|
||||
}
|
||||
thread->set_in_asgct(false);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -707,6 +707,10 @@ static jmethodID reflected_method_to_jmid(JavaThread* thread, JNIEnv* env, jobje
|
|||
return env->FromReflectedMethod(method);
|
||||
}
|
||||
|
||||
static CompLevel highestCompLevel() {
|
||||
return TieredCompilation ? MIN2((CompLevel) TieredStopAtLevel, CompLevel_highest_tier) : CompLevel_highest_tier;
|
||||
}
|
||||
|
||||
// Deoptimizes all compiled frames and makes nmethods not entrant if it's requested
|
||||
class VM_WhiteBoxDeoptimizeFrames : public VM_WhiteBoxOperation {
|
||||
private:
|
||||
|
|
@ -784,7 +788,7 @@ WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method, j
|
|||
WB_END
|
||||
|
||||
WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr))
|
||||
if (method == NULL || comp_level > MIN2((CompLevel) TieredStopAtLevel, CompLevel_highest_tier)) {
|
||||
if (method == NULL || comp_level > highestCompLevel()) {
|
||||
return false;
|
||||
}
|
||||
jmethodID jmid = reflected_method_to_jmid(thread, env, method);
|
||||
|
|
@ -807,7 +811,7 @@ WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobje
|
|||
WB_END
|
||||
|
||||
WB_ENTRY(jboolean, WB_IsIntrinsicAvailable(JNIEnv* env, jobject o, jobject method, jobject compilation_context, jint compLevel))
|
||||
if (compLevel < CompLevel_none || compLevel > MIN2((CompLevel) TieredStopAtLevel, CompLevel_highest_tier)) {
|
||||
if (compLevel < CompLevel_none || compLevel > highestCompLevel()) {
|
||||
return false; // Intrinsic is not available on a non-existent compilation level.
|
||||
}
|
||||
jmethodID method_id, compilation_context_id;
|
||||
|
|
@ -891,7 +895,7 @@ bool WhiteBox::validate_cgroup(const char* proc_cgroups,
|
|||
const char* proc_self_cgroup,
|
||||
const char* proc_self_mountinfo,
|
||||
u1* cg_flags) {
|
||||
CgroupInfo cg_infos[4];
|
||||
CgroupInfo cg_infos[CG_INFO_LENGTH];
|
||||
return CgroupSubsystemFactory::determine_type(cg_infos, proc_cgroups,
|
||||
proc_self_cgroup,
|
||||
proc_self_mountinfo, cg_flags);
|
||||
|
|
@ -905,7 +909,7 @@ bool WhiteBox::compile_method(Method* method, int comp_level, int bci, Thread* T
|
|||
tty->print_cr("WB error: request to compile NULL method");
|
||||
return false;
|
||||
}
|
||||
if (comp_level > MIN2((CompLevel) TieredStopAtLevel, CompLevel_highest_tier)) {
|
||||
if (comp_level > highestCompLevel()) {
|
||||
tty->print_cr("WB error: invalid compilation level %d", comp_level);
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue