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:
lvfei.lv 2022-10-21 10:24:29 +08:00
commit d6a370cf4d
949 changed files with 54118 additions and 33789 deletions

View File

@ -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

View File

@ -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
View File

@ -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

View File

@ -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
View File

@ -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.

View File

@ -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&ndash;12

11
README.origin.md Normal file
View File

@ -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.

View File

@ -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=&lt;path&gt;</code> and <code>--with-freetype-lib=&lt;path&gt;</code> if <code>configure</code> does not automatically locate the platform FreeType files.</p>

View File

@ -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>`

View File

@ -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) )

View File

@ -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)

View File

@ -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); \

View File

@ -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)

View File

@ -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
])
###############################################################################

View File

@ -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

View File

@ -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])

View File

@ -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"

View File

@ -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

View File

@ -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@

View File

@ -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.])

View File

@ -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"

View File

@ -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);
}

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -21,4 +21,4 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
tzdata2022a
tzdata2022c

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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, \

View File

@ -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

View File

@ -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, \

View File

@ -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), \

View File

@ -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.

View File

@ -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)

View File

@ -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());

View File

@ -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

View File

@ -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;

View File

@ -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();

View File

@ -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;
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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();
}

View File

@ -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;
}

View File

@ -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";
}

View File

@ -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" \

View File

@ -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();
}

View File

@ -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() {

View File

@ -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:
//

View File

@ -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.

View File

@ -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.

View File

@ -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);

View File

@ -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
};

View File

@ -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;
}

View File

@ -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;

View File

@ -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

View File

@ -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);

View File

@ -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);
}

View File

@ -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);
};

View File

@ -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

View File

@ -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();

View File

@ -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();

View File

@ -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();

View File

@ -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) {

View File

@ -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) {

View File

@ -60,7 +60,7 @@ static const char* reference_type_name(ReferenceType type) {
default:
ShouldNotReachHere();
return NULL;
return "Unknown";
}
}

View File

@ -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) {

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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");

View File

@ -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));
}
}
}

View File

@ -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() {

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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);

View File

@ -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;

View File

@ -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!

View File

@ -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

View File

@ -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(); );

View File

@ -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;
}

View File

@ -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----------------------------------

View File

@ -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);

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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 ");

View File

@ -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);
}

View File

@ -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