Version in base suite: 17.0.4+8-1~deb11u1 Base version: openjdk-17_17.0.4+8-1~deb11u1 Target version: openjdk-17_17.0.6+10-1~deb11u1 Base file: /srv/ftp-master.debian.org/ftp/pool/main/o/openjdk-17/openjdk-17_17.0.4+8-1~deb11u1.dsc Target file: /srv/ftp-master.debian.org/policy/pool/main/o/openjdk-17/openjdk-17_17.0.6+10-1~deb11u1.dsc /srv/release.debian.org/tmp/qdI8gWgiMs/openjdk-17-17.0.6+10/test/jdk/java/security/Security/signedfirst/exp.jar |binary /srv/release.debian.org/tmp/qdI8gWgiMs/openjdk-17-17.0.6+10/test/jdk/java/security/Security/signedfirst/keystore.jks |binary /srv/release.debian.org/tmp/qdI8gWgiMs/openjdk-17-17.0.6+10/test/jdk/java/util/jar/JarFile/Signed.jar |binary /srv/release.debian.org/tmp/qdI8gWgiMs/openjdk-17-17.0.6+10/test/jdk/java/util/jar/JarFile/test.jar |binary /srv/release.debian.org/tmp/qdI8gWgiMs/openjdk-17-17.0.6+10/test/jdk/java/util/jar/JarInputStream/signed.jar |binary /srv/release.debian.org/tmp/qdI8gWgiMs/openjdk-17-17.0.6+10/test/jdk/sun/security/pkcs11/nss/db/cert9.db |binary /srv/release.debian.org/tmp/qdI8gWgiMs/openjdk-17-17.0.6+10/test/jdk/sun/security/pkcs11/nss/db/key4.db |binary openjdk-17-17.0.6+10/.gitattributes | 1 openjdk-17-17.0.6+10/.github/actions/config/action.yml | 46 openjdk-17-17.0.6+10/.github/actions/do-build/action.yml | 80 openjdk-17-17.0.6+10/.github/actions/get-bootjdk/action.yml | 109 openjdk-17-17.0.6+10/.github/actions/get-bundles/action.yml | 109 openjdk-17-17.0.6+10/.github/actions/get-gtest/action.yml | 54 openjdk-17-17.0.6+10/.github/actions/get-jtreg/action.yml | 72 openjdk-17-17.0.6+10/.github/actions/get-msys2/action.yml | 44 openjdk-17-17.0.6+10/.github/actions/upload-bundles/action.yml | 77 openjdk-17-17.0.6+10/.github/scripts/gen-build-failure-report.sh | 51 openjdk-17-17.0.6+10/.github/scripts/gen-test-results.sh | 92 openjdk-17-17.0.6+10/.github/scripts/gen-test-summary.sh | 70 openjdk-17-17.0.6+10/.github/workflows/build-cross-compile.yml | 154 openjdk-17-17.0.6+10/.github/workflows/build-linux.yml | 132 openjdk-17-17.0.6+10/.github/workflows/build-macos.yml | 114 openjdk-17-17.0.6+10/.github/workflows/build-windows.yml | 131 openjdk-17-17.0.6+10/.github/workflows/main.yml | 331 openjdk-17-17.0.6+10/.github/workflows/test.yml | 205 openjdk-17-17.0.6+10/.gitignore | 2 openjdk-17-17.0.6+10/.jcheck/conf | 2 openjdk-17-17.0.6+10/debian/changelog | 55 openjdk-17-17.0.6+10/debian/patches/accessible-toolkit.diff | 15 openjdk-17-17.0.6+10/debian/patches/adlc-parser.diff | 17 openjdk-17-17.0.6+10/debian/patches/default-jvm-cfg.diff | 4 openjdk-17-17.0.6+10/debian/patches/enumipv6-fix.diff | 11 openjdk-17-17.0.6+10/debian/patches/generated-headers.patch | 4 openjdk-17-17.0.6+10/debian/patches/hotspot-disable-exec-shield-workaround.diff | 2 openjdk-17-17.0.6+10/debian/patches/hotspot-disable-werror.diff | 11 openjdk-17-17.0.6+10/debian/patches/hotspot-set-compiler.diff | 11 openjdk-17-17.0.6+10/debian/patches/hotspot-warn-no-errformat.diff | 22 openjdk-17-17.0.6+10/debian/patches/include-all-srcs.diff | 54 openjdk-17-17.0.6+10/debian/patches/java-access-bridge-security.diff | 15 openjdk-17-17.0.6+10/debian/patches/jaw-classpath.diff | 2 openjdk-17-17.0.6+10/debian/patches/jdk-pulseaudio.diff | 16 openjdk-17-17.0.6+10/debian/patches/jexec.diff | 35 openjdk-17-17.0.6+10/debian/patches/multiple-pkcs11-library-init.diff | 6 openjdk-17-17.0.6+10/debian/patches/no-pch-build.diff | 110 openjdk-17-17.0.6+10/debian/patches/pass-extra-flags.diff | 25 openjdk-17-17.0.6+10/debian/patches/reproducible-build-jmod.diff | 4 openjdk-17-17.0.6+10/debian/patches/riscv64.diff | 8 openjdk-17-17.0.6+10/debian/patches/s390x-opt.diff | 2 openjdk-17-17.0.6+10/debian/patches/series | 3 openjdk-17-17.0.6+10/debian/patches/set-exec-name.diff | 47 openjdk-17-17.0.6+10/debian/patches/stack-direction.diff | 215 openjdk-17-17.0.6+10/debian/patches/system-pcsclite.diff | 18 openjdk-17-17.0.6+10/debian/patches/workaround_expand_exec_shield_cs_limit.diff | 2 openjdk-17-17.0.6+10/debian/rules | 31 openjdk-17-17.0.6+10/debian/tests/control | 4 openjdk-17-17.0.6+10/debian/tests/control.in | 4 openjdk-17-17.0.6+10/doc/building.html | 19 openjdk-17-17.0.6+10/doc/building.md | 52 openjdk-17-17.0.6+10/make/Bundles.gmk | 11 openjdk-17-17.0.6+10/make/autoconf/basic_tools.m4 | 73 openjdk-17-17.0.6+10/make/autoconf/boot-jdk.m4 | 14 openjdk-17-17.0.6+10/make/autoconf/compare.sh.in | 1 openjdk-17-17.0.6+10/make/autoconf/configure.ac | 1 openjdk-17-17.0.6+10/make/autoconf/flags-cflags.m4 | 18 openjdk-17-17.0.6+10/make/autoconf/jdk-options.m4 | 102 openjdk-17-17.0.6+10/make/autoconf/lib-bundled.m4 | 5 openjdk-17-17.0.6+10/make/autoconf/platform.m4 | 2 openjdk-17-17.0.6+10/make/autoconf/spec.gmk.in | 3 openjdk-17-17.0.6+10/make/autoconf/util.m4 | 354 openjdk-17-17.0.6+10/make/common/NativeCompilation.gmk | 29 openjdk-17-17.0.6+10/make/common/modules/LauncherCommon.gmk | 12 openjdk-17-17.0.6+10/make/conf/github-actions.conf | 41 openjdk-17-17.0.6+10/make/conf/jib-profiles.js | 4 openjdk-17-17.0.6+10/make/conf/test-dependencies | 43 openjdk-17-17.0.6+10/make/conf/version-numbers.conf | 6 openjdk-17-17.0.6+10/make/data/autoheaders/assemblyprefix.h | 4 openjdk-17-17.0.6+10/make/data/cldr/common/bcp47/timezone.xml | 3 openjdk-17-17.0.6+10/make/data/cldr/common/main/es_419.xml | 3 openjdk-17-17.0.6+10/make/data/cldr/common/main/es_MX.xml | 3 openjdk-17-17.0.6+10/make/data/cldr/common/main/root.xml | 12 openjdk-17-17.0.6+10/make/data/cldr/common/supplemental/metaZones.xml | 15 openjdk-17-17.0.6+10/make/data/currency/CurrencyData.properties | 12 openjdk-17-17.0.6+10/make/data/macosxsigning/default-debug.plist | 18 openjdk-17-17.0.6+10/make/data/macosxsigning/java-debug.plist | 20 openjdk-17-17.0.6+10/make/data/tzdata/VERSION | 2 openjdk-17-17.0.6+10/make/data/tzdata/africa | 249 openjdk-17-17.0.6+10/make/data/tzdata/antarctica | 32 openjdk-17-17.0.6+10/make/data/tzdata/asia | 457 openjdk-17-17.0.6+10/make/data/tzdata/australasia | 141 openjdk-17-17.0.6+10/make/data/tzdata/backward | 294 openjdk-17-17.0.6+10/make/data/tzdata/etcetera | 23 openjdk-17-17.0.6+10/make/data/tzdata/europe | 686 openjdk-17-17.0.6+10/make/data/tzdata/iso3166.tab | 6 openjdk-17-17.0.6+10/make/data/tzdata/leapseconds | 8 openjdk-17-17.0.6+10/make/data/tzdata/northamerica | 429 openjdk-17-17.0.6+10/make/data/tzdata/southamerica | 89 openjdk-17-17.0.6+10/make/data/tzdata/zone.tab | 35 openjdk-17-17.0.6+10/make/devkit/createJMHBundle.sh | 2 openjdk-17-17.0.6+10/make/devkit/createWindowsDevkit.sh | 252 openjdk-17-17.0.6+10/make/devkit/createWindowsDevkit2019.sh | 227 openjdk-17-17.0.6+10/make/modules/java.base/lib/CoreLibraries.gmk | 3 openjdk-17-17.0.6+10/make/modules/java.desktop/lib/Awt2dLibraries.gmk | 10 openjdk-17-17.0.6+10/make/modules/java.security.jgss/Lib.gmk | 26 openjdk-17-17.0.6+10/make/modules/jdk.jpackage/Lib.gmk | 11 openjdk-17-17.0.6+10/make/scripts/compare.sh | 15 openjdk-17-17.0.6+10/make/scripts/fixpath.sh | 30 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/aarch64.ad | 229 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/aarch64_ad.m4 | 25 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/aarch64_neon.ad | 75 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/aarch64_neon_ad.m4 | 99 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/assembler_aarch64.cpp | 49 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/assembler_aarch64.hpp | 20 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/assembler_aarch64.inline.hpp | 8 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp | 20 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp | 35 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/c1_MacroAssembler_aarch64.cpp | 64 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/c1_MacroAssembler_aarch64.hpp | 6 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/c1_Runtime1_aarch64.cpp | 16 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/frame_aarch64.cpp | 16 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/frame_aarch64.inline.hpp | 6 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/globals_aarch64.hpp | 2 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/icBuffer_aarch64.cpp | 10 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/javaFrameAnchor_aarch64.hpp | 4 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp | 318 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp | 55 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp | 22 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp | 2 openjdk-17-17.0.6+10/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp | 3 openjdk-17-17.0.6+10/src/hotspot/cpu/arm/frame_arm.inline.hpp | 6 openjdk-17-17.0.6+10/src/hotspot/cpu/arm/javaFrameAnchor_arm.hpp | 2 openjdk-17-17.0.6+10/src/hotspot/cpu/arm/stubGenerator_arm.cpp | 24 openjdk-17-17.0.6+10/src/hotspot/cpu/arm/templateTable_arm.cpp | 23 openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/frame_ppc.inline.hpp | 4 openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/gc/z/zBarrierSetAssembler_ppc.cpp | 60 openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/javaFrameAnchor_ppc.hpp | 2 openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/ppc.ad | 135 openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/register_ppc.hpp | 10 openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp | 1 openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/vmreg_ppc.cpp | 12 openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/vmreg_ppc.hpp | 11 openjdk-17-17.0.6+10/src/hotspot/cpu/s390/assembler_s390.cpp | 2 openjdk-17-17.0.6+10/src/hotspot/cpu/s390/frame_s390.inline.hpp | 4 openjdk-17-17.0.6+10/src/hotspot/cpu/s390/interp_masm_s390.hpp | 2 openjdk-17-17.0.6+10/src/hotspot/cpu/s390/javaFrameAnchor_s390.hpp | 2 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/assembler_x86.cpp | 75 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/assembler_x86.hpp | 11 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/frame_x86.cpp | 24 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/frame_x86.inline.hpp | 7 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/interp_masm_x86.cpp | 2 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/interpreterRT_x86_64.cpp | 10 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/javaFrameAnchor_x86.hpp | 3 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/macroAssembler_x86.cpp | 95 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/macroAssembler_x86.hpp | 6 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/macroAssembler_x86_adler.cpp | 4 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/macroAssembler_x86_aes.cpp | 5 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/matcher_x86.hpp | 6 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp | 54 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp | 6 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp | 1454 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/stubRoutines_x86.cpp | 38 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/stubRoutines_x86.hpp | 44 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/templateInterpreterGenerator_x86.cpp | 10 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/x86_32.ad | 40 openjdk-17-17.0.6+10/src/hotspot/cpu/x86/x86_64.ad | 40 openjdk-17-17.0.6+10/src/hotspot/cpu/zero/frame_zero.cpp | 64 openjdk-17-17.0.6+10/src/hotspot/cpu/zero/frame_zero.inline.hpp | 5 openjdk-17-17.0.6+10/src/hotspot/cpu/zero/globalDefinitions_zero.hpp | 4 openjdk-17-17.0.6+10/src/hotspot/cpu/zero/javaFrameAnchor_zero.hpp | 2 openjdk-17-17.0.6+10/src/hotspot/cpu/zero/vm_version_zero.cpp | 65 openjdk-17-17.0.6+10/src/hotspot/os/aix/os_aix.cpp | 61 openjdk-17-17.0.6+10/src/hotspot/os/bsd/os_bsd.cpp | 72 openjdk-17-17.0.6+10/src/hotspot/os/linux/cgroupSubsystem_linux.cpp | 105 openjdk-17-17.0.6+10/src/hotspot/os/linux/cgroupSubsystem_linux.hpp | 8 openjdk-17-17.0.6+10/src/hotspot/os/linux/cgroupV1Subsystem_linux.cpp | 71 openjdk-17-17.0.6+10/src/hotspot/os/linux/cgroupV1Subsystem_linux.hpp | 12 openjdk-17-17.0.6+10/src/hotspot/os/linux/cgroupV2Subsystem_linux.cpp | 21 openjdk-17-17.0.6+10/src/hotspot/os/linux/cgroupV2Subsystem_linux.hpp | 6 openjdk-17-17.0.6+10/src/hotspot/os/linux/globals_linux.hpp | 6 openjdk-17-17.0.6+10/src/hotspot/os/linux/osContainer_linux.cpp | 29 openjdk-17-17.0.6+10/src/hotspot/os/linux/osContainer_linux.hpp | 4 openjdk-17-17.0.6+10/src/hotspot/os/linux/os_linux.cpp | 120 openjdk-17-17.0.6+10/src/hotspot/os/linux/os_linux.hpp | 8 openjdk-17-17.0.6+10/src/hotspot/os/posix/os_posix.cpp | 81 openjdk-17-17.0.6+10/src/hotspot/os/posix/signals_posix.cpp | 43 openjdk-17-17.0.6+10/src/hotspot/os/posix/vmError_posix.cpp | 20 openjdk-17-17.0.6+10/src/hotspot/os/windows/os_windows.cpp | 35 openjdk-17-17.0.6+10/src/hotspot/os_cpu/aix_ppc/thread_aix_ppc.cpp | 87 openjdk-17-17.0.6+10/src/hotspot/os_cpu/bsd_zero/os_bsd_zero.cpp | 6 openjdk-17-17.0.6+10/src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp | 3 openjdk-17-17.0.6+10/src/hotspot/os_cpu/linux_ppc/thread_linux_ppc.cpp | 9 openjdk-17-17.0.6+10/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp | 22 openjdk-17-17.0.6+10/src/hotspot/os_cpu/linux_zero/thread_linux_zero.cpp | 41 openjdk-17-17.0.6+10/src/hotspot/os_cpu/linux_zero/thread_linux_zero.hpp | 14 openjdk-17-17.0.6+10/src/hotspot/share/c1/c1_Canonicalizer.cpp | 2 openjdk-17-17.0.6+10/src/hotspot/share/c1/c1_GraphBuilder.cpp | 55 openjdk-17-17.0.6+10/src/hotspot/share/c1/c1_LIR.hpp | 15 openjdk-17-17.0.6+10/src/hotspot/share/c1/c1_LIRGenerator.cpp | 27 openjdk-17-17.0.6+10/src/hotspot/share/c1/c1_Runtime1.cpp | 41 openjdk-17-17.0.6+10/src/hotspot/share/ci/ciInstanceKlass.cpp | 14 openjdk-17-17.0.6+10/src/hotspot/share/ci/ciKlass.cpp | 1 openjdk-17-17.0.6+10/src/hotspot/share/ci/ciMethodBlocks.cpp | 17 openjdk-17-17.0.6+10/src/hotspot/share/ci/ciStreams.cpp | 18 openjdk-17-17.0.6+10/src/hotspot/share/ci/ciStreams.hpp | 1 openjdk-17-17.0.6+10/src/hotspot/share/classfile/classLoaderData.cpp | 12 openjdk-17-17.0.6+10/src/hotspot/share/classfile/javaClasses.cpp | 1 openjdk-17-17.0.6+10/src/hotspot/share/classfile/verifier.cpp | 18 openjdk-17-17.0.6+10/src/hotspot/share/classfile/vmIntrinsics.hpp | 2 openjdk-17-17.0.6+10/src/hotspot/share/code/codeCache.cpp | 42 openjdk-17-17.0.6+10/src/hotspot/share/code/codeCache.hpp | 3 openjdk-17-17.0.6+10/src/hotspot/share/compiler/compilationPolicy.cpp | 92 openjdk-17-17.0.6+10/src/hotspot/share/compiler/compilationPolicy.hpp | 10 openjdk-17-17.0.6+10/src/hotspot/share/compiler/compileBroker.cpp | 3 openjdk-17-17.0.6+10/src/hotspot/share/compiler/compilerDefinitions.cpp | 25 openjdk-17-17.0.6+10/src/hotspot/share/compiler/compiler_globals.hpp | 9 openjdk-17-17.0.6+10/src/hotspot/share/compiler/methodLiveness.cpp | 9 openjdk-17-17.0.6+10/src/hotspot/share/gc/shared/barrierSet.hpp | 4 openjdk-17-17.0.6+10/src/hotspot/share/gc/shared/c2/barrierSetC2.cpp | 20 openjdk-17-17.0.6+10/src/hotspot/share/gc/shared/collectedHeap.hpp | 4 openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp | 3 openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/mode/shenandoahIUMode.cpp | 25 openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/mode/shenandoahPassiveMode.cpp | 8 openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/mode/shenandoahSATBMode.cpp | 25 openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp | 13 openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/shenandoahFullGC.cpp | 4 openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/shenandoahFullGC.hpp | 1 openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp | 2 openjdk-17-17.0.6+10/src/hotspot/share/gc/z/zDriver.cpp | 5 openjdk-17-17.0.6+10/src/hotspot/share/gc/z/zReferenceProcessor.cpp | 2 openjdk-17-17.0.6+10/src/hotspot/share/interpreter/bytecode.hpp | 6 openjdk-17-17.0.6+10/src/hotspot/share/interpreter/interpreter.hpp | 6 openjdk-17-17.0.6+10/src/hotspot/share/interpreter/templateInterpreter.cpp | 8 openjdk-17-17.0.6+10/src/hotspot/share/jfr/jfr.cpp | 4 openjdk-17-17.0.6+10/src/hotspot/share/jfr/jfr.hpp | 2 openjdk-17-17.0.6+10/src/hotspot/share/jfr/metadata/metadata.xml | 6 openjdk-17-17.0.6+10/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointManager.cpp | 9 openjdk-17-17.0.6+10/src/hotspot/share/jfr/recorder/repository/jfrChunk.cpp | 2 openjdk-17-17.0.6+10/src/hotspot/share/jfr/recorder/storage/jfrBuffer.cpp | 8 openjdk-17-17.0.6+10/src/hotspot/share/jfr/recorder/storage/jfrBuffer.hpp | 5 openjdk-17-17.0.6+10/src/hotspot/share/jfr/recorder/storage/jfrMemorySpace.inline.hpp | 10 openjdk-17-17.0.6+10/src/hotspot/share/jfr/writers/jfrWriterHost.inline.hpp | 6 openjdk-17-17.0.6+10/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp | 64 openjdk-17-17.0.6+10/src/hotspot/share/jvmci/vmStructs_jvmci.cpp | 4 openjdk-17-17.0.6+10/src/hotspot/share/oops/access.hpp | 13 openjdk-17-17.0.6+10/src/hotspot/share/oops/access.inline.hpp | 14 openjdk-17-17.0.6+10/src/hotspot/share/oops/accessBackend.hpp | 23 openjdk-17-17.0.6+10/src/hotspot/share/oops/generateOopMap.cpp | 8 openjdk-17-17.0.6+10/src/hotspot/share/oops/methodData.cpp | 4 openjdk-17-17.0.6+10/src/hotspot/share/opto/callGenerator.cpp | 33 openjdk-17-17.0.6+10/src/hotspot/share/opto/callnode.cpp | 60 openjdk-17-17.0.6+10/src/hotspot/share/opto/callnode.hpp | 10 openjdk-17-17.0.6+10/src/hotspot/share/opto/cfgnode.cpp | 99 openjdk-17-17.0.6+10/src/hotspot/share/opto/chaitin.cpp | 13 openjdk-17-17.0.6+10/src/hotspot/share/opto/compile.cpp | 33 openjdk-17-17.0.6+10/src/hotspot/share/opto/graphKit.cpp | 34 openjdk-17-17.0.6+10/src/hotspot/share/opto/idealKit.cpp | 14 openjdk-17-17.0.6+10/src/hotspot/share/opto/ifg.cpp | 6 openjdk-17-17.0.6+10/src/hotspot/share/opto/lcm.cpp | 40 openjdk-17-17.0.6+10/src/hotspot/share/opto/library_call.cpp | 12 openjdk-17-17.0.6+10/src/hotspot/share/opto/loopPredicate.cpp | 6 openjdk-17-17.0.6+10/src/hotspot/share/opto/loopTransform.cpp | 96 openjdk-17-17.0.6+10/src/hotspot/share/opto/loopnode.cpp | 11 openjdk-17-17.0.6+10/src/hotspot/share/opto/loopnode.hpp | 7 openjdk-17-17.0.6+10/src/hotspot/share/opto/loopopts.cpp | 36 openjdk-17-17.0.6+10/src/hotspot/share/opto/macro.cpp | 14 openjdk-17-17.0.6+10/src/hotspot/share/opto/macro.hpp | 4 openjdk-17-17.0.6+10/src/hotspot/share/opto/macroArrayCopy.cpp | 2 openjdk-17-17.0.6+10/src/hotspot/share/opto/memnode.cpp | 79 openjdk-17-17.0.6+10/src/hotspot/share/opto/memnode.hpp | 23 openjdk-17-17.0.6+10/src/hotspot/share/opto/parse.hpp | 5 openjdk-17-17.0.6+10/src/hotspot/share/opto/parse2.cpp | 13 openjdk-17-17.0.6+10/src/hotspot/share/opto/phaseX.cpp | 21 openjdk-17-17.0.6+10/src/hotspot/share/opto/phaseX.hpp | 1 openjdk-17-17.0.6+10/src/hotspot/share/opto/runtime.cpp | 3 openjdk-17-17.0.6+10/src/hotspot/share/opto/split_if.cpp | 15 openjdk-17-17.0.6+10/src/hotspot/share/opto/stringopts.cpp | 23 openjdk-17-17.0.6+10/src/hotspot/share/opto/subnode.cpp | 16 openjdk-17-17.0.6+10/src/hotspot/share/opto/superword.cpp | 5 openjdk-17-17.0.6+10/src/hotspot/share/prims/forte.cpp | 59 openjdk-17-17.0.6+10/src/hotspot/share/prims/jvm.cpp | 2 openjdk-17-17.0.6+10/src/hotspot/share/prims/jvmtiEnvBase.cpp | 54 openjdk-17-17.0.6+10/src/hotspot/share/prims/jvmtiEnvBase.hpp | 4 openjdk-17-17.0.6+10/src/hotspot/share/prims/jvmtiEventController.cpp | 8 openjdk-17-17.0.6+10/src/hotspot/share/prims/jvmtiExport.cpp | 20 openjdk-17-17.0.6+10/src/hotspot/share/prims/jvmtiExport.hpp | 2 openjdk-17-17.0.6+10/src/hotspot/share/prims/jvmtiRedefineClasses.cpp | 19 openjdk-17-17.0.6+10/src/hotspot/share/prims/jvmtiTagMap.cpp | 196 openjdk-17-17.0.6+10/src/hotspot/share/prims/jvmtiTagMap.hpp | 19 openjdk-17-17.0.6+10/src/hotspot/share/prims/jvmtiTagMapTable.cpp | 18 openjdk-17-17.0.6+10/src/hotspot/share/prims/jvmtiTagMapTable.hpp | 6 openjdk-17-17.0.6+10/src/hotspot/share/prims/methodHandles.cpp | 8 openjdk-17-17.0.6+10/src/hotspot/share/runtime/abstract_vm_version.cpp | 4 openjdk-17-17.0.6+10/src/hotspot/share/runtime/arguments.cpp | 56 openjdk-17-17.0.6+10/src/hotspot/share/runtime/fieldDescriptor.hpp | 2 openjdk-17-17.0.6+10/src/hotspot/share/runtime/frame.hpp | 4 openjdk-17-17.0.6+10/src/hotspot/share/runtime/globals.hpp | 2 openjdk-17-17.0.6+10/src/hotspot/share/runtime/interfaceSupport.inline.hpp | 8 openjdk-17-17.0.6+10/src/hotspot/share/runtime/java.cpp | 7 openjdk-17-17.0.6+10/src/hotspot/share/runtime/java.hpp | 2 openjdk-17-17.0.6+10/src/hotspot/share/runtime/objectMonitor.cpp | 2 openjdk-17-17.0.6+10/src/hotspot/share/runtime/os.cpp | 58 openjdk-17-17.0.6+10/src/hotspot/share/runtime/safefetch.inline.hpp | 10 openjdk-17-17.0.6+10/src/hotspot/share/runtime/safepoint.cpp | 2 openjdk-17-17.0.6+10/src/hotspot/share/runtime/sweeper.cpp | 14 openjdk-17-17.0.6+10/src/hotspot/share/runtime/synchronizer.cpp | 11 openjdk-17-17.0.6+10/src/hotspot/share/runtime/synchronizer.hpp | 2 openjdk-17-17.0.6+10/src/hotspot/share/runtime/thread.cpp | 16 openjdk-17-17.0.6+10/src/hotspot/share/runtime/thread.hpp | 35 openjdk-17-17.0.6+10/src/hotspot/share/services/mallocTracker.cpp | 9 openjdk-17-17.0.6+10/src/hotspot/share/services/mallocTracker.hpp | 2 openjdk-17-17.0.6+10/src/hotspot/share/services/memReporter.cpp | 19 openjdk-17-17.0.6+10/src/hotspot/share/services/memTracker.cpp | 99 openjdk-17-17.0.6+10/src/hotspot/share/services/memTracker.hpp | 61 openjdk-17-17.0.6+10/src/hotspot/share/services/nmtCommon.cpp | 24 openjdk-17-17.0.6+10/src/hotspot/share/services/nmtCommon.hpp | 58 openjdk-17-17.0.6+10/src/hotspot/share/services/nmtPreInit.cpp | 194 openjdk-17-17.0.6+10/src/hotspot/share/services/nmtPreInit.hpp | 359 openjdk-17-17.0.6+10/src/hotspot/share/services/threadService.cpp | 16 openjdk-17-17.0.6+10/src/hotspot/share/services/threadStackTracker.cpp | 2 openjdk-17-17.0.6+10/src/hotspot/share/services/threadStackTracker.hpp | 3 openjdk-17-17.0.6+10/src/hotspot/share/services/virtualMemoryTracker.cpp | 7 openjdk-17-17.0.6+10/src/hotspot/share/services/virtualMemoryTracker.hpp | 3 openjdk-17-17.0.6+10/src/hotspot/share/utilities/bitMap.cpp | 8 openjdk-17-17.0.6+10/src/hotspot/share/utilities/events.cpp | 4 openjdk-17-17.0.6+10/src/hotspot/share/utilities/events.hpp | 14 openjdk-17-17.0.6+10/src/hotspot/share/utilities/powerOfTwo.hpp | 5 openjdk-17-17.0.6+10/src/java.base/linux/classes/jdk/internal/platform/CgroupMetrics.java | 9 openjdk-17-17.0.6+10/src/java.base/linux/classes/jdk/internal/platform/CgroupSubsystemFactory.java | 64 openjdk-17-17.0.6+10/src/java.base/linux/classes/jdk/internal/platform/cgroupv1/CgroupV1Subsystem.java | 5 openjdk-17-17.0.6+10/src/java.base/linux/native/libjava/CgroupMetrics.c | 8 openjdk-17-17.0.6+10/src/java.base/macosx/classes/jdk/internal/loader/ClassLoaderHelper.java | 5 openjdk-17-17.0.6+10/src/java.base/share/classes/com/sun/crypto/provider/DHKeyAgreement.java | 4 openjdk-17-17.0.6+10/src/java.base/share/classes/com/sun/crypto/provider/DHKeyPairGenerator.java | 63 openjdk-17-17.0.6+10/src/java.base/share/classes/com/sun/crypto/provider/DHParameterGenerator.java | 31 openjdk-17-17.0.6+10/src/java.base/share/classes/com/sun/security/ntlm/Client.java | 7 openjdk-17-17.0.6+10/src/java.base/share/classes/com/sun/security/ntlm/NTLM.java | 12 openjdk-17-17.0.6+10/src/java.base/share/classes/com/sun/security/ntlm/NTLMException.java | 5 openjdk-17-17.0.6+10/src/java.base/share/classes/com/sun/security/ntlm/Server.java | 6 openjdk-17-17.0.6+10/src/java.base/share/classes/java/lang/String.java | 6 openjdk-17-17.0.6+10/src/java.base/share/classes/java/lang/StringConcatHelper.java | 7 openjdk-17-17.0.6+10/src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java | 4 openjdk-17-17.0.6+10/src/java.base/share/classes/java/math/BigDecimal.java | 63 openjdk-17-17.0.6+10/src/java.base/share/classes/java/math/BigInteger.java | 45 openjdk-17-17.0.6+10/src/java.base/share/classes/java/net/InetAddress.java | 19 openjdk-17-17.0.6+10/src/java.base/share/classes/java/net/doc-files/net-properties.html | 10 openjdk-17-17.0.6+10/src/java.base/share/classes/java/security/UnresolvedPermission.java | 94 openjdk-17-17.0.6+10/src/java.base/share/classes/java/util/Base64.java | 17 openjdk-17-17.0.6+10/src/java.base/share/classes/java/util/Optional.java | 2 openjdk-17-17.0.6+10/src/java.base/share/classes/java/util/OptionalDouble.java | 2 openjdk-17-17.0.6+10/src/java.base/share/classes/java/util/OptionalInt.java | 2 openjdk-17-17.0.6+10/src/java.base/share/classes/java/util/OptionalLong.java | 2 openjdk-17-17.0.6+10/src/java.base/share/classes/javax/security/auth/Subject.java | 8 openjdk-17-17.0.6+10/src/java.base/share/classes/javax/security/auth/login/LoginContext.java | 16 openjdk-17-17.0.6+10/src/java.base/share/classes/javax/security/auth/spi/LoginModule.java | 34 openjdk-17-17.0.6+10/src/java.base/share/classes/jdk/internal/loader/NativeLibraries.java | 16 openjdk-17-17.0.6+10/src/java.base/share/classes/jdk/internal/util/random/RandomSupport.java | 6 openjdk-17-17.0.6+10/src/java.base/share/classes/module-info.java | 3 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/net/util/IPAddressUtil.java | 2 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/net/www/http/HttpClient.java | 21 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/net/www/http/KeepAliveCache.java | 65 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/pkcs/SignerInfo.java | 28 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/pkcs12/PKCS12KeyStore.java | 5 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/provider/ParameterCache.java | 53 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/provider/certpath/AlgorithmChecker.java | 47 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/provider/certpath/CertPathConstraintsParameters.java | 6 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/provider/certpath/DistributionPointFetcher.java | 3 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/provider/certpath/PKIX.java | 26 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java | 6 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/provider/certpath/SunCertPathBuilder.java | 4 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/ssl/ClientHello.java | 55 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/ssl/HandshakeContext.java | 4 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/ssl/PredefinedDHParameterSpecs.java | 9 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/ssl/SSLAlgorithmConstraints.java | 100 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/ssl/SSLConfiguration.java | 5 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/ssl/SSLContextImpl.java | 12 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/ssl/SSLEngineImpl.java | 20 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/ssl/SSLSocketImpl.java | 15 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/ssl/SSLSocketInputRecord.java | 6 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/ssl/Utilities.java | 11 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/ssl/X509KeyManagerImpl.java | 12 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/ssl/X509TrustManagerImpl.java | 14 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/tools/KeyStoreUtil.java | 14 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/tools/keytool/CertAndKeyGen.java | 8 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/tools/keytool/Main.java | 506 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/tools/keytool/Resources.java | 9 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/util/DisabledAlgorithmConstraints.java | 128 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/util/ECUtil.java | 37 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/util/JarConstraintsParameters.java | 29 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/util/ManifestEntryVerifier.java | 2 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/util/SafeDHParameterSpec.java | 45 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/util/SecurityProviderConstants.java | 37 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/security/util/SignatureFileVerifier.java | 2 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/util/calendar/ZoneInfoFile.java | 9 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/util/resources/CurrencyNames.properties | 4 openjdk-17-17.0.6+10/src/java.base/share/classes/sun/util/resources/TimeZoneNames.java | 7 openjdk-17-17.0.6+10/src/java.base/share/conf/security/java.security | 7 openjdk-17-17.0.6+10/src/java.base/share/native/libjava/jni_util.c | 9 openjdk-17-17.0.6+10/src/java.base/share/native/libjava/sizecalc.h | 118 openjdk-17-17.0.6+10/src/java.base/share/native/libjli/java.c | 82 openjdk-17-17.0.6+10/src/java.base/share/native/libjli/jli_util.h | 4 openjdk-17-17.0.6+10/src/java.base/share/native/libverify/check_code.c | 51 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/ChangeLog | 1515 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/README | 115 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/compress.c | 110 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/crc32.h | 465 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/deflate.c | 2222 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/deflate.h | 370 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/gzclose.c | 49 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/gzguts.h | 242 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/gzlib.c | 661 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/gzread.c | 678 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/gzwrite.c | 689 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/infback.c | 664 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/inffast.c | 347 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/inffast.h | 35 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/inffixed.h | 118 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/inflate.c | 1585 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/inflate.h | 149 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/inftrees.c | 328 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/inftrees.h | 86 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/patches/ChangeLog_java | 98 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/trees.c | 1205 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/trees.h | 152 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/uncompr.c | 117 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/zadler32.c | 210 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/zconf.h | 566 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/zcrc32.c | 466 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/zlib.h | 1936 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/zutil.c | 350 openjdk-17-17.0.6+10/src/java.base/share/native/libzip/zlib/zutil.h | 295 openjdk-17-17.0.6+10/src/java.base/unix/native/libjava/TimeZone_md.c | 81 openjdk-17-17.0.6+10/src/java.base/windows/classes/sun/nio/ch/PipeImpl.java | 51 openjdk-17-17.0.6+10/src/java.base/windows/classes/sun/nio/ch/WEPollSelectorImpl.java | 2 openjdk-17-17.0.6+10/src/java.base/windows/classes/sun/nio/ch/WindowsSelectorImpl.java | 2 openjdk-17-17.0.6+10/src/java.base/windows/native/libjava/WinCAPISeedGenerator.c | 7 openjdk-17-17.0.6+10/src/java.base/windows/native/libjava/WinNTFileSystem_md.c | 5 openjdk-17-17.0.6+10/src/java.base/windows/native/libjava/java_props_md.c | 27 openjdk-17-17.0.6+10/src/java.base/windows/native/libnet/NTLMAuthSequence.c | 25 openjdk-17-17.0.6+10/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessible.java | 4 openjdk-17-17.0.6+10/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessibleText.java | 6 openjdk-17-17.0.6+10/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobot.m | 5 openjdk-17-17.0.6+10/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/ButtonAccessibility.m | 13 openjdk-17-17.0.6+10/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/CommonComponentAccessibility.h | 1 openjdk-17-17.0.6+10/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/CommonComponentAccessibility.m | 42 openjdk-17-17.0.6+10/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/ImageAccessibility.m | 7 openjdk-17-17.0.6+10/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/MenuAccessibility.m | 7 openjdk-17-17.0.6+10/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/MenuItemAccessibility.m | 4 openjdk-17-17.0.6+10/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/TabButtonAccessibility.m | 13 openjdk-17-17.0.6+10/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/TableAccessibility.h | 5 openjdk-17-17.0.6+10/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/TableAccessibility.m | 19 openjdk-17-17.0.6+10/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/TableRowAccessibility.m | 9 openjdk-17-17.0.6+10/src/java.desktop/macosx/native/libawt_lwawt/font/AWTFont.m | 3 openjdk-17-17.0.6+10/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLVertexCache.m | 14 openjdk-17-17.0.6+10/src/java.desktop/macosx/native/libosxapp/AWT_debug.h | 2 openjdk-17-17.0.6+10/src/java.desktop/share/classes/com/sun/imageio/plugins/bmp/BMPImageReader.java | 96 openjdk-17-17.0.6+10/src/java.desktop/share/classes/com/sun/imageio/plugins/gif/GIFImageReader.java | 37 openjdk-17-17.0.6+10/src/java.desktop/share/classes/com/sun/media/sound/JARSoundbankReader.java | 14 openjdk-17-17.0.6+10/src/java.desktop/share/classes/java/awt/SystemTray.java | 26 openjdk-17-17.0.6+10/src/java.desktop/share/classes/javax/swing/text/html/ObjectView.java | 14 openjdk-17-17.0.6+10/src/java.desktop/share/classes/sun/java2d/cmm/lcms/LCMSImageLayout.java | 38 openjdk-17-17.0.6+10/src/java.desktop/share/legal/freetype.md | 121 openjdk-17-17.0.6+10/src/java.desktop/share/legal/harfbuzz.md | 26 openjdk-17-17.0.6+10/src/java.desktop/share/native/common/awt/utility/sizecalc.h | 119 openjdk-17-17.0.6+10/src/java.desktop/share/native/libfreetype/include/freetype/freetype.h | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libfreetype/include/freetype/ftcolor.h | 6 openjdk-17-17.0.6+10/src/java.desktop/share/native/libfreetype/src/base/ftmac.c | 4 openjdk-17-17.0.6+10/src/java.desktop/share/native/libfreetype/src/base/ftrfork.c | 22 openjdk-17-17.0.6+10/src/java.desktop/share/native/libfreetype/src/cff/cffcmap.c | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libfreetype/src/cff/cffgload.c | 8 openjdk-17-17.0.6+10/src/java.desktop/share/native/libfreetype/src/psaux/cffdecode.c | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libfreetype/src/psaux/psconv.c | 8 openjdk-17-17.0.6+10/src/java.desktop/share/native/libfreetype/src/psaux/psobjs.c | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libfreetype/src/raster/ftraster.c | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libfreetype/src/sfnt/pngshim.c | 4 openjdk-17-17.0.6+10/src/java.desktop/share/native/libfreetype/src/sfnt/sfobjs.c | 3 openjdk-17-17.0.6+10/src/java.desktop/share/native/libfreetype/src/sfnt/sfwoff2.c | 6 openjdk-17-17.0.6+10/src/java.desktop/share/native/libfreetype/src/sfnt/ttcmap.c | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libfreetype/src/truetype/ttgload.c | 10 openjdk-17-17.0.6+10/src/java.desktop/share/native/libfreetype/src/truetype/ttinterp.c | 17 openjdk-17-17.0.6+10/src/java.desktop/share/native/libfreetype/src/type1/t1afm.c | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libfreetype/src/type1/t1load.c | 12 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS.hh | 165 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/Anchor.hh | 84 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/AnchorFormat1.hh | 46 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/AnchorFormat2.hh | 58 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/AnchorFormat3.hh | 70 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/AnchorMatrix.hh | 77 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/ChainContextPos.hh | 14 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/Common.hh | 32 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/ContextPos.hh | 14 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/CursivePos.hh | 35 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/CursivePosFormat1.hh | 281 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/ExtensionPos.hh | 17 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/MarkArray.hh | 113 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/MarkBasePos.hh | 35 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/MarkBasePosFormat1.hh | 217 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/MarkLigPos.hh | 35 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/MarkLigPosFormat1.hh | 244 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/MarkMarkPos.hh | 36 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/MarkMarkPosFormat1.hh | 227 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/MarkRecord.hh | 52 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/PairPos.hh | 38 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/PairPosFormat1.hh | 420 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/PairPosFormat2.hh | 314 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/PosLookup.hh | 79 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/PosLookupSubTable.hh | 79 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/SinglePos.hh | 98 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/SinglePosFormat1.hh | 124 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/SinglePosFormat2.hh | 140 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GPOS/ValueFormat.hh | 329 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/AlternateSet.hh | 110 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/AlternateSubst.hh | 51 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/AlternateSubstFormat1.hh | 128 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/ChainContextSubst.hh | 18 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/Common.hh | 21 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/ContextSubst.hh | 18 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/ExtensionSubst.hh | 22 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/GSUB.hh | 60 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/Ligature.hh | 135 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/LigatureSet.hh | 118 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/LigatureSubst.hh | 59 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/LigatureSubstFormat1.hh | 165 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/MultipleSubst.hh | 53 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/MultipleSubstFormat1.hh | 120 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/ReverseChainSingleSubst.hh | 36 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/ReverseChainSingleSubstFormat1.hh | 228 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/Sequence.hh | 103 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/SingleSubst.hh | 75 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/SingleSubstFormat1.hh | 122 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/SingleSubstFormat2.hh | 120 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/SubstLookup.hh | 218 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/Layout/GSUB/SubstLookupSubTable.hh | 77 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/glyf/CompositeGlyph.hh | 258 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/glyf/Glyph.hh | 233 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/glyf/GlyphHeader.hh | 48 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/glyf/SimpleGlyph.hh | 216 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/glyf/SubsetGlyph.hh | 72 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/glyf/glyf-helpers.hh | 90 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/glyf/glyf.hh | 388 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/glyf/loca.hh | 43 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/OT/glyf/path-builder.hh | 135 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/UPDATING.txt | 53 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/graph/graph.hh | 860 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/graph/serialize.hh | 249 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-aat-layout-ankr-table.hh | 8 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-aat-layout-bsln-table.hh | 4 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-aat-layout-common.hh | 31 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-aat-layout-feat-table.hh | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-aat-layout-just-table.hh | 26 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-aat-layout-kerx-table.hh | 36 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-aat-layout-morx-table.hh | 61 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-aat-layout-opbd-table.hh | 8 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-aat-layout-trak-table.hh | 8 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-aat-layout.cc | 10 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-aat-ltag-table.hh | 4 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-algs.hh | 205 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-array.hh | 109 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-atomic.hh | 10 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-bimap.hh | 41 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-bit-page.hh | 282 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-bit-set-invertible.hh | 375 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-bit-set.hh | 953 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-blob.cc | 131 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-blob.h | 10 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-blob.hh | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-buffer-deserialize-json.hh | 1161 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-buffer-deserialize-text.hh | 1403 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-buffer-serialize.cc | 18 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-buffer-verify.cc | 440 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-buffer.cc | 384 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-buffer.h | 191 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-buffer.hh | 326 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-cache.hh | 80 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-cff-interp-common.hh | 132 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-cff-interp-cs-common.hh | 26 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-cff-interp-dict-common.hh | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-cff1-interp-cs.hh | 8 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-cff2-interp-cs.hh | 107 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-common.cc | 107 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-common.h | 30 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-config.hh | 23 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-cplusplus.hh | 192 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-debug.hh | 14 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-deprecated.h | 3 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-dispatch.hh | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-draw.cc | 407 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-draw.h | 285 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-draw.hh | 260 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-face.cc | 119 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-face.h | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-fallback-shape.cc | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-font.cc | 511 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-font.h | 59 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-font.hh | 102 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ft.cc | 302 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ft.h | 9 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-iter.hh | 123 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-kern.hh | 9 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-machinery.hh | 28 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-map.cc | 65 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-map.h | 10 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-map.hh | 215 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-meta.hh | 262 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-mutex.hh | 43 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-null.hh | 26 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-object.hh | 31 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-open-file.hh | 68 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-open-type.hh | 190 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-cff-common.hh | 190 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-cff1-table.cc | 79 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-cff1-table.hh | 219 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-cff2-table.cc | 60 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-cff2-table.hh | 97 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-cmap-table.hh | 697 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-color-cbdt-table.hh | 46 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-color-colr-table.hh | 1315 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-color-colrv1-closure.hh | 108 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-color-cpal-table.hh | 142 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-color-sbix-table.hh | 25 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-color-svg-table.hh | 12 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-color.cc | 6 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-deprecated.h | 15 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-face-table-list.hh | 19 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-face.hh | 3 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-font.cc | 251 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-gasp-table.hh | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-glyf-table.hh | 1228 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-hdmx-table.hh | 4 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-head-table.hh | 4 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-hmtx-table.hh | 190 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-kern-table.hh | 8 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-layout-base-table.hh | 58 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-layout-common.hh | 1142 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-layout-gdef-table.hh | 71 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-layout-gpos-table.hh | 2778 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-layout-gsub-table.hh | 1572 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-layout-gsubgpos.hh | 1440 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-layout-jstf-table.hh | 32 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-layout.cc | 540 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-layout.h | 62 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-layout.hh | 60 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-map.cc | 44 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-map.hh | 8 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-math-table.hh | 459 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-math.cc | 45 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-math.h | 36 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-maxp-table.hh | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-meta-table.hh | 12 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-metrics.cc | 191 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-metrics.h | 5 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-name-language-static.hh | 12 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-name-table.hh | 66 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-name.cc | 11 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-name.h | 30 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-os2-table.hh | 29 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-post-table-v2subset.hh | 136 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-post-table.hh | 51 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-arabic-fallback.hh | 348 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-arabic-joining-list.hh | 46 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-arabic-table.hh | 433 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-arabic-win1256.hh | 323 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-arabic.cc | 716 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-arabic.hh | 50 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-default.cc | 73 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-hangul.cc | 436 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-hebrew.cc | 185 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-indic-machine.hh | 603 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-indic-table.cc | 501 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-indic.cc | 1573 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-indic.hh | 430 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-khmer-machine.hh | 455 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-khmer.cc | 369 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-khmer.hh | 113 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-myanmar-machine.hh | 465 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-myanmar.cc | 320 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-myanmar.hh | 171 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-syllabic.cc | 100 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-syllabic.hh | 41 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-thai.cc | 393 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-use-machine.hh | 729 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-use-table.hh | 1203 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-use.cc | 502 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-vowel-constraints.cc | 443 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex-vowel-constraints.hh | 39 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-complex.hh | 391 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-fallback.cc | 23 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-normalize.cc | 23 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape-normalize.hh | 1 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape.cc | 178 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shape.hh | 5 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-arabic-fallback.hh | 376 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-arabic-joining-list.hh | 47 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-arabic-pua.hh | 118 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-arabic-table.hh | 556 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-arabic-win1256.hh | 349 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-arabic.cc | 749 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-arabic.hh | 50 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-default.cc | 73 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-hangul.cc | 436 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-hebrew.cc | 185 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-indic-machine.hh | 589 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-indic-table.cc | 560 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-indic.cc | 1542 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-indic.hh | 66 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-khmer-machine.hh | 428 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-khmer.cc | 382 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-myanmar-machine.hh | 553 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-myanmar.cc | 356 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-syllabic.cc | 98 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-syllabic.hh | 47 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-thai.cc | 393 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-use-machine.hh | 931 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-use-table.hh | 1572 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-use.cc | 504 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-vowel-constraints.cc | 443 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper-vowel-constraints.hh | 39 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-shaper.hh | 397 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-stat-table.hh | 8 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-tag-table.hh | 3586 - openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-tag.cc | 133 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-var-avar-table.hh | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-var-common.hh | 264 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-var-fvar-table.hh | 15 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-var-gvar-table.hh | 177 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-var-hvar-table.hh | 144 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-var-mvar-table.hh | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-var.cc | 3 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-var.h | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ot-vorg-table.hh | 4 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-pool.hh | 6 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-priority-queue.hh | 151 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-repacker.hh | 217 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-sanitize.hh | 25 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-serialize.hh | 315 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-set-digest.hh | 46 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-set.cc | 130 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-set.h | 20 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-set.hh | 905 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-shape-plan.cc | 27 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-shape-plan.hh | 2 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-shape.cc | 52 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-shaper.cc | 28 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-static.cc | 43 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-style.cc | 78 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-style.h | 44 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-subset-cff-common.cc | 12 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-subset-cff-common.hh | 206 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-subset-cff1.cc | 82 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-subset-cff2.cc | 79 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-subset-input.cc | 341 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-subset-input.hh | 57 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-subset-plan.cc | 645 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-subset-plan.hh | 36 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-subset.cc | 437 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-subset.h | 161 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-subset.hh | 6 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ucd-table.hh | 6579 +- openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-ucd.cc | 10 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-unicode-emoji-table.hh | 72 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-unicode.cc | 4 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-unicode.hh | 23 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-vector.hh | 307 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb-version.h | 8 openjdk-17-17.0.6+10/src/java.desktop/share/native/libharfbuzz/hb.hh | 46 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/README | 385 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jcapimin.c | 284 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jcapistd.c | 165 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jccoefct.c | 453 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jccolor.c | 462 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jcdctmgr.c | 391 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jchuff.c | 916 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jchuff.h | 51 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jcinit.c | 76 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jcmainct.c | 297 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jcmarker.c | 682 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jcmaster.c | 594 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jcomapi.c | 110 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jconfig.h | 43 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jcparam.c | 614 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jcphuff.c | 837 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jcprepct.c | 358 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jcsample.c | 523 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jctrans.c | 392 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jdapimin.c | 399 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jdapistd.c | 279 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jdcoefct.c | 740 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jdcolor.c | 398 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jdct.h | 180 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jddctmgr.c | 273 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jdhuff.c | 660 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jdhuff.h | 205 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jdinput.c | 385 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jdmainct.c | 516 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jdmarker.c | 1390 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jdmaster.c | 561 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jdmerge.c | 404 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jdphuff.c | 677 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jdpostct.c | 294 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jdsample.c | 482 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jdtrans.c | 147 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jerror.c | 272 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jerror.h | 295 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jfdctflt.c | 172 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jfdctfst.c | 228 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jfdctint.c | 287 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jidctflt.c | 246 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jidctfst.c | 372 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jidctint.c | 393 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jidctred.c | 402 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jmemmgr.c | 1131 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jmemnobs.c | 116 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jmemsys.h | 202 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jmorecfg.h | 378 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jpegint.h | 396 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jpeglib.h | 1100 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jquant1.c | 860 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jquant2.c | 1314 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jutils.c | 183 openjdk-17-17.0.6+10/src/java.desktop/share/native/libjavajpeg/jversion.h | 18 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/giflib/COPYING | 19 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/giflib/dgif_lib.c | 1265 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/giflib/gif_err.c | 123 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/giflib/gif_hash.h | 69 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/giflib/gif_lib.h | 335 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/giflib/gif_lib_private.h | 94 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/giflib/gifalloc.c | 444 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/giflib/openbsd-reallocarray.c | 99 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/CHANGES | 6109 ++ openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/LICENSE | 134 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/README | 183 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/UPDATING.txt | 49 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/png.c | 4635 + openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/png.h | 3275 + openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/pngconf.h | 651 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/pngdebug.h | 181 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/pngerror.c | 991 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/pngget.c | 1277 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/pnginfo.h | 295 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/pnglibconf.h | 250 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/pngmem.c | 312 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/pngpread.c | 1124 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/pngpriv.h | 2180 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/pngread.c | 4253 + openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/pngrio.c | 148 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/pngrtran.c | 5072 + openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/pngrutil.c | 4709 + openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/pngset.c | 1830 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/pngstruct.h | 517 openjdk-17-17.0.6+10/src/java.desktop/share/native/libsplashscreen/libpng/pngtrans.c | 892 openjdk-17-17.0.6+10/src/java.desktop/unix/native/common/awt/X11Color.c | 49 openjdk-17-17.0.6+10/src/java.desktop/unix/native/common/awt/fontpath.c | 18 openjdk-17-17.0.6+10/src/java.desktop/windows/classes/sun/awt/windows/WTrayIconPeer.java | 18 openjdk-17-17.0.6+10/src/java.desktop/windows/native/libawt/windows/ShellFolder2.cpp | 15 openjdk-17-17.0.6+10/src/java.desktop/windows/native/libawt/windows/awt.h | 6 openjdk-17-17.0.6+10/src/java.desktop/windows/native/libawt/windows/awt_Font.cpp | 20 openjdk-17-17.0.6+10/src/java.desktop/windows/native/libawt/windows/awt_PrintJob.cpp | 3 openjdk-17-17.0.6+10/src/java.desktop/windows/native/libawt/windows/awt_TrayIcon.cpp | 49 openjdk-17-17.0.6+10/src/java.desktop/windows/native/libawt/windows/awt_TrayIcon.h | 22 openjdk-17-17.0.6+10/src/java.desktop/windows/native/libfontmanager/fontpath.c | 17 openjdk-17-17.0.6+10/src/java.desktop/windows/native/libfontmanager/lcdglyph.c | 3 openjdk-17-17.0.6+10/src/java.desktop/windows/native/libsplashscreen/splashscreen_sys.c | 7 openjdk-17-17.0.6+10/src/java.instrument/windows/native/libinstrument/EncodingSupport_md.c | 4 openjdk-17-17.0.6+10/src/java.management/share/classes/com/sun/jmx/remote/security/FileLoginModule.java | 6 openjdk-17-17.0.6+10/src/java.naming/share/classes/com/sun/jndi/ldap/LdapCtxFactory.java | 8 openjdk-17-17.0.6+10/src/java.net.http/share/classes/jdk/internal/net/http/AsyncSSLConnection.java | 2 openjdk-17-17.0.6+10/src/java.net.http/share/classes/jdk/internal/net/http/AsyncSSLTunnelConnection.java | 3 openjdk-17-17.0.6+10/src/java.net.http/share/classes/jdk/internal/net/http/ConnectionPool.java | 32 openjdk-17-17.0.6+10/src/java.net.http/share/classes/jdk/internal/net/http/PlainHttpConnection.java | 2 openjdk-17-17.0.6+10/src/java.net.http/share/classes/jdk/internal/net/http/PlainProxyConnection.java | 2 openjdk-17-17.0.6+10/src/java.net.http/share/classes/jdk/internal/net/http/PlainTunnelingConnection.java | 5 openjdk-17-17.0.6+10/src/java.security.jgss/macosx/native/libosxkrb5/nativeccache.c | 2 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/javax/security/auth/kerberos/EncryptionKey.java | 2 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KerberosKey.java | 2 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KeyImpl.java | 2 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/org/ietf/jgss/GSSException.java | 2 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/jgss/GSSHeader.java | 4 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/jgss/ProviderList.java | 4 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/jgss/TokenTracker.java | 6 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/jgss/krb5/CipherHelper.java | 4 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/jgss/krb5/Krb5InitCredential.java | 2 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/jgss/krb5/Krb5NameElement.java | 2 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/jgss/krb5/MessageToken.java | 6 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/jgss/krb5/SubjectComber.java | 2 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/jgss/spi/GSSContextSpi.java | 8 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/jgss/spi/MechanismFactory.java | 10 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/jgss/spnego/SpNegoContext.java | 6 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/krb5/Checksum.java | 2 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/krb5/Config.java | 4 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/krb5/EncryptionKey.java | 2 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/krb5/internal/EncASRepPart.java | 2 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/krb5/internal/ccache/MemoryCredentialsCache.java | 2 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/krb5/internal/crypto/dk/DkCrypto.java | 2 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/krb5/internal/ktab/KeyTab.java | 2 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/krb5/internal/util/KrbDataInputStream.java | 2 openjdk-17-17.0.6+10/src/java.security.jgss/share/classes/sun/security/krb5/internal/util/KrbDataOutputStream.java | 2 openjdk-17-17.0.6+10/src/java.security.jgss/windows/classes/sun/security/krb5/internal/tools/Kinit.java | 2 openjdk-17-17.0.6+10/src/java.security.jgss/windows/classes/sun/security/krb5/internal/tools/Ktab.java | 2 openjdk-17-17.0.6+10/src/java.security.jgss/windows/native/libsspi_bridge/sspi.cpp | 2 openjdk-17-17.0.6+10/src/java.security.jgss/windows/native/libw2k_lsa_auth/NativeCreds.c | 2 openjdk-17-17.0.6+10/src/java.security.sasl/share/classes/com/sun/security/sasl/digest/DigestMD5Base.java | 6 openjdk-17-17.0.6+10/src/java.security.sasl/share/classes/com/sun/security/sasl/digest/DigestMD5Client.java | 4 openjdk-17-17.0.6+10/src/java.smartcardio/unix/legal/pcsclite.md | 40 openjdk-17-17.0.6+10/src/java.smartcardio/unix/native/libj2pcsc/MUSCLE/COPYING | 95 openjdk-17-17.0.6+10/src/java.smartcardio/unix/native/libj2pcsc/MUSCLE/pcsclite.h | 309 openjdk-17-17.0.6+10/src/java.smartcardio/unix/native/libj2pcsc/MUSCLE/winscard.h | 122 openjdk-17-17.0.6+10/src/java.smartcardio/unix/native/libj2pcsc/MUSCLE/wintypes.h | 115 openjdk-17-17.0.6+10/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/keyinfo/X509Data.java | 2 openjdk-17-17.0.6+10/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMManifest.java | 2 openjdk-17-17.0.6+10/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java | 4 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/java_cup/internal/runtime/lr_parser.java | 34 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources.java | 4 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/XPathParser.java | 59 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/sym.java | 14 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMsg.java | 4 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/AttributeMap.java | 10 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/DOMNormalizer.java | 13 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/NamedNodeMapImpl.java | 10 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java | 4 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java | 2 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDecl.java | 12 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages.properties | 17 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages.properties | 17 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages.properties | 17 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages.properties | 17 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages.properties | 17 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages.properties | 17 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages.properties | 18 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages.properties | 17 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages.properties | 17 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator.java | 12 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/compiler/Lexer.java | 61 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/objects/XRTreeFragSelectWrapper.java | 6 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources.java | 13 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_de.java | 6 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_es.java | 6 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_fr.java | 6 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_it.java | 6 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_ja.java | 6 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_ko.java | 6 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_pt_BR.java | 6 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_sv.java | 6 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_CN.java | 6 openjdk-17-17.0.6+10/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_TW.java | 6 openjdk-17-17.0.6+10/src/java.xml/share/legal/dom.md | 15 openjdk-17-17.0.6+10/src/java.xml/share/legal/jcup.md | 11 openjdk-17-17.0.6+10/src/java.xml/share/legal/xerces.md | 4 openjdk-17-17.0.6+10/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java | 22 openjdk-17-17.0.6+10/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java | 2 openjdk-17-17.0.6+10/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java | 4 openjdk-17-17.0.6+10/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransPatterns.java | 5 openjdk-17-17.0.6+10/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ReferenceParser.java | 20 openjdk-17-17.0.6+10/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties | 3 openjdk-17-17.0.6+10/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties | 4 openjdk-17-17.0.6+10/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac_ja.properties | 2 openjdk-17-17.0.6+10/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac_zh_CN.properties | 2 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/Config.java | 18 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11AEADCipher.java | 6 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11Cipher.java | 32 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11KeyPairGenerator.java | 2 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11KeyStore.java | 2 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11PSSSignature.java | 10 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11SecretKeyFactory.java | 5 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11Signature.java | 4 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/SessionManager.java | 9 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/SunPKCS11.java | 2 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/wrapper/PKCS11Constants.java | 2 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/wrapper/PKCS11Exception.java | 27 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/wrapper/PKCS11RuntimeException.java | 2 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/j2secmod.h | 6 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_convert.c | 6 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_general.c | 2 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_keymgmt.c | 6 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_sessmgmt.c | 2 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/unix/native/libj2pkcs11/p11_md.c | 2 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/windows/native/libj2pkcs11/p11_md.c | 2 openjdk-17-17.0.6+10/src/jdk.crypto.cryptoki/windows/native/libj2pkcs11/p11_md.h | 2 openjdk-17-17.0.6+10/src/jdk.crypto.ec/share/classes/sun/security/ec/ECDSASignature.java | 34 openjdk-17-17.0.6+10/src/jdk.crypto.ec/share/classes/sun/security/ec/ECKeyFactory.java | 2 openjdk-17-17.0.6+10/src/jdk.crypto.ec/share/classes/sun/security/ec/ECOperations.java | 16 openjdk-17-17.0.6+10/src/jdk.crypto.mscapi/windows/classes/sun/security/mscapi/CKeyStore.java | 75 openjdk-17-17.0.6+10/src/jdk.crypto.mscapi/windows/classes/sun/security/mscapi/SunMSCAPI.java | 16 openjdk-17-17.0.6+10/src/jdk.crypto.mscapi/windows/native/libsunmscapi/security.cpp | 56 openjdk-17-17.0.6+10/src/jdk.hotspot.agent/doc/clhsdb.html | 2 openjdk-17-17.0.6+10/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/CommandProcessor.java | 12 openjdk-17-17.0.6+10/src/jdk.httpserver/share/classes/sun/net/httpserver/HttpConnection.java | 10 openjdk-17-17.0.6+10/src/jdk.httpserver/share/classes/sun/net/httpserver/SSLStreams.java | 4 openjdk-17-17.0.6+10/src/jdk.httpserver/share/classes/sun/net/httpserver/ServerConfig.java | 104 openjdk-17-17.0.6+10/src/jdk.httpserver/share/classes/sun/net/httpserver/ServerImpl.java | 304 openjdk-17-17.0.6+10/src/jdk.httpserver/share/classes/sun/net/httpserver/TimeSource.java | 30 openjdk-17-17.0.6+10/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/CompilerToVM.java | 28 openjdk-17-17.0.6+10/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantPool.java | 109 openjdk-17-17.0.6+10/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJDKReflection.java | 4 openjdk-17-17.0.6+10/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java | 76 openjdk-17-17.0.6+10/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotProfilingInfo.java | 5 openjdk-17-17.0.6+10/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedJavaFieldImpl.java | 25 openjdk-17-17.0.6+10/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedJavaMethodImpl.java | 8 openjdk-17-17.0.6+10/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java | 36 openjdk-17-17.0.6+10/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotVMConfig.java | 1 openjdk-17-17.0.6+10/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/ConstantPool.java | 18 openjdk-17-17.0.6+10/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/ResolvedJavaField.java | 15 openjdk-17-17.0.6+10/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/ResolvedJavaMethod.java | 34 openjdk-17-17.0.6+10/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/ResolvedJavaType.java | 20 openjdk-17-17.0.6+10/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Main.java | 220 openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java | 16 openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/jquery-ui.overrides.css | 3 openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/script-dir/jquery-3.5.1.js |10872 --- openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/script-dir/jquery-3.5.1.min.js | 2 openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/script-dir/jquery-3.6.0.js |10881 +++ openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/script-dir/jquery-3.6.0.min.js | 2 openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/script-dir/jquery-ui.css | 437 openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/script-dir/jquery-ui.js | 296 openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/script-dir/jquery-ui.min.css | 7 openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/script-dir/jquery-ui.min.js | 4 openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/script-dir/jquery-ui.structure.css | 156 openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/script-dir/jquery-ui.structure.min.css | 5 openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets.properties | 2 openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets_ja.properties | 2 openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets_zh_CN.properties | 2 openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css | 4 openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPaths.java | 2 openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/resources/javadoc.properties | 2 openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/resources/javadoc_ja.properties | 2 openjdk-17-17.0.6+10/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/resources/javadoc_zh_CN.properties | 2 openjdk-17-17.0.6+10/src/jdk.javadoc/share/legal/jquery.md | 8 openjdk-17-17.0.6+10/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/InverseDepsAnalyzer.java | 11 openjdk-17-17.0.6+10/src/jdk.jdwp.agent/share/native/libjdwp/classTrack.c | 100 openjdk-17-17.0.6+10/src/jdk.jdwp.agent/share/native/libjdwp/debugInit.c | 1 openjdk-17-17.0.6+10/src/jdk.jdwp.agent/share/native/libjdwp/eventHandler.c | 48 openjdk-17-17.0.6+10/src/jdk.jdwp.agent/share/native/libjdwp/eventHandler.h | 1 openjdk-17-17.0.6+10/src/jdk.jfr/share/classes/jdk/jfr/internal/ChunksChannel.java | 7 openjdk-17-17.0.6+10/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java | 35 openjdk-17-17.0.6+10/src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformEventType.java | 4 openjdk-17-17.0.6+10/src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecorder.java | 6 openjdk-17-17.0.6+10/src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecording.java | 8 openjdk-17-17.0.6+10/src/jdk.jfr/share/classes/jdk/jfr/internal/Utils.java | 29 openjdk-17-17.0.6+10/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/RandomAccessFileInstrumentor.java | 2 openjdk-17-17.0.6+10/src/jdk.jfr/share/classes/jdk/jfr/internal/settings/PeriodSetting.java | 6 openjdk-17-17.0.6+10/src/jdk.jfr/share/conf/jfr/default.jfc | 4 openjdk-17-17.0.6+10/src/jdk.jfr/share/conf/jfr/profile.jfc | 4 openjdk-17-17.0.6+10/src/jdk.jlink/share/classes/jdk/tools/jlink/resources/jlink.properties | 2 openjdk-17-17.0.6+10/src/jdk.jlink/share/classes/jdk/tools/jlink/resources/jlink_ja.properties | 2 openjdk-17-17.0.6+10/src/jdk.jlink/share/classes/jdk/tools/jlink/resources/jlink_zh_CN.properties | 2 openjdk-17-17.0.6+10/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/LinuxAppImageBuilder.java | 2 openjdk-17-17.0.6+10/src/jdk.jpackage/linux/native/applauncher/LinuxLauncher.c | 125 openjdk-17-17.0.6+10/src/jdk.jpackage/linux/native/libapplauncher/LinuxLauncherLib.cpp | 12 openjdk-17-17.0.6+10/src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacAppImageBuilder.java | 192 openjdk-17-17.0.6+10/src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/resources/MacResources.properties | 4 openjdk-17-17.0.6+10/src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/resources/MacResources_ja.properties | 4 openjdk-17-17.0.6+10/src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/resources/MacResources_zh_CN.properties | 4 openjdk-17-17.0.6+10/src/jdk.jpackage/share/classes/jdk/jpackage/internal/Arguments.java | 24 openjdk-17-17.0.6+10/src/jdk.jpackage/share/classes/jdk/jpackage/internal/DeployParams.java | 45 openjdk-17-17.0.6+10/src/jdk.jpackage/share/classes/jdk/jpackage/internal/IOUtils.java | 24 openjdk-17-17.0.6+10/src/jdk.jpackage/share/classes/jdk/jpackage/internal/OverridableResource.java | 32 openjdk-17-17.0.6+10/src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/MainResources.properties | 2 openjdk-17-17.0.6+10/src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/MainResources_de.properties | 112 openjdk-17-17.0.6+10/src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/MainResources_ja.properties | 4 openjdk-17-17.0.6+10/src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/MainResources_zh_CN.properties | 4 openjdk-17-17.0.6+10/src/jdk.jpackage/share/native/applauncher/AppLauncher.cpp | 6 openjdk-17-17.0.6+10/src/jdk.jpackage/share/native/applauncher/JvmLauncher.cpp | 100 openjdk-17-17.0.6+10/src/jdk.jpackage/share/native/applauncher/JvmLauncher.h | 24 openjdk-17-17.0.6+10/src/jdk.jpackage/share/native/applauncher/JvmLauncherLib.c | 31 openjdk-17-17.0.6+10/src/jdk.jpackage/unix/native/common/UnixSysInfo.cpp | 5 openjdk-17-17.0.6+10/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/MsiVersion.java | 9 openjdk-17-17.0.6+10/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WinMsiBundler.java | 9 openjdk-17-17.0.6+10/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WixFragmentBuilder.java | 64 openjdk-17-17.0.6+10/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources.properties | 4 openjdk-17-17.0.6+10/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources_ja.properties | 4 openjdk-17-17.0.6+10/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources_zh_CN.properties | 4 openjdk-17-17.0.6+10/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/main.wxs | 4 openjdk-17-17.0.6+10/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/overrides.wxi | 9 openjdk-17-17.0.6+10/src/jdk.jpackage/windows/native/applauncher/WinLauncher.cpp | 11 openjdk-17-17.0.6+10/src/jdk.localedata/share/classes/sun/util/resources/ext/CurrencyNames_hr_HR.properties | 3 openjdk-17-17.0.6+10/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_de.java | 7 openjdk-17-17.0.6+10/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_es.java | 7 openjdk-17-17.0.6+10/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_fr.java | 7 openjdk-17-17.0.6+10/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_it.java | 7 openjdk-17-17.0.6+10/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_ja.java | 7 openjdk-17-17.0.6+10/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_ko.java | 7 openjdk-17-17.0.6+10/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_pt_BR.java | 7 openjdk-17-17.0.6+10/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_sv.java | 7 openjdk-17-17.0.6+10/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_zh_CN.java | 7 openjdk-17-17.0.6+10/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_zh_TW.java | 7 openjdk-17-17.0.6+10/src/jdk.management.agent/share/classes/sun/management/jmxremote/ConnectorBootstrap.java | 18 openjdk-17-17.0.6+10/src/jdk.management/unix/classes/com/sun/management/internal/OperatingSystemImpl.java | 5 openjdk-17-17.0.6+10/src/jdk.naming.dns/share/classes/com/sun/jndi/dns/DNSDatagramSocketFactory.java | 65 openjdk-17-17.0.6+10/src/jdk.security.auth/share/classes/com/sun/security/auth/module/JndiLoginModule.java | 23 openjdk-17-17.0.6+10/src/jdk.security.auth/share/classes/com/sun/security/auth/module/KeyStoreLoginModule.java | 36 openjdk-17-17.0.6+10/src/jdk.security.auth/share/classes/com/sun/security/auth/module/Krb5LoginModule.java | 8 openjdk-17-17.0.6+10/src/jdk.security.auth/share/classes/com/sun/security/auth/module/LdapLoginModule.java | 10 openjdk-17-17.0.6+10/src/jdk.security.auth/share/classes/com/sun/security/auth/module/NTLoginModule.java | 21 openjdk-17-17.0.6+10/src/jdk.security.auth/share/classes/com/sun/security/auth/module/UnixLoginModule.java | 19 openjdk-17-17.0.6+10/src/jdk.security.jgss/share/classes/com/sun/security/sasl/gsskerb/GssKrb5Server.java | 2 openjdk-17-17.0.6+10/test/hotspot/gtest/metaspace/test_metaspacearena.cpp | 47 openjdk-17-17.0.6+10/test/hotspot/gtest/nmt/test_nmtpreinit.cpp | 131 openjdk-17-17.0.6+10/test/hotspot/gtest/nmt/test_nmtpreinitmap.cpp | 136 openjdk-17-17.0.6+10/test/hotspot/gtest/runtime/test_committed_virtualmemory.cpp | 18 openjdk-17-17.0.6+10/test/hotspot/gtest/runtime/test_os.cpp | 11 openjdk-17-17.0.6+10/test/hotspot/gtest/runtime/test_virtualMemoryTracker.cpp | 78 openjdk-17-17.0.6+10/test/hotspot/jtreg/ProblemList-Xcomp.txt | 2 openjdk-17-17.0.6+10/test/hotspot/jtreg/ProblemList.txt | 44 openjdk-17-17.0.6+10/test/hotspot/jtreg/TEST.groups | 8 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/allocation/TestAllocArrayAfterAllocNoUse.java | 52 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/allocation/TestCCPAllocateArray.java | 53 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/allocation/TestFailedAllocationBadGraph.java | 80 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/arraycopy/TestArrayCopyConjoint.java | 20 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/arraycopy/TestArrayCopyDisjoint.java | 20 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/arraycopy/TestInstanceCloneAsLoadsStores.java | 8 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/c1/BadStateAtLongCmp.jasm | 69 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/c1/KlassAccessCheck.jasm | 86 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/c1/KlassAccessCheckPackagePrivate.jasm | 29 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/c1/KlassAccessCheckTest.java | 61 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/c1/TestBadStateAtLongCmp.java | 43 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/c1/TestManyMethodParameters.java | 57 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/c1/TestPinnedIntrinsics.java | 16 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/c2/ClearArray.java | 51 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/c2/Test7179138_1.java | 3 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/c2/TestDeadDataLoop.java | 239 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/c2/TestRemoveMemBarPrecEdge.java | 55 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/c2/TestUnsignedCompareIntoEqualityNotCanonical.java | 46 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/c2/aarch64/TestFarJump.java | 137 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/c2/cr6865031/Test.java | 2 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/c2/irTests/CmpUWithZero.java | 62 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/c2/irTests/TestFewIterationsCountedLoop.java | 139 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/ccp/TestInfiniteIGVNAfterCCP.java | 90 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/codegen/ShiftByZero.java | 73 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/codegen/ShiftTest.java | 134 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/codegen/TestCharVect2.java | 10 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/codegen/aes/Test8292158.java | 95 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/gcbarriers/TestAlwaysAtomicAccesses.java | 40 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/intrinsics/base64/TestBase64.java | 12 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/intrinsics/bmi/verifycode/BzhiTestI2L.java | 1 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/intrinsics/klass/TestGetModifiers.java | 118 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/intrinsics/unsafe/HeapByteBufferTest.java | 15 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/jsr292/NullConstantMHReceiver.java | 55 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/jvmci/common/patches/jdk.internal.vm.ci/jdk/vm/ci/hotspot/HotSpotResolvedJavaFieldHelper.java | 37 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/HotSpotResolvedJavaFieldTest.java | 153 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/TestHotSpotResolvedJavaField.java | 66 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaField.java | 126 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaMethod.java | 114 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java | 2 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/lib/ir_framework/TestFramework.java | 1 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/lib/ir_framework/driver/TestVMProcess.java | 8 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/loopopts/TestBadlyFormedCountedLoop.java | 50 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/loopopts/TestMaxLoopOptsCountReached.java | 125 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/loopopts/TestMissedOpaqueInPredicate.java | 52 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/loopopts/TestOverUnrolling2.java | 53 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/loopopts/TestPhiInSkeletonPredicateExpression.java | 108 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/loopopts/TestSkeletonPredicateNegation.java | 1 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/loopopts/superword/TestHoistedReductionNode.java | 60 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/loopopts/superword/TestPeeledReductionNode.java | 68 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/loopstripmining/TestLSMBadControlOverride.java | 68 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/parsing/Custom.jasm | 38 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/parsing/UnreachableBlockFallsThroughEndOfCode.java | 42 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/rangechecks/TestRangeCheckCmpUUnderflow.java | 57 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/runtime/Test6826736.java | 3 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/stringopts/SideEffectBeforeConstructor.jasm | 58 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/stringopts/TestSideEffectBeforeConstructor.java | 49 openjdk-17-17.0.6+10/test/hotspot/jtreg/compiler/vectorapi/VectorReplicateLongSpecialImmTest.java | 315 openjdk-17-17.0.6+10/test/hotspot/jtreg/containers/cgroup/CgroupSubsystemFactory.java | 120 openjdk-17-17.0.6+10/test/hotspot/jtreg/containers/cgroup/PlainRead.java | 4 openjdk-17-17.0.6+10/test/hotspot/jtreg/containers/docker/DockerBasicTest.java | 14 openjdk-17-17.0.6+10/test/hotspot/jtreg/containers/docker/TestCPUAwareness.java | 56 openjdk-17-17.0.6+10/test/hotspot/jtreg/containers/docker/TestMemoryAwareness.java | 80 openjdk-17-17.0.6+10/test/hotspot/jtreg/containers/docker/TestMemoryWithCgroupV1.java | 123 openjdk-17-17.0.6+10/test/hotspot/jtreg/containers/docker/TestMisc.java | 13 openjdk-17-17.0.6+10/test/hotspot/jtreg/gc/epsilon/TestMemoryMXBeans.java | 2 openjdk-17-17.0.6+10/test/hotspot/jtreg/gc/g1/TestShrinkAuxiliaryData27.java | 46 openjdk-17-17.0.6+10/test/hotspot/jtreg/gc/g1/TestShrinkAuxiliaryData30.java | 46 openjdk-17-17.0.6+10/test/hotspot/jtreg/gc/g1/humongousObjects/TestHeapCounters.java | 4 openjdk-17-17.0.6+10/test/hotspot/jtreg/gc/g1/mixedgc/TestOldGenCollectionUsage.java | 3 openjdk-17-17.0.6+10/test/hotspot/jtreg/gc/stringdedup/TestStringDeduplicationTools.java | 53 openjdk-17-17.0.6+10/test/hotspot/jtreg/gtest/GTestWrapper.java | 2 openjdk-17-17.0.6+10/test/hotspot/jtreg/gtest/NMTGtests.java | 49 openjdk-17-17.0.6+10/test/hotspot/jtreg/resourcehogs/serviceability/sa/ClhsdbRegionDetailsScanOopsForG1.java | 3 openjdk-17-17.0.6+10/test/hotspot/jtreg/resourcehogs/serviceability/sa/LingeredAppWithLargeStringArray.java | 5 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/GenerateOopMap/TestGenerateOopMapCrash.java | 56 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/GenerateOopMap/if_icmpleIsLastOpcode.jasm | 52 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/Metaspace/elastic/MetaspaceTestContext.java | 5 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/Metaspace/elastic/MetaspaceTestManyArenasManyThreads.java | 13 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/NMT/NMTForOtherLaunchersTest.java | 73 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/NMT/NMTInitializationTest.java | 220 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/Thread/TestBreakSignalThreadDump.java | 91 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/SharedBaseAddress.java | 90 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/LambdaWithUseImplMethodHandle.java | 71 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/VerifyObjArrayCloneTest.java | 79 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/customLoader/test-classes/HelloUnload.java | 15 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/DynamicLambdaWithUseImplMethodHandle.java | 71 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/VerifyObjArrayCloneTest.java | 82 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/methodHandles/CDSMHTest_generate.sh | 14 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/methodHandles/MethodHandlesAsCollectorTest.java | 12 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/methodHandles/MethodHandlesCastFailureTest.java | 12 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/methodHandles/MethodHandlesGeneralTest.java | 12 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/methodHandles/MethodHandlesInvokersTest.java | 12 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/methodHandles/MethodHandlesPermuteArgumentsTest.java | 12 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/methodHandles/MethodHandlesSpreadArgumentsTest.java | 12 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/methodHandles/CDSMHTest_generate.sh | 14 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/methodHandles/MethodHandlesAsCollectorTest.java | 12 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/methodHandles/MethodHandlesCastFailureTest.java | 12 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/methodHandles/MethodHandlesGeneralTest.java | 12 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/methodHandles/MethodHandlesInvokersTest.java | 12 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/methodHandles/MethodHandlesPermuteArgumentsTest.java | 12 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/methodHandles/MethodHandlesSpreadArgumentsTest.java | 12 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/test-classes/LambdaWithUseImplMethodHandleApp.java | 34 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/test-classes/VerifyObjArrayCloneTestApp.java | 56 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/test-classes/pkg1/BaseWithProtectedMethod.java | 32 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/cds/appcds/test-classes/pkg2/Child.jcod | 224 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/verifier/InvokeClone.java | 46 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/verifier/InvokeCloneInvalid.jasm | 34 openjdk-17-17.0.6+10/test/hotspot/jtreg/runtime/verifier/InvokeCloneValid.jasm | 42 openjdk-17-17.0.6+10/test/hotspot/jtreg/serviceability/jvmti/RedefineClasses/RedefineGenericSignatureTest.java | 195 openjdk-17-17.0.6+10/test/hotspot/jtreg/serviceability/sa/ClhsdbFindPC.java | 9 openjdk-17-17.0.6+10/test/hotspot/jtreg/serviceability/sa/ClhsdbScanOops.java | 54 openjdk-17-17.0.6+10/test/hotspot/jtreg/serviceability/sa/LingeredAppWithLock.java | 15 openjdk-17-17.0.6+10/test/hotspot/jtreg/serviceability/sa/TestClassDump.java | 7 openjdk-17-17.0.6+10/test/hotspot/jtreg/serviceability/sa/TestObjectMonitorIterate.java | 10 openjdk-17-17.0.6+10/test/hotspot/jtreg/testlibrary_tests/ir_framework/tests/TestCompileThreshold.java | 103 openjdk-17-17.0.6+10/test/hotspot/jtreg/vmTestbase/gc/gctests/LoadUnloadGC2/LoadUnloadGC2.java | 24 openjdk-17-17.0.6+10/test/hotspot/jtreg/vmTestbase/nsk/share/gc/gp/GarbageUtils.java | 14 openjdk-17-17.0.6+10/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except010.java | 3 openjdk-17-17.0.6+10/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/nativeAndMH.cpp | 3 openjdk-17-17.0.6+10/test/jaxp/javax/xml/jaxp/unittest/dom/DocumentTest.java | 56 openjdk-17-17.0.6+10/test/jaxp/javax/xml/jaxp/unittest/validation/IDREFS_length006.xsd | 25 openjdk-17-17.0.6+10/test/jaxp/javax/xml/jaxp/unittest/validation/NMTOKENS_length006.xsd | 25 openjdk-17-17.0.6+10/test/jaxp/javax/xml/jaxp/unittest/validation/SchemaTest.java | 83 openjdk-17-17.0.6+10/test/jdk/ProblemList.txt | 37 openjdk-17-17.0.6+10/test/jdk/TEST.ROOT | 6 openjdk-17-17.0.6+10/test/jdk/com/apple/eawt/DefaultMenuBar/DefaultMenuBarTest.java | 38 openjdk-17-17.0.6+10/test/jdk/com/sun/crypto/provider/KeyAgreement/DHKeyAgreementPadding.java | 74 openjdk-17-17.0.6+10/test/jdk/com/sun/jdi/ClassUnloadEventTest.java | 215 openjdk-17-17.0.6+10/test/jdk/com/sun/jndi/ldap/LdapPoolTimeoutTest.java | 5 openjdk-17-17.0.6+10/test/jdk/com/sun/management/OperatingSystemMXBean/TestTotalSwap.java | 36 openjdk-17-17.0.6+10/test/jdk/com/sun/net/httpserver/bugs/6725892/Test.java | 6 openjdk-17-17.0.6+10/test/jdk/java/awt/Dialog/SiblingChildOrder/SiblingChildOrderTest.java | 2 openjdk-17-17.0.6+10/test/jdk/java/awt/Focus/8000326/SetFocusTraversalKeysEnabledTest.java | 105 openjdk-17-17.0.6+10/test/jdk/java/awt/Focus/8282640/ScrollPaneFocusBugTest.java | 131 openjdk-17-17.0.6+10/test/jdk/java/awt/Focus/SimpleWindowActivationTest/SimpleWindowActivationTest.java | 29 openjdk-17-17.0.6+10/test/jdk/java/awt/Frame/MiscUndecorated/RepaintTest.java | 54 openjdk-17-17.0.6+10/test/jdk/java/awt/Frame/SetMinimumSizeTest/SetMinimumSizeTest1.java | 88 openjdk-17-17.0.6+10/test/jdk/java/awt/Frame/SetMinimumSizeTest/SetMinimumSizeTest2.java | 97 openjdk-17-17.0.6+10/test/jdk/java/awt/FullScreen/NoResizeEventOnDMChangeTest/NoResizeEventOnDMChangeTest.java | 31 openjdk-17-17.0.6+10/test/jdk/java/awt/Graphics/LCDTextAndGraphicsState.java | 112 openjdk-17-17.0.6+10/test/jdk/java/awt/Graphics/TextAAHintsTest.java | 132 openjdk-17-17.0.6+10/test/jdk/java/awt/Graphics2D/CopyAreaOOB.java | 66 openjdk-17-17.0.6+10/test/jdk/java/awt/Graphics2D/DrawString/LCDTextSrcEa.java | 63 openjdk-17-17.0.6+10/test/jdk/java/awt/Paint/PaintNativeOnUpdate.java | 2 openjdk-17-17.0.6+10/test/jdk/java/awt/Robot/RobotWheelTest/RobotWheelTest.java | 47 openjdk-17-17.0.6+10/test/jdk/java/awt/Toolkit/ScreenInsetsTest/ScreenInsetsTest.java | 11 openjdk-17-17.0.6+10/test/jdk/java/awt/TrayIcon/TrayIconScalingTest.java | 128 openjdk-17-17.0.6+10/test/jdk/java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java | 2 openjdk-17-17.0.6+10/test/jdk/java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java | 284 openjdk-17-17.0.6+10/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/Common.java | 4 openjdk-17-17.0.6+10/test/jdk/java/awt/Window/TranslucentJAppletTest/TranslucentJAppletTest.java | 2 openjdk-17-17.0.6+10/test/jdk/java/awt/Window/WindowOwnedByEmbeddedFrameTest/WindowOwnedByEmbeddedFrameTest.java | 2 openjdk-17-17.0.6+10/test/jdk/java/awt/a11y/AccessibleActionsTest.java | 103 openjdk-17-17.0.6+10/test/jdk/java/awt/a11y/AccessibleJPopupMenuTest.java | 104 openjdk-17-17.0.6+10/test/jdk/java/awt/a11y/AccessibleJTableTest.java | 28 openjdk-17-17.0.6+10/test/jdk/java/awt/dnd/AcceptDropMultipleTimes/AcceptDropMultipleTimes.java | 63 openjdk-17-17.0.6+10/test/jdk/java/awt/dnd/DropTargetEnterExitTest/ExtraDragEnterTest.java | 28 openjdk-17-17.0.6+10/test/jdk/java/awt/dnd/DropTargetEnterExitTest/MissedDragExitTest.java | 43 openjdk-17-17.0.6+10/test/jdk/java/awt/dnd/DropTargetInInternalFrameTest.java | 380 openjdk-17-17.0.6+10/test/jdk/java/awt/dnd/MissingDragExitEventTest/MissingDragExitEventTest.java | 70 openjdk-17-17.0.6+10/test/jdk/java/awt/event/ComponentEvent/TextAreaTextEventTest.java | 141 openjdk-17-17.0.6+10/test/jdk/java/awt/event/HierarchyEvent/AncestorResized/AncestorResized.java | 229 openjdk-17-17.0.6+10/test/jdk/java/awt/event/KeyEvent/KeyCharTest/KeyCharTest.java | 100 openjdk-17-17.0.6+10/test/jdk/java/awt/event/KeyEvent/KeyEventLocationTest.java | 212 openjdk-17-17.0.6+10/test/jdk/java/awt/event/MouseEvent/SpuriousExitEnter/SpuriousExitEnter_3.java | 129 openjdk-17-17.0.6+10/test/jdk/java/awt/image/DrawImage/BlitRotateClippedArea.java | 47 openjdk-17-17.0.6+10/test/jdk/java/awt/image/multiresolution/MultiresolutionIconTest.java | 8 openjdk-17-17.0.6+10/test/jdk/java/awt/print/Dialog/DialogCopies.java | 89 openjdk-17-17.0.6+10/test/jdk/java/awt/print/Dialog/DialogOrient.java | 2 openjdk-17-17.0.6+10/test/jdk/java/awt/print/PrinterJob/ImagePrinting/ClippedImages.java | 222 openjdk-17-17.0.6+10/test/jdk/java/awt/print/PrinterJob/ImagePrinting/ImageTypes.java | 189 openjdk-17-17.0.6+10/test/jdk/java/awt/print/PrinterJob/ImagePrinting/PrintARGBImage.java | 69 openjdk-17-17.0.6+10/test/jdk/java/awt/print/PrinterJob/PageDialogTest.java | 232 openjdk-17-17.0.6+10/test/jdk/java/awt/print/PrinterJob/PageRangesDlgTest.java | 76 openjdk-17-17.0.6+10/test/jdk/java/awt/print/PrinterJob/PrintGlyphVectorTest.java | 143 openjdk-17-17.0.6+10/test/jdk/java/awt/print/PrinterJob/PrintLatinCJKTest.java | 109 openjdk-17-17.0.6+10/test/jdk/java/awt/print/PrinterJob/XparColor.java | 350 openjdk-17-17.0.6+10/test/jdk/java/awt/regtesthelpers/PassFailJFrame.java | 321 openjdk-17-17.0.6+10/test/jdk/java/awt/regtesthelpers/Util.java | 9 openjdk-17-17.0.6+10/test/jdk/java/io/File/GetXSpace.java | 11 openjdk-17-17.0.6+10/test/jdk/java/lang/Math/PowTests.java | 13 openjdk-17-17.0.6+10/test/jdk/java/lang/ProcessBuilder/Basic.java | 3 openjdk-17-17.0.6+10/test/jdk/java/lang/RuntimeTests/loadLibrary/exeLibraryCache/LibraryFromCache.java | 4 openjdk-17-17.0.6+10/test/jdk/java/lang/String/concat/ImplicitStringConcatOOME.java | 136 openjdk-17-17.0.6+10/test/jdk/java/lang/reflect/PublicMethods/PublicMethodsTest.java | 4 openjdk-17-17.0.6+10/test/jdk/java/math/BigDecimal/ConstructorUnscaledValue.java | 64 openjdk-17-17.0.6+10/test/jdk/java/math/BigDecimal/SerializationTests.java | 120 openjdk-17-17.0.6+10/test/jdk/java/math/BigInteger/SerializationTests.java | 141 openjdk-17-17.0.6+10/test/jdk/java/net/httpclient/http2/TLSConnection.java | 5 openjdk-17-17.0.6+10/test/jdk/java/net/httpclient/whitebox/java.net.http/jdk/internal/net/http/ConnectionPoolTest.java | 2 openjdk-17-17.0.6+10/test/jdk/java/security/Security/signedfirst/Dyn.sh | 94 openjdk-17-17.0.6+10/test/jdk/java/security/Security/signedfirst/DynStatic.java | 96 openjdk-17-17.0.6+10/test/jdk/java/security/Security/signedfirst/Static.sh | 96 openjdk-17-17.0.6+10/test/jdk/java/security/Security/signedfirst/com/sun/exp/provider/EXP.java | 34 openjdk-17-17.0.6+10/test/jdk/java/security/Security/signedfirst/com/sun/exp/provider/SHA.java | 33 openjdk-17-17.0.6+10/test/jdk/java/security/SignedJar/CustomClassLoader.java | 43 openjdk-17-17.0.6+10/test/jdk/java/security/SignedJar/SignedJarWithCustomClassLoader.java | 94 openjdk-17-17.0.6+10/test/jdk/java/security/cert/CertPathBuilder/targetConstraints/BuildEEBasicConstraints.java | 10 openjdk-17-17.0.6+10/test/jdk/java/security/cert/pkix/policyChanges/TestPolicy.java | 7 openjdk-17-17.0.6+10/test/jdk/java/text/Format/NumberFormat/CurrencySymbols.properties | 6 openjdk-17-17.0.6+10/test/jdk/java/util/Currency/CurrencyTest.java | 7 openjdk-17-17.0.6+10/test/jdk/java/util/Currency/PropertiesTest.sh | 4 openjdk-17-17.0.6+10/test/jdk/java/util/Currency/ValidateISO4217.java | 13 openjdk-17-17.0.6+10/test/jdk/java/util/Currency/tablea1.txt | 10 openjdk-17-17.0.6+10/test/jdk/java/util/DoubleStreamSums/CompensatedSums.java | 19 openjdk-17-17.0.6+10/test/jdk/java/util/Random/RandomNextDoubleBoundary.java | 94 openjdk-17-17.0.6+10/test/jdk/java/util/ResourceBundle/Control/MissingResourceCauseTest.java | 4 openjdk-17-17.0.6+10/test/jdk/java/util/TimeZone/AssureTzdataVersion.java | 53 openjdk-17-17.0.6+10/test/jdk/java/util/TimeZone/Bug6329116.java | 246 openjdk-17-17.0.6+10/test/jdk/java/util/TimeZone/CustomTzIDCheckDST.java | 77 openjdk-17-17.0.6+10/test/jdk/java/util/TimeZone/TextFileReader.java | 94 openjdk-17-17.0.6+10/test/jdk/java/util/TimeZone/TimeZoneData/VERSION | 1 openjdk-17-17.0.6+10/test/jdk/java/util/TimeZone/TimeZoneData/aliases.txt | 247 openjdk-17-17.0.6+10/test/jdk/java/util/TimeZone/TimeZoneData/displaynames.txt | 174 openjdk-17-17.0.6+10/test/jdk/java/util/TimeZone/tools/share/CompareYearData.pl | 84 openjdk-17-17.0.6+10/test/jdk/java/util/TimeZone/tools/share/Makefile | 58 openjdk-17-17.0.6+10/test/jdk/java/util/TimeZone/tools/share/makeZoneData.pl | 283 openjdk-17-17.0.6+10/test/jdk/java/util/zip/CloseInflaterDeflaterTest.java | 5 openjdk-17-17.0.6+10/test/jdk/javax/accessibility/4170173/AccessibleJTextAfterIndexTest.java | 124 openjdk-17-17.0.6+10/test/jdk/javax/accessibility/4170173/AccessibleJTextBeforeIndexTest.java | 127 openjdk-17-17.0.6+10/test/jdk/javax/accessibility/4529616/AccessibleJTableCellTest.java | 92 openjdk-17-17.0.6+10/test/jdk/javax/accessibility/4670319/AccessibleJTreePCESourceTest.java | 115 openjdk-17-17.0.6+10/test/jdk/javax/accessibility/4702199/AccessibleExtendedTextTest.java | 96 openjdk-17-17.0.6+10/test/jdk/javax/accessibility/4702233/AccessibleActionConstants.java | 44 openjdk-17-17.0.6+10/test/jdk/javax/accessibility/4702233/AccessibleContextConstants.java | 71 openjdk-17-17.0.6+10/test/jdk/javax/accessibility/4702233/AccessiblePropertiesTest.java | 96 openjdk-17-17.0.6+10/test/jdk/javax/accessibility/4702233/AccessibleRelationConstants.java | 65 openjdk-17-17.0.6+10/test/jdk/javax/accessibility/4702233/AccessibleRoleConstants.java | 75 openjdk-17-17.0.6+10/test/jdk/javax/accessibility/4702233/AccessibleStateConstants.java | 62 openjdk-17-17.0.6+10/test/jdk/javax/accessibility/4715503/AccessibleJTableCellBoundingRectangleTest.java | 91 openjdk-17-17.0.6+10/test/jdk/javax/accessibility/8283015/AccessibleJTableCellNameTest.java | 90 openjdk-17-17.0.6+10/test/jdk/javax/accessibility/AccessibleJTableSelectionTest.java | 173 openjdk-17-17.0.6+10/test/jdk/javax/accessibility/JFileChooserAccessibleDescriptionTest.java | 102 openjdk-17-17.0.6+10/test/jdk/javax/accessibility/JRootPaneAccessiblAtTest.java | 58 openjdk-17-17.0.6+10/test/jdk/javax/accessibility/JScrollPaneAccessibleRelationsTest.java | 118 openjdk-17-17.0.6+10/test/jdk/javax/imageio/plugins/gif/GIFLargeTableIndexTest.java | 155 openjdk-17-17.0.6+10/test/jdk/javax/net/ssl/SSLEngine/LargePacket.java | 9 openjdk-17-17.0.6+10/test/jdk/javax/net/ssl/SSLEngine/SSLEngineService.java | 42 openjdk-17-17.0.6+10/test/jdk/javax/net/ssl/SSLSession/ResumeTLS13withSNI.java | 7 openjdk-17-17.0.6+10/test/jdk/javax/net/ssl/ServerName/EndingDotHostname.java | 251 openjdk-17-17.0.6+10/test/jdk/javax/net/ssl/ServerName/SSLEngineExplorer.java | 8 openjdk-17-17.0.6+10/test/jdk/javax/net/ssl/ServerName/SSLEngineExplorerMatchedSNI.java | 8 openjdk-17-17.0.6+10/test/jdk/javax/net/ssl/ServerName/SSLEngineExplorerUnmatchedSNI.java | 8 openjdk-17-17.0.6+10/test/jdk/javax/net/ssl/ServerName/SSLEngineExplorerWithCli.java | 8 openjdk-17-17.0.6+10/test/jdk/javax/net/ssl/ServerName/SSLEngineExplorerWithSrv.java | 8 openjdk-17-17.0.6+10/test/jdk/javax/net/ssl/templates/SSLExampleCert.java | 414 openjdk-17-17.0.6+10/test/jdk/javax/security/auth/login/modules/SafeLogout.java | 118 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Devices/ClosedReceiver.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Devices/InitializationHang.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Devices/MidiDeviceGetReceivers.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Devices/MidiIO.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Devices/MidiOutGetMicrosecondPositionBug.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Devices/OpenClose.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Devices/ReceiverTransmitterAvailable.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Devices/Reopen.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/MidiSystem/DefaultDevices.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/MidiSystem/GetSequencer.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Sequence/GetMicrosecondLength.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Sequencer/LoopIAE.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Sequencer/MetaCallback.java | 34 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Sequencer/Recording.java | 2 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Sequencer/SeqRecordDoesNotCopy.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Sequencer/SeqRecordsRealTimeEvents.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Sequencer/SeqStartRecording.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Sequencer/SequencerCacheValues.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Sequencer/SequencerImplicitSynthOpen.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Sequencer/SequencerSetMuteSolo.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Sequencer/SequencerState.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Sequencer/SetTickPosition.java | 3 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Sequencer/TickLength.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Soundbanks/ExtraCharInSoundbank.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/midi/Synthesizer/Receiver/bug6186488.java | 189 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/AudioSystem/DefaultMixers.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Clip/ClipCloseLoss.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Clip/ClipFlushCrash.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Clip/Drain/ClipDrain.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Clip/Duration/ClipDuration.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Clip/Endpoint/ClipSetEndPoint.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Controls/FloatControl/FloatControlBug.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/DataLine/DataLineInfoNegBufferSize.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/DataLine/DataLine_ArrayIndexOutOfBounds.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/DataLine/LineDefFormat.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Lines/16and32KHz/Has16and32KHz.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Lines/BufferSizeCheck.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Lines/ChangingBuffer.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Lines/ClickInPlay/Test4218609.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Lines/ClipOpenException.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Lines/FrameSize/FrameSizeTest.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Lines/SDLwrite.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Lines/SourceDataLineDefaultBufferSizeCrash.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Lines/StopStart.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/LinuxBlock/PlaySine.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/LinuxCrash/ClipLinuxCrash.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/LinuxCrash/ClipLinuxCrash2.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/LinuxCrash/SDLLinuxCrash.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Mixers/BogusMixers.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Mixers/BothEndiansAndSigns.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Mixers/DirectSoundRepeatingBuffer/Test4997635.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Mixers/DirectSoundUnderrunSilence/Test5032020.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Mixers/NoSimpleInputDevice.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Mixers/PhantomMixers.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Mixers/PlugHwMonoAnd8bitAvailable.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Mixers/UnexpectedIAE.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/Recording/TargetDataLineFlush.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/sound/sampled/spi/MixerProvider/ExpectedNPEOnNull.java | 1 openjdk-17-17.0.6+10/test/jdk/javax/swing/JButton/4659800/EnterKeyActivatesButton.java | 124 openjdk-17-17.0.6+10/test/jdk/javax/swing/JButton/4659800/SpaceKeyActivatesButton.java | 152 openjdk-17-17.0.6+10/test/jdk/javax/swing/JComboBox/4231298/JComboBoxPrototypeDisplayValueTest.java | 184 openjdk-17-17.0.6+10/test/jdk/javax/swing/JComboBox/JComboBoxPopupMenuEventTest.java | 200 openjdk-17-17.0.6+10/test/jdk/javax/swing/JComponent/JComponentSetRequestFocusEnabledTest.java | 138 openjdk-17-17.0.6+10/test/jdk/javax/swing/JEditorPane/4330998/JEditorPaneSetTextNullTest.java | 45 openjdk-17-17.0.6+10/test/jdk/javax/swing/JEditorPane/4666101/JEditorPaneNavigationTest.java | 197 openjdk-17-17.0.6+10/test/jdk/javax/swing/JFileChooser/4400728/JFileChooserDefaultDirectoryTest.java | 77 openjdk-17-17.0.6+10/test/jdk/javax/swing/JFileChooser/4525475/JFileChooserReadOnlyTest.java | 141 openjdk-17-17.0.6+10/test/jdk/javax/swing/JFileChooser/JFileChooserSetLocationTest.java | 281 openjdk-17-17.0.6+10/test/jdk/javax/swing/JLabel/4138746/JLabelMnemonicsTest.java | 233 openjdk-17-17.0.6+10/test/jdk/javax/swing/JList/4618767/JListSelectedElementTest.java | 222 openjdk-17-17.0.6+10/test/jdk/javax/swing/JMenu/4515762/bug4515762.java | 49 openjdk-17-17.0.6+10/test/jdk/javax/swing/JPopupMenu/4634626/bug4634626.java | 160 openjdk-17-17.0.6+10/test/jdk/javax/swing/JPopupMenu/JPopupMenuFocusStealTest.java | 179 openjdk-17-17.0.6+10/test/jdk/javax/swing/JRootPane/DefaultButtonTest.java | 111 openjdk-17-17.0.6+10/test/jdk/javax/swing/JSpinner/4515999/JSpinnerMouseAndKeyPressTest.java | 201 openjdk-17-17.0.6+10/test/jdk/javax/swing/JSpinner/4670051/DateFieldUnderCursorTest.java | 282 openjdk-17-17.0.6+10/test/jdk/javax/swing/JSpinner/JSpinnerFocusTest.java | 121 openjdk-17-17.0.6+10/test/jdk/javax/swing/JSplitPane/4164779/JSplitPaneKeyboardNavigationTest.java | 220 openjdk-17-17.0.6+10/test/jdk/javax/swing/JSplitPane/4615365/JSplitPaneDividerLocationTest.java | 200 openjdk-17-17.0.6+10/test/jdk/javax/swing/JSplitPane/4820080/JSplitPaneDragColorTest.java | 205 openjdk-17-17.0.6+10/test/jdk/javax/swing/JTabbedPane/TestBackgroundScrollPolicy.java | 2 openjdk-17-17.0.6+10/test/jdk/javax/swing/JTextArea/4514331/TabShiftsFocusToNextComponent.java | 176 openjdk-17-17.0.6+10/test/jdk/javax/swing/JTextField/4532513/DefaultCaretRequestsFocusTest.java | 193 openjdk-17-17.0.6+10/test/jdk/javax/swing/JTree/4518432/JTreeNodeCopyPasteTest.java | 217 openjdk-17-17.0.6+10/test/jdk/javax/swing/JTree/4618767/JTreeSelectedElementTest.java | 226 openjdk-17-17.0.6+10/test/jdk/javax/swing/JTree/4908142/bug4908142.java | 8 openjdk-17-17.0.6+10/test/jdk/javax/swing/JTree/6263446/bug6263446.java | 28 openjdk-17-17.0.6+10/test/jdk/javax/swing/plaf/nimbus/NimbusJTreeSelTextColor.java | 198 openjdk-17-17.0.6+10/test/jdk/javax/swing/plaf/synth/SynthButtonUI/6276188/bug6276188.java | 2 openjdk-17-17.0.6+10/test/jdk/jdk/internal/platform/cgroup/TestCgroupSubsystemFactory.java | 128 openjdk-17-17.0.6+10/test/jdk/jdk/internal/platform/docker/TestDockerBasic.java | 73 openjdk-17-17.0.6+10/test/jdk/jdk/internal/platform/docker/TestDockerCpuMetrics.java | 18 openjdk-17-17.0.6+10/test/jdk/jdk/internal/platform/docker/TestDockerMemoryMetrics.java | 10 openjdk-17-17.0.6+10/test/jdk/jdk/jfr/api/consumer/streaming/TestLatestEvent.java | 24 openjdk-17-17.0.6+10/test/jdk/jdk/jfr/api/recording/dump/TestDumpDevNull.java | 53 openjdk-17-17.0.6+10/test/jdk/jdk/jfr/api/recording/event/TestShortPeriod.java | 97 openjdk-17-17.0.6+10/test/jdk/jdk/jfr/event/compiler/TestCodeCacheFull.java | 1 openjdk-17-17.0.6+10/test/jdk/jdk/jfr/event/compiler/TestJitRestart.java | 121 openjdk-17-17.0.6+10/test/jdk/jdk/jfr/event/oldobject/TestClassLoaderLeak.java | 5 openjdk-17-17.0.6+10/test/jdk/jdk/jfr/jvm/TestDumpOnCrash.java | 40 openjdk-17-17.0.6+10/test/jdk/jdk/nio/zipfs/ZipFSOutputStreamTest.java | 23 openjdk-17-17.0.6+10/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/QuoVadisCA.java | 361 openjdk-17-17.0.6+10/test/jdk/sun/java2d/DirectX/OnScreenRenderingResizeTest/OnScreenRenderingResizeTest.java | 238 openjdk-17-17.0.6+10/test/jdk/sun/java2d/GdiRendering/ClipShapeRendering.java | 518 openjdk-17-17.0.6+10/test/jdk/sun/java2d/SunGraphics2D/CoordinateTruncationBug.java | 271 openjdk-17-17.0.6+10/test/jdk/sun/java2d/cmm/ColorConvertOp/MTPerLineTransformValidation.java | 2 openjdk-17-17.0.6+10/test/jdk/sun/java2d/cmm/ColorConvertOp/UnexpectedSourceImageSize.java | 169 openjdk-17-17.0.6+10/test/jdk/sun/management/jmxremote/bootstrap/management_ssltest07_ok.properties.in | 4 openjdk-17-17.0.6+10/test/jdk/sun/net/www/http/KeepAliveCache/KeepAliveProperty.java | 179 openjdk-17-17.0.6+10/test/jdk/sun/net/www/protocol/http/NULLTargetInfoTest.java | 6 openjdk-17-17.0.6+10/test/jdk/sun/rmi/runtime/Log/checkLogging/CheckLogging.java | 4 openjdk-17-17.0.6+10/test/jdk/sun/security/mscapi/AllTypes.java | 87 openjdk-17-17.0.6+10/test/jdk/sun/security/pkcs11/Cipher/TestPaddingOOB.java | 101 openjdk-17-17.0.6+10/test/jdk/sun/security/pkcs11/Signature/TestDSAKeyLength.java | 4 openjdk-17-17.0.6+10/test/jdk/sun/security/pkcs11/tls/TestKeyMaterialChaCha20.java | 94 openjdk-17-17.0.6+10/test/jdk/sun/security/ssl/SSLSessionImpl/NoInvalidateSocketException.java | 4 openjdk-17-17.0.6+10/test/jdk/sun/security/ssl/SSLSocketImpl/SSLSocketSSLEngineCloseInbound.java | 491 openjdk-17-17.0.6+10/test/jdk/sun/security/ssl/X509TrustManagerImpl/BasicConstraints12.java | 73 openjdk-17-17.0.6+10/test/jdk/sun/security/tools/jarsigner/CheckSignerCertChain.java | 4 openjdk-17-17.0.6+10/test/jdk/sun/security/tools/jarsigner/DiffEnd.java | 4 openjdk-17-17.0.6+10/test/jdk/sun/security/tools/jarsigner/OldSig.java | 7 openjdk-17-17.0.6+10/test/jdk/sun/security/tools/jarsigner/OldSig.props | 2 openjdk-17-17.0.6+10/test/jdk/sun/security/tools/jarsigner/Test4431684.java | 9 openjdk-17-17.0.6+10/test/jdk/sun/security/tools/jarsigner/TimestampCheck.java | 153 openjdk-17-17.0.6+10/test/jdk/sun/security/tools/keytool/ReadJar.java | 100 openjdk-17-17.0.6+10/test/jdk/sun/security/tools/keytool/TestSha1Usage.java | 60 openjdk-17-17.0.6+10/test/jdk/sun/text/resources/LocaleData | 1 openjdk-17-17.0.6+10/test/jdk/sun/text/resources/LocaleData.cldr | 4 openjdk-17-17.0.6+10/test/jdk/sun/text/resources/LocaleDataTest.java | 4 openjdk-17-17.0.6+10/test/jdk/sun/tools/jhsdb/JShellHeapDumpTest.java | 33 openjdk-17-17.0.6+10/test/jdk/sun/util/calendar/zi/TestZoneInfo310.java | 5 openjdk-17-17.0.6+10/test/jdk/sun/util/resources/cldr/TimeZoneNamesTest.java | 20 openjdk-17-17.0.6+10/test/jdk/tools/jmod/hashes/HashesOrderTest.java | 135 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/apps/Hello.java | 21 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/AdditionalLauncher.java | 135 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/CfgFile.java | 6 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/Executor.java | 8 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/HelloApp.java | 28 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java | 67 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JavaTool.java | 6 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LinuxHelper.java | 43 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/MacHelper.java | 93 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageTest.java | 190 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/RunnablePackageTest.java | 16 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/TKit.java | 6 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/WindowsHelper.java | 109 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/junit/jdk/jpackage/internal/OverridableResourceTest.java | 8 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/junit/jdk/jpackage/internal/PlatformVersionTest.java | 14 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/macosx/MacAppStoreJlinkOptionsTest.java | 64 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/macosx/MacAppStoreRuntimeTest.java | 102 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/macosx/SigningAppImageTest.java | 31 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/run_tests.sh | 62 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/share/ArgumentsTest.java | 4 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/share/MultiLauncherTwoPhaseTest.java | 4 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/share/MultiNameTwoPhaseTest.java | 4 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/share/jdk/jpackage/tests/BasicTest.java | 13 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/share/jdk/jpackage/tests/ErrorTest.java | 6 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/share/jdk/jpackage/tests/MainClassTest.java | 4 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/test_jpackage.sh | 100 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/windows/Win8282351Test.java | 118 openjdk-17-17.0.6+10/test/jdk/tools/jpackage/windows/WinUpgradeUUIDTest.java | 4 openjdk-17-17.0.6+10/test/jdk/tools/launcher/TestSpecialArgs.java | 164 openjdk-17-17.0.6+10/test/langtools/jdk/javadoc/doclet/testJavaFX/TestJavaFxMode.java | 13 openjdk-17-17.0.6+10/test/langtools/jdk/javadoc/doclet/testSearch/TestSearch.java | 16 openjdk-17-17.0.6+10/test/langtools/jdk/javadoc/tool/api/basic/APITest.java | 14 openjdk-17-17.0.6+10/test/langtools/tools/doclint/CrashInAnnotateTest.java | 31 openjdk-17-17.0.6+10/test/langtools/tools/doclint/CrashInAnnotateTest.out | 11 openjdk-17-17.0.6+10/test/langtools/tools/javac/Paths/Util.sh | 4 openjdk-17-17.0.6+10/test/langtools/tools/javac/diags/examples/NoAnnotationsInLink.java | 32 openjdk-17-17.0.6+10/test/langtools/tools/javac/lambda/methodReference/MethodRefNewInnerRawTest.java | 24 openjdk-17-17.0.6+10/test/langtools/tools/javac/lambda/methodReference/MethodRefNewInnerRawTest.out | 5 openjdk-17-17.0.6+10/test/langtools/tools/javac/lvti/ConstantTypes.java | 99 openjdk-17-17.0.6+10/test/langtools/tools/javac/patterns/NullSwitch.java | 16 openjdk-17-17.0.6+10/test/langtools/tools/jdeps/optionalDependency/OptionalDependencyTest.java | 98 openjdk-17-17.0.6+10/test/langtools/tools/jdeps/optionalDependency/src/m1/module-info.java | 27 openjdk-17-17.0.6+10/test/langtools/tools/jdeps/optionalDependency/src/m1/p1/P.java | 27 openjdk-17-17.0.6+10/test/langtools/tools/jdeps/optionalDependency/src/m2/module-info.java | 27 openjdk-17-17.0.6+10/test/langtools/tools/jdeps/optionalDependency/src/m2/p2/Q.java | 28 openjdk-17-17.0.6+10/test/langtools/tools/jdeps/optionalDependency/src/m3/module-info.java | 26 openjdk-17-17.0.6+10/test/langtools/tools/jdeps/optionalDependency/src/m3/p3/R.java | 29 openjdk-17-17.0.6+10/test/lib-test/jdk/test/whitebox/vm_flags/BooleanTest.java | 2 openjdk-17-17.0.6+10/test/lib-test/jdk/test/whitebox/vm_flags/DoubleTest.java | 2 openjdk-17-17.0.6+10/test/lib-test/jdk/test/whitebox/vm_flags/StringTest.java | 2 openjdk-17-17.0.6+10/test/lib-test/jdk/test/whitebox/vm_flags/Uint64Test.java | 2 openjdk-17-17.0.6+10/test/lib-test/jdk/test/whitebox/vm_flags/UintxTest.java | 2 openjdk-17-17.0.6+10/test/lib/jdk/test/lib/containers/cgroup/MetricsTesterCgroupV2.java | 5 openjdk-17-17.0.6+10/test/lib/jdk/test/lib/jfr/EventNames.java | 1 openjdk-17-17.0.6+10/test/micro/org/openjdk/bench/java/lang/StringDecode.java | 145 openjdk-17-17.0.6+10/test/micro/org/openjdk/bench/java/security/SSLHandshake.java | 184 openjdk-17-17.0.6+10/test/micro/org/openjdk/bench/java/security/TestCertificates.java | 148 openjdk-17-17.0.6+10/test/micro/org/openjdk/bench/java/util/TestCRC32C.java | 60 openjdk-17-17.0.6+10/test/micro/org/openjdk/bench/vm/gc/Alloc.java | 17 openjdk-17-17.0.6+10/test/micro/org/openjdk/bench/vm/gc/RawAllocationRate.java |28732 ++++++++++ 1540 files changed, 202533 insertions(+), 51371 deletions(-) diff -Nru openjdk-17-17.0.4+8/.gitattributes openjdk-17-17.0.6+10/.gitattributes --- openjdk-17-17.0.4+8/.gitattributes 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/.gitattributes 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1 @@ +* -text diff -Nru openjdk-17-17.0.4+8/.github/actions/config/action.yml openjdk-17-17.0.6+10/.github/actions/config/action.yml --- openjdk-17-17.0.4+8/.github/actions/config/action.yml 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/.github/actions/config/action.yml 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,46 @@ +# +# Copyright (c) 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +name: 'Config' +description: 'Read JDK Configuration Variables' +inputs: + var: + description: 'The name of the variable to read' + required: true +outputs: + value: + description: 'The value of the configuration variable' + value: ${{ steps.read-config.outputs.value }} + +runs: + using: composite + steps: + - name: 'Read configuration variable from repo' + id: read-config + run: | + # Extract value from configuration file + value="$(grep -h ${{ inputs.var }}= make/conf/github-actions.conf | cut -d '=' -f 2-)" + echo "value=$value" >> $GITHUB_OUTPUT + shell: bash diff -Nru openjdk-17-17.0.4+8/.github/actions/do-build/action.yml openjdk-17-17.0.6+10/.github/actions/do-build/action.yml --- openjdk-17-17.0.4+8/.github/actions/do-build/action.yml 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/.github/actions/do-build/action.yml 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,80 @@ +# +# Copyright (c) 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +name: 'Do build' +description: 'Build the JDK using make' +inputs: + make-target: + description: 'Make target(s)' + required: true + platform: + description: 'Platform name' + required: true + debug-suffix: + description: 'File name suffix denoting debug level, possibly empty' + required: false + +runs: + using: composite + steps: + - name: 'Build' + id: build + run: > + make LOG=info ${{ inputs.make-target }} + || bash ./.github/scripts/gen-build-failure-report.sh "$GITHUB_STEP_SUMMARY" + shell: bash + + - name: 'Check for failure' + id: check + run: | + # Check for failure marker file + build_dir="$(ls -d build/*)" + if [[ -e $build_dir/build-failure ]]; then + # Collect relevant log files + mkdir failure-logs + cp \ + $build_dir/spec.gmk \ + $build_dir/build.log \ + $build_dir/configure.log \ + $build_dir/make-support/failure-summary.log \ + $build_dir/make-support/failure-logs/* \ + failure-logs/ 2> /dev/null || true + echo 'failure=true' >> $GITHUB_OUTPUT + fi + shell: bash + + - name: 'Upload build logs' + uses: actions/upload-artifact@v3 + with: + name: failure-logs-${{ inputs.platform }}${{ inputs.debug-suffix }} + path: failure-logs + if: steps.check.outputs.failure == 'true' + + # This is the best way I found to abort the job with an error message + - name: 'Notify about build failures' + uses: actions/github-script@v6 + with: + script: core.setFailed('Build failed. See summary for details.') + if: steps.check.outputs.failure == 'true' diff -Nru openjdk-17-17.0.4+8/.github/actions/get-bootjdk/action.yml openjdk-17-17.0.6+10/.github/actions/get-bootjdk/action.yml --- openjdk-17-17.0.4+8/.github/actions/get-bootjdk/action.yml 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/.github/actions/get-bootjdk/action.yml 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,109 @@ +# +# Copyright (c) 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +name: 'Get BootJDK' +description: 'Download the BootJDK from cache or source location' +inputs: + platform: + description: 'Platform' + required: true +outputs: + path: + description: 'Path to the installed BootJDK' + value: ${{ steps.path-name.outputs.path }} + +runs: + using: composite + steps: + - name: 'Determine platform prefix' + id: platform-prefix + run: | + # Convert platform name to upper case + platform_prefix="$(echo ${{ inputs.platform }} | tr [a-z-] [A-Z_])" + echo "value=$platform_prefix" >> $GITHUB_OUTPUT + shell: bash + + - name: 'Get URL configuration' + id: url + uses: ./.github/actions/config + with: + var: ${{ steps.platform-prefix.outputs.value}}_BOOT_JDK_URL + + - name: 'Get SHA256 configuration' + id: sha256 + uses: ./.github/actions/config + with: + var: ${{ steps.platform-prefix.outputs.value}}_BOOT_JDK_SHA256 + + - name: 'Get file extension configuration' + id: ext + uses: ./.github/actions/config + with: + var: ${{ steps.platform-prefix.outputs.value}}_BOOT_JDK_EXT + + - name: 'Check cache for BootJDK' + id: get-cached-bootjdk + uses: actions/cache@v3 + with: + path: bootjdk/jdk + key: boot-jdk-${{ inputs.platform }}-${{ steps.sha256.outputs.value }} + + # macOS is missing sha256sum + - name: 'Install sha256sum' + run: | + # Run Homebrew installation + brew install coreutils + shell: bash + if: steps.get-cached-bootjdk.outputs.cache-hit != 'true' && runner.os == 'macOS' + + - name: 'Download BootJDK' + run: | + # Download BootJDK and verify checksum + mkdir -p bootjdk/jdk + mkdir -p bootjdk/unpacked + wget --progress=dot:mega -O bootjdk/jdk.${{ steps.ext.outputs.value }} '${{ steps.url.outputs.value }}' + echo '${{ steps.sha256.outputs.value }} bootjdk/jdk.${{ steps.ext.outputs.value }}' | sha256sum -c >/dev/null - + shell: bash + if: steps.get-cached-bootjdk.outputs.cache-hit != 'true' + + - name: 'Unpack BootJDK' + run: | + # Unpack the BootJDK and move files to a common location + if [[ '${{ steps.ext.outputs.value }}' == 'tar.gz' ]]; then + tar -xf bootjdk/jdk.${{ steps.ext.outputs.value }} -C bootjdk/unpacked + else + unzip -q bootjdk/jdk.${{ steps.ext.outputs.value }} -d bootjdk/unpacked + fi + jdk_root="$(dirname $(find bootjdk/unpacked -name bin -type d))" + mv "$jdk_root"/* bootjdk/jdk/ + shell: bash + if: steps.get-cached-bootjdk.outputs.cache-hit != 'true' + + - name: 'Export path to where BootJDK is installed' + id: path-name + run: | + # Export the path + echo 'path=bootjdk/jdk' >> $GITHUB_OUTPUT + shell: bash diff -Nru openjdk-17-17.0.4+8/.github/actions/get-bundles/action.yml openjdk-17-17.0.6+10/.github/actions/get-bundles/action.yml --- openjdk-17-17.0.4+8/.github/actions/get-bundles/action.yml 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/.github/actions/get-bundles/action.yml 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,109 @@ +# +# Copyright (c) 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +name: 'Get bundles' +description: 'Download resulting JDK bundles' +inputs: + platform: + description: 'Platform name' + required: true + debug-suffix: + description: 'File name suffix denoting debug level, possibly empty' + required: false +outputs: + jdk-path: + description: 'Path to the installed JDK bundle' + value: ${{ steps.path-name.outputs.jdk }} + symbols-path: + description: 'Path to the installed symbols bundle' + value: ${{ steps.path-name.outputs.symbols }} + tests-path: + description: 'Path to the installed tests bundle' + value: ${{ steps.path-name.outputs.tests }} + +runs: + using: composite + steps: + - name: 'Download bundles artifact' + id: download-bundles + uses: actions/download-artifact@v3 + with: + name: bundles-${{ inputs.platform }}${{ inputs.debug-suffix }} + path: bundles + continue-on-error: true + + - name: 'Download bundles artifact (retry)' + uses: actions/download-artifact@v3 + with: + name: bundles-${{ inputs.platform }}${{ inputs.debug-suffix }} + path: bundles + if: steps.download-bundles.outcome == 'failure' + + - name: 'Unpack bundles' + run: | + if [[ -e bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}.zip ]]; then + echo 'Unpacking jdk bundle...' + mkdir -p bundles/jdk + unzip -q bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}.zip -d bundles/jdk + fi + + if [[ -e bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz ]]; then + echo 'Unpacking jdk bundle...' + mkdir -p bundles/jdk + tar -xf bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz -C bundles/jdk + fi + + if [[ -e bundles/symbols-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz ]]; then + echo 'Unpacking symbols bundle...' + mkdir -p bundles/symbols + tar -xf bundles/symbols-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz -C bundles/symbols + fi + + if [[ -e bundles/tests-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz ]]; then + echo 'Unpacking tests bundle...' + mkdir -p bundles/tests + tar -xf bundles/tests-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz -C bundles/tests + fi + shell: bash + + - name: 'Export paths to where bundles are installed' + id: path-name + run: | + # Export the paths + + jdk_dir="$GITHUB_WORKSPACE/$(dirname $(find bundles/jdk -name bin -type d))" + symbols_dir="$GITHUB_WORKSPACE/$(dirname $(find bundles/symbols -name bin -type d))" + tests_dir="$GITHUB_WORKSPACE/bundles/tests" + + if [[ '${{ runner.os }}' == 'Windows' ]]; then + jdk_dir="$(cygpath $jdk_dir)" + symbols_dir="$(cygpath $symbols_dir)" + tests_dir="$(cygpath $tests_dir)" + fi + + echo "jdk=$jdk_dir" >> $GITHUB_OUTPUT + echo "symbols=$symbols_dir" >> $GITHUB_OUTPUT + echo "tests=$tests_dir" >> $GITHUB_OUTPUT + shell: bash diff -Nru openjdk-17-17.0.4+8/.github/actions/get-gtest/action.yml openjdk-17-17.0.6+10/.github/actions/get-gtest/action.yml --- openjdk-17-17.0.4+8/.github/actions/get-gtest/action.yml 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/.github/actions/get-gtest/action.yml 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,54 @@ +# +# Copyright (c) 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +name: 'Get GTest' +description: 'Download GTest source' +outputs: + path: + description: 'Path to the installed GTest' + value: ${{ steps.path-name.outputs.path }} + +runs: + using: composite + steps: + - name: 'Get GTest version configuration' + id: version + uses: ./.github/actions/config + with: + var: GTEST_VERSION + + - name: 'Checkout GTest source' + uses: actions/checkout@v3 + with: + repository: google/googletest + ref: 'release-${{ steps.version.outputs.value }}' + path: gtest + + - name: 'Export path to where GTest is installed' + id: path-name + run: | + # Export the path + echo 'path=gtest' >> $GITHUB_OUTPUT + shell: bash diff -Nru openjdk-17-17.0.4+8/.github/actions/get-jtreg/action.yml openjdk-17-17.0.6+10/.github/actions/get-jtreg/action.yml --- openjdk-17-17.0.4+8/.github/actions/get-jtreg/action.yml 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/.github/actions/get-jtreg/action.yml 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,72 @@ +# +# Copyright (c) 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +name: 'Get JTReg' +description: 'Download JTReg from cache or source location' +outputs: + path: + description: 'Path to the installed JTReg' + value: ${{ steps.path-name.outputs.path }} + +runs: + using: composite + steps: + - name: 'Get JTReg version configuration' + id: version + uses: ./.github/actions/config + with: + var: JTREG_VERSION + + - name: 'Check cache for JTReg' + id: get-cached-jtreg + uses: actions/cache@v3 + with: + path: jtreg/installed + key: jtreg-${{ steps.version.outputs.value }} + + - name: 'Checkout the JTReg source' + uses: actions/checkout@v3 + with: + repository: openjdk/jtreg + ref: jtreg-${{ steps.version.outputs.value }} + path: jtreg/src + if: steps.get-cached-jtreg.outputs.cache-hit != 'true' + + - name: 'Build JTReg' + run: | + # Build JTReg and move files to the proper locations + bash make/build.sh --jdk "$JAVA_HOME_11_X64" + mkdir ../installed + mv build/images/jtreg/* ../installed + working-directory: jtreg/src + shell: bash + if: steps.get-cached-jtreg.outputs.cache-hit != 'true' + + - name: 'Export path to where JTReg is installed' + id: path-name + run: | + # Export the path + echo 'path=jtreg/installed' >> $GITHUB_OUTPUT + shell: bash diff -Nru openjdk-17-17.0.4+8/.github/actions/get-msys2/action.yml openjdk-17-17.0.6+10/.github/actions/get-msys2/action.yml --- openjdk-17-17.0.4+8/.github/actions/get-msys2/action.yml 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/.github/actions/get-msys2/action.yml 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,44 @@ +# +# Copyright (c) 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +name: 'Get MSYS2' +description: 'Download MSYS2 and prepare a Windows host' + +runs: + using: composite + steps: + - name: 'Install MSYS2' + uses: msys2/setup-msys2@v2 + with: + install: 'autoconf tar unzip zip make' + path-type: minimal + location: msys2 + + # We can't run bash until this is completed, so stick with pwsh + - name: 'Set MSYS2 path' + run: | + # Prepend msys2/msys64/usr/bin to the PATH + echo "$env:GITHUB_WORKSPACE/msys2/msys64/usr/bin" >> $env:GITHUB_PATH + shell: pwsh diff -Nru openjdk-17-17.0.4+8/.github/actions/upload-bundles/action.yml openjdk-17-17.0.6+10/.github/actions/upload-bundles/action.yml --- openjdk-17-17.0.4+8/.github/actions/upload-bundles/action.yml 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/.github/actions/upload-bundles/action.yml 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,77 @@ +# +# Copyright (c) 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +name: 'Upload bundles' +description: 'Upload resulting JDK bundles' +inputs: + platform: + description: 'Platform name' + required: true + debug-suffix: + description: 'File name suffix denoting debug level, possibly empty' + required: false + +runs: + using: composite + steps: + + - name: 'Determine bundle names' + id: bundles + run: | + # Rename bundles to consistent names + jdk_bundle_zip="$(ls build/*/bundles/jdk-*_bin${{ inputs.debug-suffix }}.zip 2> /dev/null || true)" + jdk_bundle_tar_gz="$(ls build/*/bundles/jdk-*_bin${{ inputs.debug-suffix }}.tar.gz 2> /dev/null || true)" + symbols_bundle="$(ls build/*/bundles/jdk-*_bin${{ inputs.debug-suffix }}-symbols.tar.gz 2> /dev/null || true)" + tests_bundle="$(ls build/*/bundles/jdk-*_bin-tests${{ inputs.debug-suffix }}.tar.gz 2> /dev/null || true)" + + mkdir bundles + + if [[ "$jdk_bundle_zip" != "" ]]; then + mv "$jdk_bundle_zip" "bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}.zip" + fi + if [[ "$jdk_bundle_tar_gz" != "" ]]; then + mv "$jdk_bundle_tar_gz" "bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz" + fi + if [[ "$symbols_bundle" != "" ]]; then + mv "$symbols_bundle" "bundles/symbols-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz" + fi + if [[ "$tests_bundle" != "" ]]; then + mv "$tests_bundle" "bundles/tests-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz" + fi + + if [[ "$jdk_bundle_zip$jdk_bundle_tar_gz$symbols_bundle$tests_bundle" != "" ]]; then + echo 'bundles-found=true' >> $GITHUB_OUTPUT + else + echo 'bundles-found=false' >> $GITHUB_OUTPUT + fi + shell: bash + + - name: 'Upload bundles artifact' + uses: actions/upload-artifact@v3 + with: + name: bundles-${{ inputs.platform }}${{ inputs.debug-suffix }} + path: bundles + retention-days: 1 + if: steps.bundles.outputs.bundles-found == 'true' diff -Nru openjdk-17-17.0.4+8/.github/scripts/gen-build-failure-report.sh openjdk-17-17.0.6+10/.github/scripts/gen-build-failure-report.sh --- openjdk-17-17.0.4+8/.github/scripts/gen-build-failure-report.sh 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/.github/scripts/gen-build-failure-report.sh 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,51 @@ +#!/bin/bash +# +# Copyright (c) 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +GITHUB_STEP_SUMMARY="$1" +BUILD_DIR="$(ls -d build/*)" + +# Send signal to the do-build action that we failed +touch "$BUILD_DIR/build-failure" + +( + echo '### :boom: Build failure summary' + echo '' + echo 'The build failed. Here follows the failure summary from the build.' + echo '
View build failure summary' + echo '' + echo '```' + if [[ -f "$BUILD_DIR/make-support/failure-summary.log" ]]; then + cat "$BUILD_DIR/make-support/failure-summary.log" + else + echo "Failure summary ($BUILD_DIR/make-support/failure-summary.log) not found" + fi + echo '```' + echo '
' + echo '' + + echo '' + echo ':arrow_right: To see the entire test log, click the job in the list to the left. To download logs, see the `failure-logs` [artifact above](#artifacts).' +) >> $GITHUB_STEP_SUMMARY diff -Nru openjdk-17-17.0.4+8/.github/scripts/gen-test-results.sh openjdk-17-17.0.6+10/.github/scripts/gen-test-results.sh --- openjdk-17-17.0.4+8/.github/scripts/gen-test-results.sh 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/.github/scripts/gen-test-results.sh 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,92 @@ +#!/bin/bash +# +# Copyright (c) 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +GITHUB_STEP_SUMMARY="$1" + +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 -e 's/(.*)\.(java|sh)/\1/' -e '/^#/d' $results_dir/newfailures.txt 2> /dev/null || true) +errors=$(sed -E -e 's/(.*)\.(java|sh)/\1/' -e '/^#/d' $results_dir/other_errors.txt 2> /dev/null || 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=$(ls $report_dir/$base_path/hs_err*.log 2> /dev/null || true) + echo "#### $test" + + echo '
View test results' + echo '' + echo '```' + if [[ -f "$report_file" ]]; then + cat "$report_file" + else + echo "Error: Result file $report_file not found" + fi + echo '```' + echo '
' + echo '' + + if [[ "$hs_err_files" != "" ]]; then + echo '
View HotSpot error log' + echo '' + for hs_err in $hs_err_files; do + echo '```' + echo "$hs_err:" + echo '' + cat "$hs_err" + echo '```' + done + + echo '
' + echo '' + fi + +done >> $GITHUB_STEP_SUMMARY + +# With many failures, the summary can easily exceed 1024 kB, the limit set by Github +# Trim it down if so. +summary_size=$(wc -c < $GITHUB_STEP_SUMMARY) +if [[ $summary_size -gt 1000000 ]]; then + # Trim to below 1024 kB, and cut off after the last detail group + head -c 1000000 $GITHUB_STEP_SUMMARY | tac | sed -n -e '/<\/details>/,$ p' | tac > $GITHUB_STEP_SUMMARY.tmp + mv $GITHUB_STEP_SUMMARY.tmp $GITHUB_STEP_SUMMARY + ( + echo '' + echo ':x: **WARNING: Summary is too large and has been truncated.**' + echo '' + ) >> $GITHUB_STEP_SUMMARY +fi + +echo ':arrow_right: To see the entire test log, click the job in the list to the left.' >> $GITHUB_STEP_SUMMARY diff -Nru openjdk-17-17.0.4+8/.github/scripts/gen-test-summary.sh openjdk-17-17.0.6+10/.github/scripts/gen-test-summary.sh --- openjdk-17-17.0.4+8/.github/scripts/gen-test-summary.sh 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/.github/scripts/gen-test-summary.sh 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,70 @@ +#!/bin/bash +# +# Copyright (c) 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +GITHUB_STEP_SUMMARY="$1" +GITHUB_OUTPUT="$2" + +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 + +if [[ ! -f build/run-test-prebuilt/make-support/exit-with-error ]]; then + # There were no failures, exit now + exit +fi + +failures=$(sed -E -e 's/(.*)\.(java|sh)/\1/' -e '/^#/d' $results_dir/newfailures.txt 2> /dev/null || true) +errors=$(sed -E -e 's/(.*)\.(java|sh)/\1/' -e '/^#/d' $results_dir/other_errors.txt 2> /dev/null || true) +failure_count=$(echo $failures | wc -w || true) +error_count=$(echo $errors | wc -w || true) + +if [[ "$failures" = "" && "$errors" = "" ]]; then + # We know something went wrong, but not what + echo 'error-message=Unspecified test suite failure. Please see log for job for details.' >> $GITHUB_OUTPUT + exit 0 +fi + +echo 'failure=true' >> $GITHUB_OUTPUT +echo "error-message=Test run reported $failure_count test failure(s) and $error_count error(s). See summary for details." >> $GITHUB_OUTPUT + +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 diff -Nru openjdk-17-17.0.4+8/.github/workflows/build-cross-compile.yml openjdk-17-17.0.6+10/.github/workflows/build-cross-compile.yml --- openjdk-17-17.0.4+8/.github/workflows/build-cross-compile.yml 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/.github/workflows/build-cross-compile.yml 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,154 @@ +# +# Copyright (c) 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +name: 'Build (cross-compile)' + +on: + workflow_call: + inputs: + gcc-major-version: + required: false + type: string + default: '10' + apt-gcc-version: + required: false + type: string + default: '10.3.0-1ubuntu1~20.04' + apt-gcc-cross-suffix: + required: false + type: string + default: 'cross1' + +jobs: + build-cross-compile: + name: build + runs-on: ubuntu-20.04 + + strategy: + fail-fast: false + matrix: + target-cpu: + - aarch64 + - arm + - s390x + - ppc64le + include: + - target-cpu: aarch64 + debian-arch: arm64 + gnu-arch: aarch64 + - target-cpu: arm + debian-arch: armhf + gnu-arch: arm + gnu-abi: eabihf + - target-cpu: s390x + debian-arch: s390x + gnu-arch: s390x + - target-cpu: ppc64le + debian-arch: ppc64el + gnu-arch: powerpc64le + + steps: + - name: 'Checkout the JDK source' + uses: actions/checkout@v3 + + - name: 'Get the BootJDK' + id: bootjdk + uses: ./.github/actions/get-bootjdk + with: + platform: linux-x64 + + # Use linux-x64 JDK bundle as build JDK + - name: 'Get build JDK' + id: buildjdk + uses: ./.github/actions/get-bundles + with: + platform: linux-x64 + + # Upgrading apt to solve libc6 installation bugs, see JDK-8260460. + - name: 'Install toolchain and dependencies' + run: | + # Install dependencies using apt-get + sudo apt-get update + sudo apt-get install --only-upgrade apt + sudo apt-get install \ + gcc-${{ inputs.gcc-major-version }}=${{ inputs.apt-gcc-version }} \ + g++-${{ inputs.gcc-major-version }}=${{ inputs.apt-gcc-version }} \ + gcc-${{ inputs.gcc-major-version }}-${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-abi}}=${{ inputs.apt-gcc-version }}${{ inputs.apt-gcc-cross-suffix }} \ + g++-${{ inputs.gcc-major-version }}-${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-abi}}=${{ inputs.apt-gcc-version }}${{ inputs.apt-gcc-cross-suffix }} \ + libxrandr-dev libxtst-dev libcups2-dev libasound2-dev + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{ inputs.gcc-major-version }} 100 --slave /usr/bin/g++ g++ /usr/bin/g++-${{ inputs.gcc-major-version }} + + - name: 'Check cache for sysroot' + id: get-cached-sysroot + uses: actions/cache@v3 + with: + path: sysroot + key: sysroot-${{ matrix.debian-arch }}-${{ hashFiles('./.github/workflows/build-cross-compile.yml') }} + + - name: 'Install sysroot dependencies' + run: sudo apt-get install debootstrap qemu-user-static + if: steps.get-cached-sysroot.outputs.cache-hit != 'true' + + - name: 'Create sysroot' + run: > + sudo qemu-debootstrap + --arch=${{ matrix.debian-arch }} + --verbose + --include=fakeroot,symlinks,build-essential,libx11-dev,libxext-dev,libxrender-dev,libxrandr-dev,libxtst-dev,libxt-dev,libcups2-dev,libfontconfig1-dev,libasound2-dev,libfreetype6-dev,libpng-dev + --resolve-deps + buster + sysroot + https://httpredir.debian.org/debian/ + if: steps.get-cached-sysroot.outputs.cache-hit != 'true' + + - name: 'Prepare sysroot' + run: | + # Prepare sysroot and remove unused files to minimize cache + sudo chroot sysroot symlinks -cr . + sudo chown ${USER} -R sysroot + rm -rf sysroot/{dev,proc,run,sys} + if: steps.get-cached-sysroot.outputs.cache-hit != 'true' + + - name: 'Configure' + run: > + bash configure + --with-conf-name=linux-${{ matrix.target-cpu }} + --with-version-opt=${GITHUB_ACTOR}-${GITHUB_SHA} + --with-boot-jdk=${{ steps.bootjdk.outputs.path }} + --with-zlib=system + --enable-debug + --disable-precompiled-headers + --openjdk-target=${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-abi}} + --with-sysroot=sysroot + --with-build-jdk=${{ steps.buildjdk.outputs.jdk-path }} + CC=${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-abi}}-gcc-10 + CXX=${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-abi}}-g++-10 + + - name: 'Build' + id: build + uses: ./.github/actions/do-build + with: + make-target: 'hotspot' + platform: linux-${{ matrix.target-cpu }} diff -Nru openjdk-17-17.0.4+8/.github/workflows/build-linux.yml openjdk-17-17.0.6+10/.github/workflows/build-linux.yml --- openjdk-17-17.0.4+8/.github/workflows/build-linux.yml 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/.github/workflows/build-linux.yml 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,132 @@ +# +# Copyright (c) 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +name: 'Build (linux)' + +on: + workflow_call: + inputs: + platform: + required: true + type: string + extra-conf-options: + required: false + type: string + make-target: + required: false + type: string + default: 'product-bundles test-bundles' + debug-levels: + required: false + type: string + default: '[ "debug", "release" ]' + apt-gcc-version: + required: true + type: string + apt-architecture: + required: false + type: string + apt-extra-packages: + required: false + type: string + +jobs: + build-linux: + name: build + runs-on: ubuntu-20.04 + + strategy: + fail-fast: false + matrix: + debug-level: ${{ fromJSON(inputs.debug-levels) }} + include: + - debug-level: debug + flags: --with-debug-level=fastdebug + suffix: -debug + + steps: + - name: 'Checkout the JDK source' + uses: actions/checkout@v3 + + - name: 'Get the BootJDK' + id: bootjdk + uses: ./.github/actions/get-bootjdk + with: + platform: linux-x64 + + - name: 'Get JTReg' + id: jtreg + uses: ./.github/actions/get-jtreg + + - name: 'Get GTest' + id: gtest + uses: ./.github/actions/get-gtest + + - name: 'Set architecture' + id: arch + run: | + # Set a proper suffix for packages if using a different architecture + if [[ '${{ inputs.apt-architecture }}' != '' ]]; then + echo 'suffix=:${{ inputs.apt-architecture }}' >> $GITHUB_OUTPUT + fi + + # Upgrading apt to solve libc6 installation bugs, see JDK-8260460. + - name: 'Install toolchain and dependencies' + run: | + # Install dependencies using apt-get + if [[ '${{ inputs.apt-architecture }}' != '' ]]; then + sudo dpkg --add-architecture ${{ inputs.apt-architecture }} + fi + sudo apt-get update + sudo apt-get install --only-upgrade apt + sudo apt-get install gcc-${{ inputs.apt-gcc-version }} g++-${{ inputs.apt-gcc-version }} libxrandr-dev${{ steps.arch.outputs.suffix }} libxtst-dev${{ steps.arch.outputs.suffix }} libcups2-dev${{ steps.arch.outputs.suffix }} libasound2-dev${{ steps.arch.outputs.suffix }} ${{ inputs.apt-extra-packages }} + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 + + - name: 'Configure' + run: > + bash configure + --with-conf-name=${{ inputs.platform }} + ${{ matrix.flags }} + --with-version-opt=${GITHUB_ACTOR}-${GITHUB_SHA} + --with-boot-jdk=${{ steps.bootjdk.outputs.path }} + --with-jtreg=${{ steps.jtreg.outputs.path }} + --with-gtest=${{ steps.gtest.outputs.path }} + --enable-jtreg-failure-handler + --with-zlib=system + ${{ inputs.extra-conf-options }} + + - name: 'Build' + id: build + uses: ./.github/actions/do-build + with: + make-target: '${{ inputs.make-target }}' + platform: ${{ inputs.platform }} + debug-suffix: '${{ matrix.suffix }}' + + - name: 'Upload bundles' + uses: ./.github/actions/upload-bundles + with: + platform: ${{ inputs.platform }} + debug-suffix: '${{ matrix.suffix }}' diff -Nru openjdk-17-17.0.4+8/.github/workflows/build-macos.yml openjdk-17-17.0.6+10/.github/workflows/build-macos.yml --- openjdk-17-17.0.4+8/.github/workflows/build-macos.yml 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/.github/workflows/build-macos.yml 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,114 @@ +# +# Copyright (c) 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +name: 'Build (macos)' + +on: + workflow_call: + inputs: + platform: + required: true + type: string + extra-conf-options: + required: false + type: string + make-target: + required: false + type: string + default: 'product-bundles test-bundles' + debug-levels: + required: false + type: string + default: '[ "debug", "release" ]' + xcode-toolset-version: + required: true + type: string + +jobs: + build-macos: + name: build + runs-on: macos-11 + + strategy: + fail-fast: false + matrix: + debug-level: ${{ fromJSON(inputs.debug-levels) }} + include: + - debug-level: debug + flags: --with-debug-level=fastdebug + suffix: -debug + + steps: + - name: 'Checkout the JDK source' + uses: actions/checkout@v3 + + - name: 'Get the BootJDK' + id: bootjdk + uses: ./.github/actions/get-bootjdk + with: + platform: macos-x64 + + - name: 'Get JTReg' + id: jtreg + uses: ./.github/actions/get-jtreg + + - name: 'Get GTest' + id: gtest + uses: ./.github/actions/get-gtest + + - name: 'Install toolchain and dependencies' + run: | + # Run Homebrew installation and xcode-select + brew install make + sudo xcode-select --switch /Applications/Xcode_${{ inputs.xcode-toolset-version }}.app/Contents/Developer + # This will make GNU make available as 'make' and not only as 'gmake' + echo '/usr/local/opt/make/libexec/gnubin' >> $GITHUB_PATH + + - name: 'Configure' + run: > + bash configure + --with-conf-name=${{ inputs.platform }} + ${{ matrix.flags }} + --with-version-opt=${GITHUB_ACTOR}-${GITHUB_SHA} + --with-boot-jdk=${{ steps.bootjdk.outputs.path }} + --with-jtreg=${{ steps.jtreg.outputs.path }} + --with-gtest=${{ steps.gtest.outputs.path }} + --enable-jtreg-failure-handler + --with-zlib=system + ${{ inputs.extra-conf-options }} + + - name: 'Build' + id: build + uses: ./.github/actions/do-build + with: + make-target: '${{ inputs.make-target }}' + platform: ${{ inputs.platform }} + debug-suffix: '${{ matrix.suffix }}' + + - name: 'Upload bundles' + uses: ./.github/actions/upload-bundles + with: + platform: ${{ inputs.platform }} + debug-suffix: '${{ matrix.suffix }}' diff -Nru openjdk-17-17.0.4+8/.github/workflows/build-windows.yml openjdk-17-17.0.6+10/.github/workflows/build-windows.yml --- openjdk-17-17.0.4+8/.github/workflows/build-windows.yml 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/.github/workflows/build-windows.yml 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,131 @@ +# +# Copyright (c) 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +name: 'Build (windows)' + +on: + workflow_call: + inputs: + platform: + required: true + type: string + extra-conf-options: + required: false + type: string + make-target: + required: false + type: string + default: 'product-bundles test-bundles' + debug-levels: + required: false + type: string + default: '[ "debug", "release" ]' + msvc-toolset-version: + required: true + type: string + msvc-toolset-architecture: + required: true + type: string + +env: + # These are needed to make the MSYS2 bash work properly + MSYS2_PATH_TYPE: minimal + CHERE_INVOKING: 1 + +jobs: + build-windows: + name: build + runs-on: windows-2019 + defaults: + run: + shell: bash + + strategy: + fail-fast: false + matrix: + debug-level: ${{ fromJSON(inputs.debug-levels) }} + include: + - debug-level: debug + flags: --with-debug-level=fastdebug + suffix: -debug + + steps: + - name: 'Checkout the JDK source' + uses: actions/checkout@v3 + + - name: 'Get MSYS2' + uses: ./.github/actions/get-msys2 + + - name: 'Get the BootJDK' + id: bootjdk + uses: ./.github/actions/get-bootjdk + with: + platform: windows-x64 + + - name: 'Get JTReg' + id: jtreg + uses: ./.github/actions/get-jtreg + + - name: 'Get GTest' + id: gtest + uses: ./.github/actions/get-gtest + + - name: 'Install toolchain and dependencies' + run: | + # Run Visual Studio Installer + '/c/Program Files (x86)/Microsoft Visual Studio/Installer/vs_installer.exe' \ + modify --quiet --installPath 'C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise' \ + --add Microsoft.VisualStudio.Component.VC.${{ inputs.msvc-toolset-version }}.${{ inputs.msvc-toolset-architecture }} + + - name: 'Configure' + run: > + bash configure + --with-conf-name=${{ inputs.platform }} + ${{ matrix.flags }} + --with-version-opt=${GITHUB_ACTOR}-${GITHUB_SHA} + --with-boot-jdk=${{ steps.bootjdk.outputs.path }} + --with-jtreg=${{ steps.jtreg.outputs.path }} + --with-gtest=${{ steps.gtest.outputs.path }} + --enable-jtreg-failure-handler + --with-msvc-toolset-version=${{ inputs.msvc-toolset-version }} + ${{ inputs.extra-conf-options }} + env: + # We need a minimal PATH on Windows + # Set PATH to "", so just GITHUB_PATH is included + PATH: '' + + - name: 'Build' + id: build + uses: ./.github/actions/do-build + with: + make-target: '${{ inputs.make-target }}' + platform: ${{ inputs.platform }} + debug-suffix: '${{ matrix.suffix }}' + + - name: 'Upload bundles' + uses: ./.github/actions/upload-bundles + with: + platform: ${{ inputs.platform }} + debug-suffix: '${{ matrix.suffix }}' diff -Nru openjdk-17-17.0.4+8/.github/workflows/main.yml openjdk-17-17.0.6+10/.github/workflows/main.yml --- openjdk-17-17.0.4+8/.github/workflows/main.yml 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/.github/workflows/main.yml 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,331 @@ +# +# Copyright (c) 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +name: 'OpenJDK GHA Sanity Checks' + +on: + push: + branches-ignore: + - master + - pr/* + workflow_dispatch: + inputs: + platforms: + description: 'Platform(s) to execute on (comma separated, e.g. "linux-x64, macos, aarch64")' + required: true + default: 'linux-x64, linux-x86, linux-x64-variants, linux-cross-compile, macos-x64, macos-aarch64, windows-x64, windows-aarch64' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + + ### + ### Determine platforms to include + ### + + select: + name: 'Select platforms' + runs-on: ubuntu-20.04 + outputs: + linux-x64: ${{ steps.include.outputs.linux-x64 }} + linux-x86: ${{ steps.include.outputs.linux-x86 }} + linux-x64-variants: ${{ steps.include.outputs.linux-x64-variants }} + linux-cross-compile: ${{ steps.include.outputs.linux-cross-compile }} + macos-x64: ${{ steps.include.outputs.macos-x64 }} + macos-aarch64: ${{ steps.include.outputs.macos-aarch64 }} + windows-x64: ${{ steps.include.outputs.windows-x64 }} + windows-aarch64: ${{ steps.include.outputs.windows-aarch64 }} + + steps: + # This function must be inlined in main.yml, or we'd be forced to checkout the repo + - name: 'Check what jobs to run' + id: include + run: | + # Determine which platform jobs to run + + # Returns 'true' if the input platform list matches any of the platform monikers given as argument, + # 'false' otherwise. + # arg $1: platform name or names to look for + function check_platform() { + if [[ '${{ !secrets.JDK_SUBMIT_FILTER || startsWith(github.ref, 'refs/heads/submit/') }}' == 'false' ]]; then + # If JDK_SUBMIT_FILTER is set, and this is not a "submit/" branch, don't run anything + echo 'false' + return + fi + + if [[ $GITHUB_EVENT_NAME == workflow_dispatch ]]; then + input='${{ github.event.inputs.platforms }}' + elif [[ $GITHUB_EVENT_NAME == push ]]; then + input='${{ secrets.JDK_SUBMIT_PLATFORMS }}' + else + echo 'Internal error in GHA' + exit 1 + fi + + normalized_input="$(echo ,$input, | tr -d ' ')" + if [[ "$normalized_input" == ",," ]]; then + # For an empty input, assume all platforms should run + echo 'true' + return + else + # Check for all acceptable platform names + for part in $* ; do + if echo "$normalized_input" | grep -q -e ",$part," ; then + echo 'true' + return + fi + done + fi + + echo 'false' + } + + echo "linux-x64=$(check_platform linux-x64 linux x64)" >> $GITHUB_OUTPUT + echo "linux-x86=$(check_platform linux-x86 linux x86)" >> $GITHUB_OUTPUT + echo "linux-x64-variants=$(check_platform linux-x64-variants variants)" >> $GITHUB_OUTPUT + echo "linux-cross-compile=$(check_platform linux-cross-compile cross-compile)" >> $GITHUB_OUTPUT + echo "macos-x64=$(check_platform macos-x64 macos x64)" >> $GITHUB_OUTPUT + echo "macos-aarch64=$(check_platform macos-aarch64 macos aarch64)" >> $GITHUB_OUTPUT + echo "windows-x64=$(check_platform windows-x64 windows x64)" >> $GITHUB_OUTPUT + echo "windows-aarch64=$(check_platform windows-aarch64 windows aarch64)" >> $GITHUB_OUTPUT + + ### + ### Build jobs + ### + + build-linux-x64: + name: linux-x64 + needs: select + uses: ./.github/workflows/build-linux.yml + with: + platform: linux-x64 + apt-gcc-version: '10=10.3.0-1ubuntu1~20.04' + # The linux-x64 jdk bundle is used as buildjdk for the cross-compile job + if: needs.select.outputs.linux-x64 == 'true' || needs.select.outputs.linux-cross-compile == 'true' + + build-linux-x86: + name: linux-x86 + needs: select + uses: ./.github/workflows/build-linux.yml + with: + platform: linux-x86 + apt-gcc-version: '10-multilib' + apt-architecture: 'i386' + # Some multilib libraries do not have proper inter-dependencies, so we have to + # install their dependencies manually. + apt-extra-packages: 'libfreetype6-dev:i386 libtiff-dev:i386 libcupsimage2-dev:i386' + extra-conf-options: '--with-target-bits=32' + if: needs.select.outputs.linux-x86 == 'true' + + build-linux-x64-hs-nopch: + name: linux-x64-hs-nopch + needs: select + uses: ./.github/workflows/build-linux.yml + with: + platform: linux-x64 + make-target: 'hotspot' + debug-levels: '[ "debug" ]' + apt-gcc-version: '10=10.3.0-1ubuntu1~20.04' + extra-conf-options: '--disable-precompiled-headers' + if: needs.select.outputs.linux-x64-variants == 'true' + + build-linux-x64-hs-zero: + name: linux-x64-hs-zero + needs: select + uses: ./.github/workflows/build-linux.yml + with: + platform: linux-x64 + make-target: 'hotspot' + debug-levels: '[ "debug" ]' + apt-gcc-version: '10=10.3.0-1ubuntu1~20.04' + extra-conf-options: '--with-jvm-variants=zero --disable-precompiled-headers' + if: needs.select.outputs.linux-x64-variants == 'true' + + build-linux-x64-hs-minimal: + name: linux-x64-hs-minimal + needs: select + uses: ./.github/workflows/build-linux.yml + with: + platform: linux-x64 + make-target: 'hotspot' + debug-levels: '[ "debug" ]' + apt-gcc-version: '10=10.3.0-1ubuntu1~20.04' + extra-conf-options: '--with-jvm-variants=minimal --disable-precompiled-headers' + if: needs.select.outputs.linux-x64-variants == 'true' + + build-linux-x64-hs-optimized: + name: linux-x64-hs-optimized + needs: select + uses: ./.github/workflows/build-linux.yml + with: + platform: linux-x64 + make-target: 'hotspot' + # Technically this is not the "debug" level, but we can't inject a new matrix state for just this job + debug-levels: '[ "debug" ]' + apt-gcc-version: '10=10.3.0-1ubuntu1~20.04' + extra-conf-options: '--with-debug-level=optimized --disable-precompiled-headers' + if: needs.select.outputs.linux-x64-variants == 'true' + + build-linux-cross-compile: + name: linux-cross-compile + needs: + - select + - build-linux-x64 + uses: ./.github/workflows/build-cross-compile.yml + if: needs.select.outputs.linux-cross-compile == 'true' + + build-macos-x64: + name: macos-x64 + needs: select + uses: ./.github/workflows/build-macos.yml + with: + platform: macos-x64 + xcode-toolset-version: '11.7' + if: needs.select.outputs.macos-x64 == 'true' + + build-macos-aarch64: + name: macos-aarch64 + needs: select + uses: ./.github/workflows/build-macos.yml + with: + platform: macos-aarch64 + xcode-toolset-version: '12.4' + extra-conf-options: '--openjdk-target=aarch64-apple-darwin' + if: needs.select.outputs.macos-aarch64 == 'true' + + build-windows-x64: + name: windows-x64 + needs: select + uses: ./.github/workflows/build-windows.yml + with: + platform: windows-x64 + msvc-toolset-version: '14.25' + msvc-toolset-architecture: 'x86.x64' + if: needs.select.outputs.windows-x64 == 'true' + + build-windows-aarch64: + name: windows-aarch64 + needs: select + uses: ./.github/workflows/build-windows.yml + with: + platform: windows-aarch64 + msvc-toolset-version: '14.29' + msvc-toolset-architecture: 'arm64' + make-target: 'hotspot' + extra-conf-options: '--openjdk-target=aarch64-unknown-cygwin' + if: needs.select.outputs.windows-aarch64 == 'true' + + ### + ### Test jobs + ### + + test-linux-x64: + name: linux-x64 + needs: + - build-linux-x64 + uses: ./.github/workflows/test.yml + with: + platform: linux-x64 + bootjdk-platform: linux-x64 + runs-on: ubuntu-20.04 + + test-linux-x86: + name: linux-x86 + needs: + - build-linux-x86 + uses: ./.github/workflows/test.yml + with: + platform: linux-x86 + bootjdk-platform: linux-x64 + runs-on: ubuntu-20.04 + + test-macos-x64: + name: macos-x64 + needs: + - build-macos-x64 + uses: ./.github/workflows/test.yml + with: + platform: macos-x64 + bootjdk-platform: macos-x64 + runs-on: macos-11 + + test-windows-x64: + name: windows-x64 + needs: + - build-windows-x64 + uses: ./.github/workflows/test.yml + with: + platform: windows-x64 + bootjdk-platform: windows-x64 + runs-on: windows-2019 + + # Remove bundles so they are not misconstrued as binary distributions from the JDK project + remove-bundles: + name: 'Remove bundle artifacts' + runs-on: ubuntu-20.04 + if: always() + needs: + - build-linux-x64 + - build-linux-x86 + - build-linux-x64-hs-nopch + - build-linux-x64-hs-zero + - build-linux-x64-hs-minimal + - build-linux-x64-hs-optimized + - build-linux-cross-compile + - build-macos-x64 + - build-macos-aarch64 + - build-windows-x64 + - build-windows-aarch64 + - test-linux-x64 + - test-linux-x86 + - test-macos-x64 + - test-windows-x64 + + steps: + # Hack to get hold of the api environment variables that are only defined for actions + - name: 'Get API configuration' + id: api + uses: actions/github-script@v6 + with: + script: 'return { url: process.env["ACTIONS_RUNTIME_URL"], token: process.env["ACTIONS_RUNTIME_TOKEN"] }' + + - name: 'Remove bundle artifacts' + run: | + # Find and remove all bundle artifacts + ALL_ARTIFACT_URLS="$(curl -s \ + -H 'Accept: application/json;api-version=6.0-preview' \ + -H 'Authorization: Bearer ${{ fromJson(steps.api.outputs.result).token }}' \ + '${{ fromJson(steps.api.outputs.result).url }}_apis/pipelines/workflows/${{ github.run_id }}/artifacts?api-version=6.0-preview')" + BUNDLE_ARTIFACT_URLS="$(echo "$ALL_ARTIFACT_URLS" | jq -r -c '.value | map(select(.name|startswith("bundles-"))) | .[].url')" + for url in $BUNDLE_ARTIFACT_URLS; do + echo "Removing $url" + curl -s \ + -H 'Accept: application/json;api-version=6.0-preview' \ + -H 'Authorization: Bearer ${{ fromJson(steps.api.outputs.result).token }}' \ + -X DELETE "$url" \ + || echo "Failed to remove bundle" + done diff -Nru openjdk-17-17.0.4+8/.github/workflows/test.yml openjdk-17-17.0.6+10/.github/workflows/test.yml --- openjdk-17-17.0.4+8/.github/workflows/test.yml 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/.github/workflows/test.yml 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,205 @@ +# +# Copyright (c) 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +name: 'Run tests' + +on: + workflow_call: + inputs: + platform: + required: true + type: string + bootjdk-platform: + required: true + type: string + runs-on: + required: true + type: string + +env: + # These are needed to make the MSYS2 bash work properly + MSYS2_PATH_TYPE: minimal + CHERE_INVOKING: 1 + +jobs: + test: + name: test + runs-on: ${{ inputs.runs-on }} + defaults: + run: + shell: bash + + strategy: + fail-fast: false + matrix: + test-name: + - 'jdk/tier1 part 1' + - 'jdk/tier1 part 2' + - 'jdk/tier1 part 3' + - 'langtools/tier1' + - 'hs/tier1 common' + - 'hs/tier1 compiler' + - 'hs/tier1 gc' + - 'hs/tier1 runtime' + - 'hs/tier1 serviceability' + + include: + - test-name: 'jdk/tier1 part 1' + test-suite: 'test/jdk/:tier1_part1' + + - test-name: 'jdk/tier1 part 2' + test-suite: 'test/jdk/:tier1_part2' + + - test-name: 'jdk/tier1 part 3' + test-suite: 'test/jdk/:tier1_part3' + + - test-name: 'langtools/tier1' + test-suite: 'test/langtools/:tier1' + + - test-name: 'hs/tier1 common' + test-suite: 'test/hotspot/jtreg/:tier1_common' + debug-suffix: -debug + + - test-name: 'hs/tier1 compiler' + test-suite: 'test/hotspot/jtreg/:tier1_compiler' + debug-suffix: -debug + + - test-name: 'hs/tier1 gc' + test-suite: 'test/hotspot/jtreg/:tier1_gc' + debug-suffix: -debug + + - test-name: 'hs/tier1 runtime' + test-suite: 'test/hotspot/jtreg/:tier1_runtime' + debug-suffix: -debug + + - test-name: 'hs/tier1 serviceability' + test-suite: 'test/hotspot/jtreg/:tier1_serviceability' + debug-suffix: -debug + + steps: + - name: 'Checkout the JDK source' + uses: actions/checkout@v3 + + - name: 'Get MSYS2' + uses: ./.github/actions/get-msys2 + if: runner.os == 'Windows' + + - name: 'Get the BootJDK' + id: bootjdk + uses: ./.github/actions/get-bootjdk + with: + platform: ${{ inputs.bootjdk-platform }} + + - name: 'Get JTReg' + id: jtreg + uses: ./.github/actions/get-jtreg + + - name: 'Get bundles' + id: bundles + uses: ./.github/actions/get-bundles + with: + platform: ${{ inputs.platform }} + debug-suffix: ${{ matrix.debug-suffix }} + + - name: 'Install dependencies' + run: | + # On macOS we need to install some dependencies for testing + brew install make + sudo xcode-select --switch /Applications/Xcode_11.7.app/Contents/Developer + # This will make GNU make available as 'make' and not only as 'gmake' + echo '/usr/local/opt/make/libexec/gnubin' >> $GITHUB_PATH + if: runner.os == 'macOS' + + - name: 'Set PATH' + id: path + run: | + # We need a minimal PATH on Windows + # Set PATH to "", so just GITHUB_PATH is included + if [[ '${{ runner.os }}' == 'Windows' ]]; then + echo "value=" >> $GITHUB_OUTPUT + else + echo "value=$PATH" >> $GITHUB_OUTPUT + fi + + - name: 'Run tests' + id: run-tests + run: > + make test-prebuilt + TEST='${{ matrix.test-suite }}' + BOOT_JDK=${{ steps.bootjdk.outputs.path }} + JT_HOME=${{ steps.jtreg.outputs.path }} + JDK_IMAGE_DIR=${{ steps.bundles.outputs.jdk-path }} + SYMBOLS_IMAGE_DIR=${{ steps.bundles.outputs.symbols-path }} + TEST_IMAGE_DIR=${{ steps.bundles.outputs.tests-path }} + JTREG='JAVA_OPTIONS=-XX:-CreateCoredumpOnCrash;VERBOSE=fail,error,time;KEYWORDS=!headful' + && bash ./.github/scripts/gen-test-summary.sh "$GITHUB_STEP_SUMMARY" "$GITHUB_OUTPUT" + env: + PATH: ${{ steps.path.outputs.value }} + + # This is a separate step, since if the markdown from a step gets bigger than + # 1024 kB it is skipped, but then the short summary above is still generated + - name: 'Generate test report' + run: bash ./.github/scripts/gen-test-results.sh "$GITHUB_STEP_SUMMARY" + if: always() + + - name: 'Package test results' + id: package + run: | + # Package test-results and relevant parts of test-support + mkdir results + + if [[ -d build/run-test-prebuilt/test-results ]]; then + cd build/run-test-prebuilt/test-results/ + zip -r -9 "$GITHUB_WORKSPACE/results/test-results.zip" . + cd $GITHUB_WORKSPACE + else + echo '::warning ::Missing test-results directory' + fi + + if [[ -d build/run-test-prebuilt/test-support ]]; then + cd build/run-test-prebuilt/test-support/ + zip -r -9 "$GITHUB_WORKSPACE/results/test-support.zip" . -i *.jtr -i */hs_err*.log -i */replay*.log + cd $GITHUB_WORKSPACE + else + echo '::warning ::Missing test-support directory' + fi + + artifact_name="results-${{ inputs.platform }}-$(echo ${{ matrix.test-name }} | tr '/ ' '__')" + echo "artifact-name=$artifact_name" >> $GITHUB_OUTPUT + if: always() + + - name: 'Upload test results' + uses: actions/upload-artifact@v3 + with: + path: results + name: ${{ steps.package.outputs.artifact-name }} + if: always() + + # This is the best way I found to abort the job with an error message + - name: 'Notify about test failures' + uses: actions/github-script@v6 + with: + script: core.setFailed('${{ steps.run-tests.outputs.error-message }}') + if: steps.run-tests.outputs.failure == 'true' diff -Nru openjdk-17-17.0.4+8/.gitignore openjdk-17-17.0.6+10/.gitignore --- openjdk-17-17.0.4+8/.gitignore 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/.gitignore 2023-01-10 13:21:55.000000000 +0000 @@ -16,3 +16,5 @@ **/JTreport/** **/JTwork/** /src/utils/LogCompilation/target/ +/.project/ +/.settings/ diff -Nru openjdk-17-17.0.4+8/.jcheck/conf openjdk-17-17.0.6+10/.jcheck/conf --- openjdk-17-17.0.4+8/.jcheck/conf 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/.jcheck/conf 2023-01-10 13:21:55.000000000 +0000 @@ -1,7 +1,7 @@ [general] project=jdk-updates jbs=JDK -version=17.0.4 +version=17.0.6 [checks] error=author,committer,reviewers,merge,issues,executable,symlink,message,hg-tag,whitespace,problemlists diff -Nru openjdk-17-17.0.4+8/debian/changelog openjdk-17-17.0.6+10/debian/changelog --- openjdk-17-17.0.4+8/debian/changelog 2022-07-22 21:02:00.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/changelog 2023-01-28 17:56:00.000000000 +0000 @@ -1,12 +1,63 @@ -openjdk-17 (17.0.4+8-1~deb11u1) bullseye-security; urgency=medium +openjdk-17 (17.0.6+10-1~deb11u1) bullseye-security; urgency=medium * Rebuild for bullseye - -- Moritz Muehlenhoff Fri, 22 Jul 2022 23:02:00 +0200 + -- Moritz Muehlenhoff Sat, 28 Jan 2023 18:56:00 +0100 + +openjdk-17 (17.0.6+10-1) unstable; urgency=high + + * OpenJDK 17.0.6 release, build 10. + - CVE-2023-21835, CVE-2023-21843 + - Release notes: + https://www.oracle.com/java/technologies/javase/17-0-6-relnotes.html + + [ Vladimir Petko ] + * debian/patches/*: Refresh patches for the new release and drop unused + patches. + * debian/rules: add lunar to jtreg version selection. + + -- Matthias Klose Thu, 26 Jan 2023 11:36:16 +0100 + +openjdk-17 (17.0.5+8-2) unstable; urgency=medium + + * Fix the binary-indep only build. + + -- Matthias Klose Wed, 19 Oct 2022 16:23:50 +0200 + +openjdk-17 (17.0.5+8-1) unstable; urgency=high + + * OpenJDK 17.0.5+8 (release). + * Security fixes + - JDK-8289366: Improve HTTP/2 client usage. + - JDK-8288508: Enhance ECDSA usage. + - JDK-8286918: Better HttpServer service. + - JDK-8287446: Enhance icon presentations. + - JDK-8286910: Improve JNDI lookups. + - JDK-8286511: Improve macro allocation. + - JDK-8286526: Improve NTLM support. + - JDK-8286533: Key X509 usages. + - JDK-8286077: Wider MultiByte conversions. + - JDK-8286519: Better memory handling. + - JDK-8285662: Better permission resolution. + - JDK-8282252: Improve BigInteger/Decimal validation. + * Build using GCC 12 in recent development distros. + + -- Matthias Klose Wed, 19 Oct 2022 06:59:58 +0200 openjdk-17 (17.0.4+8-1) unstable; urgency=high * OpenJDK 17.0.4+8 (release). + * Security fixes + - JDK-8272243: Improve DER parsing. + - JDK-8272249: Better properties of loaded Properties. + - JDK-8273056, JDK-8283875, CVE-2022-21549: java.util.random does not + correctly sample exponential or Gaussian distributions. + - JDK-8277608: Address IP Addressing. + - JDK-8281859, CVE-2022-21540: Improve class compilation. + - JDK-8281866, CVE-2022-21541: Enhance MethodHandle invocations. + - JDK-8283190: Improve MIDI processing. + - JDK-8284370: Improve zlib usage. + - JDK-8285407, CVE-2022-34169: Improve Xalan supports. * Disable the reproducible-copyright-headers patch. * Only try to re-run failed tests once instead of three times. diff -Nru openjdk-17-17.0.4+8/debian/patches/accessible-toolkit.diff openjdk-17-17.0.6+10/debian/patches/accessible-toolkit.diff --- openjdk-17-17.0.4+8/debian/patches/accessible-toolkit.diff 2015-06-16 09:38:27.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/accessible-toolkit.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ ---- a/jdk/src/share/classes/java/awt/Toolkit.java -+++ b/jdk/src/share/classes/java/awt/Toolkit.java -@@ -894,7 +894,11 @@ - return null; - } - }); -- loadAssistiveTechnologies(); -+ try { -+ loadAssistiveTechnologies(); -+ } catch ( AWTError error) { -+ // ignore silently -+ } - } finally { - // Make sure to always re-enable the JIT. - java.lang.Compiler.enable(); diff -Nru openjdk-17-17.0.4+8/debian/patches/adlc-parser.diff openjdk-17-17.0.6+10/debian/patches/adlc-parser.diff --- openjdk-17-17.0.4+8/debian/patches/adlc-parser.diff 2020-12-03 15:52:04.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/adlc-parser.diff 2023-01-18 04:17:28.000000000 +0000 @@ -1,11 +1,22 @@ # DP: fixes an uninitialized memory issue in adlc --- a/src/hotspot/share/adlc/formsopt.cpp +++ b/src/hotspot/share/adlc/formsopt.cpp -@@ -445,6 +445,7 @@ FrameForm::FrameForm() { +@@ -436,6 +436,10 @@ + //==============================Frame Handling================================= + //------------------------------FrameForm-------------------------------------- + FrameForm::FrameForm() { ++ _sync_stack_slots = NULL; ++ _inline_cache_reg = NULL; ++ _interpreter_frame_pointer_reg = NULL; ++ _cisc_spilling_operand_name = NULL; + _frame_pointer = NULL; + _c_frame_pointer = NULL; + _alignment = NULL; +@@ -444,7 +448,6 @@ + _varargs_C_out_slots_killed = NULL; _return_value = NULL; _c_return_value = NULL; - _interpreter_frame_pointer_reg = NULL; -+ _cisc_spilling_operand_name = NULL; +- _interpreter_frame_pointer_reg = NULL; } FrameForm::~FrameForm() { diff -Nru openjdk-17-17.0.4+8/debian/patches/default-jvm-cfg.diff openjdk-17-17.0.6+10/debian/patches/default-jvm-cfg.diff --- openjdk-17-17.0.4+8/debian/patches/default-jvm-cfg.diff 2022-05-02 18:22:39.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/default-jvm-cfg.diff 2023-01-17 22:36:38.000000000 +0000 @@ -1,6 +1,6 @@ --- a/src/java.base/share/native/libjli/java.c +++ b/src/java.base/share/native/libjli/java.c -@@ -2079,7 +2079,7 @@ jint +@@ -1997,7 +1997,7 @@ ReadKnownVMs(const char *jvmCfgName, jboolean speculative) { FILE *jvmCfg; @@ -9,7 +9,7 @@ int cnt = 0; int lineno = 0; jlong start = 0, end = 0; -@@ -2094,6 +2094,11 @@ ReadKnownVMs(const char *jvmCfgName, jbo +@@ -2012,6 +2012,11 @@ jvmCfg = fopen(jvmCfgName, "r"); if (jvmCfg == NULL) { diff -Nru openjdk-17-17.0.4+8/debian/patches/enumipv6-fix.diff openjdk-17-17.0.6+10/debian/patches/enumipv6-fix.diff --- openjdk-17-17.0.4+8/debian/patches/enumipv6-fix.diff 2015-06-16 09:38:27.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/enumipv6-fix.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ ---- openjdk/jdk/src/solaris/native/java/net/NetworkInterface.c~ 2012-02-15 09:26:50.000000000 +0100 -+++ openjdk/jdk/src/solaris/native/java/net/NetworkInterface.c 2012-02-26 14:13:22.602107361 +0100 -@@ -1105,7 +1105,7 @@ - uint8_t ipv6addr[16]; - - if ((f = fopen(_PATH_PROCNET_IFINET6, "r")) != NULL) { -- while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n", -+ while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %x %x %x %x %20s\n", - addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5], addr6p[6], addr6p[7], - &if_idx, &plen, &scope, &dad_status, devname) != EOF) { - diff -Nru openjdk-17-17.0.4+8/debian/patches/generated-headers.patch openjdk-17-17.0.6+10/debian/patches/generated-headers.patch --- openjdk-17-17.0.4+8/debian/patches/generated-headers.patch 2021-05-27 09:29:16.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/generated-headers.patch 2023-01-17 22:36:38.000000000 +0000 @@ -1,6 +1,6 @@ --- a/make/modules/java.desktop/lib/Awt2dLibraries.gmk +++ b/make/modules/java.desktop/lib/Awt2dLibraries.gmk -@@ -289,7 +289,7 @@ $(eval $(call SetupJdkLibrary, BUILD_LIB +@@ -290,7 +290,7 @@ INCLUDE_FILES := $(BUILD_LIBLCMS_INCLUDE_FILES), \ OPTIMIZATION := HIGHEST, \ CFLAGS := $(CFLAGS_JDKLIB) \ @@ -9,7 +9,7 @@ CFLAGS_windows := -DCMS_IS_WINDOWS_, \ EXTRA_HEADER_DIRS := \ common/awt/debug \ -@@ -337,7 +337,7 @@ $(eval $(call SetupJdkLibrary, BUILD_LIB +@@ -338,7 +338,7 @@ NAME := javajpeg, \ INCLUDE_FILES := $(BUILD_LIBJAVAJPEG_INCLUDE_FILES), \ OPTIMIZATION := HIGHEST, \ diff -Nru openjdk-17-17.0.4+8/debian/patches/hotspot-disable-exec-shield-workaround.diff openjdk-17-17.0.6+10/debian/patches/hotspot-disable-exec-shield-workaround.diff --- openjdk-17-17.0.4+8/debian/patches/hotspot-disable-exec-shield-workaround.diff 2021-05-27 09:29:10.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/hotspot-disable-exec-shield-workaround.diff 2023-01-17 22:36:38.000000000 +0000 @@ -1,6 +1,6 @@ --- a/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp +++ b/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp -@@ -635,7 +635,7 @@ void os::verify_stack_alignment() { +@@ -651,7 +651,7 @@ * updates (JDK-8023956). */ void os::workaround_expand_exec_shield_cs_limit() { diff -Nru openjdk-17-17.0.4+8/debian/patches/hotspot-disable-werror.diff openjdk-17-17.0.6+10/debian/patches/hotspot-disable-werror.diff --- openjdk-17-17.0.4+8/debian/patches/hotspot-disable-werror.diff 2017-11-19 13:58:26.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/hotspot-disable-werror.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ ---- a/src/hotspot/make/linux/makefiles/gcc.make -+++ b/src/hotspot/make/linux/makefiles/gcc.make -@@ -203,7 +203,7 @@ else - endif - - # Compiler warnings are treated as errors --WARNINGS_ARE_ERRORS ?= -Werror -Wno-error=format -+WARNINGS_ARE_ERRORS ?= - - ifeq ($(USE_CLANG), true) - # However we need to clean the code up before we can unrestrictedly enable this option with Clang diff -Nru openjdk-17-17.0.4+8/debian/patches/hotspot-set-compiler.diff openjdk-17-17.0.6+10/debian/patches/hotspot-set-compiler.diff --- openjdk-17-17.0.4+8/debian/patches/hotspot-set-compiler.diff 2017-11-19 13:58:26.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/hotspot-set-compiler.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ ---- a/src/hotspot/make/linux/makefiles/gcc.make -+++ b/src/hotspot/make/linux/makefiles/gcc.make -@@ -39,7 +39,7 @@ - ifeq ($(USE_CLANG), true) - CXX = clang++ - CC = clang -- else -+ else ifeq ($(CXX),) - CXX = g++ - CC = gcc - endif diff -Nru openjdk-17-17.0.4+8/debian/patches/hotspot-warn-no-errformat.diff openjdk-17-17.0.6+10/debian/patches/hotspot-warn-no-errformat.diff --- openjdk-17-17.0.4+8/debian/patches/hotspot-warn-no-errformat.diff 2017-11-19 13:58:26.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/hotspot-warn-no-errformat.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ ---- a/src/hotspot/make/solaris/makefiles/gcc.make -+++ b/src/hotspot/make/solaris/makefiles/gcc.make -@@ -117,7 +117,7 @@ endif - - - # Compiler warnings are treated as errors --WARNINGS_ARE_ERRORS ?= -Werror -+WARNINGS_ARE_ERRORS ?= -Werror -Wno-error=format - - # Enable these warnings. See 'info gcc' about details on these options - WARNING_FLAGS = -Wpointer-arith -Wconversion -Wsign-compare -Wundef -Wformat=2 ---- a/src/hotspot/make/linux/makefiles/gcc.make -+++ b/src/hotspot/make/linux/makefiles/gcc.make -@@ -203,7 +203,7 @@ else - endif - - # Compiler warnings are treated as errors --WARNINGS_ARE_ERRORS ?= -Werror -+WARNINGS_ARE_ERRORS ?= -Werror -Wno-error=format - - ifeq ($(USE_CLANG), true) - # However we need to clean the code up before we can unrestrictedly enable this option with Clang diff -Nru openjdk-17-17.0.4+8/debian/patches/include-all-srcs.diff openjdk-17-17.0.6+10/debian/patches/include-all-srcs.diff --- openjdk-17-17.0.4+8/debian/patches/include-all-srcs.diff 2017-11-19 13:58:26.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/include-all-srcs.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,54 +0,0 @@ ---- a/src/jdk/make/CreateJars.gmk -+++ b/src/jdk/make/CreateJars.gmk -@@ -569,38 +569,12 @@ - ########################################################################################## - - SRC_ZIP_INCLUDES = \ -- com/sun/corba \ -- com/sun/image/codec/jpeg \ -- com/sun/imageio \ -- com/sun/java_cup \ -- com/sun/javadoc \ -- com/sun/java/swing \ -- com/sun/jmx \ -- com/sun/naming \ -- com/sun/org/apache \ -- com/sun/security/auth \ -- com/sun/security/jgss \ -- com/sun/source \ -+ com \ - java \ -- javax/accessibility \ -- javax/annotation \ -- javax/imageio \ -- javax/lang \ -- javax/management \ -- javax/naming \ -- javax/print \ -- javax/rmi \ -- javax/script \ -- javax/security \ -- javax/sound \ -- javax/sql \ -- javax/swing \ -- javax/tools \ -- javax/xml \ -- org/ietf \ -- org/omg \ -- org/w3c/dom \ -- org/xml/sax \ -+ javax \ -+ jdk \ -+ org \ -+ sun \ - # - - SRC_ZIP_SRCS = $(JDK_TOPDIR)/src/share/classes $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/classes -@@ -632,7 +606,6 @@ - $(eval $(call SetupZipArchive,BUILD_SRC_ZIP, \ - SRC := $(SRC_ZIP_SRCS) $(IMAGES_OUTPUTDIR)/src, \ - INCLUDES := $(SRC_ZIP_INCLUDES) launcher, \ -- EXCLUDES := javax/swing/beaninfo, \ - SUFFIXES := .java .c .h, \ - ZIP := $(IMAGES_OUTPUTDIR)/src.zip, \ - EXTRA_DEPS := $(LAUNCHER_ZIP_SRC))) diff -Nru openjdk-17-17.0.4+8/debian/patches/java-access-bridge-security.diff openjdk-17-17.0.6+10/debian/patches/java-access-bridge-security.diff --- openjdk-17-17.0.4+8/debian/patches/java-access-bridge-security.diff 2015-06-16 09:38:27.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/java-access-bridge-security.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -# patch only used for builds with java-access-bridge support - ---- openjdk/jdk/src/share/lib/security/java.security-linux -+++ openjdk/jdk/src/share/lib/security/java.security-linux -@@ -149,7 +149,9 @@ - com.sun.org.apache.xml.internal.security.,\ - com.sun.org.glassfish.,\ - org.jcp.xml.dsig.internal.,\ -- oracle.jrockit.jfr. -+ oracle.jrockit.jfr.,\ -+ org.GNOME.Accessibility.,\ -+ org.GNOME.Bonobo. - # - # List of comma-separated packages that start with or equal this string - # will cause a security exception to be thrown when diff -Nru openjdk-17-17.0.4+8/debian/patches/jaw-classpath.diff openjdk-17-17.0.6+10/debian/patches/jaw-classpath.diff --- openjdk-17-17.0.4+8/debian/patches/jaw-classpath.diff 2022-07-20 09:27:43.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/jaw-classpath.diff 2023-01-17 22:36:38.000000000 +0000 @@ -2,7 +2,7 @@ --- a/src/hotspot/os/linux/os_linux.cpp +++ b/src/hotspot/os/linux/os_linux.cpp -@@ -461,6 +461,7 @@ void os::init_system_properties_values() +@@ -464,6 +464,7 @@ if (!set_boot_path('/', ':')) { vm_exit_during_initialization("Failed setting boot class path.", NULL); } diff -Nru openjdk-17-17.0.4+8/debian/patches/jdk-pulseaudio.diff openjdk-17-17.0.6+10/debian/patches/jdk-pulseaudio.diff --- openjdk-17-17.0.4+8/debian/patches/jdk-pulseaudio.diff 2017-11-19 13:58:26.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/jdk-pulseaudio.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ ---- a/src/jdk/src/java.desktop/share/conf/sound.properties -+++ b/src/jdk/src/java.desktop/share/conf/sound.properties -@@ -37,3 +37,13 @@ - # Specify the default Receiver by provider and name: - # javax.sound.midi.Receiver=com.sun.media.sound.MidiProvider#SunMIDI1 - # -+ -+javax.sound.sampled.Clip=org.classpath.icedtea.pulseaudio.PulseAudioMixerProvider -+javax.sound.sampled.Port=org.classpath.icedtea.pulseaudio.PulseAudioMixerProvider -+javax.sound.sampled.SourceDataLine=org.classpath.icedtea.pulseaudio.PulseAudioMixerProvider -+javax.sound.sampled.TargetDataLine=org.classpath.icedtea.pulseaudio.PulseAudioMixerProvider -+ -+#javax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider -+#javax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider -+#javax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider -+#javax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider diff -Nru openjdk-17-17.0.4+8/debian/patches/jexec.diff openjdk-17-17.0.6+10/debian/patches/jexec.diff --- openjdk-17-17.0.4+8/debian/patches/jexec.diff 2020-03-20 14:44:00.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/jexec.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ ---- a/src/java.base/unix/native/launcher/jexec.c -+++ b/src/java.base/unix/native/launcher/jexec.c -@@ -168,9 +168,10 @@ int main(int argc, const char * argv[]) - - /* Get the path to the java binary, which is in a known position relative - * to our current position, which is in argv[0]. */ -- if (getJavaPath(argv[argi++], java, RELATIVE_DEPTH) != 0) { -+ if (getJavaPath(JDK_BASE_DIR "/lib/jexec", java, RELATIVE_DEPTH) != 0) { - errorExit(errno, MISSING_JAVA_MSG); - } -+ argi++; - alen = (argc + 2) * (sizeof (const char *)); - if (alen <= 0 || alen > INT_MAX / sizeof(char *)) { - errorExit(errno, BAD_ARG_MSG); ---- a/make/launcher/Launcher-java.base.gmk -+++ b/make/launcher/Launcher-java.base.gmk -@@ -56,6 +56,9 @@ $(eval $(call SetupBuildLauncher, keytoo - ################################################################################ - - ifeq ($(call isTargetOs, linux), true) -+ ifeq (,$(DEBIAN_JDK_BASE_DIR)) -+ $(error DEBIAN_JDK_BASE_DIR must be defined for jexec build) -+ endif - $(eval $(call SetupJdkExecutable, BUILD_JEXEC, \ - NAME := jexec, \ - SRC := $(TOPDIR)/src/$(MODULE)/unix/native/launcher, \ -@@ -63,7 +66,7 @@ ifeq ($(call isTargetOs, linux), true) - OPTIMIZATION := LOW, \ - CFLAGS := $(CFLAGS_JDKEXE) \ - -I$(TOPDIR)/src/$(MODULE)/share/native/libjli, \ -- CFLAGS_linux := -fPIC, \ -+ CFLAGS_linux := -fPIC '-DJDK_BASE_DIR="$(DEBIAN_JDK_BASE_DIR)"', \ - CFLAGS_solaris := -KPIC, \ - LDFLAGS := $(LDFLAGS_JDKEXE), \ - OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/modules_libs/$(MODULE), \ diff -Nru openjdk-17-17.0.4+8/debian/patches/multiple-pkcs11-library-init.diff openjdk-17-17.0.6+10/debian/patches/multiple-pkcs11-library-init.diff --- openjdk-17-17.0.4+8/debian/patches/multiple-pkcs11-library-init.diff 2022-05-02 18:22:44.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/multiple-pkcs11-library-init.diff 2023-01-17 22:36:38.000000000 +0000 @@ -7,7 +7,7 @@ --- a/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/Config.java +++ b/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/Config.java -@@ -52,6 +52,7 @@ final class Config { +@@ -52,6 +52,7 @@ static final int ERR_HALT = 1; static final int ERR_IGNORE_ALL = 2; static final int ERR_IGNORE_LIB = 3; @@ -15,7 +15,7 @@ // same as allowSingleThreadedModules but controlled via a system property // and applied to all providers. if set to false, no SunPKCS11 instances -@@ -1019,6 +1020,8 @@ final class Config { +@@ -1023,6 +1024,8 @@ handleStartupErrors = ERR_IGNORE_LIB; } else if (val.equals("halt")) { handleStartupErrors = ERR_HALT; @@ -26,7 +26,7 @@ } --- a/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/SunPKCS11.java +++ b/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/SunPKCS11.java -@@ -179,26 +179,37 @@ public final class SunPKCS11 extends Aut +@@ -179,26 +179,37 @@ String nssLibraryDirectory = config.getNssLibraryDirectory(); String nssSecmodDirectory = config.getNssSecmodDirectory(); boolean nssOptimizeSpace = config.getNssOptimizeSpace(); diff -Nru openjdk-17-17.0.4+8/debian/patches/no-pch-build.diff openjdk-17-17.0.6+10/debian/patches/no-pch-build.diff --- openjdk-17-17.0.4+8/debian/patches/no-pch-build.diff 2017-11-19 13:58:26.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/no-pch-build.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,110 +0,0 @@ ---- a/src/hotspot/src/share/vm/oops/arrayKlassKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 -+++ b/src/hotspot/src/share/vm/oops/arrayKlassKlass.cpp 2013-04-15 13:57:24.992929086 +0200 -@@ -30,6 +30,7 @@ - #include "runtime/handles.inline.hpp" - #ifndef SERIALGC - #include "gc_implementation/parNew/parOopClosures.inline.hpp" -+#include "gc_implementation/parallelScavenge/psOldGen.hpp" - #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" - #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" - #include "memory/cardTableRS.hpp" ---- a/src/hotspot/src/share/vm/oops/constantPoolKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 -+++ b/src/hotspot/src/share/vm/oops/constantPoolKlass.cpp 2013-04-15 14:02:52.143087149 +0200 -@@ -49,6 +49,7 @@ - #endif - #ifndef SERIALGC - #include "gc_implementation/parNew/parOopClosures.inline.hpp" -+#include "gc_implementation/parallelScavenge/psOldGen.hpp" - #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" - #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" - #include "memory/cardTableRS.hpp" ---- a/src/hotspot/src/share/vm/oops/cpCacheKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 -+++ b/src/hotspot/src/share/vm/oops/cpCacheKlass.cpp 2013-04-15 14:04:45.219838633 +0200 -@@ -35,6 +35,7 @@ - #include "runtime/handles.inline.hpp" - #ifndef SERIALGC - #include "gc_implementation/parNew/parOopClosures.inline.hpp" -+#include "gc_implementation/parallelScavenge/psOldGen.hpp" - #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" - #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" - #include "memory/cardTableRS.hpp" ---- a/src/hotspot/src/share/vm/oops/instanceKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 -+++ b/src/hotspot/src/share/vm/oops/instanceKlass.cpp 2013-04-15 14:07:55.861109867 +0200 -@@ -70,6 +70,7 @@ - #include "gc_implementation/g1/g1RemSet.inline.hpp" - #include "gc_implementation/g1/heapRegionSeq.inline.hpp" - #include "gc_implementation/parNew/parOopClosures.inline.hpp" -+#include "gc_implementation/parallelScavenge/psOldGen.hpp" - #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" - #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" - #include "oops/oop.pcgc.inline.hpp" ---- a/src/hotspot/src/share/vm/oops/instanceKlassKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 -+++ b/src/hotspot/src/share/vm/oops/instanceKlassKlass.cpp 2013-04-15 14:08:53.541485528 +0200 -@@ -44,6 +44,7 @@ - #include "runtime/fieldDescriptor.hpp" - #ifndef SERIALGC - #include "gc_implementation/parNew/parOopClosures.inline.hpp" -+#include "gc_implementation/parallelScavenge/psOldGen.hpp" - #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" - #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" - #include "memory/cardTableRS.hpp" ---- a/src/hotspot/src/share/vm/oops/instanceMirrorKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 -+++ b/src/hotspot/src/share/vm/oops/instanceMirrorKlass.cpp 2013-04-15 14:10:11.162003798 +0200 -@@ -42,6 +42,7 @@ - #include "gc_implementation/g1/g1RemSet.inline.hpp" - #include "gc_implementation/g1/heapRegionSeq.inline.hpp" - #include "gc_implementation/parNew/parOopClosures.inline.hpp" -+#include "gc_implementation/parallelScavenge/psOldGen.hpp" - #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" - #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" - #include "oops/oop.pcgc.inline.hpp" ---- a/src/hotspot/src/share/vm/oops/instanceRefKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 -+++ b/src/hotspot/src/share/vm/oops/instanceRefKlass.cpp 2013-04-15 14:11:11.726403390 +0200 -@@ -39,6 +39,7 @@ - #include "gc_implementation/g1/g1RemSet.inline.hpp" - #include "gc_implementation/g1/heapRegionSeq.inline.hpp" - #include "gc_implementation/parNew/parOopClosures.inline.hpp" -+#include "gc_implementation/parallelScavenge/psOldGen.hpp" - #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" - #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" - #include "oops/oop.pcgc.inline.hpp" ---- a/src/hotspot/src/share/vm/oops/klassKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 -+++ b/src/hotspot/src/share/vm/oops/klassKlass.cpp 2013-04-15 14:13:01.999133769 +0200 -@@ -42,6 +42,7 @@ - #include "runtime/handles.inline.hpp" - #ifndef SERIALGC - #include "gc_implementation/parNew/parOopClosures.inline.hpp" -+#include "gc_implementation/parallelScavenge/psOldGen.hpp" - #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" - #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" - #include "memory/cardTableRS.hpp" ---- a/src/hotspot/src/share/vm/oops/objArrayKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 -+++ b/src/hotspot/src/share/vm/oops/objArrayKlass.cpp 2013-04-15 14:16:10.616389484 +0200 -@@ -47,6 +47,7 @@ - #include "gc_implementation/g1/g1RemSet.inline.hpp" - #include "gc_implementation/g1/heapRegionSeq.inline.hpp" - #include "gc_implementation/parNew/parOopClosures.inline.hpp" -+#include "gc_implementation/parallelScavenge/psOldGen.hpp" - #include "gc_implementation/parallelScavenge/psCompactionManager.hpp" - #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" - #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" ---- a/src/hotspot/src/share/vm/oops/objArrayKlassKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 -+++ b/src/hotspot/src/share/vm/oops/objArrayKlassKlass.cpp 2013-04-15 14:17:01.800729154 +0200 -@@ -33,6 +33,7 @@ - #include "oops/oop.inline2.hpp" - #ifndef SERIALGC - #include "gc_implementation/parNew/parOopClosures.inline.hpp" -+#include "gc_implementation/parallelScavenge/psOldGen.hpp" - #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" - #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" - #include "memory/cardTableRS.hpp" ---- a/src/hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp~ 2013-03-04 22:51:00.000000000 +0100 -+++ b/src/hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp 2013-04-15 14:20:24.782079605 +0200 -@@ -28,6 +28,7 @@ - #include "gc_implementation/parallelScavenge/cardTableExtension.hpp" - #include "gc_implementation/parallelScavenge/gcTaskManager.hpp" - #include "gc_implementation/parallelScavenge/psMarkSweep.hpp" -+#include "gc_implementation/parallelScavenge/psOldGen.hpp" - #include "gc_implementation/parallelScavenge/psPromotionManager.hpp" - #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" - #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" diff -Nru openjdk-17-17.0.4+8/debian/patches/pass-extra-flags.diff openjdk-17-17.0.6+10/debian/patches/pass-extra-flags.diff --- openjdk-17-17.0.4+8/debian/patches/pass-extra-flags.diff 2017-11-19 13:58:26.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/pass-extra-flags.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ ---- a/src/hotspot/make/linux/makefiles/jsig.make -+++ b/src/hotspot/make/linux/makefiles/jsig.make -@@ -54,7 +54,9 @@ endif - $(LIBJSIG): $(JSIGSRCDIR)/jsig.c $(LIBJSIG_MAPFILE) - @echo $(LOG_INFO) Making signal interposition lib... - $(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) $(SHARED_FLAG) $(PICFLAG) \ -- $(LFLAGS_JSIG) $(JSIG_DEBUG_CFLAGS) $(EXTRA_CFLAGS) -o $@ $< -ldl -+ $(LFLAGS_JSIG) $(EXTRA_LDFLAGS) \ -+ $(JSIG_DEBUG_CFLAGS) $(EXTRA_CFLAGS) \ -+ -o $@ $< -ldl - ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJSIG_DEBUGINFO) - $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJSIG_DEBUGINFO) $@ ---- a/src/hotspot/make/linux/makefiles/vm.make -+++ b/src/hotspot/make/linux/makefiles/vm.make -@@ -118,7 +118,8 @@ CFLAGS += $(CFLAGS/NOEX) - - # Extra flags from gnumake's invocation or environment - CFLAGS += $(EXTRA_CFLAGS) --LFLAGS += $(EXTRA_CFLAGS) -+CXXFLAGS += $(EXTRA_CXXFLAGS) -+LFLAGS += $(EXTRA_LDFLAGS) - - # Don't set excutable bit on stack segment - # the same could be done by separate execstack command diff -Nru openjdk-17-17.0.4+8/debian/patches/reproducible-build-jmod.diff openjdk-17-17.0.6+10/debian/patches/reproducible-build-jmod.diff --- openjdk-17-17.0.4+8/debian/patches/reproducible-build-jmod.diff 2022-07-20 09:30:22.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/reproducible-build-jmod.diff 2023-01-17 22:36:38.000000000 +0000 @@ -12,7 +12,7 @@ --- a/make/CreateJmods.gmk +++ b/make/CreateJmods.gmk -@@ -230,6 +230,15 @@ endif +@@ -230,6 +230,15 @@ # Create jmods in the support dir and then move them into place to keep the # module path in $(IMAGES_OUTPUTDIR)/jmods valid at all times. @@ -28,7 +28,7 @@ $(eval $(call SetupExecute, create_$(JMOD_FILE), \ WARN := Creating $(INTERIM_MSG)$(JMOD_FILE), \ DEPS := $(DEPS), \ -@@ -241,7 +250,7 @@ $(eval $(call SetupExecute, create_$(JMO +@@ -241,7 +250,7 @@ --module-path $(JMODS_DIR) $(JMOD_FLAGS) \ $(JMOD_SOURCE_DATE) \ $(JMODS_SUPPORT_DIR)/$(JMOD_FILE), \ diff -Nru openjdk-17-17.0.4+8/debian/patches/riscv64.diff openjdk-17-17.0.6+10/debian/patches/riscv64.diff --- openjdk-17-17.0.4+8/debian/patches/riscv64.diff 2022-07-20 09:30:18.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/riscv64.diff 2023-01-17 22:36:38.000000000 +0000 @@ -25,7 +25,7 @@ --- a/make/autoconf/build-aux/config.sub +++ b/make/autoconf/build-aux/config.sub -@@ -46,8 +46,8 @@ if echo $* | grep pc-msys >/dev/null ; t +@@ -46,8 +46,8 @@ exit fi @@ -36,7 +36,7 @@ . $DIR/autoconf-config.sub "$@" # autoconf-config.sub exits, so we never reach here, but just in # case we do: -@@ -62,6 +62,10 @@ while test $# -gt 0 ; do +@@ -62,6 +62,10 @@ config=`echo $1 | sed 's/^aarch64-/arm-/'` sub_args="$sub_args $config" shift; ;; @@ -47,7 +47,7 @@ - ) # Use stdin as input. sub_args="$sub_args $1" shift; break ;; -@@ -74,7 +78,7 @@ done +@@ -74,7 +78,7 @@ result=`. $DIR/autoconf-config.sub $sub_args "$@"` exitcode=$? @@ -58,7 +58,7 @@ exit $exitcode --- a/src/hotspot/os/linux/os_linux.cpp +++ b/src/hotspot/os/linux/os_linux.cpp -@@ -2563,6 +2563,8 @@ void os::get_summary_cpu_info(char* cpui +@@ -2558,6 +2558,8 @@ strncpy(cpuinfo, "IA64", length); #elif defined(PPC) strncpy(cpuinfo, "PPC64", length); diff -Nru openjdk-17-17.0.4+8/debian/patches/s390x-opt.diff openjdk-17-17.0.6+10/debian/patches/s390x-opt.diff --- openjdk-17-17.0.4+8/debian/patches/s390x-opt.diff 2022-07-20 09:27:23.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/s390x-opt.diff 2023-01-17 22:36:38.000000000 +0000 @@ -1,6 +1,6 @@ --- a/make/autoconf/flags-cflags.m4 +++ b/make/autoconf/flags-cflags.m4 -@@ -721,6 +721,9 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP], +@@ -735,6 +735,9 @@ fi elif test "x$FLAGS_CPU" = xs390x; then $1_CFLAGS_CPU="-mbackchain -march=z10" diff -Nru openjdk-17-17.0.4+8/debian/patches/series openjdk-17-17.0.6+10/debian/patches/series --- openjdk-17-17.0.4+8/debian/patches/series 2022-07-20 09:30:14.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/series 2023-01-26 10:36:16.000000000 +0000 @@ -3,7 +3,6 @@ icc_loading_with_symlink.diff icedtea-override-redirect-compiz.diff libpcsclite-dlopen.diff -#jexec.diff default-jvm-cfg.diff workaround_expand_exec_shield_cs_limit.diff adlc-parser.diff @@ -17,8 +16,6 @@ zero-x32.diff hotspot-disable-exec-shield-workaround.diff atk-wrapper-security.diff -# java-access-bridge-security.diff -# jdk-pulseaudio.diff dnd-files.diff generated-headers.patch m68k-support.diff diff -Nru openjdk-17-17.0.4+8/debian/patches/set-exec-name.diff openjdk-17-17.0.6+10/debian/patches/set-exec-name.diff --- openjdk-17-17.0.4+8/debian/patches/set-exec-name.diff 2017-11-19 13:58:26.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/set-exec-name.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ ---- a/src/jdk/src/solaris/bin/java_md.c.orig -+++ b/src/jdk/src/solaris/bin/java_md.c -@@ -688,8 +688,19 @@ - char buf[PATH_MAX+1]; - int len = readlink(self, buf, PATH_MAX); - if (len >= 0) { -+ const char* prefixes[] = {"/cow/", "/persistmnt/", "/rofs/", "/rwfs/", "/squashmnt/", NULL}; -+ const char **prefix; -+ size_t prefix_len = 0; - buf[len] = '\0'; /* readlink doesn't nul terminate */ -- exec_path = JLI_StringDup(buf); -+ for (prefix = prefixes; *prefix; prefix++) { -+ prefix_len = strlen(buf) < strlen(*prefix) ? strlen(buf) : strlen(*prefix); -+ if (!strncmp(*prefix, buf, prefix_len)) { -+ prefix_len--; -+ break; -+ } -+ prefix_len = 0; -+ } -+ exec_path = JLI_StringDup(buf + prefix_len); - } - } - #else /* !__solaris__ && !__linux */ ---- a/src/hotspot/src/os/posix/launcher/java_md.c.orig -+++ b/src/hotspot/src/os/posix/launcher/java_md.c -@@ -967,8 +967,19 @@ - char buf[PATH_MAX+1]; - int len = readlink(self, buf, PATH_MAX); - if (len >= 0) { -- buf[len] = '\0'; /* readlink doesn't nul terminate */ -- exec_path = JLI_StringDup(buf); -+ buf[len] = '\0'; /* readlink doesn't nul terminate */ -+ const char* prefixes[] = {"/cow/", "/persistmnt/", "/rofs/", "/rwfs/", "/squashmnt/", NULL}; -+ const char **prefix; -+ size_t prefix_len = 0; -+ for (prefix = prefixes; *prefix; prefix++) { -+ prefix_len = strlen(buf) < strlen(*prefix) ? strlen(buf) : strlen(*prefix); -+ if (!strncmp(*prefix, buf, prefix_len)) { -+ prefix_len--; -+ break; -+ } -+ prefix_len = 0; -+ } -+ exec_path = JLI_StringDup(buf + prefix_len); - } - } - #else /* !__sun && !__linux */ diff -Nru openjdk-17-17.0.4+8/debian/patches/stack-direction.diff openjdk-17-17.0.6+10/debian/patches/stack-direction.diff --- openjdk-17-17.0.4+8/debian/patches/stack-direction.diff 2017-11-19 13:58:26.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/stack-direction.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,215 +0,0 @@ ---- a/src/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp.old 2010-01-06 16:30:02.000000000 +0100 -+++ b/src/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp 2010-01-06 23:14:47.000000000 +0100 -@@ -144,8 +144,13 @@ - address addr = (address) info->si_addr; - - // check if fault address is within thread stack -+#ifdef __hppa__ -+ if (addr > thread->stack_base() && -+ addr <= thread->stack_base() + thread->stack_size()) { -+#else - if (addr < thread->stack_base() && - addr >= thread->stack_base() - thread->stack_size()) { -+#endif - // stack overflow - if (thread->in_stack_yellow_zone(addr)) { - thread->disable_stack_yellow_zone(); -@@ -294,7 +299,11 @@ - if (res != 0) { - fatal1("pthread_attr_getstack failed with errno = %d", res); - } -+#ifdef __hppa__ -+ address stack_top = stack_bottom - stack_bytes; -+#else - address stack_top = stack_bottom + stack_bytes; -+#endif - - // The block of memory returned by pthread_attr_getstack() includes - // guard pages where present. We need to trim these off. -@@ -321,7 +330,11 @@ - stack_bottom += (total_pages - guard_pages) / 2 * page_bytes; - #endif // IA64 - -+#ifdef __hppa__ -+ stack_bottom -= guard_bytes; -+#else - stack_bottom += guard_bytes; -+#endif - - pthread_attr_destroy(&attr); - -@@ -329,19 +342,36 @@ - // by pthread_attr_getstack is the maximum size it could possibly - // be given what currently mapped. This can be huge, so we cap it. - if (os::Linux::is_initial_thread()) { -+#ifdef __hppa__ -+ stack_bytes = stack_bottom - stack_top; -+#else - stack_bytes = stack_top - stack_bottom; -+#endif - - if (stack_bytes > JavaThread::stack_size_at_create()) - stack_bytes = JavaThread::stack_size_at_create(); - -+#ifdef __hppa__ -+ stack_bottom = stack_top + stack_bytes; -+#else - stack_bottom = stack_top - stack_bytes; -+#endif - } - -+#ifdef __hppa__ -+ assert(os::current_stack_pointer() <= stack_bottom, "should do"); -+ assert(os::current_stack_pointer() > stack_top, "should do"); -+#else - assert(os::current_stack_pointer() >= stack_bottom, "should do"); - assert(os::current_stack_pointer() < stack_top, "should do"); -+#endif - - *bottom = stack_bottom; -+#ifdef __hppa__ -+ *size = stack_bottom - stack_top; -+#else - *size = stack_top - stack_bottom; -+#endif - } - - address os::current_stack_base() { ---- a/src/hotspot/src/share/vm/runtime/thread.cpp.old 2009-10-02 23:16:39.000000000 +0200 -+++ b/src/hotspot/src/share/vm/runtime/thread.cpp 2010-01-06 23:31:24.000000000 +0100 -@@ -713,8 +713,13 @@ - else if (is_ConcurrentGC_thread()) st->print("ConcurrentGCThread"); - else st->print("Thread"); - -+#ifdef __hppa__ - st->print(" [stack: " PTR_FORMAT "," PTR_FORMAT "]", - _stack_base - _stack_size, _stack_base); -+#else -+ st->print(" [stack: " PTR_FORMAT "," PTR_FORMAT "]", -+ _stack_base + _stack_size, _stack_base); -+#endif - - if (osthread()) { - st->print(" [id=%d]", osthread()->thread_id()); -@@ -792,7 +797,11 @@ - bool Thread::is_in_stack(address adr) const { - assert(Thread::current() == this, "is_in_stack can only be called from current thread"); - address end = os::current_stack_pointer(); -+#ifdef __hppa__ -+ if (stack_base() <= adr && adr <= end) return true; -+#else - if (stack_base() >= adr && adr >= end) return true; -+#endif - - return false; - } -@@ -804,7 +813,11 @@ - // should be revisited, and they should be removed if possible. - - bool Thread::is_lock_owned(address adr) const { -+#ifdef __hppa__ -+ return (_stack_base <= adr && adr <= (_stack_base + _stack_size)); -+#else - return (_stack_base >= adr && adr >= (_stack_base - _stack_size)); -+#endif - } - - bool Thread::set_as_starting_thread() { -@@ -2108,7 +2121,11 @@ - - void JavaThread::create_stack_guard_pages() { - if (! os::uses_stack_guard_pages() || _stack_guard_state != stack_guard_unused) return; -+#ifdef __hppa__ -+ address low_addr = stack_base(); -+#else - address low_addr = stack_base() - stack_size(); -+#endif - size_t len = (StackYellowPages + StackRedPages) * os::vm_page_size(); - - int allocate = os::allocate_stack_guard_pages(); -@@ -2131,7 +2148,11 @@ - - void JavaThread::remove_stack_guard_pages() { - if (_stack_guard_state == stack_guard_unused) return; -+#ifdef __hppa__ -+ address low_addr = stack_base(); -+#else - address low_addr = stack_base() - stack_size(); -+#endif - size_t len = (StackYellowPages + StackRedPages) * os::vm_page_size(); - - if (os::allocate_stack_guard_pages()) { -@@ -2156,10 +2177,17 @@ - - // The base notation is from the stacks point of view, growing downward. - // We need to adjust it to work correctly with guard_memory() -+#ifdef __hppa__ -+ address base = stack_yellow_zone_base() + stack_yellow_zone_size(); -+ -+ guarantee(base > stack_base(),"Error calculating stack yellow zone"); -+ guarantee(base > os::current_stack_pointer(),"Error calculating stack yellow zone"); -+#else - address base = stack_yellow_zone_base() - stack_yellow_zone_size(); - - guarantee(base < stack_base(),"Error calculating stack yellow zone"); - guarantee(base < os::current_stack_pointer(),"Error calculating stack yellow zone"); -+#endif - - if (os::guard_memory((char *) base, stack_yellow_zone_size())) { - _stack_guard_state = stack_guard_enabled; -@@ -2178,7 +2206,11 @@ - - // The base notation is from the stacks point of view, growing downward. - // We need to adjust it to work correctly with guard_memory() -+#ifdef __hppa__ -+ address base = stack_yellow_zone_base() + stack_yellow_zone_size(); -+#else - address base = stack_yellow_zone_base() - stack_yellow_zone_size(); -+#endif - - if (os::unguard_memory((char *)base, stack_yellow_zone_size())) { - _stack_guard_state = stack_guard_yellow_disabled; -@@ -2192,10 +2224,17 @@ - // The base notation is from the stacks point of view, growing downward. - // We need to adjust it to work correctly with guard_memory() - assert(_stack_guard_state != stack_guard_unused, "must be using guard pages."); -+#ifdef __hppa__ -+ address base = stack_red_zone_base() + stack_red_zone_size(); -+ -+ guarantee(base > stack_base(),"Error calculating stack red zone"); -+ guarantee(base > os::current_stack_pointer(),"Error calculating stack red zone"); -+#else - address base = stack_red_zone_base() - stack_red_zone_size(); - - guarantee(base < stack_base(),"Error calculating stack red zone"); - guarantee(base < os::current_stack_pointer(),"Error calculating stack red zone"); -+#endif - - if(!os::guard_memory((char *) base, stack_red_zone_size())) { - warning("Attempt to guard stack red zone failed."); -@@ -2206,7 +2245,11 @@ - // The base notation is from the stacks point of view, growing downward. - // We need to adjust it to work correctly with guard_memory() - assert(_stack_guard_state != stack_guard_unused, "must be using guard pages."); -+#ifdef __hppa__ -+ address base = stack_red_zone_base() + stack_red_zone_size(); -+#else - address base = stack_red_zone_base() - stack_red_zone_size(); -+#endif - if (!os::unguard_memory((char *)base, stack_red_zone_size())) { - warning("Attempt to unguard stack red zone failed."); - } -@@ -2451,8 +2494,13 @@ - if (osthread()) { - st->print(", id=%d", osthread()->thread_id()); - } -+#ifdef __hppa__ -+ st->print(", stack(" PTR_FORMAT "," PTR_FORMAT ")", -+ _stack_base + _stack_size, _stack_base); -+#else - st->print(", stack(" PTR_FORMAT "," PTR_FORMAT ")", - _stack_base - _stack_size, _stack_base); -+#endif - st->print("]"); - return; - } diff -Nru openjdk-17-17.0.4+8/debian/patches/system-pcsclite.diff openjdk-17-17.0.6+10/debian/patches/system-pcsclite.diff --- openjdk-17-17.0.4+8/debian/patches/system-pcsclite.diff 2022-07-20 09:27:11.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/system-pcsclite.diff 2023-01-17 22:36:38.000000000 +0000 @@ -1,6 +1,6 @@ --- a/make/autoconf/lib-bundled.m4 +++ b/make/autoconf/lib-bundled.m4 -@@ -41,6 +41,7 @@ AC_DEFUN_ONCE([LIB_SETUP_BUNDLED_LIBS], +@@ -41,6 +41,7 @@ LIB_SETUP_ZLIB LIB_SETUP_LCMS LIB_SETUP_HARFBUZZ @@ -8,7 +8,7 @@ ]) ################################################################################ -@@ -304,3 +305,41 @@ AC_DEFUN_ONCE([LIB_SETUP_HARFBUZZ], +@@ -307,3 +308,41 @@ AC_SUBST(HARFBUZZ_CFLAGS) AC_SUBST(HARFBUZZ_LIBS) ]) @@ -52,7 +52,7 @@ +]) --- a/make/modules/java.smartcardio/Lib.gmk +++ b/make/modules/java.smartcardio/Lib.gmk -@@ -30,12 +30,12 @@ include LibCommon.gmk +@@ -30,12 +30,12 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBJ2PCSC, \ NAME := j2pcsc, \ CFLAGS := $(CFLAGS_JDKLIB), \ @@ -70,7 +70,7 @@ --- a/make/autoconf/spec.gmk.in +++ b/make/autoconf/spec.gmk.in -@@ -773,6 +773,7 @@ TAR_SUPPORTS_TRANSFORM:=@TAR_SUPPORTS_TR +@@ -774,6 +774,7 @@ # Build setup USE_EXTERNAL_LIBJPEG:=@USE_EXTERNAL_LIBJPEG@ USE_EXTERNAL_LIBGIF:=@USE_EXTERNAL_LIBGIF@ @@ -88,7 +88,7 @@ void *hModule; FPTR_SCardEstablishContext scardEstablishContext; FPTR_SCardConnect scardConnect; -@@ -47,6 +48,7 @@ FPTR_SCardListReaders scardListReaders; +@@ -47,6 +48,7 @@ FPTR_SCardBeginTransaction scardBeginTransaction; FPTR_SCardEndTransaction scardEndTransaction; FPTR_SCardControl scardControl; @@ -96,7 +96,7 @@ /* * Throws a Java Exception by name -@@ -75,7 +77,9 @@ void throwIOException(JNIEnv *env, const +@@ -75,7 +77,9 @@ throwByName(env, "java/io/IOException", msg); } @@ -106,7 +106,7 @@ void *fAddress = dlsym(hModule, functionName); if (fAddress == NULL) { char errorMessage[256]; -@@ -85,9 +89,11 @@ void *findFunction(JNIEnv *env, void *hM +@@ -85,9 +89,11 @@ } return fAddress; } @@ -118,7 +118,7 @@ const char *libName = (*env)->GetStringUTFChars(env, jLibName, NULL); if (libName == NULL) { throwNullPointerException(env, "PCSC library name is null"); -@@ -141,4 +147,5 @@ JNIEXPORT void JNICALL Java_sun_security +@@ -141,4 +147,5 @@ #else scardControl = (FPTR_SCardControl) findFunction(env, hModule, "SCardControl132"); #endif // __APPLE__ @@ -135,7 +135,7 @@ typedef LONG (*FPTR_SCardEstablishContext)(DWORD dwScope, LPCVOID pvReserved1, LPCVOID pvReserved2, -@@ -111,3 +113,41 @@ extern FPTR_SCardListReaders scardListRe +@@ -111,3 +113,41 @@ extern FPTR_SCardBeginTransaction scardBeginTransaction; extern FPTR_SCardEndTransaction scardEndTransaction; extern FPTR_SCardControl scardControl; diff -Nru openjdk-17-17.0.4+8/debian/patches/workaround_expand_exec_shield_cs_limit.diff openjdk-17-17.0.6+10/debian/patches/workaround_expand_exec_shield_cs_limit.diff --- openjdk-17-17.0.4+8/debian/patches/workaround_expand_exec_shield_cs_limit.diff 2021-05-27 09:28:52.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/patches/workaround_expand_exec_shield_cs_limit.diff 2023-01-17 22:36:38.000000000 +0000 @@ -1,6 +1,6 @@ --- a/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp +++ b/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp -@@ -635,7 +635,7 @@ void os::verify_stack_alignment() { +@@ -651,7 +651,7 @@ * updates (JDK-8023956). */ void os::workaround_expand_exec_shield_cs_limit() { diff -Nru openjdk-17-17.0.4+8/debian/rules openjdk-17-17.0.6+10/debian/rules --- openjdk-17-17.0.4+8/debian/rules 2022-07-20 13:49:50.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/rules 2023-01-26 10:36:16.000000000 +0000 @@ -157,7 +157,13 @@ NJOBS = $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) endif -jtreg_pkg = jtreg6 +ifneq (,$(filter $(distrel), sid bookworm bullseye focal jammy kinetic lunar )) + jtreg_pkg = jtreg6 +else ifneq (,$(filter $(distrel), sid bookworm bullseye)) + jtreg_pkg = jtreg +else + jtreg_pkg = +endif with_check = $(if $(findstring nocheck, $(DEB_BUILD_OPTIONS)),,yes) ifneq (,$(filter $(DEB_HOST_ARCH), alpha armel mipsel mips64el riscv64)) @@ -264,14 +270,18 @@ export CC = $(DEB_HOST_GNU_TYPE)-gcc-10 export CXX = $(DEB_HOST_GNU_TYPE)-g++-10 bd_gcc = g++-10 , -else +else ifneq (,$(filter $(distrel),jammy)) export CC = $(DEB_HOST_GNU_TYPE)-gcc-11 export CXX = $(DEB_HOST_GNU_TYPE)-g++-11 bd_gcc = g++-11 , +else + export CC = $(DEB_HOST_GNU_TYPE)-gcc-12 + export CXX = $(DEB_HOST_GNU_TYPE)-g++-12 + bd_gcc = g++-12 , endif -# GCC 11 only -ifeq (,$(findstring 11, $(bd_gcc))) +# GCC 11 and up +ifeq (,$(findstring 11 12, $(bd_gcc))) DEB_BUILD_MAINT_OPTIONS = optimize=-lto endif @@ -900,6 +910,7 @@ debian/tests/control: debian/tests/control.in debian/rules sed \ + -e 's/@jtreg_pkg@/$(jtreg_pkg)/g' \ -e 's/@min_jtreg_version@/$(min_jtreg_version)/g' \ $< > $@; @@ -1045,8 +1056,8 @@ ifeq ($(with_check),yes) jtreg_version="$$(dpkg-query -f '$${Version}\n' -W $(jtreg_pkg))"; \ if ! dpkg --compare-versions $(min_jtreg_version) le $$jtreg_version; then \ - echo "Error: testsuite requires jtreg $(min_jtreg_version) but $$jtreg_version is installed"; \ - echo "Please update the jtreg dependency and regenerate debian/control"; \ + echo "Error: testsuite requires $(jtreg_pkg) $(min_jtreg_version) but $$jtreg_version is installed"; \ + echo "Please update the $(jtreg_pkg) dependency and regenerate debian/control"; \ false; \ fi endif @@ -1756,10 +1767,10 @@ cp -a $$i $(d_doc)/usr/share/doc/$(p_jrehl)/; \ ln -sf ../$(p_jrehl)/$$b $(d_doc)/usr/share/doc/$(p_doc)/$$b; \ done - rm -v $(d_doc)/usr/share/doc/$(p_jrehl)/api/script-dir/{jquery-3.5.1.min.js,jquery-ui.min.css,jquery-ui.min.js} + rm -v $(d_doc)/usr/share/doc/$(p_jrehl)/api/script-dir/{jquery-3.6.0.min.js,jquery-ui.min.css,jquery-ui.min.js} dh_link -p$(p_doc) \ /usr/share/javascript/jquery-ui/jquery-ui.min.js \ - /usr/share/doc/$(p_jrehl)/api/script-dir/jquery-3.5.1.min.js \ + /usr/share/doc/$(p_jrehl)/api/script-dir/jquery-3.6.0.min.js \ /usr/share/javascript/jquery-ui/themes/base/jquery-ui.min.css \ /usr/share/doc/$(p_jrehl)/api/script-dir/jquery-ui.min.css \ /usr/share/javascript/jquery-ui/jquery-ui.min.js \ @@ -1871,7 +1882,7 @@ is_release = yes #is_release = git_project = jdk17u -git_tag = jdk-17.0.4+8 +git_tag = jdk-17.0.6+10 package_version = $(subst jdk-,,$(git_tag)) package_version = $(shell echo $(PKGVERSION) | sed 's/-[^-][^-]*$$//') ifneq ($(is_release),yes) @@ -1902,7 +1913,7 @@ rm -f $(topdir)/.hgtags; \ rm -f $(topdir)/.gitattributes; \ rm -rf $(topdir)/.github; \ - tar cfJ ../$(basename)_$(package_version).orig.tar.xz $(topdir); \ + XZ_OPT=-9v tar cfJ ../$(basename)_$(package_version).orig.tar.xz $(topdir); \ rm -rf $(topdir) # keep these in the tarball, older lcms are not supported diff -Nru openjdk-17-17.0.4+8/debian/tests/control openjdk-17-17.0.6+10/debian/tests/control --- openjdk-17-17.0.4+8/debian/tests/control 2022-07-22 21:01:54.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/tests/control 2023-01-26 10:36:16.000000000 +0000 @@ -7,9 +7,9 @@ Restrictions: superficial #Tests: hotspot, jaxp, langtools -#Depends: @, default-jre-headless, jtreg:native (>= 6+1-0~), testng:native, build-essential +#Depends: @, default-jre-headless, jtreg6:native (>= 6+1-0~), testng:native, build-essential #Restrictions: allow-stderr, skippable, flaky #Tests: jdk -#Depends: @, default-jre-headless, jtreg:native (>= 6+1-0~), testng:native, build-essential, xfwm4:native, xvfb, dbus-x11 +#Depends: @, default-jre-headless, jtreg6:native (>= 6+1-0~), testng:native, build-essential, xfwm4:native, xvfb, dbus-x11 #Restrictions: allow-stderr, skippable, flaky diff -Nru openjdk-17-17.0.4+8/debian/tests/control.in openjdk-17-17.0.6+10/debian/tests/control.in --- openjdk-17-17.0.4+8/debian/tests/control.in 2020-12-28 13:29:18.000000000 +0000 +++ openjdk-17-17.0.6+10/debian/tests/control.in 2023-01-17 22:28:11.000000000 +0000 @@ -7,9 +7,9 @@ Restrictions: superficial #Tests: hotspot, jaxp, langtools -#Depends: @, default-jre-headless, jtreg:native (>= @min_jtreg_version@), testng:native, build-essential +#Depends: @, default-jre-headless, @jtreg_pkg@:native (>= @min_jtreg_version@), testng:native, build-essential #Restrictions: allow-stderr, skippable, flaky #Tests: jdk -#Depends: @, default-jre-headless, jtreg:native (>= @min_jtreg_version@), testng:native, build-essential, xfwm4:native, xvfb, dbus-x11 +#Depends: @, default-jre-headless, @jtreg_pkg@:native (>= @min_jtreg_version@), testng:native, build-essential, xfwm4:native, xvfb, dbus-x11 #Restrictions: allow-stderr, skippable, flaky diff -Nru openjdk-17-17.0.4+8/doc/building.html openjdk-17-17.0.6+10/doc/building.html --- openjdk-17-17.0.4+8/doc/building.html 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/doc/building.html 2023-01-10 13:21:55.000000000 +0000 @@ -70,6 +70,9 @@
  • Make Control Variables
  • Running Tests
  • +
  • Signing
  • Cross-compiling

    Test Make Control Variables

    -

    These make control variables only make sense when running tests. Please see Testing the JDK for details.

    +

    These make control variables only make sense when running tests. Please see Testing the JDK (html, markdown) for details.

    To execute the most basic tests (tier 1), use:

    make run-test-tier1
    -

    For more details on how to run tests, please see the Testing the JDK document.

    +

    For more details on how to run tests, please see Testing the JDK (html, markdown).

    +

    Signing

    +

    macOS

    +

    Modern versions of macOS require applications to be signed and notarizied before distribution. See Apple's documentation for more background on what this means and how it works. To help support this, the JDK build can be configured to automatically sign all native binaries, and the JDK bundle, with all the options needed for successful notarization, as well as all the entitlements required by the JDK. To enable hardened signing, use configure parameter --with-macosx-codesign=hardened and configure the signing identity you wish to use with --with-macosx-codesign-identity=<identity>. The identity refers to a signing identity from Apple that needs to be preinstalled on the build host.

    +

    When not signing for distribution with the hardened option, the JDK build will still attempt to perform adhoc signing to add the special entitlement com.apple.security.get-task-allow to each binary. This entitlement is required to be able to dump core files from a process. Note that adding this entitlement makes the build invalid for notarization, so it is only added when signing in debug mode. To explicitly enable this kind of adhoc signing, use configure parameter --with-macosx-codesign=debug. It will be enabled by default in most cases.

    +

    It's also possible to completely disable any explicit codesign operations done by the JDK build using the configure parameter --without-macosx-codesign. The exact behavior then depends on the architecture. For macOS on x64, it (at least at the time of this writing) results in completely unsigned binaries that should still work fine for development and debugging purposes. On aarch64, the Xcode linker will apply a default "adhoc" signing, without any entitlements. Such a build does not allow dumping core files.

    +

    The default mode "auto" will try for hardened signing if the debug level is release and either the default identity or the specified identity is valid. If hardened isn't possible, then debug signing is chosen if it works. If nothing works, the codesign build step is disabled.

    Cross-compiling

    Cross-compiling means using one platform (the build platform) to generate output that can ran on another platform (the target platform).

    The typical reason for cross-compiling is that the build is performed on a more powerful desktop computer, but the resulting binaries will be able to run on a different, typically low-performing system. Most of the complications that arise when building for embedded is due to this separation of build and target systems.

    diff -Nru openjdk-17-17.0.4+8/doc/building.md openjdk-17-17.0.6+10/doc/building.md --- openjdk-17-17.0.4+8/doc/building.md 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/doc/building.md 2023-01-10 13:21:55.000000000 +0000 @@ -179,10 +179,10 @@ Windows is the only non-POSIX OS supported by the JDK, and as such, requires some extra care. A POSIX support layer is required to build on Windows. -Currently, the only supported such layers are Cygwin and Windows Subsystem for -Linux (WSL). (Msys is no longer supported due to a too old bash; msys2 would -likely be possible to support in a future version but that would require effort -to implement.) +Currently, the only supported such layers are Cygwin, Windows Subsystem for +Linux (WSL), and MSYS2. (MSYS is no longer supported due to an outdated bash; +While OpenJDK can be built with MSYS2, support for it is still experimental, so +build failures and unusual errors are not uncommon.) Internally in the build system, all paths are represented as Unix-style paths, e.g. `/cygdrive/c/git/jdk/Makefile` rather than `C:\git\jdk\Makefile`. This @@ -323,7 +323,7 @@ ------------------ ------------------------------------------------------- Linux gcc 10.2.0 macOS Apple Xcode 10.1 (using clang 10.0.0) - Windows Microsoft Visual Studio 2019 update 16.7.2 + Windows Microsoft Visual Studio 2022 update 17.1.0 All compilers are expected to be able to compile to the C99 language standard, as some C99 features are used in the source code. Microsoft Visual Studio @@ -818,7 +818,7 @@ #### Test Make Control Variables These make control variables only make sense when running tests. Please see -[Testing the JDK](testing.html) for details. +**Testing the JDK** ([html](testing.html), [markdown](testing.md)) for details. * `TEST` * `TEST_JOBS` @@ -865,8 +865,44 @@ make run-test-tier1 ``` -For more details on how to run tests, please see the [Testing -the JDK](testing.html) document. +For more details on how to run tests, please see **Testing the JDK** +([html](testing.html), [markdown](testing.md)). + +## Signing + +### macOS + +Modern versions of macOS require applications to be signed and notarizied before +distribution. See Apple's documentation for more background on what this means +and how it works. To help support this, the JDK build can be configured to +automatically sign all native binaries, and the JDK bundle, with all the options +needed for successful notarization, as well as all the entitlements required by +the JDK. To enable `hardened` signing, use configure parameter +`--with-macosx-codesign=hardened` and configure the signing identity you wish to +use with `--with-macosx-codesign-identity=`. The identity refers to a +signing identity from Apple that needs to be preinstalled on the build host. + +When not signing for distribution with the hardened option, the JDK build will +still attempt to perform `adhoc` signing to add the special entitlement +`com.apple.security.get-task-allow` to each binary. This entitlement is required +to be able to dump core files from a process. Note that adding this entitlement +makes the build invalid for notarization, so it is only added when signing in +`debug` mode. To explicitly enable this kind of adhoc signing, use configure +parameter `--with-macosx-codesign=debug`. It will be enabled by default in most +cases. + +It's also possible to completely disable any explicit codesign operations done +by the JDK build using the configure parameter `--without-macosx-codesign`. +The exact behavior then depends on the architecture. For macOS on x64, it (at +least at the time of this writing) results in completely unsigned binaries that +should still work fine for development and debugging purposes. On aarch64, the +Xcode linker will apply a default "adhoc" signing, without any entitlements. +Such a build does not allow dumping core files. + +The default mode "auto" will try for `hardened` signing if the debug level is +`release` and either the default identity or the specified identity is valid. +If hardened isn't possible, then `debug` signing is chosen if it works. If +nothing works, the codesign build step is disabled. ## Cross-compiling diff -Nru openjdk-17-17.0.4+8/make/Bundles.gmk openjdk-17-17.0.6+10/make/Bundles.gmk --- openjdk-17-17.0.4+8/make/Bundles.gmk 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/Bundles.gmk 2023-01-10 13:21:55.000000000 +0000 @@ -278,16 +278,7 @@ $(SYMBOLS_EXCLUDE_PATTERN), \ $(ALL_JRE_FILES)) - # On Macosx release builds, when there is a code signing certificate available, - # the final bundle layout can be signed. - SIGN_BUNDLE := false - ifeq ($(call isTargetOs, macosx)+$(DEBUG_LEVEL), true+release) - ifneq ($(CODESIGN), ) - SIGN_BUNDLE := true - endif - endif - - ifeq ($(SIGN_BUNDLE), true) + ifeq ($(MACOSX_CODESIGN_MODE), hardened) # Macosx release build and code signing available. ################################################################################ diff -Nru openjdk-17-17.0.4+8/make/autoconf/basic_tools.m4 openjdk-17-17.0.6+10/make/autoconf/basic_tools.m4 --- openjdk-17-17.0.4+8/make/autoconf/basic_tools.m4 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/autoconf/basic_tools.m4 2023-01-10 13:21:55.000000000 +0000 @@ -160,25 +160,23 @@ AC_DEFUN([BASIC_CHECK_MAKE_OUTPUT_SYNC], [ # Check if make supports the output sync option and if so, setup using it. - AC_MSG_CHECKING([if make --output-sync is supported]) - if $MAKE --version -O > /dev/null 2>&1; then - OUTPUT_SYNC_SUPPORTED=true - AC_MSG_RESULT([yes]) - AC_MSG_CHECKING([for output-sync value]) - AC_ARG_WITH([output-sync], [AS_HELP_STRING([--with-output-sync], - [set make output sync type if supported by make. @<:@recurse@:>@])], - [OUTPUT_SYNC=$with_output_sync]) - if test "x$OUTPUT_SYNC" = "x"; then - OUTPUT_SYNC=none - fi - AC_MSG_RESULT([$OUTPUT_SYNC]) - if ! $MAKE --version -O$OUTPUT_SYNC > /dev/null 2>&1; then - AC_MSG_ERROR([Make did not the support the value $OUTPUT_SYNC as output sync type.]) - fi - else - OUTPUT_SYNC_SUPPORTED=false - AC_MSG_RESULT([no]) - fi + UTIL_ARG_WITH(NAME: output-sync, TYPE: literal, + VALID_VALUES: [none recurse line target], DEFAULT: recurse, + OPTIONAL: true, ENABLED_DEFAULT: true, + ENABLED_RESULT: OUTPUT_SYNC_SUPPORTED, + CHECKING_MSG: [for make --output-sync value], + DESC: [set make --output-sync type if supported by make], + CHECK_AVAILABLE: + [ + AC_MSG_CHECKING([if make --output-sync is supported]) + if ! $MAKE --version -O > /dev/null 2>&1; then + AC_MSG_RESULT([no]) + AVAILABLE=false + else + AC_MSG_RESULT([yes]) + fi + ] + ) AC_SUBST(OUTPUT_SYNC_SUPPORTED) AC_SUBST(OUTPUT_SYNC) ]) @@ -378,43 +376,6 @@ UTIL_REQUIRE_PROGS(MIG, mig) UTIL_REQUIRE_PROGS(XATTR, xattr) UTIL_LOOKUP_PROGS(CODESIGN, codesign) - - if test "x$CODESIGN" != "x"; then - # Check for user provided code signing identity. - # If no identity was provided, fall back to "openjdk_codesign". - AC_ARG_WITH([macosx-codesign-identity], [AS_HELP_STRING([--with-macosx-codesign-identity], - [specify the code signing identity])], - [MACOSX_CODESIGN_IDENTITY=$with_macosx_codesign_identity], - [MACOSX_CODESIGN_IDENTITY=openjdk_codesign] - ) - - AC_SUBST(MACOSX_CODESIGN_IDENTITY) - - # Verify that the codesign certificate is present - AC_MSG_CHECKING([if codesign certificate is present]) - $RM codesign-testfile - $TOUCH codesign-testfile - $CODESIGN -s "$MACOSX_CODESIGN_IDENTITY" codesign-testfile 2>&AS_MESSAGE_LOG_FD \ - >&AS_MESSAGE_LOG_FD || CODESIGN= - $RM codesign-testfile - if test "x$CODESIGN" = x; then - AC_MSG_RESULT([no]) - else - AC_MSG_RESULT([yes]) - # Verify that the codesign has --option runtime - AC_MSG_CHECKING([if codesign has --option runtime]) - $RM codesign-testfile - $TOUCH codesign-testfile - $CODESIGN --option runtime -s "$MACOSX_CODESIGN_IDENTITY" codesign-testfile \ - 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD || CODESIGN= - $RM codesign-testfile - if test "x$CODESIGN" = x; then - AC_MSG_ERROR([codesign does not have --option runtime. macOS 10.13.6 and above is required.]) - else - AC_MSG_RESULT([yes]) - fi - fi - fi UTIL_REQUIRE_PROGS(SETFILE, SetFile) fi if ! test "x$OPENJDK_TARGET_OS" = "xwindows"; then diff -Nru openjdk-17-17.0.4+8/make/autoconf/boot-jdk.m4 openjdk-17-17.0.6+10/make/autoconf/boot-jdk.m4 --- openjdk-17-17.0.4+8/make/autoconf/boot-jdk.m4 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/autoconf/boot-jdk.m4 2023-01-10 13:21:55.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2021, 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 @@ -126,16 +126,18 @@ AC_DEFUN([BOOTJDK_CHECK_ARGUMENTS], [ if test "x$with_boot_jdk" != x; then - if test -d "$with_boot_jdk"; then - BOOT_JDK=$with_boot_jdk + BOOT_JDK_ARG="$with_boot_jdk" + UTIL_FIXUP_PATH(BOOT_JDK_ARG) + if test -d "$BOOT_JDK_ARG"; then + BOOT_JDK=$BOOT_JDK_ARG BOOT_JDK_FOUND=maybe - elif test -f "$with_boot_jdk"; then - case "$with_boot_jdk" in + elif test -f "$BOOT_JDK_ARG"; then + case "$BOOT_JDK_ARG" in *.tar.gz ) BOOT_JDK_SUPPORT_DIR=$CONFIGURESUPPORT_OUTPUTDIR/boot-jdk $RM -rf $BOOT_JDK_SUPPORT_DIR $MKDIR -p $BOOT_JDK_SUPPORT_DIR - $GUNZIP -c $with_boot_jdk | $TAR xf - -C $BOOT_JDK_SUPPORT_DIR + $GUNZIP -c $BOOT_JDK_ARG | $TAR xf - -C $BOOT_JDK_SUPPORT_DIR # Try to find javac to determine BOOT_JDK path BOOT_JDK_JAVAC_PATH=`$FIND $BOOT_JDK_SUPPORT_DIR | $GREP "/bin/javac"` diff -Nru openjdk-17-17.0.4+8/make/autoconf/compare.sh.in openjdk-17-17.0.6+10/make/autoconf/compare.sh.in --- openjdk-17-17.0.4+8/make/autoconf/compare.sh.in 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/autoconf/compare.sh.in 2023-01-10 13:21:55.000000000 +0000 @@ -40,6 +40,7 @@ export BASH="@BASH@" export CAT="@CAT@" export CMP="@CMP@" +export CODESIGN="@CODESIGN@" export CP="@CP@" export CUT="@CUT@" export DIFF="@DIFF@" diff -Nru openjdk-17-17.0.4+8/make/autoconf/configure.ac openjdk-17-17.0.6+10/make/autoconf/configure.ac --- openjdk-17-17.0.4+8/make/autoconf/configure.ac 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/autoconf/configure.ac 2023-01-10 13:21:55.000000000 +0000 @@ -249,6 +249,7 @@ JDKOPT_ENABLE_DISABLE_MANPAGES JDKOPT_ENABLE_DISABLE_CDS_ARCHIVE JDKOPT_ENABLE_DISABLE_COMPATIBLE_CDS_ALIGNMENT +JDKOPT_SETUP_MACOSX_SIGNING ############################################################################### # diff -Nru openjdk-17-17.0.4+8/make/autoconf/flags-cflags.m4 openjdk-17-17.0.6+10/make/autoconf/flags-cflags.m4 --- openjdk-17-17.0.4+8/make/autoconf/flags-cflags.m4 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/autoconf/flags-cflags.m4 2023-01-10 13:21:55.000000000 +0000 @@ -116,6 +116,18 @@ CFLAGS_DEBUG_SYMBOLS="-g" ASFLAGS_DEBUG_SYMBOLS="-g" elif test "x$TOOLCHAIN_TYPE" = xclang; then + if test "x$ALLOW_ABSOLUTE_PATHS_IN_OUTPUT" = "xfalse"; then + # Check if compiler supports -fdebug-prefix-map. If so, use that to make + # the debug symbol paths resolve to paths relative to the workspace root. + workspace_root_trailing_slash="${WORKSPACE_ROOT%/}/" + DEBUG_PREFIX_CFLAGS="-fdebug-prefix-map=${workspace_root_trailing_slash}=" + FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [${DEBUG_PREFIX_CFLAGS}], + IF_FALSE: [ + DEBUG_PREFIX_CFLAGS= + ] + ) + fi + CFLAGS_DEBUG_SYMBOLS="-g" ASFLAGS_DEBUG_SYMBOLS="-g" elif test "x$TOOLCHAIN_TYPE" = xxlc; then @@ -458,9 +470,11 @@ ALWAYS_DEFINES_JVM="-D_REENTRANT" ALWAYS_DEFINES_JDK="-D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC" elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then - ALWAYS_DEFINES_JDK="-DWIN32_LEAN_AND_MEAN -D_CRT_SECURE_NO_DEPRECATE \ + # Access APIs for Windows 8 and above + # see https://docs.microsoft.com/en-us/cpp/porting/modifying-winver-and-win32-winnt?view=msvc-170 + ALWAYS_DEFINES_JDK="-DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0602 -D_CRT_SECURE_NO_DEPRECATE \ -D_CRT_NONSTDC_NO_DEPRECATE -DWIN32 -DIAL" - ALWAYS_DEFINES_JVM="-DNOMINMAX -DWIN32_LEAN_AND_MEAN" + ALWAYS_DEFINES_JVM="-DNOMINMAX -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0602" fi ############################################################################### diff -Nru openjdk-17-17.0.4+8/make/autoconf/jdk-options.m4 openjdk-17-17.0.6+10/make/autoconf/jdk-options.m4 --- openjdk-17-17.0.4+8/make/autoconf/jdk-options.m4 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/autoconf/jdk-options.m4 2023-01-10 13:21:55.000000000 +0000 @@ -727,3 +727,105 @@ AC_SUBST(SOURCE_DATE) AC_SUBST(ENABLE_REPRODUCIBLE_BUILD) ]) + +################################################################################ +# +# Setup signing on macOS. This can either be setup to sign with a real identity +# and enabling the hardened runtime, or it can simply add the debug entitlement +# com.apple.security.get-task-allow without actually signing any binaries. The +# latter is needed to be able to debug processes and dump core files on modern +# versions of macOS. It can also be skipped completely. +# +# Check if codesign will run with the given parameters +# $1: Parameters to run with +# $2: Checking message +# Sets CODESIGN_SUCCESS=true/false +AC_DEFUN([JDKOPT_CHECK_CODESIGN_PARAMS], +[ + PARAMS="$1" + MESSAGE="$2" + CODESIGN_TESTFILE="$CONFIGURESUPPORT_OUTPUTDIR/codesign-testfile" + $RM "$CODESIGN_TESTFILE" + $TOUCH "$CODESIGN_TESTFILE" + CODESIGN_SUCCESS=false + $CODESIGN $PARAMS "$CODESIGN_TESTFILE" 2>&AS_MESSAGE_LOG_FD \ + >&AS_MESSAGE_LOG_FD && CODESIGN_SUCCESS=true + $RM "$CODESIGN_TESTFILE" + AC_MSG_CHECKING([$MESSAGE]) + if test "x$CODESIGN_SUCCESS" = "xtrue"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi +]) + +AC_DEFUN([JDKOPT_CHECK_CODESIGN_HARDENED], +[ + JDKOPT_CHECK_CODESIGN_PARAMS([-s "$MACOSX_CODESIGN_IDENTITY" --option runtime], + [if codesign with hardened runtime is possible]) +]) + +AC_DEFUN([JDKOPT_CHECK_CODESIGN_DEBUG], +[ + JDKOPT_CHECK_CODESIGN_PARAMS([-s -], [if debug mode codesign is possible]) +]) + +AC_DEFUN([JDKOPT_SETUP_MACOSX_SIGNING], +[ + ENABLE_CODESIGN=false + if test "x$OPENJDK_TARGET_OS" = "xmacosx" && test "x$CODESIGN" != "x"; then + + UTIL_ARG_WITH(NAME: macosx-codesign, TYPE: literal, OPTIONAL: true, + VALID_VALUES: [hardened debug auto], DEFAULT: auto, + ENABLED_DEFAULT: true, + CHECKING_MSG: [for macosx code signing mode], + DESC: [set the macosx code signing mode (hardened, debug, auto)] + ) + + MACOSX_CODESIGN_MODE=disabled + if test "x$MACOSX_CODESIGN_ENABLED" = "xtrue"; then + + # Check for user provided code signing identity. + UTIL_ARG_WITH(NAME: macosx-codesign-identity, TYPE: string, + DEFAULT: openjdk_codesign, CHECK_VALUE: UTIL_CHECK_STRING_NON_EMPTY, + DESC: [specify the macosx code signing identity], + CHECKING_MSG: [for macosx code signing identity] + ) + AC_SUBST(MACOSX_CODESIGN_IDENTITY) + + if test "x$MACOSX_CODESIGN" = "xauto"; then + # Only try to default to hardened signing on release builds + if test "x$DEBUG_LEVEL" = "xrelease"; then + JDKOPT_CHECK_CODESIGN_HARDENED + if test "x$CODESIGN_SUCCESS" = "xtrue"; then + MACOSX_CODESIGN_MODE=hardened + fi + fi + if test "x$MACOSX_CODESIGN_MODE" = "xdisabled"; then + JDKOPT_CHECK_CODESIGN_DEBUG + if test "x$CODESIGN_SUCCESS" = "xtrue"; then + MACOSX_CODESIGN_MODE=debug + fi + fi + AC_MSG_CHECKING([for macosx code signing mode]) + AC_MSG_RESULT([$MACOSX_CODESIGN_MODE]) + elif test "x$MACOSX_CODESIGN" = "xhardened"; then + JDKOPT_CHECK_CODESIGN_HARDENED + if test "x$CODESIGN_SUCCESS" = "xfalse"; then + AC_MSG_ERROR([Signing with hardened runtime is not possible]) + fi + MACOSX_CODESIGN_MODE=hardened + elif test "x$MACOSX_CODESIGN" = "xdebug"; then + JDKOPT_CHECK_CODESIGN_DEBUG + if test "x$CODESIGN_SUCCESS" = "xfalse"; then + AC_MSG_ERROR([Signing in debug mode is not possible]) + fi + MACOSX_CODESIGN_MODE=debug + else + AC_MSG_ERROR([unknown value for --with-macosx-codesign: $MACOSX_CODESIGN]) + fi + fi + AC_SUBST(MACOSX_CODESIGN_IDENTITY) + AC_SUBST(MACOSX_CODESIGN_MODE) + fi +]) diff -Nru openjdk-17-17.0.4+8/make/autoconf/lib-bundled.m4 openjdk-17-17.0.6+10/make/autoconf/lib-bundled.m4 --- openjdk-17-17.0.4+8/make/autoconf/lib-bundled.m4 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/autoconf/lib-bundled.m4 2023-01-10 13:21:55.000000000 +0000 @@ -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 @@ -217,6 +217,9 @@ 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 diff -Nru openjdk-17-17.0.4+8/make/autoconf/platform.m4 openjdk-17-17.0.6+10/make/autoconf/platform.m4 --- openjdk-17-17.0.4+8/make/autoconf/platform.m4 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/autoconf/platform.m4 2023-01-10 13:21:55.000000000 +0000 @@ -212,7 +212,7 @@ VAR_OS=windows VAR_OS_ENV=windows.wsl ;; - *msys*) + *msys* | *mingw*) VAR_OS=windows VAR_OS_ENV=windows.msys2 ;; diff -Nru openjdk-17-17.0.4+8/make/autoconf/spec.gmk.in openjdk-17-17.0.6+10/make/autoconf/spec.gmk.in --- openjdk-17-17.0.4+8/make/autoconf/spec.gmk.in 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/autoconf/spec.gmk.in 2023-01-10 13:21:55.000000000 +0000 @@ -443,7 +443,8 @@ # The highest allowed version of macosx MACOSX_VERSION_MAX=@MACOSX_VERSION_MAX@ -# The macosx code signing identity to use +# The macosx code signing configuration +MACOSX_CODESIGN_MODE:=@MACOSX_CODESIGN_MODE@ MACOSX_CODESIGN_IDENTITY=@MACOSX_CODESIGN_IDENTITY@ # Toolchain type: gcc, clang, xlc, microsoft... diff -Nru openjdk-17-17.0.4+8/make/autoconf/util.m4 openjdk-17-17.0.6+10/make/autoconf/util.m4 --- openjdk-17-17.0.4+8/make/autoconf/util.m4 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/autoconf/util.m4 2023-01-10 13:21:55.000000000 +0000 @@ -325,12 +325,12 @@ # Creates a command-line option using the --enable-* pattern. Will return a # value of 'true' or 'false' in the RESULT variable, depending on whether the # option was enabled or not by the user. The option can not be turned on if it -# is not available, as specified by AVAILABLE and/or AVAILABLE_CHECK. +# is not available, as specified by AVAILABLE and/or CHECK_AVAILABLE. # # Arguments: # NAME: The base name of this option (i.e. what follows --enable-). Required. # RESULT: The name of the variable to set to the result. Defaults to -# _RESULT. +# _ENABLED. # DEFAULT: The default value for this option. Can be true, false or auto. # Defaults to true. # AVAILABLE: If true, this option is allowed to be selected. Defaults to true. @@ -376,7 +376,7 @@ m4_define([ARG_DESC], m4_if(ARG_DESC, , [Enable the ARG_NAME feature], m4_normalize(ARG_DESC))) # If CHECKING_MSG is not specified, set it to a generic description. - m4_define([ARG_CHECKING_MSG], m4_if(ARG_CHECKING_MSG, , [for --enable-ARG_NAME], ARG_CHECKING_MSG)) + m4_define([ARG_CHECKING_MSG], m4_if(ARG_CHECKING_MSG, , [for --enable-ARG_NAME], m4_normalize(ARG_CHECKING_MSG))) # If the code blocks are not given, set them to the empty statements to avoid # tripping up bash. @@ -463,3 +463,351 @@ fi ]) +############################################################################### +# Helper functions for ARG_WITH, to validate different types of argument + +# Dispatcher to call the correct UTIL_CHECK_TYPE_* function depending on the ARG_TYPE +AC_DEFUN([UTIL_CHECK_TYPE], +[ + UTIL_CHECK_TYPE_$1($2) +]) + +AC_DEFUN([UTIL_CHECK_TYPE_string], +[ + # All strings always passes +]) + +AC_DEFUN([UTIL_CHECK_TYPE_integer], +[ + # Check that the argument is an integer + # Additional [] needed to keep m4 from mangling shell constructs. + [ if [[ ! "$1" =~ ^[0-9]+$ ]] ; then ] + FAILURE="Not an integer: $1" + fi +]) + +AC_DEFUN([UTIL_CHECK_TYPE_file], +[ + # Check that the argument is an existing file + if test ! -f "$1" ; then + FAILURE="File $1 does not exist or is not readable" + fi +]) + +AC_DEFUN([UTIL_CHECK_TYPE_directory], +[ + # Check that the argument is an existing directory + if test ! -d "$1" ; then + FAILURE="Directory $1 does not exist or is not readable" + fi + + if test "[x]ARG_CHECK_FOR_FILES" != x; then + for file in ARG_CHECK_FOR_FILES; do + found_files=$($ECHO $(ls $1/$file 2> /dev/null)) + if test "x$found_files" = x; then + FAILURE="Directory $1 does not contain $file" + break + elif ! test -e "$found_files"; then + FAILURE="Directory $1 contains multiple $file: $found_files" + break + fi + done + fi +]) + +AC_DEFUN([UTIL_CHECK_TYPE_literal], +[ + # Check if it contains a space between non-space characters + # Additional [] needed to keep m4 from mangling shell constructs. + [ if [[ "$1" =~ [^' ']' '+[^' '] ]] ; then ] + FAILURE="Multiple words: $1" + fi + + # Check that the selected variants are valid + UTIL_GET_NON_MATCHING_VALUES(invalid_value, $1, \ + ARG_VALID_VALUES) + if test "x$invalid_value" != x; then + FAILURE="Invalid value: $invalid_value. Valid values are: ARG_VALID_VALUES" + fi +]) + +AC_DEFUN([UTIL_CHECK_TYPE_multivalue], +[ + # We accept either space or comma as separator, but use space internally + values=`$ECHO $1 | $SED -e 's/,/ /g'` + + # Check that the selected variants are valid + UTIL_GET_NON_MATCHING_VALUES(invalid_value, $values, \ + ARG_VALID_VALUES) + if test "x$invalid_value" != x; then + FAILURE="Invalid value(s): $invalid_value. Valid values are: ARG_VALID_VALUES" + fi + + # Update to version without comma + ARG_RESULT=$($ECHO $values) +]) + +AC_DEFUN([UTIL_CHECK_TYPE_features], +[ + # We accept either space or comma as separator, but use space internally + feature_list=`$ECHO $1 | $SED -e 's/,/ /g'` + features_enabled=`$ECHO $feature_list | \ + $AWK '{ for (i=1; i<=NF; i++) if (!match($i, /^-.*/)) printf("%s ", $i) }'` + features_disabled=`$ECHO $feature_list | \ + $AWK '{ for (i=1; i<=NF; i++) if (match($i, /^-.*/)) printf("%s ", substr($i, 2))}'` + + # Check that the selected features are valid + UTIL_GET_NON_MATCHING_VALUES(invalid_features, $features_enabled \ + $features_disabled, ARG_VALID_VALUES) + if test "x$invalid_features" != x; then + FAILURE="Invalid feature(s): $invalid_features. Valid values are: ARG_VALID_VALUES" + fi + + # Update to version without comma + ARG_RESULT=$($ECHO $feature_list) +]) + +############################################################################### +# Creates a command-line option using the --with-* pattern. Will return a +# string in the RESULT variable with the option provided by the user, or the +# empty string if the --with-* option was not given. The option can not be given +# if it is not available, as specified by AVAILABLE and/or CHECK_AVAILABLE. +# +# Arguments: +# NAME: The base name of this option (i.e. what follows --with-). Required. +# TYPE: The type of the value. Can be one of "string", "integer", "file", +# "directory", "literal", "multivalue" or "features". Required. +# DEFAULT: The default value for this option. Can be any valid string. +# Required. +# OPTIONAL: If this feature can be disabled. Defaults to false. If true, +# the feature can be disabled using --without-FOO, --with-FOO=no, or +# --with-FOO=. Check the ENABLED_RESULT variable for the enabled/disabled +# state. +# RESULT: The name of the variable to set to the result. Defaults to +# . Set to empty if ENABLED_RESULT is false. +# ENABLED_DEFAULT: If the value is enabled by default. Defaults to false. Only +# relevant if OPTIONAL is true. +# ENABLED_RESULT: The name of the variable to set to the enabled/disabled +# result state. Defaults to _ENABLED. +# AVAILABLE: If true, this option is allowed to be selected. Defaults to true. +# DESC: A description of this option. Defaults to a generic and unhelpful +# string. +# DEFAULT_DESC: A message describing the default value, for the help. Defaults +# to the literal value of DEFAULT, or "" if DEFAULT is empty. +# CHECKING_MSG: The message to present to user when checking this option. +# Defaults to a generic message. +# CHECK_AVAILABLE: An optional code block to execute to determine if the +# option should be available. Must set AVAILABLE to 'false' if not. +# VALID_VALUES: A list of literals that are the allowed values. Only valid if +# TYPE is "literal", "multivalue" or "features". +# CHECK_VALUE: An optional code block to execute to determine if the value +# is correct. Must set FAILURE to a non-empty string if not. This string +# will be displayed. The value is given in $RESULT. +# CHECK_FOR_FILES: A list of files to verify the presence for. Only valid if +# TYPE is "directory". Paths are relative the directory given as value. +# Wildcards are accepted. Exactly one matching file must be found, for each +# listed file, or FAILURE is set. +# IF_AUTO: An optional code block to execute if the value is "auto", either by +# default or given by the command line. Must set RESULT to the calculated +# value. +# IF_GIVEN: An optional code block to execute if the option was given on the +# command line (regardless of the value). +# IF_NOT_GIVEN: An optional code block to execute if the option was not given +# on the command line (regardless of the value). +# +UTIL_DEFUN_NAMED([UTIL_ARG_WITH], + [*NAME *TYPE *DEFAULT OPTIONAL RESULT ENABLED_DEFAULT ENABLED_RESULT + AVAILABLE DESC DEFAULT_DESC CHECKING_MSG CHECK_AVAILABLE VALID_VALUES + CHECK_VALUE CHECK_FOR_FILES IF_AUTO IF_GIVEN IF_NOT_GIVEN], [$@], +[ + ########################## + # Part 1: Set up m4 macros + ########################## + + # If ENABLED_DEFAULT is not specified, set it to 'false'. + m4_define([ARG_ENABLED_DEFAULT], m4_if(ARG_ENABLED_DEFAULT, , false, ARG_ENABLED_DEFAULT)) + + # If AVAILABLE is not specified, set it to 'true'. + m4_define([ARG_AVAILABLE], m4_if(ARG_AVAILABLE, , true, ARG_AVAILABLE)) + + # If OPTIONAL is not specified, set it to 'false'. + m4_define([ARG_OPTIONAL], m4_if(ARG_OPTIONAL, , false, ARG_OPTIONAL)) + + # If DEFAULT_DESC is not specified, calculate it from DEFAULT. + m4_define([ARG_DEFAULT_DESC], m4_if(ARG_DEFAULT_DESC, , m4_if(ARG_DEFAULT, , , ARG_DEFAULT), ARG_DEFAULT_DESC)) + + # If RESULT is not specified, set it to 'ARG_NAME'. + m4_define([ARG_RESULT], m4_if(ARG_RESULT, , m4_translit(ARG_NAME, [a-z-], [A-Z_]), ARG_RESULT)) + + # If ENABLED_RESULT is not specified, set it to 'ARG_NAME[_ENABLED]'. + m4_define([ARG_ENABLED_RESULT], m4_if(ARG_ENABLED_RESULT, , m4_translit(ARG_NAME, [a-z-], [A-Z_])[_ENABLED], ARG_ENABLED_RESULT)) + + # Construct shell variable names for the option + m4_define(ARG_OPTION, [with_]m4_translit(ARG_NAME, [-], [_])) + m4_define(ARG_GIVEN, m4_translit(ARG_NAME, [a-z-], [A-Z_])[_GIVEN]) + + # If DESC is not specified, set it to a generic description. + m4_define([ARG_DESC], m4_if(ARG_DESC, , [Give a value for the ARG_NAME feature], m4_normalize(ARG_DESC))) + + # If CHECKING_MSG is not specified, set it to a generic description. + m4_define([ARG_CHECKING_MSG], m4_if(ARG_CHECKING_MSG, , [for --with-ARG_NAME], m4_normalize(ARG_CHECKING_MSG))) + + m4_define([ARG_HAS_AUTO_BLOCK], m4_if(ARG_IF_AUTO, , false, true)) + + # If the code blocks are not given, set them to the empty statements to avoid + # tripping up bash. + m4_define([ARG_CHECK_AVAILABLE], m4_if(ARG_CHECK_AVAILABLE, , :, ARG_CHECK_AVAILABLE)) + m4_define([ARG_CHECK_VALUE], m4_if(ARG_CHECK_VALUE, , :, ARG_CHECK_VALUE)) + m4_define([ARG_CHECK_FOR_FILES], m4_if(ARG_CHECK_FOR_FILES, , :, ARG_CHECK_FOR_FILES)) + m4_define([ARG_IF_AUTO], m4_if(ARG_IF_AUTO, , :, ARG_IF_AUTO)) + m4_define([ARG_IF_GIVEN], m4_if(ARG_IF_GIVEN, , :, ARG_IF_GIVEN)) + m4_define([ARG_IF_NOT_GIVEN], m4_if(ARG_IF_NOT_GIVEN, , :, ARG_IF_NOT_GIVEN)) + + ########################## + # Part 2: Set up autoconf shell code + ########################## + + # Check that OPTIONAL has a valid value + if test "[x]ARG_OPTIONAL" != xtrue && test "[x]ARG_OPTIONAL" != xfalse ; then + AC_MSG_ERROR([Internal error: Argument OPTIONAL to [UTIL_ARG_WITH] can only be true or false, was: 'ARG_OPTIONAL']) + fi + + # Check that ENABLED_DEFAULT has a valid value + if test "[x]ARG_ENABLED_DEFAULT" != xtrue && test "[x]ARG_ENABLED_DEFAULT" != xfalse ; then + AC_MSG_ERROR([Internal error: Argument ENABLED_DEFAULT to [UTIL_ARG_WITH] can only be true or false, was: 'ARG_ENABLED_DEFAULT']) + fi + + # Check that AVAILABLE has a valid value + if test "[x]ARG_AVAILABLE" != xtrue && test "[x]ARG_AVAILABLE" != xfalse; then + AC_MSG_ERROR([Internal error: Argument AVAILABLE to [UTIL_ARG_WITH] can only be true or false, was: 'ARG_AVAILABLE']) + fi + + # Check that TYPE has a valid value + # Need to assign since we can't expand ARG TYPE inside the m4 quoted if statement + TEST_TYPE="ARG_TYPE" + # Additional [] needed to keep m4 from mangling shell constructs. + [ if [[ ! "$TEST_TYPE" =~ ^(string|integer|file|directory|literal|multivalue|features)$ ]] ; then ] + AC_MSG_ERROR([Internal error: Argument TYPE to [UTIL_ARG_WITH] must be a valid type, was: 'ARG_TYPE']) + fi + + AC_ARG_WITH(ARG_NAME, AS_HELP_STRING([--with-]ARG_NAME, + [ARG_DESC [ARG_DEFAULT_DESC]]), [ARG_GIVEN=true], [ARG_GIVEN=false]) + + # Check if the option is available + AVAILABLE=ARG_AVAILABLE + # Run the available check block (if any), which can overwrite AVAILABLE. + ARG_CHECK_AVAILABLE + + # Check if the option should be turned on + echo check msg:ARG_CHECKING_MSG: + AC_MSG_CHECKING(ARG_CHECKING_MSG) + + if test x$AVAILABLE = xfalse; then + ARG_RESULT="$ARG_OPTION" + ARG_ENABLED_RESULT=false + REASON="not available" + else + if test x$ARG_GIVEN = xfalse; then + ARG_RESULT="ARG_DEFAULT" + if test "[x]ARG_OPTIONAL" = xtrue; then + ARG_ENABLED_RESULT=ARG_ENABLED_DEFAULT + else + ARG_ENABLED_RESULT=true + fi + REASON="default" + + else # ARG_GIVEN is true + # Special treatment of "yes" and "no" for "--with-ARG" and "--without-ARG" + if test "x$ARG_OPTION" = xyes || test "x$ARG_OPTION" = xno || test "x$ARG_OPTION" = x ; then + if test "[x]ARG_OPTIONAL" = xfalse; then + if test "x$ARG_OPTION" = x; then + # If not optional, the empty string is a valid value + ARG_RESULT="" + ARG_ENABLED_RESULT=true + REASON="from command line" + else + AC_MSG_RESULT([invalid]) + AC_MSG_ERROR([Option [--with-]ARG_NAME must have a specified value]) + fi + else + if test "x$ARG_OPTION" = xyes; then + ARG_RESULT="ARG_DEFAULT" + ARG_ENABLED_RESULT=true + REASON="default as enabled from command line" + else + # For optional values, both --without-FOO and --with-FOO= disables + ARG_RESULT="" + ARG_ENABLED_RESULT=false + REASON="from command line" + fi + fi + else + # The most common case -- the user gives a value for the option. + ARG_RESULT="$ARG_OPTION" + ARG_ENABLED_RESULT=true + REASON="from command line" + fi + fi + fi + + if test "x$ARG_ENABLED_RESULT" = xfalse; then + if test "x$REASON" = "xnot available"; then + AC_MSG_RESULT([, $REASON]) + if test "x$ARG_RESULT" != "x" && test "x$ARG_RESULT" != "xno" ; then + AC_MSG_WARN([Option [--with-]ARG_NAME is not available for this configuration]) + fi + else + AC_MSG_RESULT([, $REASON]) + fi + ARG_RESULT="" + else + if test [x]ARG_HAS_AUTO_BLOCK = xtrue && test "x$ARG_RESULT" = xauto; then + # Execute "auto" payload + ARG_IF_AUTO + + ARG_RESULT="$RESULT" + REASON="$REASON (calculated from 'auto')" + fi + + if test "x$ARG_RESULT" = x; then + AC_MSG_RESULT([, $REASON]) + else + AC_MSG_RESULT([$ARG_RESULT, $REASON]) + fi + fi + + # Verify value + # First use our dispatcher to verify that type requirements are satisfied + UTIL_CHECK_TYPE(ARG_TYPE, $ARG_RESULT) + + if test "x$FAILURE" = x; then + # Execute custom verification payload, if present + RESULT="$ARG_RESULT" + + ARG_CHECK_VALUE + + ARG_RESULT="$RESULT" + fi + + if test "x$FAILURE" != x; then + AC_MSG_NOTICE([Invalid value for [--with-]ARG_NAME: "$ARG_RESULT"]) + AC_MSG_NOTICE([$FAILURE]) + AC_MSG_ERROR([Cannot continue]) + fi + + # Execute result payloads, if present + if test x$ARG_GIVEN = xtrue; then + ARG_IF_GIVEN + else + ARG_IF_NOT_GIVEN + fi +]) + +############################################################################### +# Helper functions for CHECK_VALUE in ARG_WITH. +AC_DEFUN([UTIL_CHECK_STRING_NON_EMPTY], +[ + if test "x$RESULT" = "x"; then + FAILURE="Value cannot be empty" + fi +]) diff -Nru openjdk-17-17.0.4+8/make/common/NativeCompilation.gmk openjdk-17-17.0.6+10/make/common/NativeCompilation.gmk --- openjdk-17-17.0.4+8/make/common/NativeCompilation.gmk 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/common/NativeCompilation.gmk 2023-01-10 13:21:55.000000000 +0000 @@ -267,10 +267,15 @@ # specialized file is found, returns the default file. # $1 Executable to find entitlements file for. ENTITLEMENTS_DIR := $(TOPDIR)/make/data/macosxsigning -DEFAULT_ENTITLEMENTS_FILE := $(ENTITLEMENTS_DIR)/default.plist +ifeq ($(MACOSX_CODESIGN_MODE), debug) + CODESIGN_PLIST_SUFFIX := -debug +else + CODESIGN_PLIST_SUFFIX := +endif +DEFAULT_ENTITLEMENTS_FILE := $(ENTITLEMENTS_DIR)/default$(CODESIGN_PLIST_SUFFIX).plist GetEntitlementsFile = \ - $(foreach f, $(ENTITLEMENTS_DIR)/$(strip $(notdir $1)).plist, \ + $(foreach f, $(ENTITLEMENTS_DIR)/$(strip $(notdir $1))$(CODESIGN_PLIST_SUFFIX).plist, \ $(if $(wildcard $f), $f, $(DEFAULT_ENTITLEMENTS_FILE)) \ ) @@ -359,9 +364,9 @@ $1_FLAGS := $(BASIC_ASFLAGS) $$($1_BASE_ASFLAGS) $1_COMPILER := $(AS) - # gcc assembly files must contain an appropriate relative .file + # gcc or clang assembly files must contain an appropriate relative .file # path for reproducible builds. - ifeq ($(TOOLCHAIN_TYPE), gcc) + ifneq ($(findstring $(TOOLCHAIN_TYPE), gcc clang), ) # If no absolute paths allowed, work out relative source file path # for assembly .file substitution, otherwise use full file path ifeq ($(ALLOW_ABSOLUTE_PATHS_IN_OUTPUT), false) @@ -403,8 +408,9 @@ $1_OBJ_DEPS := $$($1_SRC_FILE) $$($$($1_BASE)_COMPILE_VARDEPS_FILE) \ $$($$($1_BASE)_EXTRA_DEPS) $$($1_VARDEPS_FILE) $1_COMPILE_OPTIONS := $$($1_FLAGS) $(CC_OUT_OPTION)$$($1_OBJ) $$($1_SRC_FILE) - # For reproducible builds with gcc ensure random symbol generation is seeded deterministically - ifeq ($(TOOLCHAIN_TYPE), gcc) + # For reproducible builds with gcc and clang ensure random symbol generation is + # seeded deterministically + ifneq ($(findstring $(TOOLCHAIN_TYPE), gcc clang), ) ifeq ($$(ENABLE_REPRODUCIBLE_BUILD), true) $1_COMPILE_OPTIONS += -frandom-seed="$$($1_FILENAME)" endif @@ -1205,11 +1211,16 @@ $$($1_MT) -nologo -manifest $$($1_MANIFEST) -identity:"$$($1_NAME).exe, version=$$($1_MANIFEST_VERSION)" -outputresource:$$@;#1 endif endif - # This only works if the openjdk_codesign identity is present on the system. Let - # silently fail otherwise. - ifneq ($(CODESIGN), ) + # On macosx, optionally run codesign on every binary. + # Remove signature explicitly first to avoid warnings if the linker + # added a default adhoc signature. + ifeq ($(MACOSX_CODESIGN_MODE), hardened) + $(CODESIGN) --remove-signature $$@ $(CODESIGN) -f -s "$(MACOSX_CODESIGN_IDENTITY)" --timestamp --options runtime \ --entitlements $$(call GetEntitlementsFile, $$@) $$@ + else ifeq ($(MACOSX_CODESIGN_MODE), debug) + $(CODESIGN) --remove-signature $$@ + $(CODESIGN) -f -s - --entitlements $$(call GetEntitlementsFile, $$@) $$@ endif endif diff -Nru openjdk-17-17.0.4+8/make/common/modules/LauncherCommon.gmk openjdk-17-17.0.6+10/make/common/modules/LauncherCommon.gmk --- openjdk-17-17.0.4+8/make/common/modules/LauncherCommon.gmk 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/common/modules/LauncherCommon.gmk 2023-01-10 13:21:55.000000000 +0000 @@ -196,9 +196,11 @@ ################################################################################ # Create man pages for jmod to pick up. There should be a one-to-one # relationship between executables and man pages (even if this is not always -# the case), so piggyback man page generation on the launcher compilation. +# the case), so piggyback man page generation on the launcher compilation. This +# file may be included from other places as well, so only process man pages +# when called from /Launcher.gmk. -ifeq ($(call isTargetOsType, unix), true) +ifeq ($(call isTargetOsType, unix)+$(MAKEFILE_PREFIX), true+Launcher) # Only build manpages on unix systems. # We assume all our man pages should reside in section 1. @@ -242,9 +244,9 @@ FILTER := $(PANDOC_TROFF_MANPAGE_FILTER), \ POST_PROCESS := $(MAN_POST_PROCESS), \ REPLACEMENTS := \ - @@COPYRIGHT_YEAR@@ => $(COPYRIGHT_YEAR) ; \ - @@VERSION_SHORT@@ => $(VERSION_SHORT) ; \ - @@VERSION_SPECIFICATION@@ => $(VERSION_SPECIFICATION), \ + @@COPYRIGHT_YEAR@@ => $(COPYRIGHT_YEAR) ; \ + @@VERSION_SHORT@@ => $(VERSION_SHORT) ; \ + @@VERSION_SPECIFICATION@@ => $(VERSION_SPECIFICATION), \ EXTRA_DEPS := $(PANDOC_TROFF_MANPAGE_FILTER) \ $(PANDOC_TROFF_MANPAGE_FILTER_SOURCE), \ )) diff -Nru openjdk-17-17.0.4+8/make/conf/github-actions.conf openjdk-17-17.0.6+10/make/conf/github-actions.conf --- openjdk-17-17.0.4+8/make/conf/github-actions.conf 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/make/conf/github-actions.conf 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,41 @@ +# +# Copyright (c) 2020, 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# Versions and download locations for dependencies used by GitHub Actions (GHA) + +GTEST_VERSION=1.8.1 +JTREG_VERSION=6.1+2 + +LINUX_X64_BOOT_JDK_EXT=tar.gz +LINUX_X64_BOOT_JDK_URL=https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_x64_linux_hotspot_17.0.2_8.tar.gz +LINUX_X64_BOOT_JDK_SHA256=288f34e3ba8a4838605636485d0365ce23e57d5f2f68997ac4c2e4c01967cd48 + +WINDOWS_X64_BOOT_JDK_EXT=zip +WINDOWS_X64_BOOT_JDK_URL=https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_x64_windows_hotspot_17.0.2_8.zip +WINDOWS_X64_BOOT_JDK_SHA256=d083479ca927dce2f586f779373d895e8bf668c632505740279390384edf03fa + +MACOS_X64_BOOT_JDK_EXT=tar.gz +MACOS_X64_BOOT_JDK_URL=https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_x64_mac_hotspot_17.0.2_8.tar.gz +MACOS_X64_BOOT_JDK_SHA256=3630e21a571b7180876bf08f85d0aac0bdbb3267b2ae9bd242f4933b21f9be32 diff -Nru openjdk-17-17.0.4+8/make/conf/jib-profiles.js openjdk-17-17.0.6+10/make/conf/jib-profiles.js --- openjdk-17-17.0.4+8/make/conf/jib-profiles.js 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/conf/jib-profiles.js 2023-01-10 13:21:55.000000000 +0000 @@ -564,7 +564,7 @@ "ANT_HOME": input.get("ant", "home_path") } }; - [ "linux-x64", "macosx-x64", "windows-x64"] + [ "linux-x64", "macosx-aarch64", "macosx-x64", "windows-x64", "linux-aarch64"] .forEach(function (name) { var maketestName = name + "-testmake"; profiles[maketestName] = concatObjects(profiles[name], testmakeBase); @@ -1049,7 +1049,7 @@ var devkit_platform_revisions = { linux_x64: "gcc10.3.0-OL6.4+1.0", macosx: "Xcode12.4+1.0", - windows_x64: "VS2019-16.9.3+1.0", + windows_x64: "VS2022-17.1.0+1.0", linux_aarch64: "gcc10.3.0-OL7.6+1.0", linux_arm: "gcc8.2.0-Fedora27+1.0", linux_ppc64le: "gcc8.2.0-Fedora27+1.0", diff -Nru openjdk-17-17.0.4+8/make/conf/test-dependencies openjdk-17-17.0.6+10/make/conf/test-dependencies --- openjdk-17-17.0.4+8/make/conf/test-dependencies 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/conf/test-dependencies 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -# -# Copyright (c) 2020, 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 -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# Versions and download locations for dependencies used by pre-submit testing. - -BOOT_JDK_VERSION=17 -JTREG_VERSION=6 -JTREG_BUILD=1 -GTEST_VERSION=1.8.1 - -LINUX_X64_BOOT_JDK_FILENAME=openjdk-17.0.2_linux-x64_bin.tar.gz -LINUX_X64_BOOT_JDK_URL=https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_x64_linux_hotspot_17.0.2_8.tar.gz -LINUX_X64_BOOT_JDK_SHA256=288f34e3ba8a4838605636485d0365ce23e57d5f2f68997ac4c2e4c01967cd48 - -WINDOWS_X64_BOOT_JDK_FILENAME=openjdk-17.0.2_windows-x64_bin.zip -WINDOWS_X64_BOOT_JDK_URL=https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_x64_windows_hotspot_17.0.2_8.zip -WINDOWS_X64_BOOT_JDK_SHA256=d083479ca927dce2f586f779373d895e8bf668c632505740279390384edf03fa - -MACOS_X64_BOOT_JDK_FILENAME=openjdk-17.0.2_macos-x64_bin.tar.gz -MACOS_X64_BOOT_JDK_URL=https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_x64_mac_hotspot_17.0.2_8.tar.gz -MACOS_X64_BOOT_JDK_SHA256=3630e21a571b7180876bf08f85d0aac0bdbb3267b2ae9bd242f4933b21f9be32 diff -Nru openjdk-17-17.0.4+8/make/conf/version-numbers.conf openjdk-17-17.0.6+10/make/conf/version-numbers.conf --- openjdk-17-17.0.4+8/make/conf/version-numbers.conf 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/conf/version-numbers.conf 2023-01-10 13:21:55.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2020, 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 @@ -28,12 +28,12 @@ DEFAULT_VERSION_FEATURE=17 DEFAULT_VERSION_INTERIM=0 -DEFAULT_VERSION_UPDATE=4 +DEFAULT_VERSION_UPDATE=6 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=2023-01-17 DEFAULT_VERSION_CLASSFILE_MAJOR=61 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`" DEFAULT_VERSION_CLASSFILE_MINOR=0 DEFAULT_VERSION_DOCS_API_SINCE=11 diff -Nru openjdk-17-17.0.4+8/make/data/autoheaders/assemblyprefix.h openjdk-17-17.0.6+10/make/data/autoheaders/assemblyprefix.h --- openjdk-17-17.0.4+8/make/data/autoheaders/assemblyprefix.h 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/autoheaders/assemblyprefix.h 2023-01-10 13:21:55.000000000 +0000 @@ -4,7 +4,9 @@ # # 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. +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or diff -Nru openjdk-17-17.0.4+8/make/data/cldr/common/bcp47/timezone.xml openjdk-17-17.0.6+10/make/data/cldr/common/bcp47/timezone.xml --- openjdk-17-17.0.4+8/make/data/cldr/common/bcp47/timezone.xml 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/cldr/common/bcp47/timezone.xml 2023-01-10 13:21:55.000000000 +0000 @@ -279,6 +279,7 @@ + @@ -393,7 +394,7 @@ - + diff -Nru openjdk-17-17.0.4+8/make/data/cldr/common/main/es_419.xml openjdk-17-17.0.6+10/make/data/cldr/common/main/es_419.xml --- openjdk-17-17.0.4+8/make/data/cldr/common/main/es_419.xml 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/cldr/common/main/es_419.xml 2023-01-10 13:21:55.000000000 +0000 @@ -1019,11 +1019,8 @@ - 0 billón 0 billón - 00 billones 00 billones - 000 billones 000 billones diff -Nru openjdk-17-17.0.4+8/make/data/cldr/common/main/es_MX.xml openjdk-17-17.0.6+10/make/data/cldr/common/main/es_MX.xml --- openjdk-17-17.0.4+8/make/data/cldr/common/main/es_MX.xml 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/cldr/common/main/es_MX.xml 2023-01-10 13:21:55.000000000 +0000 @@ -713,11 +713,8 @@ - 0 billón 0 billones - 00 billones 00 billones - 000 billones 000 billones diff -Nru openjdk-17-17.0.4+8/make/data/cldr/common/main/root.xml openjdk-17-17.0.6+10/make/data/cldr/common/main/root.xml --- openjdk-17-17.0.4+8/make/data/cldr/common/main/root.xml 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/cldr/common/main/root.xml 2023-01-10 13:21:55.000000000 +0000 @@ -2932,6 +2932,18 @@ Ho Chi Minh + + Bahía de Banderas + + + Cancún + + + Ciudad Juárez + + + Mérida + diff -Nru openjdk-17-17.0.4+8/make/data/cldr/common/supplemental/metaZones.xml openjdk-17-17.0.6+10/make/data/cldr/common/supplemental/metaZones.xml --- openjdk-17-17.0.4+8/make/data/cldr/common/supplemental/metaZones.xml 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/cldr/common/supplemental/metaZones.xml 2023-01-10 13:21:55.000000000 +0000 @@ -331,7 +331,14 @@ - + + + + + + + + @@ -618,14 +625,14 @@ - + + - - + diff -Nru openjdk-17-17.0.4+8/make/data/currency/CurrencyData.properties openjdk-17-17.0.6+10/make/data/currency/CurrencyData.properties --- openjdk-17-17.0.4+8/make/data/currency/CurrencyData.properties 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/currency/CurrencyData.properties 2023-01-10 13:21:55.000000000 +0000 @@ -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 @@ # Version of the currency code information in this class. # It is a serial number that accompanies with each amendment. -dataVersion=170 +dataVersion=174 # List of all valid ISO 4217 currency codes. # To ensure compatibility, do not remove codes. @@ -51,7 +51,7 @@ 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-\ @@ -189,7 +189,7 @@ # COTE D'IVOIRE CI=XOF # CROATIA -HR=HRK +HR=HRK;2022-12-31-23-00-00;EUR # CUBA CU=CUP # Cura\u00e7ao @@ -317,6 +317,8 @@ KP=KPW # KOREA (THE REPUBLIC OF) KR=KRW +# KOSOVO - Not in ISO 3166/4217 +XK=EUR # KUWAIT KW=KWD # KYRGYZSTAN @@ -482,7 +484,7 @@ # SEYCHELLES SC=SCR # SIERRA LEONE -SL=SLL +SL=SLE # SINGAPORE SG=SGD # SLOVAKIA diff -Nru openjdk-17-17.0.4+8/make/data/macosxsigning/default-debug.plist openjdk-17-17.0.6+10/make/data/macosxsigning/default-debug.plist --- openjdk-17-17.0.4+8/make/data/macosxsigning/default-debug.plist 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/macosxsigning/default-debug.plist 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,18 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.cs.disable-library-validation + + com.apple.security.cs.allow-dyld-environment-variables + + com.apple.security.cs.debugger + + com.apple.security.get-task-allow + + + diff -Nru openjdk-17-17.0.4+8/make/data/macosxsigning/java-debug.plist openjdk-17-17.0.6+10/make/data/macosxsigning/java-debug.plist --- openjdk-17-17.0.4+8/make/data/macosxsigning/java-debug.plist 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/macosxsigning/java-debug.plist 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,20 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.cs.disable-library-validation + + com.apple.security.cs.allow-dyld-environment-variables + + com.apple.security.cs.debugger + + com.apple.security.device.audio-input + + com.apple.security.get-task-allow + + + diff -Nru openjdk-17-17.0.4+8/make/data/tzdata/VERSION openjdk-17-17.0.6+10/make/data/tzdata/VERSION --- openjdk-17-17.0.4+8/make/data/tzdata/VERSION 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/tzdata/VERSION 2023-01-10 13:21:55.000000000 +0000 @@ -21,4 +21,4 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -tzdata2022a +tzdata2022g diff -Nru openjdk-17-17.0.4+8/make/data/tzdata/africa openjdk-17-17.0.6+10/make/data/tzdata/africa --- openjdk-17-17.0.4+8/make/data/tzdata/africa 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/tzdata/africa 2023-01-10 13:21:55.000000000 +0000 @@ -120,22 +120,6 @@ 0:00 Algeria WE%sT 1981 May 1:00 - CET -# Angola -# Benin -# See Africa/Lagos. - -# Botswana -# See Africa/Maputo. - -# Burkina Faso -# See Africa/Abidjan. - -# Burundi -# See Africa/Maputo. - -# Cameroon -# See Africa/Lagos. - # Cape Verde / Cabo Verde # # From Paul Eggert (2018-02-16): @@ -150,9 +134,6 @@ -2:00 - -02 1975 Nov 25 2:00 -1:00 - -01 -# Central African Republic -# See Africa/Lagos. - # Chad # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Africa/Ndjamena 1:00:12 - LMT 1912 # N'Djamena @@ -160,39 +141,36 @@ 1:00 1:00 WAST 1980 Mar 8 1:00 - WAT -# Comoros -# See Africa/Nairobi. - -# Democratic Republic of the Congo -# See Africa/Lagos for the western part and Africa/Maputo for the eastern. +# Burkina Faso +# Côte d'Ivoire (Ivory Coast) +# The Gambia +# Ghana +# Guinea +# Iceland +# Mali +# Mauritania +# St Helena +# Senegal +# Sierra Leone +# Togo -# Republic of the Congo -# See Africa/Lagos. +# The other parts of the St Helena territory are similar: +# Tristan da Cunha: on GMT, say Whitman and the CIA +# Ascension: on GMT, say the USNO (1995-12-21) and the CIA +# Gough (scientific station since 1955; sealers wintered previously): +# on GMT, says the CIA +# Inaccessible, Nightingale: uninhabited -# Côte d'Ivoire / Ivory Coast # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Africa/Abidjan -0:16:08 - LMT 1912 0:00 - GMT -Link Africa/Abidjan Africa/Accra # Ghana -Link Africa/Abidjan Africa/Bamako # Mali -Link Africa/Abidjan Africa/Banjul # The Gambia -Link Africa/Abidjan Africa/Conakry # Guinea -Link Africa/Abidjan Africa/Dakar # Senegal -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/St_Helena # St Helena - -# Djibouti -# See Africa/Nairobi. ############################################################################### # 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,36 +355,10 @@ 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 -# Equatorial Guinea -# See Africa/Lagos. - -# Eritrea -# See Africa/Nairobi. - -# Eswatini (formerly Swaziland) -# See Africa/Johannesburg. - -# Ethiopia -# See Africa/Nairobi. -# -# Unfortunately tzdb records only Western clock time in use in Ethiopia, -# as the tzdb format is not up to properly recording a common Ethiopian -# timekeeping practice that is based on solar time. See: -# Mortada D. If you have a meeting in Ethiopia, you'd better double -# check the time. PRI's The World. 2015-01-30 15:15 -05. -# https://www.pri.org/stories/2015-01-30/if-you-have-meeting-ethiopia-you-better-double-check-time - -# Gabon -# See Africa/Lagos. - -# The Gambia -# Ghana -# Guinea -# See Africa/Abidjan. - # Guinea-Bissau # # From Paul Eggert (2018-02-16): @@ -419,7 +371,16 @@ -1:00 - -01 1975 0:00 - GMT +# Comoros +# Djibouti +# Eritrea +# Ethiopia # Kenya +# Madagascar +# Mayotte +# Somalia +# Tanzania +# Uganda # From P Chan (2020-10-24): # @@ -430,7 +391,7 @@ # 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, @@ -462,6 +423,14 @@ # The 1908-05-01 announcement does not give an effective date, # so just say "1908 May". +# From Paul Eggert (2018-09-11): +# Unfortunately tzdb records only Western clock time in use in Ethiopia, +# as the tzdb format is not up to properly recording a common Ethiopian +# timekeeping practice that is based on solar time. See: +# Mortada D. If you have a meeting in Ethiopia, you'd better double +# check the time. PRI's The World. 2015-01-30 15:15 -05. +# https://www.pri.org/stories/2015-01-30/if-you-have-meeting-ethiopia-you-better-double-check-time + # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Africa/Nairobi 2:27:16 - LMT 1908 May 2:30 - +0230 1928 Jun 30 24:00 @@ -469,18 +438,6 @@ 2:30 - +0230 1936 Dec 31 24:00 2:45 - +0245 1942 Jul 31 24:00 3:00 - EAT -Link Africa/Nairobi Africa/Addis_Ababa # Ethiopia -Link Africa/Nairobi Africa/Asmara # Eritrea -Link Africa/Nairobi Africa/Dar_es_Salaam # Tanzania -Link Africa/Nairobi Africa/Djibouti -Link Africa/Nairobi Africa/Kampala # Uganda -Link Africa/Nairobi Africa/Mogadishu # Somalia -Link Africa/Nairobi Indian/Antananarivo # Madagascar -Link Africa/Nairobi Indian/Comoro -Link Africa/Nairobi Indian/Mayotte - -# Lesotho -# See Africa/Johannesburg. # Liberia # @@ -561,16 +518,6 @@ 1:00 Libya CE%sT 2013 Oct 25 2:00 2:00 - EET -# Madagascar -# See Africa/Nairobi. - -# Malawi -# See Africa/Maputo. - -# Mali -# Mauritania -# See Africa/Abidjan. - # Mauritius # From Steffen Thorsen (2008-06-25): @@ -664,8 +611,6 @@ # Agalega Is, Rodriguez # no information; probably like Indian/Mauritius -# Mayotte -# See Africa/Nairobi. # Morocco # See Africa/Ceuta for Spanish Morocco. @@ -1158,7 +1103,14 @@ 0:00 Morocco +00/+01 2018 Oct 28 3:00 1:00 Morocco +01/+00 +# Botswana +# Burundi +# Democratic Republic of the Congo (eastern) +# Malawi # Mozambique +# Rwanda +# Zambia +# Zimbabwe # # Shanks gives 1903-03-01 for the transition to CAT. # Perhaps the 1911-05-26 Portuguese decree @@ -1168,14 +1120,6 @@ # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Africa/Maputo 2:10:20 - LMT 1903 Mar 2:00 - CAT -Link Africa/Maputo Africa/Blantyre # Malawi -Link Africa/Maputo Africa/Bujumbura # Burundi -Link Africa/Maputo Africa/Gaborone # Botswana -Link Africa/Maputo Africa/Harare # Zimbabwe -Link Africa/Maputo Africa/Kigali # Rwanda -Link Africa/Maputo Africa/Lubumbashi # E Dem. Rep. of Congo -Link Africa/Maputo Africa/Lusaka # Zambia - # Namibia @@ -1254,9 +1198,16 @@ # 2:00 - CAT # End of rearguard section. -# Niger -# See Africa/Lagos. +# Angola +# Benin +# Cameroon +# Central African Republic +# Democratic Republic of the Congo (western) +# Republic of the Congo +# Equatorial Guinea +# Gabon +# Niger # Nigeria # From P Chan (2020-12-03): @@ -1322,44 +1273,6 @@ 0:13:35 - LMT 1914 Jan 1 0:30 - +0030 1919 Sep 1 1:00 - WAT -Link Africa/Lagos Africa/Bangui # Central African Republic -Link Africa/Lagos Africa/Brazzaville # Rep. of the Congo -Link Africa/Lagos Africa/Douala # Cameroon -Link Africa/Lagos Africa/Kinshasa # Dem. Rep. of the Congo (west) -Link Africa/Lagos Africa/Libreville # Gabon -Link Africa/Lagos Africa/Luanda # Angola -Link Africa/Lagos Africa/Malabo # Equatorial Guinea -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 -# -# Scattered Islands (Îles Éparses) administered from Réunion are as follows. -# The following information about them is taken from -# Îles Éparses (, 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 - -# Rwanda -# See Africa/Maputo. - -# St Helena -# See Africa/Abidjan. -# The other parts of the St Helena territory are similar: -# Tristan da Cunha: on GMT, say Whitman and the CIA -# Ascension: on GMT, say the USNO (1995-12-21) and the CIA -# Gough (scientific station since 1955; sealers wintered previously): -# on GMT, says the CIA -# Inaccessible, Nightingale: uninhabited # São Tomé and Príncipe @@ -1379,48 +1292,19 @@ # 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 0:00 - GMT -# Senegal -# 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. - -# Sierra Leone -# See Africa/Abidjan. - -# Somalia -# See Africa/Nairobi. - +# Eswatini (Swaziland) +# Lesotho # South Africa + # Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule SA 1942 1943 - Sep Sun>=15 2:00 1:00 - Rule SA 1943 1944 - Mar Sun>=15 2:00 0 - @@ -1428,8 +1312,6 @@ Zone Africa/Johannesburg 1:52:00 - LMT 1892 Feb 8 1:30 - SAST 1903 Mar 2:00 SA SAST -Link Africa/Johannesburg Africa/Maseru # Lesotho -Link Africa/Johannesburg Africa/Mbabane # Eswatini # # Marion and Prince Edward Is # scientific station since 1947 @@ -1478,12 +1360,6 @@ 3:00 - EAT 2021 Feb 1 00:00 2:00 - CAT -# Tanzania -# See Africa/Nairobi. - -# Togo -# See Africa/Abidjan. - # Tunisia # From Gwillim Law (2005-04-30): @@ -1581,10 +1457,3 @@ Zone Africa/Tunis 0:40:44 - LMT 1881 May 12 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time 1:00 Tunisia CE%sT - -# Uganda -# See Africa/Nairobi. - -# Zambia -# Zimbabwe -# See Africa/Maputo. diff -Nru openjdk-17-17.0.4+8/make/data/tzdata/antarctica openjdk-17-17.0.6+10/make/data/tzdata/antarctica --- openjdk-17-17.0.4+8/make/data/tzdata/antarctica 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/tzdata/antarctica 2023-01-10 13:21:55.000000000 +0000 @@ -180,9 +180,7 @@ # 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 @@ # 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 @@ -355,4 +329,4 @@ # we have to go around and set them back 5 minutes or so. # Maybe if we let them run fast all of the time, we'd get to leave here sooner!! # -# See 'australasia' for Antarctica/McMurdo. +# See Pacific/Auckland. diff -Nru openjdk-17-17.0.4+8/make/data/tzdata/asia openjdk-17-17.0.6+10/make/data/tzdata/asia --- openjdk-17-17.0.4+8/make/data/tzdata/asia 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/tzdata/asia 2023-01-10 13:21:55.000000000 +0000 @@ -172,9 +172,6 @@ 4:00 EUAsia +04/+05 1997 4:00 Azer +04/+05 -# Bahrain -# See Asia/Qatar. - # Bangladesh # From Alexander Krivenyshev (2009-05-13): # According to newspaper Asian Tribune (May 6, 2009) Bangladesh may introduce @@ -277,13 +274,8 @@ 5:00 - +05 1996 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 - -# Burma / Myanmar +# Cocos (Keeling) Islands +# Myanmar (Burma) # Milne says 6:24:40 was the meridian of the time ball observatory at Rangoon. @@ -300,10 +292,6 @@ 9:00 - +09 1945 May 3 6:30 - +0630 -# Cambodia -# See Asia/Bangkok. - - # China # From Phake Nick (2020-04-15): @@ -367,12 +355,9 @@ # 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 +553,7 @@ # 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,18 +672,19 @@ # 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 # Xinjiang time, used by many in western China; represented by Ürümqi / Ürümchi # / Wulumuqi. (Please use Asia/Shanghai if you prefer Beijing time.) +# Vostok base in Antarctica matches this since 1970. Zone Asia/Urumqi 5:50:20 - LMT 1928 6:00 - +06 - # 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 +868,8 @@ 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 @@ -1197,10 +1184,6 @@ 3:00 - +03 2017 Oct 29 1:00u 2:00 EUAsia EE%sT -# Classically, Cyprus belongs to Asia; e.g. see Herodotus, Histories, I.72. -# However, for various reasons many users expect to find it under Europe. -Link Asia/Nicosia Europe/Nicosia - # Georgia # From Paul Eggert (1994-11-19): # Today's _Economist_ (p 60) reports that Georgia moved its clocks forward @@ -1357,7 +1340,7 @@ # # 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 +1376,11 @@ # # 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 +1412,111 @@ # 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 +1551,12 @@ # 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 +1590,23 @@ # 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 +1637,13 @@ 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 @@ -2262,6 +2239,17 @@ # From the Arabic version, it seems to say it would be at midnight # (assume 24:00) on the last Thursday in February, starting from 2022. +# From Issam Al-Zuwairi (2022-10-05): +# The Council of Ministers in Jordan decided Wednesday 5th October 2022, +# that daylight saving time (DST) will be throughout the year.... +# +# From Brian Inglis (2022-10-06): +# https://petra.gov.jo/Include/InnerPage.jsp?ID=45567&lang=en&name=en_news +# +# From Paul Eggert (2022-10-05): +# Like Syria, model this as a transition from EEST +03 (DST) to plain +03 +# (non-DST) at the point where DST would otherwise have ended. + # Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Jordan 1973 only - Jun 6 0:00 1:00 S Rule Jordan 1973 1975 - Oct 1 0:00 0 - @@ -2293,11 +2281,12 @@ Rule Jordan 2006 2011 - Oct lastFri 0:00s 0 - Rule Jordan 2013 only - Dec 20 0:00 0 - Rule Jordan 2014 2021 - Mar lastThu 24:00 1:00 S -Rule Jordan 2014 max - Oct lastFri 0:00s 0 - -Rule Jordan 2022 max - Feb lastThu 24:00 1:00 S +Rule Jordan 2014 2022 - Oct lastFri 0:00s 0 - +Rule Jordan 2022 only - Feb lastThu 24:00 1:00 S # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Asia/Amman 2:23:44 - LMT 1931 - 2:00 Jordan EE%sT + 2:00 Jordan EE%sT 2022 Oct 28 0:00s + 3:00 - +03 # Kazakhstan @@ -2488,9 +2477,9 @@ # 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] # @@ -2723,14 +2712,6 @@ 8:30 - KST 2018 May 4 23:30 9:00 - KST -############################################################################### - -# Kuwait -# See Asia/Riyadh. - -# Laos -# See Asia/Bangkok. - # Lebanon # Rule NAME FROM TO - IN ON AT SAVE LETTER/S @@ -2762,25 +2743,15 @@ Zone Asia/Beirut 2:22:00 - LMT 1880 2:00 Lebanon EE%sT -# Malaysia +# Brunei +# Malaysia (eastern) +# # Rule NAME FROM TO - IN ON AT SAVE LETTER/S 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 @@ -2959,9 +2930,6 @@ 5:30 - +0530 1986 5:45 - +0545 -# Oman -# See Asia/Dubai. - # Pakistan # From Rives McDow (2002-03-13): @@ -3416,10 +3384,6 @@ # The winter time in 2015 started on October 23 at 01:00. # https://wafa.ps/ar_page.aspx?id=CgpCdYa670694628582aCgpCdY # http://www.palestinecabinet.gov.ps/portal/meeting/details/27583 -# -# From Paul Eggert (2019-04-10): -# For now, guess spring-ahead transitions are at 00:00 on the Saturday -# preceding March's last Sunday (i.e., Sat>=24). # From P Chan (2021-10-18): # http://wafa.ps/Pages/Details/34701 @@ -3436,6 +3400,18 @@ # From Heba Hamad (2022-03-10): # summer time will begin in Palestine from Sunday 03-27-2022, 00:00 AM. +# From Heba Hamad (2022-08-30): +# winter time will begin in Palestine from Saturday 10-29, 02:00 AM by +# 60 minutes backwards. Also the state of Palestine adopted the summer +# and winter time for the years: 2023,2024,2025,2026 ... +# https://mm.icann.org/pipermail/tz/attachments/20220830/9f024566/Time-0001.pdf +# (2022-08-31): ... the Saturday before the last Sunday in March and October +# at 2:00 AM ,for the years from 2023 to 2026. +# (2022-09-05): https://mtit.pna.ps/Site/New/1453 +# +# From Paul Eggert (2022-08-31): +# For now, assume that this rule will also be used after 2026. + # Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule EgyptAsia 1957 only - May 10 0:00 1:00 S Rule EgyptAsia 1957 1958 - Oct 1 0:00 0 - @@ -3466,14 +3442,16 @@ Rule Palestine 2014 only - Oct 24 0:00 0 - Rule Palestine 2015 only - Mar 28 0:00 1:00 S Rule Palestine 2015 only - Oct 23 1:00 0 - -Rule Palestine 2016 2018 - Mar Sat>=24 1:00 1:00 S -Rule Palestine 2016 2018 - Oct Sat>=24 1:00 0 - +Rule Palestine 2016 2018 - Mar Sat<=30 1:00 1:00 S +Rule Palestine 2016 2018 - Oct Sat<=30 1:00 0 - Rule Palestine 2019 only - Mar 29 0:00 1:00 S -Rule Palestine 2019 only - Oct Sat>=24 0:00 0 - -Rule Palestine 2020 2021 - Mar Sat>=24 0:00 1:00 S +Rule Palestine 2019 only - Oct Sat<=30 0:00 0 - +Rule Palestine 2020 2021 - Mar Sat<=30 0:00 1:00 S Rule Palestine 2020 only - Oct 24 1:00 0 - -Rule Palestine 2021 max - Oct Fri>=23 1:00 0 - -Rule Palestine 2022 max - Mar Sun>=25 0:00 1:00 S +Rule Palestine 2021 only - Oct 29 1:00 0 - +Rule Palestine 2022 only - Mar 27 0:00 1:00 S +Rule Palestine 2022 max - Oct Sat<=30 2:00 0 - +Rule Palestine 2023 max - Mar Sat<=30 2:00 1:00 S # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Asia/Gaza 2:17:52 - LMT 1900 Oct @@ -3562,14 +3540,18 @@ 9:00 - JST 1944 Nov 8:00 Phil P%sT +# Bahrain # Qatar # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha 4:00 - +04 1972 Jun 3:00 - +03 -Link Asia/Qatar Asia/Bahrain +# Kuwait # Saudi Arabia +# Yemen +# +# Japan's year-round bases in Antarctica match this since 1970. # # From Paul Eggert (2018-08-29): # Time in Saudi Arabia and other countries in the Arabian peninsula was not @@ -3614,9 +3596,6 @@ # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Asia/Riyadh 3:06:52 - LMT 1947 Mar 14 3:00 - +03 -Link Asia/Riyadh Antarctica/Syowa -Link Asia/Riyadh Asia/Aden # Yemen -Link Asia/Riyadh Asia/Kuwait # Singapore # taken from Mok Ly Yng (2003-10-30) @@ -3629,7 +3608,7 @@ 7:20 - +0720 1941 Sep 1 7:30 - +0730 1942 Feb 16 9:00 - +09 1945 Sep 12 - 7:30 - +0730 1982 Jan 1 + 7:30 - +0730 1981 Dec 31 16:00u 8:00 - +08 # Spratly Is @@ -3845,19 +3824,27 @@ # Our brief summary: # https://www.timeanddate.com/news/time/syria-dst-2012.html -# From Arthur David Olson (2012-03-27): -# Assume last Friday in March going forward XXX. +# From Steffen Thorsen (2022-10-05): +# Syria is adopting year-round DST, starting this autumn.... +# From https://www.enabbaladi.net/archives/607812 +# "This [the decision] came after the weekly government meeting today, +# Tuesday 4 October ..." +# +# From Paul Eggert (2022-10-05): +# Like Jordan, model this as a transition from EEST +03 (DST) to plain +03 +# (non-DST) at the point where DST would otherwise have ended. Rule Syria 2008 only - Apr Fri>=1 0:00 1:00 S Rule Syria 2008 only - Nov 1 0:00 0 - Rule Syria 2009 only - Mar lastFri 0:00 1:00 S Rule Syria 2010 2011 - Apr Fri>=1 0:00 1:00 S -Rule Syria 2012 max - Mar lastFri 0:00 1:00 S -Rule Syria 2009 max - Oct lastFri 0:00 0 - +Rule Syria 2012 2022 - Mar lastFri 0:00 1:00 S +Rule Syria 2009 2022 - Oct lastFri 0:00 0 - # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq - 2:00 Syria EE%sT + 2:00 Syria EE%sT 2022 Oct 28 0:00 + 3:00 - +03 # Tajikistan # From Shanks & Pottenger. @@ -3865,16 +3852,18 @@ 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 +# Cambodia +# Christmas I +# Laos # Thailand +# Vietnam (northern) # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Asia/Bangkok 6:42:04 - LMT 1880 6:42:04 - BMT 1920 Apr # Bangkok Mean Time 7:00 - +07 -Link Asia/Bangkok Asia/Phnom_Penh # Cambodia -Link Asia/Bangkok Asia/Vientiane # Laos # Turkmenistan # From Shanks & Pottenger. @@ -3885,11 +3874,15 @@ 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00 5:00 - +05 +# Oman +# Réunion +# Seychelles # United Arab Emirates +# +# The Crozet Is also observe Réunion time; see the 'antarctica' file. # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Asia/Dubai 3:41:12 - LMT 1920 4:00 - +04 -Link Asia/Dubai Asia/Muscat # Oman # Uzbekistan # Byalokoz 1919 says Uzbekistan was 4:27:53. @@ -3901,14 +3894,15 @@ 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 5:00 RussiaAsia +05/+06 1992 5:00 - +05 -# Vietnam +# Vietnam (southern) # From Paul Eggert (2014-10-04): # Milne gives 7:16:56 for the meridian of Saigon in 1899, as being @@ -3920,7 +3914,7 @@ # 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 +3926,8 @@ # 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 +3954,8 @@ # 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 @@ -3981,7 +3976,3 @@ # For timestamps in north Vietnam back to 1970 (the tzdb cutoff), # use Asia/Bangkok; see the VN entries in the file zone1970.tab. # For timestamps before 1970, see Asia/Hanoi in the file 'backzone'. - - -# Yemen -# See Asia/Riyadh. diff -Nru openjdk-17-17.0.4+8/make/data/tzdata/australasia openjdk-17-17.0.6+10/make/data/tzdata/australasia --- openjdk-17-17.0.4+8/make/data/tzdata/australasia 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/tzdata/australasia 2023-01-10 13:21:55.000000000 +0000 @@ -274,19 +274,6 @@ 10:00 1:00 AEDT 2011 10:00 AT AE%sT -# Christmas -# Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone Indian/Christmas 7:02:52 - LMT 1895 Feb - 7:00 - +07 - -# 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 - - # Fiji # Milne gives 11:55:44 for Suva. @@ -422,8 +409,14 @@ # concerned shifting arrival and departure times, which may look like a simple # thing but requires some significant logistical adjustments domestically and # internationally." -# Assume for now that DST will resume with the recent pre-2020 rules for the -# 2022/2023 season. + +# From Shalvin Narayan (2022-10-27): +# Please note that there will not be any daylight savings time change +# in Fiji for 2022-2023.... +# https://www.facebook.com/FijianGovernment/posts/pfbid0mmWVTYmTibn66ybpFda75pDcf34SSpoSaskJW5gXwaKo5Sgc7273Q4fXWc6kQV6Hl +# +# From Paul Eggert (2022-10-27): +# For now, assume DST is suspended indefinitely. # Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 - @@ -438,8 +431,6 @@ Rule Fiji 2015 2021 - Jan Sun>=12 3:00 0 - Rule Fiji 2019 only - Nov Sun>=8 2:00 1:00 - Rule Fiji 2020 only - Dec 20 2:00 1:00 - -Rule Fiji 2022 max - Nov Sun>=8 2:00 1:00 - -Rule Fiji 2023 max - Jan Sun>=12 3:00 0 - # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva 12:00 Fiji +12/+13 @@ -455,7 +446,9 @@ # Clipperton (near North America) is administered from French Polynesia; # it is uninhabited. + # Guam +# N Mariana Is # Rule NAME FROM TO - IN ON AT SAVE LETTER/S # http://guamlegislature.com/Public_Laws_5th/PL05-025.pdf @@ -495,12 +488,20 @@ 9:00 - +09 1944 Jul 31 10:00 Guam G%sT 2000 Dec 23 10:00 - ChST # Chamorro Standard Time -Link Pacific/Guam Pacific/Saipan # N Mariana Is -# Kiribati + +# Kiribati (Gilbert Is) +# Marshall Is +# Tuvalu +# Wake +# Wallis & Futuna # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki 12:00 - +12 + +# Kiribati (except Gilbert Is) +# See Pacific/Tarawa for the Gilbert Is. +# Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Pacific/Kanton 0 - -00 1937 Aug 31 -12:00 - -12 1979 Oct -11:00 - -11 1994 Dec 31 @@ -510,19 +511,9 @@ -10:00 - -10 1994 Dec 31 14:00 - +14 -# N Mariana Is -# 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 +523,9 @@ 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 @@ -582,6 +560,7 @@ ############################################################################### # New Zealand +# McMurdo Station and Scott Base in Antarctica use Auckland time. # Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule NZ 1927 only - Nov 6 2:00 1:00 S @@ -617,12 +596,11 @@ Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2 11:30 NZ NZ%sT 1946 Jan 1 12:00 NZ NZ%sT + 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 +659,7 @@ # 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 @@ -716,7 +694,6 @@ 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 # # From Paul Eggert (2014-10-13): # Base the Bougainville entry on the Arawa-Kieta region, which appears to have @@ -749,10 +726,10 @@ -8:00 - -08 # American Samoa +# Midway Zone Pacific/Pago_Pago 12:37:12 - LMT 1892 Jul 5 -11:22:48 - LMT 1911 -11:00 - SST # S=Samoa -Link Pacific/Pago_Pago Pacific/Midway # in US minor outlying islands # Samoa (formerly and also known as Western Samoa) @@ -883,11 +860,6 @@ 13:00 - +13 1999 13:00 Tonga +13/+14 -# Tuvalu -# Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone Pacific/Funafuti 11:56:52 - LMT 1901 - 12:00 - +12 - # US minor outlying islands @@ -938,17 +910,9 @@ # Kingman # uninhabited -# Midway -# See Pacific/Pago_Pago. - # Palmyra # 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 - # Vanuatu @@ -985,11 +949,6 @@ 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 - ############################################################################### # NOTES @@ -1306,6 +1265,7 @@ # 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 +1809,12 @@ # "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): -# ... 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 '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 +1861,6 @@ # 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 +2191,7 @@ # 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 +2199,6 @@ # 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 diff -Nru openjdk-17-17.0.4+8/make/data/tzdata/backward openjdk-17-17.0.6+10/make/data/tzdata/backward --- openjdk-17-17.0.4+8/make/data/tzdata/backward 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/tzdata/backward 2023-01-10 13:21:55.000000000 +0000 @@ -27,54 +27,33 @@ # 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 1993 and in 1995, 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. -# Link TARGET LINK-NAME -Link Africa/Nairobi Africa/Asmera -Link Africa/Abidjan Africa/Timbuktu -Link America/Argentina/Catamarca America/Argentina/ComodRivadavia -Link America/Adak America/Atka -Link America/Argentina/Buenos_Aires America/Buenos_Aires -Link America/Argentina/Catamarca America/Catamarca -Link America/Panama America/Coral_Harbour -Link America/Argentina/Cordoba America/Cordoba -Link America/Tijuana America/Ensenada -Link America/Indiana/Indianapolis America/Fort_Wayne -Link America/Nuuk America/Godthab -Link America/Indiana/Indianapolis America/Indianapolis -Link America/Argentina/Jujuy America/Jujuy -Link America/Indiana/Knox America/Knox_IN -Link America/Kentucky/Louisville America/Louisville -Link America/Argentina/Mendoza America/Mendoza -Link America/Toronto America/Montreal -Link America/Rio_Branco America/Porto_Acre -Link America/Argentina/Cordoba America/Rosario -Link America/Tijuana America/Santa_Isabel -Link America/Denver America/Shiprock -Link America/Puerto_Rico America/Virgin -Link Pacific/Auckland Antarctica/South_Pole -Link Asia/Ashgabat Asia/Ashkhabad -Link Asia/Kolkata Asia/Calcutta -Link Asia/Shanghai Asia/Chongqing -Link Asia/Shanghai Asia/Chungking -Link Asia/Dhaka Asia/Dacca -Link Asia/Shanghai Asia/Harbin -Link Asia/Urumqi Asia/Kashgar -Link Asia/Kathmandu Asia/Katmandu -Link Asia/Macau Asia/Macao -Link Asia/Yangon Asia/Rangoon -Link Asia/Ho_Chi_Minh Asia/Saigon -Link Asia/Jerusalem Asia/Tel_Aviv -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 Australia/Sydney Australia/ACT -Link Australia/Sydney Australia/Canberra -Link Australia/Hobart Australia/Currie +# 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. + +# This file is divided into sections, one for each major reason for a +# backward compatibility link. Each section is sorted by link name. + +# A "#= TARGET1" comment labels each link inserted only because some +# .zi parsers (including tzcode through 2022e) mishandle links to links. +# The comment says what the target would be if these parsers were fixed +# so that data could contain links to links. For example, the line +# "Link Australia/Sydney Australia/ACT #= Australia/Canberra" would be +# "Link Australia/Canberra Australia/ACT" were it not that data lines +# refrain from linking to links like Australia/Canberra, which means +# the Australia/ACT line links instead to Australia/Sydney, +# Australia/Canberra's target. + + +# Pre-1993 naming conventions + +# Link TARGET LINK-NAME #= TARGET1 +Link Australia/Sydney Australia/ACT #= Australia/Canberra Link Australia/Lord_Howe Australia/LHI Link Australia/Sydney Australia/NSW Link Australia/Darwin Australia/North @@ -84,7 +63,7 @@ Link Australia/Melbourne Australia/Victoria Link Australia/Perth Australia/West Link Australia/Broken_Hill Australia/Yancowinna -Link America/Rio_Branco Brazil/Acre +Link America/Rio_Branco Brazil/Acre #= America/Porto_Acre Link America/Noronha Brazil/DeNoronha Link America/Sao_Paulo Brazil/East Link America/Manaus Brazil/West @@ -104,17 +83,36 @@ Link America/Havana Cuba Link Africa/Cairo Egypt Link Europe/Dublin Eire +# Vanguard section, for most .zi parsers. +#Link GMT Etc/GMT +#Link GMT Etc/GMT+0 +#Link GMT Etc/GMT-0 +#Link GMT Etc/GMT0 +#Link GMT Etc/Greenwich +# Rearguard section, for TZUpdater 2.3.2 and earlier. +Link Etc/GMT Etc/GMT+0 +Link Etc/GMT Etc/GMT-0 +Link Etc/GMT Etc/GMT0 +Link Etc/GMT Etc/Greenwich +# End of rearguard section. Link Etc/UTC Etc/UCT -Link Europe/London Europe/Belfast -Link Europe/Chisinau Europe/Tiraspol +Link Etc/UTC Etc/Universal +Link Etc/UTC Etc/Zulu Link Europe/London GB Link Europe/London GB-Eire +# Vanguard section, for most .zi parsers. +#Link GMT GMT+0 +#Link GMT GMT-0 +#Link GMT GMT0 +#Link GMT Greenwich +# Rearguard section, for TZUpdater 2.3.2 and earlier. Link Etc/GMT GMT+0 Link Etc/GMT GMT-0 Link Etc/GMT GMT0 Link Etc/GMT Greenwich +# End of rearguard section. Link Asia/Hong_Kong Hongkong -Link Atlantic/Reykjavik Iceland +Link Africa/Abidjan Iceland #= Atlantic/Reykjavik Link Asia/Tehran Iran Link Asia/Jerusalem Israel Link America/Jamaica Jamaica @@ -126,14 +124,8 @@ Link America/Mexico_City Mexico/General Link Pacific/Auckland NZ Link Pacific/Chatham NZ-CHAT -Link America/Denver Navajo +Link America/Denver Navajo #= America/Shiprock Link Asia/Shanghai PRC -Link Pacific/Kanton Pacific/Enderbury -Link Pacific/Honolulu Pacific/Johnston -Link Pacific/Pohnpei Pacific/Ponape -Link Pacific/Pago_Pago Pacific/Samoa -Link Pacific/Chuuk Pacific/Truk -Link Pacific/Chuuk Pacific/Yap Link Europe/Warsaw Poland Link Europe/Lisbon Portugal Link Asia/Taipei ROC @@ -157,3 +149,193 @@ Link Etc/UTC Universal Link Europe/Moscow W-SU Link Etc/UTC Zulu + + +# Two-part names that were renamed mostly to three-part names in 1995 + +# Link TARGET LINK-NAME #= TARGET1 +Link America/Argentina/Buenos_Aires America/Buenos_Aires +Link America/Argentina/Catamarca America/Catamarca +Link America/Argentina/Cordoba America/Cordoba +Link America/Indiana/Indianapolis America/Indianapolis +Link America/Argentina/Jujuy America/Jujuy +Link America/Indiana/Knox America/Knox_IN +Link America/Kentucky/Louisville America/Louisville +Link America/Argentina/Mendoza America/Mendoza +Link America/Puerto_Rico America/Virgin #= America/St_Thomas +Link Pacific/Pago_Pago Pacific/Samoa + + +# Pre-2013 practice, which typically had a Zone per zone.tab line + +# Link TARGET LINK-NAME +Link Africa/Abidjan Africa/Accra +Link Africa/Nairobi Africa/Addis_Ababa +Link Africa/Nairobi Africa/Asmara +Link Africa/Abidjan Africa/Bamako +Link Africa/Lagos Africa/Bangui +Link Africa/Abidjan Africa/Banjul +Link Africa/Maputo Africa/Blantyre +Link Africa/Lagos Africa/Brazzaville +Link Africa/Maputo Africa/Bujumbura +Link Africa/Abidjan Africa/Conakry +Link Africa/Abidjan Africa/Dakar +Link Africa/Nairobi Africa/Dar_es_Salaam +Link Africa/Nairobi Africa/Djibouti +Link Africa/Lagos Africa/Douala +Link Africa/Abidjan Africa/Freetown +Link Africa/Maputo Africa/Gaborone +Link Africa/Maputo Africa/Harare +Link Africa/Nairobi Africa/Kampala +Link Africa/Maputo Africa/Kigali +Link Africa/Lagos Africa/Kinshasa +Link Africa/Lagos Africa/Libreville +Link Africa/Abidjan Africa/Lome +Link Africa/Lagos Africa/Luanda +Link Africa/Maputo Africa/Lubumbashi +Link Africa/Maputo Africa/Lusaka +Link Africa/Lagos Africa/Malabo +Link Africa/Johannesburg Africa/Maseru +Link Africa/Johannesburg Africa/Mbabane +Link Africa/Nairobi Africa/Mogadishu +Link Africa/Lagos Africa/Niamey +Link Africa/Abidjan Africa/Nouakchott +Link Africa/Abidjan Africa/Ouagadougou +Link Africa/Lagos Africa/Porto-Novo +Link America/Puerto_Rico America/Anguilla +Link America/Puerto_Rico America/Antigua +Link America/Puerto_Rico America/Aruba +Link America/Panama America/Atikokan +Link America/Puerto_Rico America/Blanc-Sablon +Link America/Panama America/Cayman +Link America/Phoenix America/Creston +Link America/Puerto_Rico America/Curacao +Link America/Puerto_Rico America/Dominica +Link America/Puerto_Rico America/Grenada +Link America/Puerto_Rico America/Guadeloupe +Link America/Puerto_Rico America/Kralendijk +Link America/Puerto_Rico America/Lower_Princes +Link America/Puerto_Rico America/Marigot +Link America/Puerto_Rico America/Montserrat +Link America/Toronto America/Nassau +Link America/Puerto_Rico America/Port_of_Spain +Link America/Puerto_Rico America/St_Barthelemy +Link America/Puerto_Rico America/St_Kitts +Link America/Puerto_Rico America/St_Lucia +Link America/Puerto_Rico America/St_Thomas +Link America/Puerto_Rico America/St_Vincent +Link America/Puerto_Rico America/Tortola +Link Pacific/Port_Moresby Antarctica/DumontDUrville +Link Pacific/Auckland Antarctica/McMurdo +Link Asia/Riyadh Antarctica/Syowa +Link Asia/Urumqi Antarctica/Vostok +Link Europe/Berlin Arctic/Longyearbyen +Link Asia/Riyadh Asia/Aden +Link Asia/Qatar Asia/Bahrain +Link Asia/Kuching Asia/Brunei +Link Asia/Singapore Asia/Kuala_Lumpur +Link Asia/Riyadh Asia/Kuwait +Link Asia/Dubai Asia/Muscat +Link Asia/Bangkok Asia/Phnom_Penh +Link Asia/Bangkok Asia/Vientiane +Link Africa/Abidjan Atlantic/Reykjavik +Link Africa/Abidjan Atlantic/St_Helena +Link Europe/Brussels Europe/Amsterdam +Link Europe/Prague Europe/Bratislava +Link Europe/Zurich Europe/Busingen +Link Europe/Berlin Europe/Copenhagen +Link Europe/London Europe/Guernsey +Link Europe/London Europe/Isle_of_Man +Link Europe/London Europe/Jersey +Link Europe/Belgrade Europe/Ljubljana +Link Europe/Brussels Europe/Luxembourg +Link Europe/Helsinki Europe/Mariehamn +Link Europe/Paris Europe/Monaco +Link Europe/Berlin Europe/Oslo +Link Europe/Belgrade Europe/Podgorica +Link Europe/Rome Europe/San_Marino +Link Europe/Belgrade Europe/Sarajevo +Link Europe/Belgrade Europe/Skopje +Link Europe/Berlin Europe/Stockholm +Link Europe/Zurich Europe/Vaduz +Link Europe/Rome Europe/Vatican +Link Europe/Belgrade Europe/Zagreb +Link Africa/Nairobi Indian/Antananarivo +Link Asia/Bangkok Indian/Christmas +Link Asia/Yangon Indian/Cocos +Link Africa/Nairobi Indian/Comoro +Link Indian/Maldives Indian/Kerguelen +Link Asia/Dubai Indian/Mahe +Link Africa/Nairobi Indian/Mayotte +Link Asia/Dubai Indian/Reunion +Link Pacific/Port_Moresby Pacific/Chuuk +Link Pacific/Tarawa Pacific/Funafuti +Link Pacific/Tarawa Pacific/Majuro +Link Pacific/Pago_Pago Pacific/Midway +Link Pacific/Guadalcanal Pacific/Pohnpei +Link Pacific/Guam Pacific/Saipan +Link Pacific/Tarawa Pacific/Wake +Link Pacific/Tarawa Pacific/Wallis + + +# Non-zone.tab locations with timestamps since 1970 that duplicate +# those of an existing location + +# Link TARGET LINK-NAME +Link Africa/Abidjan Africa/Timbuktu +Link America/Argentina/Catamarca America/Argentina/ComodRivadavia +Link America/Adak America/Atka +Link America/Panama America/Coral_Harbour +Link America/Tijuana America/Ensenada +Link America/Indiana/Indianapolis America/Fort_Wayne +Link America/Toronto America/Montreal +Link America/Toronto America/Nipigon +Link America/Iqaluit America/Pangnirtung +Link America/Rio_Branco America/Porto_Acre +Link America/Winnipeg America/Rainy_River +Link America/Argentina/Cordoba America/Rosario +Link America/Tijuana America/Santa_Isabel +Link America/Denver America/Shiprock +Link America/Toronto America/Thunder_Bay +Link Pacific/Auckland Antarctica/South_Pole +Link Asia/Shanghai Asia/Chongqing +Link Asia/Shanghai Asia/Harbin +Link Asia/Urumqi Asia/Kashgar +Link Asia/Jerusalem Asia/Tel_Aviv +Link Europe/Berlin Atlantic/Jan_Mayen +Link Australia/Sydney Australia/Canberra +Link Australia/Hobart Australia/Currie +Link Europe/London Europe/Belfast +Link Europe/Chisinau Europe/Tiraspol +Link Europe/Kyiv Europe/Uzhgorod +Link Europe/Kyiv Europe/Zaporozhye +Link Pacific/Kanton Pacific/Enderbury +Link Pacific/Honolulu Pacific/Johnston +Link Pacific/Port_Moresby Pacific/Yap + + +# Alternate names for the same location + +# Link TARGET LINK-NAME #= TARGET1 +Link Africa/Nairobi Africa/Asmera #= Africa/Asmara +Link America/Nuuk America/Godthab +Link Asia/Ashgabat Asia/Ashkhabad +Link Asia/Kolkata Asia/Calcutta +Link Asia/Shanghai Asia/Chungking #= Asia/Chongqing +Link Asia/Dhaka Asia/Dacca +# Istanbul is in both continents. +Link Europe/Istanbul Asia/Istanbul +Link Asia/Kathmandu Asia/Katmandu +Link Asia/Macau Asia/Macao +Link Asia/Yangon Asia/Rangoon +Link Asia/Ho_Chi_Minh Asia/Saigon +Link Asia/Thimphu Asia/Thimbu +Link Asia/Makassar Asia/Ujung_Pandang +Link Asia/Ulaanbaatar Asia/Ulan_Bator +Link Atlantic/Faroe Atlantic/Faeroe +Link Europe/Kyiv Europe/Kiev +# Classically, Cyprus is in Asia; e.g. see Herodotus, Histories, I.72. +# However, for various reasons many users expect to find it under Europe. +Link Asia/Nicosia Europe/Nicosia +Link Pacific/Guadalcanal Pacific/Ponape #= Pacific/Pohnpei +Link Pacific/Port_Moresby Pacific/Truk #= Pacific/Chuuk diff -Nru openjdk-17-17.0.4+8/make/data/tzdata/etcetera openjdk-17-17.0.6+10/make/data/tzdata/etcetera --- openjdk-17-17.0.4+8/make/data/tzdata/etcetera 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/tzdata/etcetera 2023-01-10 13:21:55.000000000 +0000 @@ -39,22 +39,23 @@ # Do not use a POSIX TZ setting like TZ='GMT+4', which is four hours # 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 +# Functions like gmtime load the "GMT" file to handle leap seconds properly. +# Vanguard section, which works with most .zi parsers. +#Zone GMT 0 - GMT +# Rearguard section, for TZUpdater 2.3.2 and earlier. +Zone Etc/GMT 0 - GMT + # 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 -Link Etc/UTC Etc/Zulu - -Link Etc/GMT Etc/Greenwich -Link Etc/GMT Etc/GMT-0 -Link Etc/GMT Etc/GMT+0 -Link Etc/GMT Etc/GMT0 +# End of rearguard section. # Be consistent with POSIX TZ settings in the Zone names, # even though this is the opposite of what many people expect. diff -Nru openjdk-17-17.0.4+8/make/data/tzdata/europe openjdk-17-17.0.6+10/make/data/tzdata/europe --- openjdk-17-17.0.4+8/make/data/tzdata/europe 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/tzdata/europe 2023-01-10 13:21:55.000000000 +0000 @@ -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,14 +522,11 @@ # 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 0:00 EU GMT/BST -Link Europe/London Europe/Jersey -Link Europe/London Europe/Guernsey -Link Europe/London Europe/Isle_of_Man # From Paul Eggert (2018-02-15): # In January 2018 we discovered that the negative SAVE values in the @@ -561,7 +557,8 @@ 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 @@ -902,6 +899,8 @@ 3:00 - +03 # Belgium +# Luxembourg +# Netherlands # # From Michael Deckers (2019-08-25): # The exposition in the web page @@ -985,9 +984,6 @@ 1:00 Belgium CE%sT 1977 1:00 EU CE%sT -# Bosnia and Herzegovina -# See Europe/Belgrade. - # Bulgaria # # From Plamen Simenov via Steffen Thorsen (1999-09-09): @@ -1013,13 +1009,11 @@ 2:00 E-Eur EE%sT 1997 2:00 EU EE%sT -# Croatia -# See Europe/Belgrade. - # Cyprus # Please see the 'asia' file for Asia/Nicosia. -# Czech Republic / Czechia +# Czech Republic (Czechia) +# Slovakia # # From Paul Eggert (2018-04-15): # The source for Czech data is: Kdy začíná a končí letní čas. 2018-04-15. @@ -1046,65 +1040,14 @@ # End of rearguard section. 1:00 Czech CE%sT 1979 1:00 EU CE%sT -# Use Europe/Prague also for Slovakia. - -# Denmark, Faroe Islands, and Greenland -# 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 +# Faroe Is +# Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Tórshavn 0:00 - WET 1981 0:00 EU WE%sT + +# Greenland # # From Paul Eggert (2004-10-31): # During World War II, Germany maintained secret manned weather stations in @@ -1183,7 +1126,30 @@ # "National Park" by Executive Order: # http://naalakkersuisut.gl/~/media/Nanoq/Files/Attached%20Files/Engelske-tekster/Legislation/Executive%20Order%20National%20Park.rtf # It is their only National Park. + +# From Jonas Nyrup (2022-11-24): +# On last Saturday in October 2023 when DST ends America/Nuuk will switch +# from -03/-02 to -02/-01 +# https://sermitsiaq.ag/forslagtidsforskel-danmark-mindskes-sommertid-beholdes +# ... +# https://sermitsiaq.ag/groenland-skifte-tidszone-trods-bekymringer # +# From Jürgen Appel (2022-11-25): +# https://ina.gl/samlinger/oversigt-over-samlinger/samling/dagsordener/dagsorden.aspx?lang=da&day=24-11-2022 +# If I understand this correctly, from the next planned switch to +# summer time, Greenland will permanently stay at that time, i.e. no +# switch back to winter time in 2023 will occur. +# +# From Paul Eggert (2022-11-28): +# The official document in Danish +# https://naalakkersuisut.gl/-/media/naalakkersuisut/filer/kundgoerelser/2022/11/2511/31_da_inatsisartutlov-om-tidens-bestemmelse.pdf?la=da&hash=A33597D8A38CC7038465241119EF34F3 +# says standard time for Greenland is -02, that Naalakkersuisut can lay down +# rules for DST and can require some areas to use a different time zone, +# and that this all takes effect 2023-03-25 22:00. The abovementioned +# "bekymringer" URL says the intent is no transition March 25, that +# Greenland will not go back to winter time in fall 2023, and that +# only America/Nuuk is affected (though further changes may occur). + # Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Thule 1991 1992 - Mar lastSun 2:00 1:00 D Rule Thule 1991 1992 - Sep lastSun 2:00 0 S @@ -1206,7 +1172,8 @@ -1:00 EU -01/+00 Zone America/Nuuk -3:26:56 - LMT 1916 Jul 28 # Godthåb -3:00 - -03 1980 Apr 6 2:00 - -3:00 EU -03/-02 + -3:00 EU -03/-02 2023 Mar 25 22:00 + -2:00 - -02 Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik -4:00 Thule A%sT @@ -1321,20 +1288,17 @@ 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 2:00 EU EE%sT -# Åland Is -Link Europe/Helsinki Europe/Mariehamn - - # France +# Monaco # From Ciro Discepolo (2000-12-20): # @@ -1472,7 +1436,10 @@ 1:00 France CE%sT 1977 1:00 EU CE%sT +# Denmark # Germany +# Norway +# Sweden # From Markus Kuhn (1998-09-29): # The German time zone web site by the Physikalisch-Technische @@ -1490,6 +1457,53 @@ # However, Moscow did not observe daylight saving in 1945, so # this was equivalent to UT +03, not +04. +# Svalbard & Jan Mayen + +# From Steffen Thorsen (2001-05-01): +# Although I could not find it explicitly, it seems that Jan Mayen and +# Svalbard have been using the same time as Norway at least since the +# time they were declared as parts of Norway. Svalbard was declared +# as a part of Norway by law of 1925-07-17 no 11, section 4 and Jan +# Mayen by law of 1930-02-27 no 2, section 2. (From +# and +# ). The law/regulation +# for normal/standard time in Norway is from 1894-06-29 no 1 (came +# into operation on 1895-01-01) and Svalbard/Jan Mayen seem to be a +# part of this law since 1925/1930. (From +# ) I have not been +# able to find if Jan Mayen used a different time zone (e.g. -0100) +# before 1930. Jan Mayen has only been "inhabited" since 1921 by +# Norwegian meteorologists and maybe used the same time as Norway ever +# since 1921. Svalbard (Arctic/Longyearbyen) has been inhabited since +# before 1895, and therefore probably changed the local time somewhere +# between 1895 and 1925 (inclusive). + +# From Paul Eggert (2013-09-04): +# +# Actually, Jan Mayen was never occupied by Germany during World War II, +# so it must have diverged from Oslo time during the war, as Oslo was +# keeping Berlin time. +# +# says that the meteorologists +# burned down their station in 1940 and left the island, but returned in +# 1941 with a small Norwegian garrison and continued operations despite +# frequent air attacks from Germans. In 1943 the Americans established a +# radiolocating station on the island, called "Atlantic City". Possibly +# the UT offset changed during the war, but I think it unlikely that +# Jan Mayen used German daylight-saving rules. +# +# Svalbard is more complicated, as it was raided in August 1941 by an +# Allied party that evacuated the civilian population to England (says +# ). The Svalbard FAQ +# says that the Germans were +# expelled on 1942-05-14. However, small parties of Germans did return, +# and according to Wilhelm Dege's book "War North of 80" (1954) +# http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html +# 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/Berlin +# for these regions. # Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Germany 1946 only - Apr 14 2:00s 1:00 S @@ -1515,21 +1529,6 @@ 1:00 Germany CE%sT 1980 1:00 EU CE%sT -# From Tobias Conradi (2011-09-12): -# Büsingen , 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. # Herodotus (Histories, IV.45) says Georgia north of the Phasis (now Rioni) @@ -1537,7 +1536,7 @@ # 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 @@ -1647,65 +1646,9 @@ 1:00 Hungary CE%sT 1984 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 - # Italy +# San Marino +# Vatican City # # From Paul Eggert (2001-03-06): # Sicily and Sardinia each had their own time zones from 1866 to 1893, @@ -1819,19 +1762,12 @@ 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 -# Kosovo -# See Europe/Belgrade. - - -Link Europe/Rome Europe/Vatican -Link Europe/Rome Europe/San_Marino - # Latvia # From Liene Kanepe (1998-09-17): @@ -1914,19 +1850,6 @@ 2:00 - EET 2001 Jan 2 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 - - # Lithuania # From Paul Eggert (2016-03-18): @@ -1979,45 +1902,6 @@ 2:00 - EET 2003 Jan 1 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 - -# North Macedonia -# See Europe/Belgrade. - # Malta # # From Paul Eggert (2016-10-21): @@ -2032,7 +1916,7 @@ 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 @@ -2113,177 +1997,6 @@ # See Romania commentary for the guessed 1997 transition to EU rules. 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 - -# 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 - -# 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 - -# Svalbard & Jan Mayen - -# From Steffen Thorsen (2001-05-01): -# Although I could not find it explicitly, it seems that Jan Mayen and -# Svalbard have been using the same time as Norway at least since the -# time they were declared as parts of Norway. Svalbard was declared -# as a part of Norway by law of 1925-07-17 no 11, section 4 and Jan -# Mayen by law of 1930-02-27 no 2, section 2. (From -# and -# ). The law/regulation -# for normal/standard time in Norway is from 1894-06-29 no 1 (came -# into operation on 1895-01-01) and Svalbard/Jan Mayen seem to be a -# part of this law since 1925/1930. (From -# ) I have not been -# able to find if Jan Mayen used a different time zone (e.g. -0100) -# before 1930. Jan Mayen has only been "inhabited" since 1921 by -# Norwegian meteorologists and maybe used the same time as Norway ever -# since 1921. Svalbard (Arctic/Longyearbyen) has been inhabited since -# before 1895, and therefore probably changed the local time somewhere -# between 1895 and 1925 (inclusive). - -# From Paul Eggert (2013-09-04): -# -# Actually, Jan Mayen was never occupied by Germany during World War II, -# so it must have diverged from Oslo time during the war, as Oslo was -# keeping Berlin time. -# -# says that the meteorologists -# burned down their station in 1940 and left the island, but returned in -# 1941 with a small Norwegian garrison and continued operations despite -# frequent air attacks from Germans. In 1943 the Americans established a -# radiolocating station on the island, called "Atlantic City". Possibly -# the UT offset changed during the war, but I think it unlikely that -# Jan Mayen used German daylight-saving rules. -# -# Svalbard is more complicated, as it was raided in August 1941 by an -# Allied party that evacuated the civilian population to England (says -# ). The Svalbard FAQ -# says that the Germans were -# expelled on 1942-05-14. However, small parties of Germans did return, -# and according to Wilhelm Dege's book "War North of 80" (1954) -# http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html -# 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 -# for these regions. -Link Europe/Oslo Arctic/Longyearbyen - # Poland # The 1919 dates and times can be found in Tygodnik Urzędowy nr 1 (1919-03-20), @@ -2336,7 +2049,6 @@ # 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 +2135,7 @@ 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 +2144,13 @@ 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 +2162,14 @@ -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 +2179,7 @@ -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,28 +2598,31 @@ 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 # https://vz.ru/news/2014/3/17/677464.html -# From Paul Eggert (2014-03-30): -# Simferopol and Sevastopol reportedly changed their central town clocks -# late the previous day, but this appears to have been ceremonial -# and the discrepancies are small enough to not worry about. +# From Tim Parenti (2022-07-01), per Paul Eggert (2014-03-30): +# The clocks at the railway station in Simferopol were put forward from 22:00 +# to 24:00 the previous day in a "symbolic ceremony"; however, per +# contemporaneous news reports, "ordinary Crimeans [made] the daylight savings +# time switch at 2am" on Sunday. +# https://www.business-standard.com/article/pti-stories/crimea-to-set-clocks-to-russia-time-114033000014_1.html +# https://www.reuters.com/article/us-ukraine-crisis-crimea-time/crimea-switches-to-moscow-time-amid-incorporation-frenzy-idUKBREA2S0LT20140329 +# https://www.bbc.com/news/av/world-europe-26806583 2:00 EU EE%sT 2014 Mar 30 2:00 4:00 - MSK 2014 Oct 26 2:00s 3:00 - MSK @@ -3059,11 +2783,12 @@ # 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 +3100,8 @@ # 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 +3226,8 @@ # 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): @@ -3553,11 +3278,13 @@ 11:00 Russia +11/+12 2011 Mar 27 2:00s 12:00 - +12 - -# San Marino -# See Europe/Rome. - +# Bosnia & Herzegovina +# Croatia +# Kosovo +# Montenegro +# North Macedonia # Serbia +# Slovenia # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Europe/Belgrade 1:22:00 - LMT 1884 1:00 - CET 1941 Apr 18 23:00 @@ -3569,17 +3296,6 @@ # Shanks & Pottenger don't give as much detail, so go with Koželj. 1:00 - CET 1982 Nov 27 1:00 EU CE%sT -Link Europe/Belgrade Europe/Ljubljana # Slovenia -Link Europe/Belgrade Europe/Podgorica # Montenegro -Link Europe/Belgrade Europe/Sarajevo # Bosnia and Herzegovina -Link Europe/Belgrade Europe/Skopje # North Macedonia -Link Europe/Belgrade Europe/Zagreb # Croatia - -# Slovakia -Link Europe/Prague Europe/Bratislava - -# Slovenia -# See Europe/Belgrade. # Spain # @@ -3665,11 +3381,11 @@ 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 -Zone Africa/Ceuta -0:21:16 - LMT 1900 Dec 31 23:38:44 +Zone Africa/Ceuta -0:21:16 - LMT 1901 Jan 1 0:00u 0:00 - WET 1918 May 6 23:00 0:00 1:00 WEST 1918 Oct 7 23:00 0:00 - WET 1924 @@ -3686,64 +3402,11 @@ # IATA SSIM (1996-09) says the Canaries switch at 2:00u, not 1:00u. # 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): (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 +# Germany (Busingen enclave) +# Liechtenstein # Switzerland +# # From Howse: # By the end of the 18th century clocks and watches became commonplace # and their performance improved enormously. Communities began to keep @@ -3835,6 +3498,19 @@ # 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 , 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 - @@ -4047,11 +3723,10 @@ 2:00 1:00 EEST 2015 Nov 8 1:00u 2:00 EU EE%sT 2016 Sep 7 3:00 - +03 -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.... @@ -4068,8 +3743,8 @@ # US colleague David Cochrane) are still trying to get more # information upon these local deviations from Kiev rules. # -# From Paul Eggert (2022-02-08): -# For now, assume that Ukraine's other three zones followed the same rules, +# From Paul Eggert (2022-08-27): +# For now, assume that Ukraine's zones all followed the same rules, # except that Crimea switched to Moscow time in 1994 as described elsewhere. # From Igor Karpov, who works for the Ukrainian Ministry of Justice, @@ -4111,7 +3786,7 @@ # 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 +3814,9 @@ # * 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): -# 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. - -# 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 +# Zone NAME STDOFF RULES FORMAT [UNTIL] +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 @@ -4163,37 +3824,6 @@ 2:00 1:00 EEST 1991 Sep 29 3:00 2:00 C-Eur EE%sT 1996 May 13 2:00 EU EE%sT -# Transcarpathia used CET 1990/1991. -# "Uzhhorod" is the transliteration of the Rusyn/Ukrainian pronunciation, but -# "Uzhgorod" is more common in English. -Zone Europe/Uzhgorod 1:29:12 - LMT 1890 Oct - 1:00 - CET 1940 - 1:00 C-Eur CE%sT 1944 Oct - 1:00 1:00 CEST 1944 Oct 26 - 1:00 - CET 1945 Jun 29 - 3:00 Russia MSK/MSD 1990 - 3:00 - MSK 1990 Jul 1 2:00 - 1:00 - CET 1991 Mar 31 3:00 - 2:00 - EET 1992 Mar 20 - 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 -# "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. -Zone Europe/Zaporozhye 2:20:40 - LMT 1880 - 2:20 - +0220 1924 May 2 - 2:00 - EET 1930 Jun 21 - 3:00 - MSK 1941 Aug 25 - 1:00 C-Eur CE%sT 1943 Oct 25 - 3:00 Russia MSK/MSD 1991 Mar 31 2:00 - 2:00 E-Eur EE%sT 1992 Mar 20 - 2:00 C-Eur EE%sT 1996 May 13 - 2:00 EU EE%sT - -# Vatican City -# See Europe/Rome. ############################################################################### diff -Nru openjdk-17-17.0.4+8/make/data/tzdata/iso3166.tab openjdk-17-17.0.6+10/make/data/tzdata/iso3166.tab --- openjdk-17-17.0.4+8/make/data/tzdata/iso3166.tab 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/tzdata/iso3166.tab 2023-01-10 13:21:55.000000000 +0000 @@ -26,13 +26,13 @@ # This file is in the public domain, so clarified as of # 2009-05-17 by Arthur David Olson. # -# From Paul Eggert (2015-05-02): +# From Paul Eggert (2022-11-18): # This file contains a table of two-letter country codes. Columns are # separated by a single tab. Lines beginning with '#' are comments. # All text uses UTF-8 encoding. The columns of the table are as follows: # # 1. ISO 3166-1 alpha-2 country code, current as of -# ISO 3166-1 N976 (2018-11-06). See: Updates on ISO 3166-1 +# ISO 3166-1 N1087 (2022-09-02). See: Updates on ISO 3166-1 # https://isotc.iso.org/livelink/livelink/Open/16944257 # 2. The usual English name for the coded region, # chosen so that alphabetic sorting of subsets produces helpful lists. @@ -261,7 +261,7 @@ SZ Eswatini (Swaziland) TC Turks & Caicos Is TD Chad -TF French Southern & Antarctic Lands +TF French Southern Territories TG Togo TH Thailand TJ Tajikistan diff -Nru openjdk-17-17.0.4+8/make/data/tzdata/leapseconds openjdk-17-17.0.6+10/make/data/tzdata/leapseconds --- openjdk-17-17.0.4+8/make/data/tzdata/leapseconds 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/tzdata/leapseconds 2023-01-10 13:21:55.000000000 +0000 @@ -95,11 +95,11 @@ # 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 diff -Nru openjdk-17-17.0.4+8/make/data/tzdata/northamerica openjdk-17-17.0.6+10/make/data/tzdata/northamerica --- openjdk-17-17.0.4+8/make/data/tzdata/northamerica 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/tzdata/northamerica 2023-01-10 13:21:55.000000000 +0000 @@ -367,8 +367,7 @@ # 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 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 @@ -462,7 +462,7 @@ Rule Chicago 1922 1954 - Sep lastSun 2:00 0 S Rule Chicago 1955 1966 - Oct lastSun 2:00 0 S # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 12:09:24 +Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 18:00u -6:00 US C%sT 1920 -6:00 Chicago C%sT 1936 Mar 1 2:00 -5:00 - EST 1936 Nov 15 2:00 @@ -471,7 +471,7 @@ -6:00 Chicago C%sT 1967 -6:00 US C%sT # Oliver County, ND switched from mountain to central time on 1992-10-25. -Zone America/North_Dakota/Center -6:45:12 - LMT 1883 Nov 18 12:14:48 +Zone America/North_Dakota/Center -6:45:12 - LMT 1883 Nov 18 19:00u -7:00 US M%sT 1992 Oct 25 2:00 -6:00 US C%sT # Morton County, ND, switched from mountain to central time on @@ -481,7 +481,7 @@ # Jones, Mellette, and Todd Counties in South Dakota; # but in practice these other counties were already observing central time. # See . -Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21 +Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 19:00u -7:00 US M%sT 2003 Oct 26 2:00 -6:00 US C%sT @@ -498,7 +498,7 @@ # largest city in Mercer County). Google Maps places Beulah's city hall # at 47° 15' 51" N, 101° 46' 40" W, which yields an offset of 6h47'07". -Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53 +Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 19:00u -7:00 US M%sT 2010 Nov 7 2:00 -6:00 US C%sT @@ -530,7 +530,7 @@ Rule Denver 1965 1966 - Apr lastSun 2:00 1:00 D Rule Denver 1965 1966 - Oct lastSun 2:00 0 S # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone America/Denver -6:59:56 - LMT 1883 Nov 18 12:00:04 +Zone America/Denver -6:59:56 - LMT 1883 Nov 18 19:00u -7:00 US M%sT 1920 -7:00 Denver M%sT 1942 -7:00 US M%sT 1946 @@ -583,7 +583,7 @@ Rule CA 1950 1961 - Sep lastSun 2:00 0 S Rule CA 1962 1966 - Oct lastSun 2:00 0 S # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 12:07:02 +Zone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 20:00u -8:00 US P%sT 1946 -8:00 CA P%sT 1967 -8:00 US P%sT @@ -845,14 +845,13 @@ # Go with the Arizona State Library instead. # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone America/Phoenix -7:28:18 - LMT 1883 Nov 18 11:31:42 +Zone America/Phoenix -7:28:18 - LMT 1883 Nov 18 19:00u -7:00 US M%sT 1944 Jan 1 0:01 -7:00 - MST 1944 Apr 1 0:01 -7:00 US M%sT 1944 Oct 1 0:01 -7:00 - MST 1967 -7:00 US M%sT 1968 Mar 21 -7:00 - MST -Link America/Phoenix America/Creston # From Arthur David Olson (1988-02-13): # A writer from the Inter Tribal Council of Arizona, Inc., @@ -873,7 +872,7 @@ # switched four weeks late in 1974. # # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11 +Zone America/Boise -7:44:49 - LMT 1883 Nov 18 20:00u -8:00 US P%sT 1923 May 13 2:00 -7:00 US M%sT 1974 -7:00 - MST 1974 Feb 3 2:00 @@ -945,7 +944,7 @@ Rule Indianapolis 1941 1954 - Sep lastSun 2:00 0 S Rule Indianapolis 1946 1954 - Apr lastSun 2:00 1:00 D # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22 +Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 18:00u -6:00 US C%sT 1920 -6:00 Indianapolis C%sT 1942 -6:00 US C%sT 1946 @@ -965,7 +964,7 @@ Rule Marengo 1954 1960 - Apr lastSun 2:00 1:00 D Rule Marengo 1954 1960 - Sep lastSun 2:00 0 S # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone America/Indiana/Marengo -5:45:23 - LMT 1883 Nov 18 12:14:37 +Zone America/Indiana/Marengo -5:45:23 - LMT 1883 Nov 18 18:00u -6:00 US C%sT 1951 -6:00 Marengo C%sT 1961 Apr 30 2:00 -5:00 - EST 1969 @@ -989,7 +988,7 @@ Rule Vincennes 1961 only - Sep lastSun 2:00 0 S Rule Vincennes 1962 1963 - Oct lastSun 2:00 0 S # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone America/Indiana/Vincennes -5:50:07 - LMT 1883 Nov 18 12:09:53 +Zone America/Indiana/Vincennes -5:50:07 - LMT 1883 Nov 18 18:00u -6:00 US C%sT 1946 -6:00 Vincennes C%sT 1964 Apr 26 2:00 -5:00 - EST 1969 @@ -1009,7 +1008,7 @@ Rule Perry 1956 1963 - Apr lastSun 2:00 1:00 D Rule Perry 1961 1963 - Oct lastSun 2:00 0 S # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone America/Indiana/Tell_City -5:47:03 - LMT 1883 Nov 18 12:12:57 +Zone America/Indiana/Tell_City -5:47:03 - LMT 1883 Nov 18 18:00u -6:00 US C%sT 1946 -6:00 Perry C%sT 1964 Apr 26 2:00 -5:00 - EST 1967 Oct 29 2:00 @@ -1026,7 +1025,7 @@ Rule Pike 1956 1964 - Apr lastSun 2:00 1:00 D Rule Pike 1961 1964 - Oct lastSun 2:00 0 S # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone America/Indiana/Petersburg -5:49:07 - LMT 1883 Nov 18 12:10:53 +Zone America/Indiana/Petersburg -5:49:07 - LMT 1883 Nov 18 18:00u -6:00 US C%sT 1955 -6:00 Pike C%sT 1965 Apr 25 2:00 -5:00 - EST 1966 Oct 30 2:00 @@ -1048,7 +1047,7 @@ Rule Starke 1957 1958 - Sep lastSun 2:00 0 S Rule Starke 1959 1961 - Oct lastSun 2:00 0 S # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone America/Indiana/Knox -5:46:30 - LMT 1883 Nov 18 12:13:30 +Zone America/Indiana/Knox -5:46:30 - LMT 1883 Nov 18 18:00u -6:00 US C%sT 1947 -6:00 Starke C%sT 1962 Apr 29 2:00 -5:00 - EST 1963 Oct 27 2:00 @@ -1064,7 +1063,7 @@ Rule Pulaski 1955 1956 - Oct lastSun 2:00 0 S Rule Pulaski 1957 1960 - Sep lastSun 2:00 0 S # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone America/Indiana/Winamac -5:46:25 - LMT 1883 Nov 18 12:13:35 +Zone America/Indiana/Winamac -5:46:25 - LMT 1883 Nov 18 18:00u -6:00 US C%sT 1946 -6:00 Pulaski C%sT 1961 Apr 30 2:00 -5:00 - EST 1969 @@ -1075,7 +1074,7 @@ # # Switzerland County, Indiana, did not observe DST from 1973 through 2005. # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone America/Indiana/Vevay -5:40:16 - LMT 1883 Nov 18 12:19:44 +Zone America/Indiana/Vevay -5:40:16 - LMT 1883 Nov 18 18:00u -6:00 US C%sT 1954 Apr 25 2:00 -5:00 - EST 1969 -5:00 US E%sT 1973 @@ -1111,7 +1110,7 @@ Rule Louisville 1950 1955 - Sep lastSun 2:00 0 S Rule Louisville 1956 1961 - Oct lastSun 2:00 0 S # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone America/Kentucky/Louisville -5:43:02 - LMT 1883 Nov 18 12:16:58 +Zone America/Kentucky/Louisville -5:43:02 - LMT 1883 Nov 18 18:00u -6:00 US C%sT 1921 -6:00 Louisville C%sT 1942 -6:00 US C%sT 1946 @@ -1145,7 +1144,7 @@ # Federal Register 65, 160 (2000-08-17), pp 50154-50158. # https://www.gpo.gov/fdsys/pkg/FR-2000-08-17/html/00-20854.htm # -Zone America/Kentucky/Monticello -5:39:24 - LMT 1883 Nov 18 12:20:36 +Zone America/Kentucky/Monticello -5:39:24 - LMT 1883 Nov 18 18:00u -6:00 US C%sT 1946 -6:00 - CST 1968 -6:00 US C%sT 2000 Oct 29 2:00 @@ -1626,23 +1625,6 @@ # Ontario -# From Paul Eggert (2006-07-09): -# Shanks & Pottenger write that since 1970 most of Ontario has been like -# Toronto. -# Thunder Bay skipped DST in 1973. -# Many smaller locales did not observe peacetime DST until 1974; -# Nipigon (EST) and Rainy River (CST) are the largest that we know of. -# Far west Ontario is like Winnipeg; far east Quebec is like Halifax. - -# From Jeffery Nichols (2020-02-06): -# According to the [Shanks] atlas, those western Ontario zones are huge, -# covering most of Ontario northwest of Sault Ste Marie and Timmins. -# The zones seem to include towns bigger than the ones they're named after, -# like Dryden in America/Rainy_River and Wawa (and maybe Attawapiskat) in -# America/Nipigon. I assume it's too much trouble to change the name of the -# zone (like when you found out that America/Glace_Bay includes Sydney, Nova -# Scotia).... - # From Mark Brader (2003-07-26): # [According to the Toronto Star] Orillia, Ontario, adopted DST # effective Saturday, 1912-06-22, 22:00; the article mentions that @@ -1663,17 +1645,6 @@ # From Mark Brader (2010-03-06): # -# Currently the database has: -# -# # Ontario -# -# # From Paul Eggert (2006-07-09): -# # Shanks & Pottenger write that since 1970 most of Ontario has been like -# # Toronto. -# # Thunder Bay skipped DST in 1973. -# # Many smaller locales did not observe peacetime DST until 1974; -# # Nipigon (EST) and Rainy River (CST) are the largest that we know of. -# # In the (Toronto) Globe and Mail for Saturday, 1955-09-24, in the bottom # right corner of page 1, it says that Toronto will return to standard # time at 2 am Sunday morning (which agrees with the database), and that: @@ -1681,10 +1652,8 @@ # The one-hour setback will go into effect throughout most of Ontario, # except in areas like Windsor which remains on standard time all year. # -# Windsor is, of course, a lot larger than Nipigon. -# -# I only came across this incidentally. I don't know if Windsor began -# observing DST when Detroit did, or in 1974, or on some other date. +# ... I don't know if Windsor began observing DST when Detroit did, +# or in 1974, or on some other date. # # By the way, the article continues by noting that: # @@ -1766,23 +1735,7 @@ # Toronto Star, which said that DST was ending 1971-10-31 as usual. Rule Toronto 1957 1973 - Oct lastSun 2:00 0 S -# From Paul Eggert (2003-07-27): -# Willett (1914-03) writes (p. 17) "In the Cities of Fort William, and -# Port Arthur, Ontario, the principle of the Bill has been in -# operation for the past three years, and in the City of Moose Jaw, -# Saskatchewan, for one year." - -# From David Bryan via Tory Tronrud, Director/Curator, -# Thunder Bay Museum (2003-11-12): -# There is some suggestion, however, that, by-law or not, daylight -# savings time was being practiced in Fort William and Port Arthur -# before 1909.... [I]n 1910, the line between the Eastern and Central -# Time Zones was permanently moved about two hundred miles west to -# include the Thunder Bay area.... When Canada adopted daylight -# savings time in 1916, Fort William and Port Arthur, having done so -# already, did not change their clocks.... During the Second World -# War,... [t]he cities agreed to implement DST during the summer -# months for the remainder of the war years. +# The Bahamas match Toronto since 1970. # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone America/Toronto -5:17:32 - LMT 1895 @@ -1791,22 +1744,6 @@ -5:00 Canada E%sT 1946 -5:00 Toronto E%sT 1974 -5:00 Canada E%sT -Link America/Toronto America/Nassau -Zone America/Thunder_Bay -5:57:00 - LMT 1895 - -6:00 - CST 1910 - -5:00 - EST 1942 - -5:00 Canada E%sT 1970 - -5:00 Toronto E%sT 1973 - -5:00 - EST 1974 - -5:00 Canada E%sT -Zone America/Nipigon -5:53:04 - LMT 1895 - -5:00 Canada E%sT 1940 Sep 29 - -5:00 1:00 EDT 1942 Feb 9 2:00s - -5:00 Canada E%sT -Zone America/Rainy_River -6:18:16 - LMT 1895 - -6:00 Canada C%sT 1940 Sep 29 - -6:00 1:00 CDT 1942 Feb 9 2:00s - -6:00 Canada C%sT # For Atikokan see America/Panama. @@ -2055,6 +1992,37 @@ # Northwest Territories, Nunavut, Yukon +# From Chris Walton (2022-11-06): +# Whitehorse Star - Thursday April 22, 1965 - page 1 +# title: DST Starts Monday ... +# https://www.newspapers.com/image/578587481/ +# The title of this first article is wrong and/or misleading. +# Also, the start time shown in the article is vague; it simply says "after +# midnight" when it probably should have stated 2:00a.m.... +# +# Whitehorse Star - Monday October 25, 1965 - page 15 ... +# https://www.newspapers.com/image/578589147/ +# The 1965 Yukon Council minutes can be found here: +# http://assets.yukonarchives.ca/PER_YG_06_1965_C20_S02_v1.pdf +# ... I do not currently believe that NWT touched any of its clocks in 1965.... +# +# Whitehorse Star - Thursday Feb 24,1966 - page 2 +# title: It's Time for YDT ... +# https://www.newspapers.com/image/578575979/ ... +# America/Whitehorse as a permanent change from UTC-9(YST) to +# UTC-8(PST) at 00:00 on Sunday February 27, 1966.... +# +# Whitehorse Star - Friday April 28,1972 - page 6 +# title: Daylight Saving Time for N.W.T.... +# https://www.newspapers.com/image/578701610/ ... +# Nunavut and NWT zones ... DST starting in 1972.... Start and End ... +# should be the same as the rest of Canada +# +# +# From Paul Eggert (2022-11-06): +# For now, assume Yukon's 1965-04-22 spring forward was 00:00 -> 02:00, as this +# seems likely than 02:00 -> 04:00 and matches "after midnight". + # From Paul Eggert (2006-03-22): # Dawson switched to PST in 1973. Inuvik switched to MST in 1979. # Mathew Englander (1996-10-07) gives the following refs: @@ -2169,6 +2137,13 @@ # * Interpretation Act, RSY 2002, c 125 # https://www.canlii.org/en/yk/laws/stat/rsy-2002-c-125/latest/rsy-2002-c-125.html +# From Chris Walton (2022-11-06): +# The 5th edition of the Atlas of Canada contains a time zone map that +# shows both legislated and observed time zone boundaries. +# All communities on Baffin Island are shown to be observing Eastern time. +# The date on the map is 1984. +# https://ftp.maps.canada.ca/pub/nrcan_rncan/raster/atlas_5_ed/eng/other/referencemaps/mcr4056.pdf + # From Rives McDow (1999-09-04): # Nunavut ... moved ... to incorporate the whole territory into one time zone. # Nunavut moves to single time zone Oct. 31 @@ -2181,40 +2156,7 @@ # From Paul Eggert (1999-09-20): # Basic Facts: The New Territory # http://www.nunavut.com/basicfacts/english/basicfacts_1territory.html -# (1999) reports that Pangnirtung operates on eastern time, -# and that Coral Harbour does not observe DST. We don't know when -# Pangnirtung switched to eastern time; we'll guess 1995. - -# From Rives McDow (1999-11-08): -# On October 31, when the rest of Nunavut went to Central time, -# Pangnirtung wobbled. Here is the result of their wobble: -# -# The following businesses and organizations in Pangnirtung use Central Time: -# -# First Air, Power Corp, Nunavut Construction, Health Center, RCMP, -# Eastern Arctic National Parks, A & D Specialist -# -# The following businesses and organizations in Pangnirtung use Eastern Time: -# -# Hamlet office, All other businesses, Both schools, Airport operator -# -# This has made for an interesting situation there, which warranted the news. -# No one there that I spoke with seems concerned, or has plans to -# change the local methods of keeping time, as it evidently does not -# really interfere with any activities or make things difficult locally. -# They plan to celebrate New Year's turn-over twice, one hour apart, -# so it appears that the situation will last at least that long. -# The Nunavut Intergovernmental Affairs hopes that they will "come to -# their senses", but the locals evidently don't see any problem with -# the current state of affairs. - -# From Michaela Rodrigue, writing in the -# Nunatsiaq News (1999-11-19): -# http://www.nunatsiaqonline.ca/archives/nunavut991130/nvt91119_17.html -# Clyde River, Pangnirtung and Sanikiluaq now operate with two time zones, -# central - or Nunavut time - for government offices, and eastern time -# for municipal offices and schools.... Igloolik [was similar but then] -# made the switch to central time on Saturday, Nov. 6. +# (1999) reports that ... Coral Harbour does not observe DST. # From Paul Eggert (2000-10-02): # Matthews and Vincent (1998) say the following, but we lack histories @@ -2373,18 +2315,12 @@ Rule NT_YK 1942 only - Feb 9 2:00 1:00 W # War Rule NT_YK 1945 only - Aug 14 23:00u 1:00 P # Peace Rule NT_YK 1945 only - Sep 30 2:00 0 S -Rule NT_YK 1965 only - Apr lastSun 0:00 2:00 DD -Rule NT_YK 1965 only - Oct lastSun 2:00 0 S -Rule NT_YK 1980 1986 - Apr lastSun 2:00 1:00 D -Rule NT_YK 1980 2006 - Oct lastSun 2:00 0 S +Rule NT_YK 1972 1986 - Apr lastSun 2:00 1:00 D +Rule NT_YK 1972 2006 - Oct lastSun 2:00 0 S Rule NT_YK 1987 2006 - Apr Sun>=1 2:00 1:00 D +Rule Yukon 1965 only - Apr lastSun 0:00 2:00 DD +Rule Yukon 1965 only - Oct lastSun 2:00 0 S # Zone NAME STDOFF RULES FORMAT [UNTIL] -# aka Panniqtuuq -Zone America/Pangnirtung 0 - -00 1921 # trading post est. - -4:00 NT_YK A%sT 1995 Apr Sun>=1 2:00 - -5:00 Canada E%sT 1999 Oct 31 2:00 - -6:00 Canada C%sT 2000 Oct 29 2:00 - -5:00 Canada E%sT # formerly Frobisher Bay Zone America/Iqaluit 0 - -00 1942 Aug # Frobisher Bay est. -5:00 NT_YK E%sT 1999 Oct 31 2:00 @@ -2417,13 +2353,15 @@ -7:00 NT_YK M%sT 1980 -7:00 Canada M%sT Zone America/Whitehorse -9:00:12 - LMT 1900 Aug 20 - -9:00 NT_YK Y%sT 1967 May 28 0:00 - -8:00 NT_YK P%sT 1980 + -9:00 NT_YK Y%sT 1965 + -9:00 Yukon Y%sT 1966 Feb 27 0:00 + -8:00 - PST 1980 -8:00 Canada P%sT 2020 Nov 1 -7:00 - MST Zone America/Dawson -9:17:40 - LMT 1900 Aug 20 - -9:00 NT_YK Y%sT 1973 Oct 28 0:00 - -8:00 NT_YK P%sT 1980 + -9:00 NT_YK Y%sT 1965 + -9:00 Yukon Y%sT 1973 Oct 28 0:00 + -8:00 - PST 1980 -8:00 Canada P%sT 2020 Nov 1 -7:00 - MST @@ -2639,7 +2577,23 @@ # 5- The islands, reefs and keys shall take their timezone from the # longitude they are located at. +# From Paul Eggert (2022-10-28): +# The new Mexican law was published today: +# https://www.dof.gob.mx/nota_detalle.php?codigo=5670045&fecha=28/10/2022 +# This abolishes DST except where US DST rules are observed, +# and in addition changes all of Chihuahua to -06 with no DST. + +# From Heitor David Pinto (2022-11-28): +# Now the northern municipalities want to have the same time zone as the +# respective neighboring cities in the US, for example Juárez in UTC-7 with +# DST, matching El Paso, and Ojinaga in UTC-6 with DST, matching Presidio.... +# the president authorized the publication of the decree for November 29, +# so the time change would occur on November 30 at 0:00. +# http://puentelibre.mx/noticia/ciudad_juarez_cambio_horario_noviembre_2022/ + # Rule NAME FROM TO - IN ON AT SAVE LETTER/S +Rule Mexico 1931 only - May 1 23:00 1:00 D +Rule Mexico 1931 only - Oct 1 0:00 0 S Rule Mexico 1939 only - Feb 5 0:00 1:00 D Rule Mexico 1939 only - Jun 25 0:00 0 S Rule Mexico 1940 only - Dec 9 0:00 1:00 D @@ -2652,89 +2606,108 @@ Rule Mexico 1996 2000 - Oct lastSun 2:00 0 S Rule Mexico 2001 only - May Sun>=1 2:00 1:00 D Rule Mexico 2001 only - Sep lastSun 2:00 0 S -Rule Mexico 2002 max - Apr Sun>=1 2:00 1:00 D -Rule Mexico 2002 max - Oct lastSun 2:00 0 S +Rule Mexico 2002 2022 - Apr Sun>=1 2:00 1:00 D +Rule Mexico 2002 2022 - Oct lastSun 2:00 0 S # Zone NAME STDOFF RULES FORMAT [UNTIL] # Quintana Roo; represented by Cancún -Zone America/Cancun -5:47:04 - LMT 1922 Jan 1 0:12:56 +Zone America/Cancun -5:47:04 - LMT 1922 Jan 1 6:00u -6:00 - CST 1981 Dec 23 -5:00 Mexico E%sT 1998 Aug 2 2:00 -6:00 Mexico C%sT 2015 Feb 1 2:00 -5:00 - EST # Campeche, Yucatán; represented by Mérida -Zone America/Merida -5:58:28 - LMT 1922 Jan 1 0:01:32 +Zone America/Merida -5:58:28 - LMT 1922 Jan 1 6:00u -6:00 - CST 1981 Dec 23 -5:00 - EST 1982 Dec 2 -6:00 Mexico C%sT # Coahuila, Nuevo León, Tamaulipas (near US border) # This includes the following municipalities: -# in Coahuila: Ocampo, Acuña, Zaragoza, Jiménez, Piedras Negras, Nava, -# Guerrero, Hidalgo. -# in Nuevo León: Anáhuac, Los Aldama. +# in Coahuila: Acuña, Allende, Guerrero, Hidalgo, Jiménez, Morelos, Nava, +# Ocampo, Piedras Negras, Villa Unión, Zaragoza +# in Nuevo León: Anáhuac # in Tamaulipas: Nuevo Laredo, Guerrero, Mier, Miguel Alemán, Camargo, # Gustavo Díaz Ordaz, Reynosa, Río Bravo, Valle Hermoso, Matamoros. -# See: Inicia mañana Horario de Verano en zona fronteriza, El Universal, -# 2016-03-12 -# http://www.eluniversal.com.mx/articulo/estados/2016/03/12/inicia-manana-horario-de-verano-en-zona-fronteriza -Zone America/Matamoros -6:40:00 - LMT 1921 Dec 31 23:20:00 +# https://www.dof.gob.mx/nota_detalle.php?codigo=5670045&fecha=28/10/2022 +Zone America/Matamoros -6:30:00 - LMT 1922 Jan 1 6:00u -6:00 - CST 1988 -6:00 US C%sT 1989 -6:00 Mexico C%sT 2010 -6:00 US C%sT # Durango; Coahuila, Nuevo León, Tamaulipas (away from US border) -Zone America/Monterrey -6:41:16 - LMT 1921 Dec 31 23:18:44 +Zone America/Monterrey -6:41:16 - LMT 1922 Jan 1 6:00u -6:00 - CST 1988 -6:00 US C%sT 1989 -6:00 Mexico C%sT # Central Mexico -Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 0:23:24 +Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 7:00u -7:00 - MST 1927 Jun 10 23:00 -6:00 - CST 1930 Nov 15 - -7:00 - MST 1931 May 1 23:00 - -6:00 - CST 1931 Oct - -7:00 - MST 1932 Apr 1 + -7:00 Mexico M%sT 1932 Apr 1 -6:00 Mexico C%sT 2001 Sep 30 2:00 -6:00 - CST 2002 Feb 20 -6:00 Mexico C%sT -# Chihuahua (near US border) +# Chihuahua (near US border - western side) # This includes the municipalities of Janos, Ascensión, Juárez, Guadalupe, -# Práxedis G Guerrero, Coyame del Sotol, Ojinaga, and Manuel Benavides. -# (See the 2016-03-12 El Universal source mentioned above.) -Zone America/Ojinaga -6:57:40 - LMT 1922 Jan 1 0:02:20 +# and Práxedis G Guerrero. +# http://gaceta.diputados.gob.mx/PDF/65/2a022/nov/20221124-VII.pdf +Zone America/Ciudad_Juarez -7:05:56 - LMT 1922 Jan 1 7:00u -7:00 - MST 1927 Jun 10 23:00 -6:00 - CST 1930 Nov 15 - -7:00 - MST 1931 May 1 23:00 - -6:00 - CST 1931 Oct - -7:00 - MST 1932 Apr 1 + -7:00 Mexico M%sT 1932 Apr 1 -6:00 - CST 1996 -6:00 Mexico C%sT 1998 -6:00 - CST 1998 Apr Sun>=1 3:00 -7:00 Mexico M%sT 2010 + -7:00 US M%sT 2022 Oct 30 2:00 + -6:00 - CST 2022 Nov 30 0:00 -7:00 US M%sT +# Chihuahua (near US border - eastern side) +# The municipalities of Coyame del Sotol, Ojinaga, and Manuel Benavides. +# http://gaceta.diputados.gob.mx/PDF/65/2a022/nov/20221124-VII.pdf +Zone America/Ojinaga -6:57:40 - LMT 1922 Jan 1 7:00u + -7:00 - MST 1927 Jun 10 23:00 + -6:00 - CST 1930 Nov 15 + -7:00 Mexico M%sT 1932 Apr 1 + -6:00 - CST 1996 + -6:00 Mexico C%sT 1998 + -6:00 - CST 1998 Apr Sun>=1 3:00 + -7:00 Mexico M%sT 2010 + -7:00 US M%sT 2022 Oct 30 2:00 + -6:00 - CST 2022 Nov 30 0:00 + -6:00 US C%sT # Chihuahua (away from US border) -Zone America/Chihuahua -7:04:20 - LMT 1921 Dec 31 23:55:40 +Zone America/Chihuahua -7:04:20 - LMT 1922 Jan 1 7:00u -7:00 - MST 1927 Jun 10 23:00 -6:00 - CST 1930 Nov 15 - -7:00 - MST 1931 May 1 23:00 - -6:00 - CST 1931 Oct - -7:00 - MST 1932 Apr 1 + -7:00 Mexico M%sT 1932 Apr 1 -6:00 - CST 1996 -6:00 Mexico C%sT 1998 -6:00 - CST 1998 Apr Sun>=1 3:00 - -7:00 Mexico M%sT + -7:00 Mexico M%sT 2022 Oct 30 2:00 + -6:00 - CST # Sonora -Zone America/Hermosillo -7:23:52 - LMT 1921 Dec 31 23:36:08 +Zone America/Hermosillo -7:23:52 - LMT 1922 Jan 1 7:00u -7:00 - MST 1927 Jun 10 23:00 -6:00 - CST 1930 Nov 15 - -7:00 - MST 1931 May 1 23:00 - -6:00 - CST 1931 Oct - -7:00 - MST 1932 Apr 1 + -7:00 Mexico M%sT 1932 Apr 1 -6:00 - CST 1942 Apr 24 -7:00 - MST 1949 Jan 14 -8:00 - PST 1970 -7:00 Mexico M%sT 1999 -7:00 - MST +# Baja California Sur, Nayarit (except Bahía de Banderas), Sinaloa +Zone America/Mazatlan -7:05:40 - LMT 1922 Jan 1 7:00u + -7:00 - MST 1927 Jun 10 23:00 + -6:00 - CST 1930 Nov 15 + -7:00 Mexico M%sT 1932 Apr 1 + -6:00 - CST 1942 Apr 24 + -7:00 - MST 1949 Jan 14 + -8:00 - PST 1970 + -7:00 Mexico M%sT + +# Bahía de Banderas + # From Alexander Krivenyshev (2010-04-21): # According to news, Bahía de Banderas (Mexican state of Nayarit) # changed time zone UTC-7 to new time zone UTC-6 on April 4, 2010 (to @@ -2762,25 +2735,10 @@ # From Arthur David Olson (2010-05-01): # Use "Bahia_Banderas" to keep the name to fourteen characters. -# Mazatlán -Zone America/Mazatlan -7:05:40 - LMT 1921 Dec 31 23:54:20 - -7:00 - MST 1927 Jun 10 23:00 - -6:00 - CST 1930 Nov 15 - -7:00 - MST 1931 May 1 23:00 - -6:00 - CST 1931 Oct - -7:00 - MST 1932 Apr 1 - -6:00 - CST 1942 Apr 24 - -7:00 - MST 1949 Jan 14 - -8:00 - PST 1970 - -7:00 Mexico M%sT - -# Bahía de Banderas -Zone America/Bahia_Banderas -7:01:00 - LMT 1921 Dec 31 23:59:00 +Zone America/Bahia_Banderas -7:01:00 - LMT 1922 Jan 1 7:00u -7:00 - MST 1927 Jun 10 23:00 -6:00 - CST 1930 Nov 15 - -7:00 - MST 1931 May 1 23:00 - -6:00 - CST 1931 Oct - -7:00 - MST 1932 Apr 1 + -7:00 Mexico M%sT 1932 Apr 1 -6:00 - CST 1942 Apr 24 -7:00 - MST 1949 Jan 14 -8:00 - PST 1970 @@ -2788,7 +2746,7 @@ -6:00 Mexico C%sT # Baja California -Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56 +Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 7:00u -7:00 - MST 1924 -8:00 - PST 1927 Jun 10 23:00 -7:00 - MST 1930 Nov 15 @@ -2825,23 +2783,19 @@ # http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010 # It has been moved to the 'backward' file. # +# From Paul Eggert (2022-10-28): +# Today's new law states that the entire state of Baja California +# follows US DST rules, which agrees with simplifications noted above. +# # # Revillagigedo Is # no information ############################################################################### -# Anguilla -# Antigua and Barbuda -# See America/Puerto_Rico. - -# The Bahamas -# See America/Toronto. - - # 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 +2839,7 @@ 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 +2900,10 @@ # 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,21 +2998,16 @@ 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 -4:00 Canada A%sT 1976 -4:00 US A%sT -# Caribbean Netherlands -# See America/Puerto_Rico. - -# Cayman Is -# See America/Panama. - # 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 +3019,7 @@ 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 @@ -3279,9 +3230,6 @@ -5:29:36 - HMT 1925 Jul 19 12:00 # Havana MT -5:00 Cuba C%sT -# Dominica -# See America/Puerto_Rico. - # Dominican Republic # From Steffen Thorsen (2000-10-30): @@ -3328,12 +3276,6 @@ Zone America/El_Salvador -5:56:48 - LMT 1921 # San Salvador -6:00 Salv C%sT -# Grenada -# Guadeloupe -# St Barthélemy -# St Martin (French part) -# See America/Puerto_Rico. - # Guatemala # # From Gwillim Law (2006-04-22), after a heads-up from Oscar van Vlijmen: @@ -3491,7 +3433,7 @@ # 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 +3446,7 @@ # 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 @@ -3518,9 +3461,6 @@ -4:00 1:00 ADT 1980 Sep 28 -4:00 - AST -# Montserrat -# See America/Puerto_Rico. - # Nicaragua # # This uses Shanks & Pottenger for times before 2005. @@ -3586,44 +3526,39 @@ -5:00 - EST 1997 -6:00 Nic C%sT +# Cayman Is # Panama +# +# Atikokan and Coral Harbour, Canada, match Panama since 1970. # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone America/Panama -5:18:08 - LMT 1890 -5:19:36 - CMT 1908 Apr 22 # Colón Mean Time -5:00 - EST -Link America/Panama America/Atikokan -Link America/Panama America/Cayman +# Anguilla +# Antigua & Barbuda +# Aruba +# Caribbean Netherlands +# Curaçao +# Dominica +# Grenada +# Guadeloupe +# Montserrat # Puerto Rico +# St Barthélemy +# St Kitts-Nevis +# Sint Maarten / St Martin +# St Lucia +# St Vincent & the Grenadines +# Trinidad & Tobago +# Virgin Is (UK & US) +# # There are too many San Juans elsewhere, so we'll use 'Puerto_Rico'. # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan -4:00 - AST 1942 May 3 -4:00 US A%sT 1946 -4:00 - AST -Link America/Puerto_Rico America/Anguilla -Link America/Puerto_Rico America/Antigua -Link America/Puerto_Rico America/Aruba -Link America/Puerto_Rico America/Curacao -Link America/Puerto_Rico America/Blanc-Sablon # Quebec (Lower North Shore) -Link America/Puerto_Rico America/Dominica -Link America/Puerto_Rico America/Grenada -Link America/Puerto_Rico America/Guadeloupe -Link America/Puerto_Rico America/Kralendijk # Caribbean Netherlands -Link America/Puerto_Rico America/Lower_Princes # Sint Maarten -Link America/Puerto_Rico America/Marigot # St Martin (French part) -Link America/Puerto_Rico America/Montserrat -Link America/Puerto_Rico America/Port_of_Spain # Trinidad & Tobago -Link America/Puerto_Rico America/St_Barthelemy # St Barthélemy -Link America/Puerto_Rico America/St_Kitts # St Kitts & Nevis -Link America/Puerto_Rico America/St_Lucia -Link America/Puerto_Rico America/St_Thomas # Virgin Islands (US) -Link America/Puerto_Rico America/St_Vincent -Link America/Puerto_Rico America/Tortola # Virgin Islands (UK) - -# St Kitts-Nevis -# St Lucia -# See America/Puerto_Rico. # St Pierre and Miquelon # There are too many St Pierres elsewhere, so we'll use 'Miquelon'. @@ -3633,12 +3568,6 @@ -3:00 - -03 1987 -3:00 Canada -03/-02 -# St Vincent and the Grenadines -# See America/Puerto_Rico. - -# Sint Maarten -# See America/Puerto_Rico. - # Turks and Caicos # # From Chris Dunn in @@ -3701,17 +3630,13 @@ # 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 -4:00 - AST 2018 Mar 11 3:00 -5:00 US E%sT -# British Virgin Is -# US Virgin Is -# See America/Puerto_Rico. - - # Local Variables: # coding: utf-8 # End: diff -Nru openjdk-17-17.0.4+8/make/data/tzdata/southamerica openjdk-17-17.0.6+10/make/data/tzdata/southamerica --- openjdk-17-17.0.4+8/make/data/tzdata/southamerica 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/tzdata/southamerica 2023-01-10 13:21:55.000000000 +0000 @@ -423,6 +423,7 @@ # # 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 @@ # - 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 @@ # # 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 @@ # # 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 @@ # # 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 @@ # # 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 @@ # # 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 @@ # # 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 @@ # # 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 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 @@ # # 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 @@ # # 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 @@ -596,9 +608,6 @@ -3:00 Arg -03/-02 2008 Oct 18 -3:00 - -03 -# Aruba -# See America/Puerto_Rico. - # Bolivia # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone America/La_Paz -4:32:36 - LMT 1890 @@ -668,7 +677,7 @@ # 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 +1173,7 @@ # 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 +1191,14 @@ # 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 +1318,25 @@ # 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. +# +# From Eduardo Romero Urra (2022-08-17): +# https://www.diariooficial.interior.gob.cl/publicaciones/2022/08/13/43327/01/2172567.pdf +# +# From Paul Eggert (2022-08-17): +# Although the presidential decree stops at fall 2026, assume that +# similar DST rules will continue thereafter. # Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Chile 1927 1931 - Sep 1 0:00 1:00 - @@ -1344,7 +1374,9 @@ 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 +1389,9 @@ -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 +1403,8 @@ -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,28 +1438,25 @@ # 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." +# From Alois Treindl (2022-11-10): +# End of time change in Colombia 1993 ... should be 6 February 24h ... +# DECRETO 267 DE 1993 +# https://www.suin-juriscol.gov.co/viewDocument.asp?ruta=Decretos/1061335 + # 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 - +Rule CO 1992 only - May 3 0:00 1:00 - +Rule CO 1993 only - Feb 6 24: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 # Malpelo, Providencia, San Andres # no information; probably like America/Bogota -# Curaçao -# See America/Puerto_Rico. -# -# From Arthur David Olson (2011-06-15): -# use links for places with new iso3166 codes. -# The name "Lower Prince's Quarter" is both longer than fourteen characters -# and contains an apostrophe; use "Lower_Princes".... -# From Paul Eggert (2021-09-29): -# These backward-compatibility links now are in the 'northamerica' file. # Ecuador # @@ -1742,9 +1772,6 @@ -3:30 - -0330 1984 Oct -3:00 - -03 -# Trinidad and Tobago -# See America/Puerto_Rico. - # Uruguay # From Paul Eggert (1993-11-18): # Uruguay wins the prize for the strangest peacetime manipulation of the rules. diff -Nru openjdk-17-17.0.4+8/make/data/tzdata/zone.tab openjdk-17-17.0.6+10/make/data/tzdata/zone.tab --- openjdk-17-17.0.4+8/make/data/tzdata/zone.tab 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/data/tzdata/zone.tab 2023-01-10 13:21:55.000000000 +0000 @@ -137,13 +137,9 @@ CA +5320-06025 America/Goose_Bay Atlantic - Labrador (most areas) CA +5125-05707 America/Blanc-Sablon AST - QC (Lower North Shore) CA +4339-07923 America/Toronto Eastern - ON, QC (most areas) -CA +4901-08816 America/Nipigon Eastern - ON, QC (no DST 1967-73) -CA +4823-08915 America/Thunder_Bay Eastern - ON (Thunder Bay) -CA +6344-06828 America/Iqaluit Eastern - NU (most east areas) -CA +6608-06544 America/Pangnirtung Eastern - NU (Pangnirtung) +CA +6344-06828 America/Iqaluit Eastern - NU (most areas) CA +484531-0913718 America/Atikokan EST - ON (Atikokan); NU (Coral H) CA +4953-09709 America/Winnipeg Central - ON (west); Manitoba -CA +4843-09434 America/Rainy_River Central - ON (Rainy R, Ft Frances) CA +744144-0944945 America/Resolute Central - NU (Resolute) CA +624900-0920459 America/Rankin_Inlet Central - NU (central) CA +5024-10439 America/Regina CST - SK (most areas) @@ -153,7 +149,7 @@ 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) @@ -303,17 +299,18 @@ MU -2010+05730 Indian/Mauritius MV +0410+07330 Indian/Maldives MW -1547+03500 Africa/Blantyre -MX +1924-09909 America/Mexico_City Central Time -MX +2105-08646 America/Cancun Eastern Standard Time - Quintana Roo -MX +2058-08937 America/Merida Central Time - Campeche, Yucatan -MX +2540-10019 America/Monterrey Central Time - Durango; Coahuila, Nuevo Leon, Tamaulipas (most areas) -MX +2550-09730 America/Matamoros Central Time US - Coahuila, Nuevo Leon, Tamaulipas (US border) -MX +2313-10625 America/Mazatlan Mountain Time - Baja California Sur, Nayarit, Sinaloa -MX +2838-10605 America/Chihuahua Mountain Time - Chihuahua (most areas) -MX +2934-10425 America/Ojinaga Mountain Time US - Chihuahua (US border) -MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora -MX +3232-11701 America/Tijuana Pacific Time US - Baja California -MX +2048-10515 America/Bahia_Banderas Central Time - Bahia de Banderas +MX +1924-09909 America/Mexico_City Central Mexico +MX +2105-08646 America/Cancun Quintana Roo +MX +2058-08937 America/Merida Campeche, Yucatan +MX +2540-10019 America/Monterrey Durango; Coahuila, Nuevo Leon, Tamaulipas (most areas) +MX +2550-09730 America/Matamoros Coahuila, Nuevo Leon, Tamaulipas (US border) +MX +2838-10605 America/Chihuahua Chihuahua (most areas) +MX +3144-10629 America/Ciudad_Juarez Chihuahua (US border - west) +MX +2934-10425 America/Ojinaga Chihuahua (US border - east) +MX +2313-10625 America/Mazatlan Baja California Sur, Nayarit (most areas), Sinaloa +MX +2048-10515 America/Bahia_Banderas Bahia de Banderas +MX +2904-11058 America/Hermosillo Sonora +MX +3232-11701 America/Tijuana Baja California MY +0310+10142 Asia/Kuala_Lumpur Malaysia (peninsula) MY +0133+11020 Asia/Kuching Sabah, Sarawak MZ -2558+03235 Africa/Maputo @@ -423,9 +420,7 @@ 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 +4837+02218 Europe/Uzhgorod Transcarpathia -UA +4750+03510 Europe/Zaporozhye Zaporozhye and east Lugansk +UA +5026+03031 Europe/Kyiv Ukraine (most areas) UG +0019+03225 Africa/Kampala UM +2813-17722 Pacific/Midway Midway Islands UM +1917+16637 Pacific/Wake Wake Island diff -Nru openjdk-17-17.0.4+8/make/devkit/createJMHBundle.sh openjdk-17-17.0.6+10/make/devkit/createJMHBundle.sh --- openjdk-17-17.0.4+8/make/devkit/createJMHBundle.sh 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/devkit/createJMHBundle.sh 2023-01-10 13:21:55.000000000 +0000 @@ -26,7 +26,7 @@ # Create a bundle in the build directory, containing what's needed to # build and run JMH microbenchmarks from the OpenJDK build. -JMH_VERSION=1.34 +JMH_VERSION=1.35 COMMONS_MATH3_VERSION=3.2 JOPT_SIMPLE_VERSION=4.6 diff -Nru openjdk-17-17.0.4+8/make/devkit/createWindowsDevkit.sh openjdk-17-17.0.6+10/make/devkit/createWindowsDevkit.sh --- openjdk-17-17.0.4+8/make/devkit/createWindowsDevkit.sh 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-17-17.0.6+10/make/devkit/createWindowsDevkit.sh 2023-01-10 13:21:55.000000000 +0000 @@ -0,0 +1,252 @@ +#!/bin/bash +# +# Copyright (c) 2015, 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# This script copies parts of a Visual Studio installation into a devkit +# suitable for building OpenJDK and OracleJDK. Needs to run in Cygwin or WSL. +# erik.joelsson@oracle.com + +usage_and_exit() { + echo "Usage: createWindowsDevkit.sh <2019 | 2022>" + exit 1 +} + +if [ ! $# = 1 ]; then + usage_and_exit +fi + +VS_VERSION="$1" + +VS_DLL_VERSION="140" +SDK_VERSION="10" + +SCRIPT_DIR="$(cd "$(dirname $0)" > /dev/null && pwd)" +BUILD_DIR="${SCRIPT_DIR}/../../build/devkit" + +################################################################################ +# Prepare settings + +UNAME_SYSTEM=`uname -s` +UNAME_RELEASE=`uname -r` + +# Detect cygwin or WSL +IS_CYGWIN=`echo $UNAME_SYSTEM | grep -i CYGWIN` +IS_WSL=`echo $UNAME_RELEASE | grep Microsoft` +if test "x$IS_CYGWIN" != "x"; then + BUILD_ENV="cygwin" +elif test "x$IS_WSL" != "x"; then + BUILD_ENV="wsl" +else + echo "Unknown environment; only Cygwin and WSL are supported." + exit 1 +fi + +if test "x$BUILD_ENV" = "xcygwin"; then + WINDOWS_PATH_TO_UNIX_PATH="cygpath -u" +elif test "x$BUILD_ENV" = "xwsl"; then + WINDOWS_PATH_TO_UNIX_PATH="wslpath -u" +fi + +# Work around the insanely named ProgramFiles(x86) env variable +PROGRAMFILES_X86="$($WINDOWS_PATH_TO_UNIX_PATH "$(cmd.exe /c set | sed -n 's/^ProgramFiles(x86)=//p' | tr -d '\r')")" +PROGRAMFILES="$($WINDOWS_PATH_TO_UNIX_PATH "$PROGRAMFILES")" + +case $VS_VERSION in + 2019) + MSVC_PROGRAMFILES_DIR="${PROGRAMFILES_X86}" + MSVC_CRT_DIR="Microsoft.VC142.CRT" + VS_VERSION_NUM_NODOT="160" + ;; + + 2022) + MSVC_PROGRAMFILES_DIR="${PROGRAMFILES}" + MSVC_CRT_DIR="Microsoft.VC143.CRT" + VS_VERSION_NUM_NODOT="170" + ;; + *) + echo "Unexpected VS version: $VS_VERSION" + usage_and_exit + ;; +esac + + +# Find Visual Studio installation dir +VSNNNCOMNTOOLS=`cmd.exe /c echo %VS${VS_VERSION_NUM_NODOT}COMNTOOLS% | tr -d '\r'` +if [ -d "$VSNNNCOMNTOOLS" ]; then + VS_INSTALL_DIR="$($WINDOWS_PATH_TO_UNIX_PATH "$VSNNNCOMNTOOLS/../..")" +else + VS_INSTALL_DIR="${MSVC_PROGRAMFILES_DIR}/Microsoft Visual Studio/$VS_VERSION" + VS_INSTALL_DIR="$(ls -d "${VS_INSTALL_DIR}/"{Community,Professional,Enterprise} 2>/dev/null | head -n1)" +fi +echo "VS_INSTALL_DIR: $VS_INSTALL_DIR" + +# Extract semantic version +POTENTIAL_INI_FILES="Common7/IDE/wdexpress.isolation.ini Common7/IDE/devenv.isolation.ini" +for f in $POTENTIAL_INI_FILES; do + if [ -f "$VS_INSTALL_DIR/$f" ]; then + VS_VERSION_SP="$(grep ^SemanticVersion= "$VS_INSTALL_DIR/$f")" + # Remove SemnaticVersion= + VS_VERSION_SP="${VS_VERSION_SP#*=}" + # Remove suffix of too detailed numbering starting with + + VS_VERSION_SP="${VS_VERSION_SP%+*}" + break + fi +done +if [ -z "$VS_VERSION_SP" ]; then + echo "Failed to find SP version" + exit 1 +fi +echo "Found Version SP: $VS_VERSION_SP" + +# Setup output dirs +DEVKIT_ROOT="${BUILD_DIR}/VS${VS_VERSION}-${VS_VERSION_SP}-devkit" +DEVKIT_BUNDLE="${DEVKIT_ROOT}.tar.gz" + +echo "Creating devkit in $DEVKIT_ROOT" + +MSVCR_DLL=${MSVC_CRT_DIR}/vcruntime${VS_DLL_VERSION}.dll +VCRUNTIME_1_DLL=${MSVC_CRT_DIR}/vcruntime${VS_DLL_VERSION}_1.dll +MSVCP_DLL=${MSVC_CRT_DIR}/msvcp${VS_DLL_VERSION}.dll + +################################################################################ +# Copy Visual Studio files + +TOOLS_VERSION="$(ls "$VS_INSTALL_DIR/VC/Tools/MSVC" | sort -r -n | head -n1)" +echo "Found Tools version: $TOOLS_VERSION" +VC_SUBDIR="VC/Tools/MSVC/$TOOLS_VERSION" +REDIST_VERSION="$(ls "$VS_INSTALL_DIR/VC/Redist/MSVC" | sort -r -n | head -n1)" +echo "Found Redist version: $REDIST_VERSION" +REDIST_SUBDIR="VC/Redist/MSVC/$REDIST_VERSION" +echo "Copying VC..." +rm -rf $DEVKIT_ROOT/VC +mkdir -p $DEVKIT_ROOT/VC/bin +cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx64/arm64" $DEVKIT_ROOT/VC/bin/ +cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx64/x64" $DEVKIT_ROOT/VC/bin/ +cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx86/x86" $DEVKIT_ROOT/VC/bin/ +mkdir -p $DEVKIT_ROOT/VC/lib +cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/arm64" $DEVKIT_ROOT/VC/lib/ +cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/x64" $DEVKIT_ROOT/VC/lib/ +cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/x86" $DEVKIT_ROOT/VC/lib/ +cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/include" $DEVKIT_ROOT/VC/ +mkdir -p $DEVKIT_ROOT/VC/atlmfc/lib +cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/arm64" $DEVKIT_ROOT/VC/atlmfc/lib/ +cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/x64" $DEVKIT_ROOT/VC/atlmfc/lib/ +cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/x86" $DEVKIT_ROOT/VC/atlmfc/lib/ +cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/include" $DEVKIT_ROOT/VC/atlmfc/ +mkdir -p $DEVKIT_ROOT/VC/Auxiliary +cp -r "$VS_INSTALL_DIR/VC/Auxiliary/Build" $DEVKIT_ROOT/VC/Auxiliary/ +mkdir -p $DEVKIT_ROOT/VC/redist +cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/arm64" $DEVKIT_ROOT/VC/redist/ +cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/x64" $DEVKIT_ROOT/VC/redist/ +cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/x86" $DEVKIT_ROOT/VC/redist/ + +# The redist runtime libs are needed to run the compiler but may not be +# installed on the machine where the devkit will be used. +cp $DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/x86 +cp $DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/x86 +cp $DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/x64 +cp $DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/x64 +cp $DEVKIT_ROOT/VC/redist/arm64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/arm64 +cp $DEVKIT_ROOT/VC/redist/arm64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/arm64 + +################################################################################ +# Copy SDK files + +SDK_INSTALL_DIR="$PROGRAMFILES_X86/Windows Kits/$SDK_VERSION" +echo "SDK_INSTALL_DIR: $SDK_INSTALL_DIR" + +SDK_FULL_VERSION="$(ls "$SDK_INSTALL_DIR/bin" | sort -r -n | head -n1)" +echo "Found SDK version: $SDK_FULL_VERSION" +UCRT_VERSION="$(ls "$SDK_INSTALL_DIR/Redist" | grep $SDK_VERSION | sort -r -n | head -n1)" +echo "Found UCRT version: $UCRT_VERSION" +echo "Copying SDK..." +rm -rf $DEVKIT_ROOT/$SDK_VERSION +mkdir -p $DEVKIT_ROOT/$SDK_VERSION/bin +cp -r "$SDK_INSTALL_DIR/bin/$SDK_FULL_VERSION/x64" $DEVKIT_ROOT/$SDK_VERSION/bin/ +cp -r "$SDK_INSTALL_DIR/bin/$SDK_FULL_VERSION/x86" $DEVKIT_ROOT/$SDK_VERSION/bin/ +mkdir -p $DEVKIT_ROOT/$SDK_VERSION/lib +cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/arm64" $DEVKIT_ROOT/$SDK_VERSION/lib/ +cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/x64" $DEVKIT_ROOT/$SDK_VERSION/lib/ +cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/x86" $DEVKIT_ROOT/$SDK_VERSION/lib/ +cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/arm64" $DEVKIT_ROOT/$SDK_VERSION/lib/ +cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/x64" $DEVKIT_ROOT/$SDK_VERSION/lib/ +cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/x86" $DEVKIT_ROOT/$SDK_VERSION/lib/ +mkdir -p $DEVKIT_ROOT/$SDK_VERSION/Redist +cp -r "$SDK_INSTALL_DIR/Redist/$UCRT_VERSION/ucrt" $DEVKIT_ROOT/$SDK_VERSION/Redist/ +mkdir -p $DEVKIT_ROOT/$SDK_VERSION/include +cp -r "$SDK_INSTALL_DIR/include/$SDK_FULL_VERSION/"* $DEVKIT_ROOT/$SDK_VERSION/include/ + +################################################################################ +# Generate devkit.info + +echo-info() { + echo "$1" >> $DEVKIT_ROOT/devkit.info +} + +echo "Generating devkit.info..." +rm -f $DEVKIT_ROOT/devkit.info +echo-info "# This file describes to configure how to interpret the contents of this devkit" +echo-info "DEVKIT_NAME=\"Microsoft Visual Studio $VS_VERSION $VS_VERSION_SP (devkit)\"" +echo-info "DEVKIT_VS_VERSION=\"$VS_VERSION\"" +echo-info "" +echo-info "DEVKIT_TOOLCHAIN_PATH_x86=\"\$DEVKIT_ROOT/VC/bin/x86:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\"" +echo-info "DEVKIT_VS_INCLUDE_x86=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\"" +echo-info "DEVKIT_VS_LIB_x86=\"\$DEVKIT_ROOT/VC/lib/x86;\$DEVKIT_ROOT/VC/atlmfc/lib/x86;\$DEVKIT_ROOT/$SDK_VERSION/lib/x86\"" +echo-info "DEVKIT_MSVCR_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL\"" +echo-info "DEVKIT_MSVCP_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL\"" +echo-info "DEVKIT_UCRT_DLL_DIR_x86=\"\$DEVKIT_ROOT/10/Redist/ucrt/DLLs/x86\"" +echo-info "" +echo-info "DEVKIT_TOOLCHAIN_PATH_x86_64=\"\$DEVKIT_ROOT/VC/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\"" +echo-info "DEVKIT_VS_INCLUDE_x86_64=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\"" +echo-info "DEVKIT_VS_LIB_x86_64=\"\$DEVKIT_ROOT/VC/lib/x64;\$DEVKIT_ROOT/VC/atlmfc/lib/x64;\$DEVKIT_ROOT/$SDK_VERSION/lib/x64\"" +echo-info "DEVKIT_MSVCR_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL\"" +echo-info "DEVKIT_VCRUNTIME_1_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$VCRUNTIME_1_DLL\"" +echo-info "DEVKIT_MSVCP_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL\"" +echo-info "DEVKIT_UCRT_DLL_DIR_x86_64=\"\$DEVKIT_ROOT/10/Redist/ucrt/DLLs/x64\"" +echo-info "" +echo-info "DEVKIT_TOOLCHAIN_PATH_aarch64=\"\$DEVKIT_ROOT/VC/bin/arm64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\"" +echo-info "DEVKIT_VS_INCLUDE_aarch64=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\"" +echo-info "DEVKIT_VS_LIB_aarch64=\"\$DEVKIT_ROOT/VC/lib/arm64;\$DEVKIT_ROOT/VC/atlmfc/lib/arm64;\$DEVKIT_ROOT/$SDK_VERSION/lib/arm64\"" +echo-info "DEVKIT_MSVCR_DLL_aarch64=\"\$DEVKIT_ROOT/VC/redist/arm64/$MSVCR_DLL\"" +echo-info "DEVKIT_VCRUNTIME_1_DLL_aarch64=\"\$DEVKIT_ROOT/VC/redist/arm64/$VCRUNTIME_1_DLL\"" +echo-info "DEVKIT_MSVCP_DLL_aarch64=\"\$DEVKIT_ROOT/VC/redist/arm64/$MSVCP_DLL\"" +echo-info "DEVKIT_UCRT_DLL_DIR_aarch64=\"\$DEVKIT_ROOT/10/Redist/ucrt/DLLs/arm64\"" +echo-info "" +echo-info "DEVKIT_TOOLS_VERSION=\"$TOOLS_VERSION\"" +echo-info "DEVKIT_REDIST_VERSION=\"$REDIST_VERSION\"" +echo-info "DEVKIT_SDK_VERSION=\"$SDK_FULL_VERSION\"" +echo-info "DEVKIT_UCRT_VERSION=\"$UCRT_VERSION\"" + +################################################################################ +# Copy this script + +echo "Copying this script..." +cp $0 $DEVKIT_ROOT/ + +################################################################################ +# Create bundle + +echo "Creating bundle: $DEVKIT_BUNDLE" +(cd "$DEVKIT_ROOT" && tar zcf "$DEVKIT_BUNDLE" .) diff -Nru openjdk-17-17.0.4+8/make/devkit/createWindowsDevkit2019.sh openjdk-17-17.0.6+10/make/devkit/createWindowsDevkit2019.sh --- openjdk-17-17.0.4+8/make/devkit/createWindowsDevkit2019.sh 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/devkit/createWindowsDevkit2019.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,227 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# This script copies parts of a Visual Studio installation into a devkit -# suitable for building OpenJDK and OracleJDK. Needs to run in Cygwin or WSL. -# erik.joelsson@oracle.com - -VS_VERSION="2019" -VS_VERSION_NUM_NODOT="160" -VS_DLL_VERSION="140" -SDK_VERSION="10" -SDK_FULL_VERSION="10.0.17763.0" -MSVC_DIR="Microsoft.VC142.CRT" -MSVC_FULL_VERSION="14.12.27508" -REDIST_FULL_VERSION="14.20.27508" - -SCRIPT_DIR="$(cd "$(dirname $0)" > /dev/null && pwd)" -BUILD_DIR="${SCRIPT_DIR}/../../build/devkit" - -################################################################################ -# Prepare settings - -UNAME_SYSTEM=`uname -s` -UNAME_RELEASE=`uname -r` - -# Detect cygwin or WSL -IS_CYGWIN=`echo $UNAME_SYSTEM | grep -i CYGWIN` -IS_WSL=`echo $UNAME_RELEASE | grep Microsoft` -if test "x$IS_CYGWIN" != "x"; then - BUILD_ENV="cygwin" -elif test "x$IS_WSL" != "x"; then - BUILD_ENV="wsl" -else - echo "Unknown environment; only Cygwin and WSL are supported." - exit 1 -fi - -if test "x$BUILD_ENV" = "xcygwin"; then - WINDOWS_PATH_TO_UNIX_PATH="cygpath -u" -elif test "x$BUILD_ENV" = "xwsl"; then - WINDOWS_PATH_TO_UNIX_PATH="wslpath -u" -fi - -# Work around the insanely named ProgramFiles(x86) env variable -PROGRAMFILES_X86="$($WINDOWS_PATH_TO_UNIX_PATH "$(cmd.exe /c set | sed -n 's/^ProgramFiles(x86)=//p' | tr -d '\r')")" - -# Find Visual Studio installation dir -VSNNNCOMNTOOLS=`cmd.exe /c echo %VS${VS_VERSION_NUM_NODOT}COMNTOOLS% | tr -d '\r'` -if [ -d "$VSNNNCOMNTOOLS" ]; then - VS_INSTALL_DIR="$($WINDOWS_PATH_TO_UNIX_PATH "$VSNNNCOMNTOOLS/../..")" -else - VS_INSTALL_DIR="${PROGRAMFILES_X86}/Microsoft Visual Studio/2019" - VS_INSTALL_DIR="$(ls -d "${VS_INSTALL_DIR}/"{Community,Professional,Enterprise} 2>/dev/null | head -n1)" -fi -echo "VS_INSTALL_DIR: $VS_INSTALL_DIR" - -# Extract semantic version -POTENTIAL_INI_FILES="Common7/IDE/wdexpress.isolation.ini Common7/IDE/devenv.isolation.ini" -for f in $POTENTIAL_INI_FILES; do - if [ -f "$VS_INSTALL_DIR/$f" ]; then - VS_VERSION_SP="$(grep ^SemanticVersion= "$VS_INSTALL_DIR/$f")" - # Remove SemnaticVersion= - VS_VERSION_SP="${VS_VERSION_SP#*=}" - # Remove suffix of too detailed numbering starting with + - VS_VERSION_SP="${VS_VERSION_SP%+*}" - break - fi -done -if [ -z "$VS_VERSION_SP" ]; then - echo "Failed to find SP version" - exit 1 -fi -echo "Found Version SP: $VS_VERSION_SP" - -# Setup output dirs -DEVKIT_ROOT="${BUILD_DIR}/VS${VS_VERSION}-${VS_VERSION_SP}-devkit" -DEVKIT_BUNDLE="${DEVKIT_ROOT}.tar.gz" - -echo "Creating devkit in $DEVKIT_ROOT" - -MSVCR_DLL=${MSVC_DIR}/vcruntime${VS_DLL_VERSION}.dll -VCRUNTIME_1_DLL=${MSVC_DIR}/vcruntime${VS_DLL_VERSION}_1.dll -MSVCP_DLL=${MSVC_DIR}/msvcp${VS_DLL_VERSION}.dll - -################################################################################ -# Copy Visual Studio files - -TOOLS_VERSION="$(ls "$VS_INSTALL_DIR/VC/Tools/MSVC" | sort -r -n | head -n1)" -echo "Found Tools version: $TOOLS_VERSION" -VC_SUBDIR="VC/Tools/MSVC/$TOOLS_VERSION" -REDIST_VERSION="$(ls "$VS_INSTALL_DIR/VC/Redist/MSVC" | sort -r -n | head -n1)" -echo "Found Redist version: $REDIST_VERSION" -REDIST_SUBDIR="VC/Redist/MSVC/$REDIST_VERSION" -echo "Copying VC..." -rm -rf $DEVKIT_ROOT/VC -mkdir -p $DEVKIT_ROOT/VC/bin -cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx64/arm64" $DEVKIT_ROOT/VC/bin/ -cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx64/x64" $DEVKIT_ROOT/VC/bin/ -cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx86/x86" $DEVKIT_ROOT/VC/bin/ -mkdir -p $DEVKIT_ROOT/VC/lib -cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/arm64" $DEVKIT_ROOT/VC/lib/ -cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/x64" $DEVKIT_ROOT/VC/lib/ -cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/x86" $DEVKIT_ROOT/VC/lib/ -cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/include" $DEVKIT_ROOT/VC/ -mkdir -p $DEVKIT_ROOT/VC/atlmfc/lib -cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/arm64" $DEVKIT_ROOT/VC/atlmfc/lib/ -cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/x64" $DEVKIT_ROOT/VC/atlmfc/lib/ -cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/x86" $DEVKIT_ROOT/VC/atlmfc/lib/ -cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/include" $DEVKIT_ROOT/VC/atlmfc/ -mkdir -p $DEVKIT_ROOT/VC/Auxiliary -cp -r "$VS_INSTALL_DIR/VC/Auxiliary/Build" $DEVKIT_ROOT/VC/Auxiliary/ -mkdir -p $DEVKIT_ROOT/VC/redist -cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/arm64" $DEVKIT_ROOT/VC/redist/ -cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/x64" $DEVKIT_ROOT/VC/redist/ -cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/x86" $DEVKIT_ROOT/VC/redist/ - -# The redist runtime libs are needed to run the compiler but may not be -# installed on the machine where the devkit will be used. -cp $DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/x86 -cp $DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/x86 -cp $DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/x64 -cp $DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/x64 -cp $DEVKIT_ROOT/VC/redist/arm64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/arm64 -cp $DEVKIT_ROOT/VC/redist/arm64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/arm64 - -################################################################################ -# Copy SDK files - -SDK_INSTALL_DIR="$PROGRAMFILES_X86/Windows Kits/$SDK_VERSION" -echo "SDK_INSTALL_DIR: $SDK_INSTALL_DIR" - -SDK_FULL_VERSION="$(ls "$SDK_INSTALL_DIR/bin" | sort -r -n | head -n1)" -echo "Found SDK version: $SDK_FULL_VERSION" -UCRT_VERSION="$(ls "$SDK_INSTALL_DIR/Redist" | grep $SDK_VERSION | sort -r -n | head -n1)" -echo "Found UCRT version: $UCRT_VERSION" -echo "Copying SDK..." -rm -rf $DEVKIT_ROOT/$SDK_VERSION -mkdir -p $DEVKIT_ROOT/$SDK_VERSION/bin -cp -r "$SDK_INSTALL_DIR/bin/$SDK_FULL_VERSION/x64" $DEVKIT_ROOT/$SDK_VERSION/bin/ -cp -r "$SDK_INSTALL_DIR/bin/$SDK_FULL_VERSION/x86" $DEVKIT_ROOT/$SDK_VERSION/bin/ -mkdir -p $DEVKIT_ROOT/$SDK_VERSION/lib -cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/arm64" $DEVKIT_ROOT/$SDK_VERSION/lib/ -cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/x64" $DEVKIT_ROOT/$SDK_VERSION/lib/ -cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/x86" $DEVKIT_ROOT/$SDK_VERSION/lib/ -cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/arm64" $DEVKIT_ROOT/$SDK_VERSION/lib/ -cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/x64" $DEVKIT_ROOT/$SDK_VERSION/lib/ -cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/x86" $DEVKIT_ROOT/$SDK_VERSION/lib/ -mkdir -p $DEVKIT_ROOT/$SDK_VERSION/Redist -cp -r "$SDK_INSTALL_DIR/Redist/$UCRT_VERSION/ucrt" $DEVKIT_ROOT/$SDK_VERSION/Redist/ -mkdir -p $DEVKIT_ROOT/$SDK_VERSION/include -cp -r "$SDK_INSTALL_DIR/include/$SDK_FULL_VERSION/"* $DEVKIT_ROOT/$SDK_VERSION/include/ - -################################################################################ -# Generate devkit.info - -echo-info() { - echo "$1" >> $DEVKIT_ROOT/devkit.info -} - -echo "Generating devkit.info..." -rm -f $DEVKIT_ROOT/devkit.info -echo-info "# This file describes to configure how to interpret the contents of this devkit" -echo-info "DEVKIT_NAME=\"Microsoft Visual Studio $VS_VERSION $VS_VERSION_SP (devkit)\"" -echo-info "DEVKIT_VS_VERSION=\"$VS_VERSION\"" -echo-info "" -echo-info "DEVKIT_TOOLCHAIN_PATH_x86=\"\$DEVKIT_ROOT/VC/bin/x86:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\"" -echo-info "DEVKIT_VS_INCLUDE_x86=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\"" -echo-info "DEVKIT_VS_LIB_x86=\"\$DEVKIT_ROOT/VC/lib/x86;\$DEVKIT_ROOT/VC/atlmfc/lib/x86;\$DEVKIT_ROOT/$SDK_VERSION/lib/x86\"" -echo-info "DEVKIT_MSVCR_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL\"" -echo-info "DEVKIT_MSVCP_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL\"" -echo-info "DEVKIT_UCRT_DLL_DIR_x86=\"\$DEVKIT_ROOT/10/Redist/ucrt/DLLs/x86\"" -echo-info "" -echo-info "DEVKIT_TOOLCHAIN_PATH_x86_64=\"\$DEVKIT_ROOT/VC/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\"" -echo-info "DEVKIT_VS_INCLUDE_x86_64=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\"" -echo-info "DEVKIT_VS_LIB_x86_64=\"\$DEVKIT_ROOT/VC/lib/x64;\$DEVKIT_ROOT/VC/atlmfc/lib/x64;\$DEVKIT_ROOT/$SDK_VERSION/lib/x64\"" -echo-info "DEVKIT_MSVCR_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL\"" -echo-info "DEVKIT_VCRUNTIME_1_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$VCRUNTIME_1_DLL\"" -echo-info "DEVKIT_MSVCP_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL\"" -echo-info "DEVKIT_UCRT_DLL_DIR_x86_64=\"\$DEVKIT_ROOT/10/Redist/ucrt/DLLs/x64\"" -echo-info "" -echo-info "DEVKIT_TOOLCHAIN_PATH_aarch64=\"\$DEVKIT_ROOT/VC/bin/arm64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\"" -echo-info "DEVKIT_VS_INCLUDE_aarch64=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\"" -echo-info "DEVKIT_VS_LIB_aarch64=\"\$DEVKIT_ROOT/VC/lib/arm64;\$DEVKIT_ROOT/VC/atlmfc/lib/arm64;\$DEVKIT_ROOT/$SDK_VERSION/lib/arm64\"" -echo-info "DEVKIT_MSVCR_DLL_aarch64=\"\$DEVKIT_ROOT/VC/redist/arm64/$MSVCR_DLL\"" -echo-info "DEVKIT_VCRUNTIME_1_DLL_aarch64=\"\$DEVKIT_ROOT/VC/redist/arm64/$VCRUNTIME_1_DLL\"" -echo-info "DEVKIT_MSVCP_DLL_aarch64=\"\$DEVKIT_ROOT/VC/redist/arm64/$MSVCP_DLL\"" -echo-info "DEVKIT_UCRT_DLL_DIR_aarch64=\"\$DEVKIT_ROOT/10/Redist/ucrt/DLLs/arm64\"" -echo-info "" -echo-info "DEVKIT_TOOLS_VERSION=\"$TOOLS_VERSION\"" -echo-info "DEVKIT_REDIST_VERSION=\"$REDIST_VERSION\"" -echo-info "DEVKIT_SDK_VERSION=\"$SDK_FULL_VERSION\"" -echo-info "DEVKIT_UCRT_VERSION=\"$UCRT_VERSION\"" - -################################################################################ -# Copy this script - -echo "Copying this script..." -cp $0 $DEVKIT_ROOT/ - -################################################################################ -# Create bundle - -echo "Creating bundle: $DEVKIT_BUNDLE" -(cd "$DEVKIT_ROOT" && tar zcf "$DEVKIT_BUNDLE" .) diff -Nru openjdk-17-17.0.4+8/make/modules/java.base/lib/CoreLibraries.gmk openjdk-17-17.0.6+10/make/modules/java.base/lib/CoreLibraries.gmk --- openjdk-17-17.0.4+8/make/modules/java.base/lib/CoreLibraries.gmk 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/modules/java.base/lib/CoreLibraries.gmk 2023-01-10 13:21:55.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2020, 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 @@ -135,6 +135,7 @@ $(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), \ diff -Nru openjdk-17-17.0.4+8/make/modules/java.desktop/lib/Awt2dLibraries.gmk openjdk-17-17.0.6+10/make/modules/java.desktop/lib/Awt2dLibraries.gmk --- openjdk-17-17.0.4+8/make/modules/java.desktop/lib/Awt2dLibraries.gmk 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/modules/java.desktop/lib/Awt2dLibraries.gmk 2023-01-10 13:21:55.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2021, 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 @@ -26,6 +26,7 @@ WIN_AWT_LIB := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libawt/awt.lib LIBAWT_DEFAULT_HEADER_DIRS := \ + common/awt/utility \ libawt/awt/image \ libawt/awt/image/cvutils \ libawt/java2d \ @@ -473,6 +474,7 @@ LIBFONTMANAGER_EXTRA_HEADER_DIRS := \ libharfbuzz \ common/awt \ + common/awt/utility \ common/font \ libawt/java2d \ libawt/java2d/pipe \ @@ -561,6 +563,7 @@ LIBJAWT_EXTRA_HEADER_DIRS := \ include \ common/awt/debug \ + common/awt/utility \ libawt/awt/image/cvutils \ libawt/java2d \ libawt/java2d/windows \ @@ -656,6 +659,8 @@ common/awt/systemscale \ # + LIBSPLASHSCREEN_HEADER_DIRS += common/awt/utility + ifeq ($(USE_EXTERNAL_LIBGIF), false) LIBSPLASHSCREEN_HEADER_DIRS += libsplashscreen/giflib else @@ -680,6 +685,7 @@ ifeq ($(USE_EXTERNAL_LIBZ), false) LIBSPLASHSCREEN_EXTRA_SRC += java.base:libzip/zlib + LIBZ_DISABLED_WARNINGS_CLANG := format-nonliteral endif ifeq ($(call isTargetOs, macosx), true) @@ -749,7 +755,7 @@ maybe-uninitialized shift-negative-value implicit-fallthrough \ unused-function, \ DISABLED_WARNINGS_clang := incompatible-pointer-types sign-compare \ - deprecated-declarations, \ + deprecated-declarations null-pointer-subtraction $(LIBZ_DISABLED_WARNINGS_CLANG), \ DISABLED_WARNINGS_microsoft := 4018 4244 4267, \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ diff -Nru openjdk-17-17.0.4+8/make/modules/java.security.jgss/Lib.gmk openjdk-17-17.0.6+10/make/modules/java.security.jgss/Lib.gmk --- openjdk-17-17.0.4+8/make/modules/java.security.jgss/Lib.gmk 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/modules/java.security.jgss/Lib.gmk 2023-01-10 13:21:55.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2021, 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 @@ -40,6 +40,19 @@ TARGETS += $(BUILD_LIBJ2GSS) +ifeq ($(call isTargetOs, windows), true) + $(eval $(call SetupJdkLibrary, BUILD_LIBSSPI_BRIDGE, \ + NAME := sspi_bridge, \ + OPTIMIZATION := LOW, \ + CFLAGS := $(CFLAGS_JDKLIB) \ + -I$(TOPDIR)/src/java.security.jgss/share/native/libj2gss, \ + LDFLAGS := $(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN) \ + )) + + TARGETS += $(BUILD_LIBSSPI_BRIDGE) +endif + ################################################################################ ifneq ($(BUILD_CRYPTO), false) @@ -57,17 +70,6 @@ )) TARGETS += $(BUILD_LIBW2K_LSA_AUTH) - - $(eval $(call SetupJdkLibrary, BUILD_LIBSSPI_BRIDGE, \ - NAME := sspi_bridge, \ - OPTIMIZATION := LOW, \ - CFLAGS := $(CFLAGS_JDKLIB) \ - -I$(TOPDIR)/src/java.security.jgss/share/native/libj2gss, \ - LDFLAGS := $(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN) \ - )) - - TARGETS += $(BUILD_LIBSSPI_BRIDGE) endif ifeq ($(call isTargetOs, macosx), true) diff -Nru openjdk-17-17.0.4+8/make/modules/jdk.jpackage/Lib.gmk openjdk-17-17.0.6+10/make/modules/jdk.jpackage/Lib.gmk --- openjdk-17-17.0.4+8/make/modules/jdk.jpackage/Lib.gmk 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/modules/jdk.jpackage/Lib.gmk 2023-01-10 13:21:55.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2018, 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 @@ -24,6 +24,7 @@ # include LibCommon.gmk +include LauncherCommon.gmk ################################################################################ @@ -75,6 +76,8 @@ LIBS_macosx := $(LIBCXX) -framework Cocoa, \ LIBS_windows := $(LIBCXX), \ LIBS_linux := -ldl, \ + MANIFEST := $(JAVA_MANIFEST), \ + MANIFEST_VERSION := $(VERSION_NUMBER_FOUR_POSITIONS) \ )) JPACKAGE_TARGETS += $(BUILD_JPACKAGE_APPLAUNCHEREXE) @@ -92,9 +95,9 @@ JPACKAGE_LIBAPPLAUNCHER_INCLUDES := $(addprefix -I, $(JPACKAGE_LIBAPPLAUNCHER_SRC)) $(eval $(call SetupJdkLibrary, BUILD_JPACKAGE_LIBAPPLAUNCHER, \ - NAME := jpackageapplauncher, \ + NAME := jpackageapplauncheraux, \ OUTPUT_DIR := $(JPACKAGE_OUTPUT_DIR), \ - SYMBOLS_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjpackageapplauncher, \ + SYMBOLS_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjpackageapplauncheraux, \ SRC := $(JPACKAGE_LIBAPPLAUNCHER_SRC), \ EXCLUDE_FILES := LinuxLauncher.c LinuxPackage.c, \ TOOLCHAIN := TOOLCHAIN_LINK_CXX, \ @@ -175,6 +178,8 @@ LDFLAGS := $(BUILD_JPACKAGE_APPLAUNCHEREXE_LDFLAGS), \ LIBS := $(BUILD_JPACKAGE_APPLAUNCHEREXE_LIBS), \ LIBS_windows := $(BUILD_JPACKAGE_APPLAUNCHEREXE_LIBS_windows), \ + MANIFEST := $(JAVA_MANIFEST), \ + MANIFEST_VERSION := $(VERSION_NUMBER_FOUR_POSITIONS) \ )) JPACKAGE_TARGETS += $(BUILD_JPACKAGE_APPLAUNCHERWEXE) diff -Nru openjdk-17-17.0.4+8/make/scripts/compare.sh openjdk-17-17.0.6+10/make/scripts/compare.sh --- openjdk-17-17.0.4+8/make/scripts/compare.sh 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/scripts/compare.sh 2023-01-10 13:21:55.000000000 +0000 @@ -42,6 +42,7 @@ LDD_CMD="$OTOOL -L" DIS_CMD="$OTOOL -v -V -t" STAT_PRINT_SIZE="-f %z" + STRIP="$STRIP -no_code_signature_warning" elif [ "$OPENJDK_TARGET_OS" = "windows" ]; then FULLDUMP_CMD="$DUMPBIN -all" LDD_CMD="$DUMPBIN -dependents" @@ -674,14 +675,22 @@ ORIG_THIS_FILE="$THIS_FILE" ORIG_OTHER_FILE="$OTHER_FILE" - if [ "$STRIP_ALL" = "true" ] || [[ "$STRIP_BEFORE_COMPARE" = *"$BIN_FILE"* ]]; then + if [ "$STRIP_ALL" = "true" ] || [[ "$STRIP_BEFORE_COMPARE" = *"$BIN_FILE"* ]] \ + || [ "$OPENJDK_TARGET_OS" = "macosx" ]; then THIS_STRIPPED_FILE=$FILE_WORK_DIR/this/$NAME OTHER_STRIPPED_FILE=$FILE_WORK_DIR/other/$NAME $MKDIR -p $FILE_WORK_DIR/this $FILE_WORK_DIR/other $CP $THIS_FILE $THIS_STRIPPED_FILE $CP $OTHER_FILE $OTHER_STRIPPED_FILE - $STRIP $THIS_STRIPPED_FILE - $STRIP $OTHER_STRIPPED_FILE + if [ "$STRIP_ALL" = "true" ] || [[ "$STRIP_BEFORE_COMPARE" = *"$BIN_FILE"* ]]; then + $STRIP $THIS_STRIPPED_FILE + $STRIP $OTHER_STRIPPED_FILE + fi + # On macosx, always remove any signature before comparing + if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then + $CODESIGN --remove-signature $THIS_STRIPPED_FILE + $CODESIGN --remove-signature $OTHER_STRIPPED_FILE + fi THIS_FILE="$THIS_STRIPPED_FILE" OTHER_FILE="$OTHER_STRIPPED_FILE" fi diff -Nru openjdk-17-17.0.4+8/make/scripts/fixpath.sh openjdk-17-17.0.6+10/make/scripts/fixpath.sh --- openjdk-17-17.0.4+8/make/scripts/fixpath.sh 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/make/scripts/fixpath.sh 2023-01-10 13:21:55.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 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 @@ -28,6 +28,14 @@ # available, or extract values automatically from the environment if missing. # This is robust, but slower. function setup() { + + # Make regexp tests case insensitive + shopt -s nocasematch + # Prohibit msys2 from meddling with paths + export MSYS2_ARG_CONV_EXCL="*" + # Make sure WSL gets a copy of the path + export WSLENV=PATH/l + while getopts "e:p:r:t:c:qmi" opt; do case "$opt" in e) PATHTOOL="$OPTARG" ;; @@ -87,13 +95,6 @@ wintemp_win="$($CMD /q /c echo %TEMP% 2>/dev/null | tr -d \\n\\r)" WINTEMP="$($PATHTOOL -u "$wintemp_win")" fi - - # Make regexp tests case insensitive - shopt -s nocasematch - # Prohibit msys2 from meddling with paths - export MSYS2_ARG_CONV_EXCL="*" - # Make sure WSL gets a copy of the path - export WSLENV=PATH/l } # Cleanup handling @@ -299,6 +300,19 @@ if [[ $arg =~ ^([^/]*|-[^:=]*[:=]|.*file://|/[a-zA-Z:]{1,3}:?)($DRIVEPREFIX/)([a-z])(/[^/]+.*$) ]] ; then prefix="${BASH_REMATCH[1]}" winpath="${BASH_REMATCH[3]}:${BASH_REMATCH[4]}" + + # If the thing in its entirety points to an existing path, use that instead of thinking + # we have a prefix. This can only happen if the top-level directory has a single-letter name. + if [[ ${#prefix} -eq 2 && "${prefix:0:1}" == "/" ]]; then + possiblepath="${BASH_REMATCH[1]}/${BASH_REMATCH[3]}${BASH_REMATCH[4]}" + if [[ -e "$possiblepath" || -e "$(dirname $possiblepath)" || -e "$(echo $possiblepath | cut -d / -f 1-5)" ]] ; then + prefix= + drivepart="${possiblepath:1:1}" + pathpart="${possiblepath:2}" + winpath="$drivepart:$pathpart" + fi + fi + # Change slash to backslash (or vice versa if mixed mode) if [[ $MIXEDMODE != true ]]; then winpath="${winpath//'/'/'\'}" diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/aarch64.ad openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/aarch64.ad --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/aarch64.ad 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/aarch64.ad 2023-01-10 13:21:55.000000000 +0000 @@ -1279,12 +1279,12 @@ static int emit_deopt_handler(CodeBuffer& cbuf); static uint size_exception_handler() { - return MacroAssembler::far_branch_size(); + return MacroAssembler::far_codestub_branch_size(); } static uint size_deopt_handler() { // count one adr and one far branch instruction - return 4 * NativeInstruction::instruction_size; + return NativeInstruction::instruction_size + MacroAssembler::far_codestub_branch_size(); } }; @@ -2358,7 +2358,7 @@ __ adr(lr, __ pc()); __ far_jump(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); - assert(__ offset() - offset <= (int) size_deopt_handler(), "overflow"); + assert(__ offset() - offset == (int) size_deopt_handler(), "overflow"); __ end_a_stub(); return offset; } @@ -3105,16 +3105,30 @@ rscratch1, stlrb); %} + enc_class aarch64_enc_stlrb0(memory mem) %{ + MOV_VOLATILE(zr, $mem$$base, $mem$$index, $mem$$scale, $mem$$disp, + rscratch1, stlrb); + %} + enc_class aarch64_enc_stlrh(iRegI src, memory mem) %{ MOV_VOLATILE(as_Register($src$$reg), $mem$$base, $mem$$index, $mem$$scale, $mem$$disp, rscratch1, stlrh); %} + enc_class aarch64_enc_stlrh0(memory mem) %{ + MOV_VOLATILE(zr, $mem$$base, $mem$$index, $mem$$scale, $mem$$disp, + rscratch1, stlrh); + %} + enc_class aarch64_enc_stlrw(iRegI src, memory mem) %{ MOV_VOLATILE(as_Register($src$$reg), $mem$$base, $mem$$index, $mem$$scale, $mem$$disp, rscratch1, stlrw); %} + enc_class aarch64_enc_stlrw0(memory mem) %{ + MOV_VOLATILE(zr, $mem$$base, $mem$$index, $mem$$scale, $mem$$disp, + rscratch1, stlrw); + %} enc_class aarch64_enc_ldarsbw(iRegI dst, memory mem) %{ Register dst_reg = as_Register($dst$$reg); @@ -3205,6 +3219,11 @@ rscratch1, stlr); %} + enc_class aarch64_enc_stlr0(memory mem) %{ + MOV_VOLATILE(zr, $mem$$base, $mem$$index, $mem$$scale, $mem$$disp, + rscratch1, stlr); + %} + enc_class aarch64_enc_fstlrs(vRegF src, memory mem) %{ { C2_MacroAssembler _masm(&cbuf); @@ -3913,19 +3932,15 @@ __ bind(object_has_monitor); STATIC_ASSERT(markWord::monitor_value <= INT_MAX); __ add(tmp, tmp, -(int)markWord::monitor_value); // monitor - __ ldr(rscratch1, Address(tmp, ObjectMonitor::owner_offset_in_bytes())); __ ldr(disp_hdr, Address(tmp, ObjectMonitor::recursions_offset_in_bytes())); Label notRecursive; - __ cmp(rscratch1, rthread); - __ br(Assembler::NE, cont); - __ cbz(disp_hdr, notRecursive); // Recursive lock __ sub(disp_hdr, disp_hdr, 1u); __ str(disp_hdr, Address(tmp, ObjectMonitor::recursions_offset_in_bytes())); - // flag == EQ was set in the ownership check above + __ cmp(disp_hdr, disp_hdr); // Sets flags for result __ b(cont); __ bind(notRecursive); @@ -4295,6 +4310,16 @@ interface(CONST_INTER); %} +operand immI_positive() +%{ + predicate(n->get_int() > 0); + match(ConI); + + op_cost(0); + format %{ %} + interface(CONST_INTER); +%} + operand immL_255() %{ predicate(n->get_long() == 255L); @@ -8109,6 +8134,18 @@ ins_pipe(pipe_class_memory); %} +instruct storeimmB0_volatile(immI0 zero, /* sync_memory*/indirect mem) +%{ + match(Set mem (StoreB mem zero)); + + ins_cost(VOLATILE_REF_COST); + format %{ "stlrb zr, $mem\t# byte" %} + + ins_encode(aarch64_enc_stlrb0(mem)); + + ins_pipe(pipe_class_memory); +%} + // Store Char/Short instruct storeC_volatile(iRegIorL2I src, /* sync_memory*/indirect mem) %{ @@ -8122,6 +8159,18 @@ ins_pipe(pipe_class_memory); %} +instruct storeimmC0_volatile(immI0 zero, /* sync_memory*/indirect mem) +%{ + match(Set mem (StoreC mem zero)); + + ins_cost(VOLATILE_REF_COST); + format %{ "stlrh zr, $mem\t# short" %} + + ins_encode(aarch64_enc_stlrh0(mem)); + + ins_pipe(pipe_class_memory); +%} + // Store Integer instruct storeI_volatile(iRegIorL2I src, /* sync_memory*/indirect mem) @@ -8136,6 +8185,18 @@ ins_pipe(pipe_class_memory); %} +instruct storeimmI0_volatile(immI0 zero, /* sync_memory*/indirect mem) +%{ + match(Set mem(StoreI mem zero)); + + ins_cost(VOLATILE_REF_COST); + format %{ "stlrw zr, $mem\t# int" %} + + ins_encode(aarch64_enc_stlrw0(mem)); + + ins_pipe(pipe_class_memory); +%} + // Store Long (64 bit signed) instruct storeL_volatile(iRegL src, /* sync_memory*/indirect mem) %{ @@ -8149,6 +8210,18 @@ ins_pipe(pipe_class_memory); %} +instruct storeimmL0_volatile(immL0 zero, /* sync_memory*/indirect mem) +%{ + match(Set mem (StoreL mem zero)); + + ins_cost(VOLATILE_REF_COST); + format %{ "stlr zr, $mem\t# int" %} + + ins_encode(aarch64_enc_stlr0(mem)); + + ins_pipe(pipe_class_memory); +%} + // Store Pointer instruct storeP_volatile(iRegP src, /* sync_memory*/indirect mem) %{ @@ -8162,6 +8235,18 @@ ins_pipe(pipe_class_memory); %} +instruct storeimmP0_volatile(immP0 zero, /* sync_memory*/indirect mem) +%{ + match(Set mem (StoreP mem zero)); + + ins_cost(VOLATILE_REF_COST); + format %{ "stlr zr, $mem\t# ptr" %} + + ins_encode(aarch64_enc_stlr0(mem)); + + ins_pipe(pipe_class_memory); +%} + // Store Compressed Pointer instruct storeN_volatile(iRegN src, /* sync_memory*/indirect mem) %{ @@ -8175,6 +8260,18 @@ ins_pipe(pipe_class_memory); %} +instruct storeimmN0_volatile(immN0 zero, /* sync_memory*/indirect mem) +%{ + match(Set mem (StoreN mem zero)); + + ins_cost(VOLATILE_REF_COST); + format %{ "stlrw zr, $mem\t# compressed ptr" %} + + ins_encode(aarch64_enc_stlrw0(mem)); + + ins_pipe(pipe_class_memory); +%} + // Store Float instruct storeF_volatile(vRegF src, /* sync_memory*/indirect mem) %{ @@ -11320,6 +11417,108 @@ // This pattern is automatically generated from aarch64_ad.m4 // DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE +instruct NegI_reg_URShift_reg(iRegINoSp dst, + immI0 zero, iRegIorL2I src1, immI src2) %{ + match(Set dst (SubI zero (URShiftI src1 src2))); + + ins_cost(1.9 * INSN_COST); + format %{ "negw $dst, $src1, LSR $src2" %} + + ins_encode %{ + __ negw(as_Register($dst$$reg), as_Register($src1$$reg), + Assembler::LSR, $src2$$constant & 0x1f); + %} + + ins_pipe(ialu_reg_shift); +%} + +// This pattern is automatically generated from aarch64_ad.m4 +// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE +instruct NegI_reg_RShift_reg(iRegINoSp dst, + immI0 zero, iRegIorL2I src1, immI src2) %{ + match(Set dst (SubI zero (RShiftI src1 src2))); + + ins_cost(1.9 * INSN_COST); + format %{ "negw $dst, $src1, ASR $src2" %} + + ins_encode %{ + __ negw(as_Register($dst$$reg), as_Register($src1$$reg), + Assembler::ASR, $src2$$constant & 0x1f); + %} + + ins_pipe(ialu_reg_shift); +%} + +// This pattern is automatically generated from aarch64_ad.m4 +// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE +instruct NegI_reg_LShift_reg(iRegINoSp dst, + immI0 zero, iRegIorL2I src1, immI src2) %{ + match(Set dst (SubI zero (LShiftI src1 src2))); + + ins_cost(1.9 * INSN_COST); + format %{ "negw $dst, $src1, LSL $src2" %} + + ins_encode %{ + __ negw(as_Register($dst$$reg), as_Register($src1$$reg), + Assembler::LSL, $src2$$constant & 0x1f); + %} + + ins_pipe(ialu_reg_shift); +%} + +// This pattern is automatically generated from aarch64_ad.m4 +// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE +instruct NegL_reg_URShift_reg(iRegLNoSp dst, + immL0 zero, iRegL src1, immI src2) %{ + match(Set dst (SubL zero (URShiftL src1 src2))); + + ins_cost(1.9 * INSN_COST); + format %{ "neg $dst, $src1, LSR $src2" %} + + ins_encode %{ + __ neg(as_Register($dst$$reg), as_Register($src1$$reg), + Assembler::LSR, $src2$$constant & 0x3f); + %} + + ins_pipe(ialu_reg_shift); +%} + +// This pattern is automatically generated from aarch64_ad.m4 +// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE +instruct NegL_reg_RShift_reg(iRegLNoSp dst, + immL0 zero, iRegL src1, immI src2) %{ + match(Set dst (SubL zero (RShiftL src1 src2))); + + ins_cost(1.9 * INSN_COST); + format %{ "neg $dst, $src1, ASR $src2" %} + + ins_encode %{ + __ neg(as_Register($dst$$reg), as_Register($src1$$reg), + Assembler::ASR, $src2$$constant & 0x3f); + %} + + ins_pipe(ialu_reg_shift); +%} + +// This pattern is automatically generated from aarch64_ad.m4 +// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE +instruct NegL_reg_LShift_reg(iRegLNoSp dst, + immL0 zero, iRegL src1, immI src2) %{ + match(Set dst (SubL zero (LShiftL src1 src2))); + + ins_cost(1.9 * INSN_COST); + format %{ "neg $dst, $src1, LSL $src2" %} + + ins_encode %{ + __ neg(as_Register($dst$$reg), as_Register($src1$$reg), + Assembler::LSL, $src2$$constant & 0x3f); + %} + + ins_pipe(ialu_reg_shift); +%} + +// This pattern is automatically generated from aarch64_ad.m4 +// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE instruct AndI_reg_not_reg(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI_M1 m1) %{ match(Set dst (AndI src1 (XorI src2 m1))); @@ -14997,18 +15196,22 @@ ins_pipe(pipe_class_memory); %} -instruct clearArray_imm_reg(immL cnt, iRegP_R10 base, Universe dummy, rFlagsReg cr) +instruct clearArray_imm_reg(immL cnt, iRegP_R10 base, iRegL_R11 temp, Universe dummy, rFlagsReg cr) %{ predicate((uint64_t)n->in(2)->get_long() < (uint64_t)(BlockZeroingLowLimit >> LogBytesPerWord)); match(Set dummy (ClearArray cnt base)); - effect(USE_KILL base); + effect(TEMP temp, USE_KILL base, KILL cr); ins_cost(4 * INSN_COST); format %{ "ClearArray $cnt, $base" %} ins_encode %{ - __ zero_words($base$$Register, (uint64_t)$cnt$$constant); + address tpc = __ zero_words($base$$Register, (uint64_t)$cnt$$constant); + if (tpc == NULL) { + ciEnv::current()->record_failure("CodeCache is full"); + return; + } %} ins_pipe(pipe_class_memory); @@ -15060,10 +15263,10 @@ %{ match(Set cr (OverflowAddL op1 op2)); - format %{ "cmn $op1, $op2\t# overflow check long" %} + format %{ "adds zr, $op1, $op2\t# overflow check long" %} ins_cost(INSN_COST); ins_encode %{ - __ cmn($op1$$Register, $op2$$constant); + __ adds(zr, $op1$$Register, $op2$$constant); %} ins_pipe(icmp_reg_imm); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/aarch64_ad.m4 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/aarch64_ad.m4 --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/aarch64_ad.m4 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/aarch64_ad.m4 2023-01-10 13:21:55.000000000 +0000 @@ -52,6 +52,24 @@ ins_pipe(ialu_reg_reg_shift); %} ')dnl +define(`NEG_SHIFT_INSN', +`// This pattern is automatically generated from aarch64_ad.m4 +// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE +instruct Neg$1_reg_$2_reg(iReg$1NoSp dst, + imm$1`0' zero, iReg$1`'ORL2I($1) src1, immI src2) %{ + match(Set dst (Sub$1 zero ($2$1 src1 src2))); + + ins_cost(1.9 * INSN_COST); + format %{ "ifelse($1, I, negw, neg) $dst, $src1, $3 $src2" %} + + ins_encode %{ + __ ifelse($1, I, negw, neg)(as_Register($dst$$reg), as_Register($src1$$reg), + Assembler::$3, $src2$$constant & ifelse($1,I,0x1f,0x3f)); + %} + + ins_pipe(ialu_reg_shift); +%} +')dnl define(`BASE_INVERTED_INSN', `// This pattern is automatically generated from aarch64_ad.m4 // DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE @@ -126,6 +144,11 @@ `BASE_SHIFT_INSN(I, $1, ifelse($2,andr,andw,$2w), $3, $4) BASE_SHIFT_INSN(L, $1, $2, $3, $4)')dnl dnl +define(`BOTH_NEG_SHIFT_INSNS', +`NEG_SHIFT_INSN($1, URShift, LSR) +NEG_SHIFT_INSN($1, RShift, ASR) +NEG_SHIFT_INSN($1, LShift, LSL)')dnl +dnl define(`BOTH_INVERTED_INSNS', `BASE_INVERTED_INSN(I, $1, $2w, $3, $4) BASE_INVERTED_INSN(L, $1, $2, $3, $4)')dnl @@ -151,6 +174,8 @@ dnl NOT_INSN(L, eon) NOT_INSN(I, eonw) +BOTH_NEG_SHIFT_INSNS(I) +BOTH_NEG_SHIFT_INSNS(L) BOTH_INVERTED_INSNS(And, bic) BOTH_INVERTED_INSNS(Or, orn) BOTH_INVERTED_INSNS(Xor, eon) diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/aarch64_neon.ad openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/aarch64_neon.ad --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/aarch64_neon.ad 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/aarch64_neon.ad 2023-01-10 13:21:55.000000000 +0000 @@ -3103,16 +3103,14 @@ ins_pipe(vdup_reg_reg128); %} -instruct replicate2L_zero(vecX dst, immI0 zero) +instruct replicate2L_imm(vecX dst, immL con) %{ predicate(UseSVE == 0 && n->as_Vector()->length() == 2); - match(Set dst (ReplicateI zero)); + match(Set dst (ReplicateL con)); ins_cost(INSN_COST); - format %{ "movi $dst, $zero\t# vector (4I)" %} + format %{ "movi $dst, $con\t# vector (2L)" %} ins_encode %{ - __ eor(as_FloatRegister($dst$$reg), __ T16B, - as_FloatRegister($dst$$reg), - as_FloatRegister($dst$$reg)); + __ mov(as_FloatRegister($dst$$reg), __ T2D, $con$$constant); %} ins_pipe(vmovi_reg_imm128); %} @@ -3124,8 +3122,7 @@ ins_cost(INSN_COST); format %{ "dup $dst, $src\t# vector (2F)" %} ins_encode %{ - __ dup(as_FloatRegister($dst$$reg), __ T2S, - as_FloatRegister($src$$reg)); + __ dup(as_FloatRegister($dst$$reg), __ T2S, as_FloatRegister($src$$reg)); %} ins_pipe(vdup_reg_freg64); %} @@ -3137,8 +3134,7 @@ ins_cost(INSN_COST); format %{ "dup $dst, $src\t# vector (4F)" %} ins_encode %{ - __ dup(as_FloatRegister($dst$$reg), __ T4S, - as_FloatRegister($src$$reg)); + __ dup(as_FloatRegister($dst$$reg), __ T4S, as_FloatRegister($src$$reg)); %} ins_pipe(vdup_reg_freg128); %} @@ -3150,8 +3146,7 @@ ins_cost(INSN_COST); format %{ "dup $dst, $src\t# vector (2D)" %} ins_encode %{ - __ dup(as_FloatRegister($dst$$reg), __ T2D, - as_FloatRegister($src$$reg)); + __ dup(as_FloatRegister($dst$$reg), __ T2D, as_FloatRegister($src$$reg)); %} ins_pipe(vdup_reg_dreg128); %} @@ -4428,7 +4423,7 @@ ins_pipe(vshift128_imm); %} -instruct vsra8B_imm(vecD dst, vecD src, immI shift) %{ +instruct vsra8B_imm(vecD dst, vecD src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 4 || n->as_Vector()->length() == 8); match(Set dst (RShiftVB src (RShiftCntV shift))); @@ -4443,7 +4438,7 @@ ins_pipe(vshift64_imm); %} -instruct vsra16B_imm(vecX dst, vecX src, immI shift) %{ +instruct vsra16B_imm(vecX dst, vecX src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 16); match(Set dst (RShiftVB src (RShiftCntV shift))); ins_cost(INSN_COST); @@ -4457,7 +4452,7 @@ ins_pipe(vshift128_imm); %} -instruct vsrl8B_imm(vecD dst, vecD src, immI shift) %{ +instruct vsrl8B_imm(vecD dst, vecD src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 4 || n->as_Vector()->length() == 8); match(Set dst (URShiftVB src (RShiftCntV shift))); @@ -4477,7 +4472,7 @@ ins_pipe(vshift64_imm); %} -instruct vsrl16B_imm(vecX dst, vecX src, immI shift) %{ +instruct vsrl16B_imm(vecX dst, vecX src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 16); match(Set dst (URShiftVB src (RShiftCntV shift))); ins_cost(INSN_COST); @@ -4632,7 +4627,7 @@ ins_pipe(vshift128_imm); %} -instruct vsra4S_imm(vecD dst, vecD src, immI shift) %{ +instruct vsra4S_imm(vecD dst, vecD src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 2 || n->as_Vector()->length() == 4); match(Set dst (RShiftVS src (RShiftCntV shift))); @@ -4647,7 +4642,7 @@ ins_pipe(vshift64_imm); %} -instruct vsra8S_imm(vecX dst, vecX src, immI shift) %{ +instruct vsra8S_imm(vecX dst, vecX src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 8); match(Set dst (RShiftVS src (RShiftCntV shift))); ins_cost(INSN_COST); @@ -4661,7 +4656,7 @@ ins_pipe(vshift128_imm); %} -instruct vsrl4S_imm(vecD dst, vecD src, immI shift) %{ +instruct vsrl4S_imm(vecD dst, vecD src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 2 || n->as_Vector()->length() == 4); match(Set dst (URShiftVS src (RShiftCntV shift))); @@ -4681,7 +4676,7 @@ ins_pipe(vshift64_imm); %} -instruct vsrl8S_imm(vecX dst, vecX src, immI shift) %{ +instruct vsrl8S_imm(vecX dst, vecX src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 8); match(Set dst (URShiftVS src (RShiftCntV shift))); ins_cost(INSN_COST); @@ -4820,7 +4815,7 @@ ins_pipe(vshift128_imm); %} -instruct vsra2I_imm(vecD dst, vecD src, immI shift) %{ +instruct vsra2I_imm(vecD dst, vecD src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 2); match(Set dst (RShiftVI src (RShiftCntV shift))); ins_cost(INSN_COST); @@ -4833,7 +4828,7 @@ ins_pipe(vshift64_imm); %} -instruct vsra4I_imm(vecX dst, vecX src, immI shift) %{ +instruct vsra4I_imm(vecX dst, vecX src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 4); match(Set dst (RShiftVI src (RShiftCntV shift))); ins_cost(INSN_COST); @@ -4846,7 +4841,7 @@ ins_pipe(vshift128_imm); %} -instruct vsrl2I_imm(vecD dst, vecD src, immI shift) %{ +instruct vsrl2I_imm(vecD dst, vecD src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 2); match(Set dst (URShiftVI src (RShiftCntV shift))); ins_cost(INSN_COST); @@ -4859,7 +4854,7 @@ ins_pipe(vshift64_imm); %} -instruct vsrl4I_imm(vecX dst, vecX src, immI shift) %{ +instruct vsrl4I_imm(vecX dst, vecX src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 4); match(Set dst (URShiftVI src (RShiftCntV shift))); ins_cost(INSN_COST); @@ -4932,7 +4927,7 @@ ins_pipe(vshift128_imm); %} -instruct vsra2L_imm(vecX dst, vecX src, immI shift) %{ +instruct vsra2L_imm(vecX dst, vecX src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 2); match(Set dst (RShiftVL src (RShiftCntV shift))); ins_cost(INSN_COST); @@ -4945,7 +4940,7 @@ ins_pipe(vshift128_imm); %} -instruct vsrl2L_imm(vecX dst, vecX src, immI shift) %{ +instruct vsrl2L_imm(vecX dst, vecX src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 2); match(Set dst (URShiftVL src (RShiftCntV shift))); ins_cost(INSN_COST); @@ -4958,7 +4953,7 @@ ins_pipe(vshift128_imm); %} -instruct vsraa8B_imm(vecD dst, vecD src, immI shift) %{ +instruct vsraa8B_imm(vecD dst, vecD src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 8); match(Set dst (AddVB dst (RShiftVB src (RShiftCntV shift)))); ins_cost(INSN_COST); @@ -4972,7 +4967,7 @@ ins_pipe(vshift64_imm); %} -instruct vsraa16B_imm(vecX dst, vecX src, immI shift) %{ +instruct vsraa16B_imm(vecX dst, vecX src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 16); match(Set dst (AddVB dst (RShiftVB src (RShiftCntV shift)))); ins_cost(INSN_COST); @@ -4986,7 +4981,7 @@ ins_pipe(vshift128_imm); %} -instruct vsraa4S_imm(vecD dst, vecD src, immI shift) %{ +instruct vsraa4S_imm(vecD dst, vecD src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 4); match(Set dst (AddVS dst (RShiftVS src (RShiftCntV shift)))); ins_cost(INSN_COST); @@ -5000,7 +4995,7 @@ ins_pipe(vshift64_imm); %} -instruct vsraa8S_imm(vecX dst, vecX src, immI shift) %{ +instruct vsraa8S_imm(vecX dst, vecX src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 8); match(Set dst (AddVS dst (RShiftVS src (RShiftCntV shift)))); ins_cost(INSN_COST); @@ -5014,7 +5009,7 @@ ins_pipe(vshift128_imm); %} -instruct vsraa2I_imm(vecD dst, vecD src, immI shift) %{ +instruct vsraa2I_imm(vecD dst, vecD src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 2); match(Set dst (AddVI dst (RShiftVI src (RShiftCntV shift)))); ins_cost(INSN_COST); @@ -5027,7 +5022,7 @@ ins_pipe(vshift64_imm); %} -instruct vsraa4I_imm(vecX dst, vecX src, immI shift) %{ +instruct vsraa4I_imm(vecX dst, vecX src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 4); match(Set dst (AddVI dst (RShiftVI src (RShiftCntV shift)))); ins_cost(INSN_COST); @@ -5040,7 +5035,7 @@ ins_pipe(vshift128_imm); %} -instruct vsraa2L_imm(vecX dst, vecX src, immI shift) %{ +instruct vsraa2L_imm(vecX dst, vecX src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 2); match(Set dst (AddVL dst (RShiftVL src (RShiftCntV shift)))); ins_cost(INSN_COST); @@ -5053,7 +5048,7 @@ ins_pipe(vshift128_imm); %} -instruct vsrla8B_imm(vecD dst, vecD src, immI shift) %{ +instruct vsrla8B_imm(vecD dst, vecD src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 8); match(Set dst (AddVB dst (URShiftVB src (RShiftCntV shift)))); ins_cost(INSN_COST); @@ -5068,7 +5063,7 @@ ins_pipe(vshift64_imm); %} -instruct vsrla16B_imm(vecX dst, vecX src, immI shift) %{ +instruct vsrla16B_imm(vecX dst, vecX src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 16); match(Set dst (AddVB dst (URShiftVB src (RShiftCntV shift)))); ins_cost(INSN_COST); @@ -5083,7 +5078,7 @@ ins_pipe(vshift128_imm); %} -instruct vsrla4S_imm(vecD dst, vecD src, immI shift) %{ +instruct vsrla4S_imm(vecD dst, vecD src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 4); match(Set dst (AddVS dst (URShiftVS src (RShiftCntV shift)))); ins_cost(INSN_COST); @@ -5098,7 +5093,7 @@ ins_pipe(vshift64_imm); %} -instruct vsrla8S_imm(vecX dst, vecX src, immI shift) %{ +instruct vsrla8S_imm(vecX dst, vecX src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 8); match(Set dst (AddVS dst (URShiftVS src (RShiftCntV shift)))); ins_cost(INSN_COST); @@ -5113,7 +5108,7 @@ ins_pipe(vshift128_imm); %} -instruct vsrla2I_imm(vecD dst, vecD src, immI shift) %{ +instruct vsrla2I_imm(vecD dst, vecD src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 2); match(Set dst (AddVI dst (URShiftVI src (RShiftCntV shift)))); ins_cost(INSN_COST); @@ -5126,7 +5121,7 @@ ins_pipe(vshift64_imm); %} -instruct vsrla4I_imm(vecX dst, vecX src, immI shift) %{ +instruct vsrla4I_imm(vecX dst, vecX src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 4); match(Set dst (AddVI dst (URShiftVI src (RShiftCntV shift)))); ins_cost(INSN_COST); @@ -5139,7 +5134,7 @@ ins_pipe(vshift128_imm); %} -instruct vsrla2L_imm(vecX dst, vecX src, immI shift) %{ +instruct vsrla2L_imm(vecX dst, vecX src, immI_positive shift) %{ predicate(n->as_Vector()->length() == 2); match(Set dst (AddVL dst (URShiftVL src (RShiftCntV shift)))); ins_cost(INSN_COST); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/aarch64_neon_ad.m4 openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/aarch64_neon_ad.m4 --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/aarch64_neon_ad.m4 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/aarch64_neon_ad.m4 2023-01-10 13:21:55.000000000 +0000 @@ -1463,55 +1463,54 @@ VFABD(fabd, fabd, 4, F, X, S, 128) VFABD(fabd, fabd, 2, D, X, D, 128) dnl -define(`VREPLICATE', ` -instruct replicate$3$4$5`'(vec$6 dst, $7 ifelse($7, immI0, zero, $7, immI, con, src)) +define(`VREPLICATE_REG', ` +instruct replicate$2$3`'(vec$4 dst, $5 src) %{ - predicate(ifelse($8, UseSVE == 0 && , $8, - $8, , , $8` - ')n->as_Vector()->length() == $3); - match(Set dst (Replicate`'ifelse($7, immI0, I, $4) ifelse($7, immI0, zero, $7, immI, con, $7, zero, I, src))); + predicate(ifelse($7, UseSVE == 0 && , $7, + $7, , , $7` + ')n->as_Vector()->length() == $2); + match(Set dst (Replicate$3 src)); ins_cost(INSN_COST); - format %{ "$1 $dst, $ifelse($7, immI0, zero, $7, immI, con, src)`\t# vector ('ifelse($4$7, SimmI, $3H, $2, eor, 4I, $3$4)`)"' %} + format %{ "dup $dst, $src\t# vector ($2$3)" %} ins_encode %{ - __ $2(as_FloatRegister($dst$$reg), __ ifelse( - $2, eor, T16B, T$3`'$9),ifelse( - `$4 $7', `B immI', ` '$con$$constant & 0xff, - `$4 $7', `S immI', ` '$con$$constant & 0xffff, - `$4 $7', `I immI', ` '$con$$constant, - `$2', eor,` - as_FloatRegister($dst$$reg), - as_FloatRegister($dst$$reg)', - `$7', vRegF,` - as_FloatRegister($src$$reg)', - `$7', vRegD,` - as_FloatRegister($src$$reg)', - ` 'as_Register($src$$reg))); - %} - ins_pipe(ifelse($7, immI0, v$1_reg_imm, - $7, immI, v$1_reg_imm, - $7, iRegIorL2I, v$1_reg_reg, - $7, zero, vmovi_reg_imm, - $7, iRegL, vdup_reg_reg, - $4, F, vdup_reg_freg, vdup_reg_dreg)`'ifelse($6, X, 128, 64)); -%}')dnl -dnl $1 $2 $3 $4 $5 $6 $7 $8 $9 -VREPLICATE(dup, dup, 8, B, , D, iRegIorL2I, n->as_Vector()->length() == 4 ||, B) -VREPLICATE(dup, dup, 16, B, , X, iRegIorL2I, UseSVE == 0 && , B) -VREPLICATE(movi, mov, 8, B, _imm, D, immI, n->as_Vector()->length() == 4 ||, B) -VREPLICATE(movi, mov, 16, B, _imm, X, immI, UseSVE == 0 && , B) -VREPLICATE(dup, dup, 4, S, , D, iRegIorL2I, n->as_Vector()->length() == 2 ||, H) -VREPLICATE(dup, dup, 8, S, , X, iRegIorL2I, UseSVE == 0 && , H) -VREPLICATE(movi, mov, 4, S, _imm, D, immI, n->as_Vector()->length() == 2 ||, H) -VREPLICATE(movi, mov, 8, S, _imm, X, immI, UseSVE == 0 && , H) -VREPLICATE(dup, dup, 2, I, , D, iRegIorL2I, , S) -VREPLICATE(dup, dup, 4, I, , X, iRegIorL2I, UseSVE == 0 && , S) -VREPLICATE(movi, mov, 2, I, _imm, D, immI, , S) -VREPLICATE(movi, mov, 4, I, _imm, X, immI, UseSVE == 0 && , S) -VREPLICATE(dup, dup, 2, L, , X, iRegL, UseSVE == 0 && , D) -VREPLICATE(movi, eor, 2, L, _zero, X, immI0, UseSVE == 0 && , D) -VREPLICATE(dup, dup, 2, F, , D, vRegF, , S) -VREPLICATE(dup, dup, 4, F, , X, vRegF, UseSVE == 0 && , S) -VREPLICATE(dup, dup, 2, D, , X, vRegD, UseSVE == 0 && , D) + __ dup(as_FloatRegister($dst$$reg), __ T$2$1, $6($src$$reg)); + %} + ins_pipe(ifelse($5, iRegIorL2I, vdup_reg_reg, + $5, iRegL, vdup_reg_reg, + $3, F, vdup_reg_freg, vdup_reg_dreg)`'ifelse($4, X, 128, 64)); +%}')dnl +define(`VREPLICATE_IMM', ` +instruct replicate$2$3_imm`'(vec$4 dst, $5 con) +%{ + predicate(ifelse($7, UseSVE == 0 && , $7, + $7, , , $7` + ')n->as_Vector()->length() == $2); + match(Set dst (Replicate$3 con)); + ins_cost(INSN_COST); + format %{ "movi $dst, $con\t`#' vector ($2`'ifelse($3, S, H, $3))" %} + ins_encode %{ + __ mov(as_FloatRegister($dst$$reg), __ T$2`'iTYPE2SIMD($3), $con$$constant`'$6); + %} + ins_pipe(vmovi_reg_imm`'ifelse($4, X, 128, 64)); +%}')dnl +dnl $1 $2 $3 $4 $5 $6 $7 +VREPLICATE_REG(B, 8, B, D, iRegIorL2I, as_Register, n->as_Vector()->length() == 4 ||) +VREPLICATE_REG(B, 16, B, X, iRegIorL2I, as_Register, UseSVE == 0 && ) +VREPLICATE_IMM(B, 8, B, D, immI, ` & 0xff', n->as_Vector()->length() == 4 ||) +VREPLICATE_IMM(B, 16, B, X, immI, ` & 0xff', UseSVE == 0 && ) +VREPLICATE_REG(H, 4, S, D, iRegIorL2I, as_Register, n->as_Vector()->length() == 2 ||) +VREPLICATE_REG(H, 8, S, X, iRegIorL2I, as_Register, UseSVE == 0 && ) +VREPLICATE_IMM(H, 4, S, D, immI, ` & 0xffff', n->as_Vector()->length() == 2 ||) +VREPLICATE_IMM(H, 8, S, X, immI, ` & 0xffff', UseSVE == 0 && ) +VREPLICATE_REG(S, 2, I, D, iRegIorL2I, as_Register, ) +VREPLICATE_REG(S, 4, I, X, iRegIorL2I, as_Register, UseSVE == 0 && ) +VREPLICATE_IMM(S, 2, I, D, immI, , ) +VREPLICATE_IMM(S, 4, I, X, immI, , UseSVE == 0 && ) +VREPLICATE_REG(D, 2, L, X, iRegL, as_Register, UseSVE == 0 && ) +VREPLICATE_IMM(D, 2, L, X, immL, , UseSVE == 0 && ) +VREPLICATE_REG(S, 2, F, D, vRegF, as_FloatRegister, ) +VREPLICATE_REG(S, 4, F, X, vRegF, as_FloatRegister, UseSVE == 0 && ) +VREPLICATE_REG(D, 2, D, X, vRegD, as_FloatRegister, UseSVE == 0 && ) dnl // ====================REDUCTION ARITHMETIC==================================== @@ -1992,7 +1991,7 @@ ins_pipe(vshift`'ifelse($6, D, 64, 128)_imm); %}')dnl define(`VSRA_IMM', ` -instruct vsra$3$4_imm`'(vec$6 dst, vec$6 src, immI shift) %{ +instruct vsra$3$4_imm`'(vec$6 dst, vec$6 src, immI_positive shift) %{ predicate(ifelse($3$4, 8B, n->as_Vector()->length() == 4 ||` ', $3$4, 4S, n->as_Vector()->length() == 2 ||` @@ -2017,7 +2016,7 @@ %}')dnl dnl define(`VSRL_IMM', ` -instruct vsrl$3$4_imm`'(vec$6 dst, vec$6 src, immI shift) %{ +instruct vsrl$3$4_imm`'(vec$6 dst, vec$6 src, immI_positive shift) %{ predicate(ifelse($3$4, 8B, n->as_Vector()->length() == 4 ||` ', $3$4, 4S, n->as_Vector()->length() == 2 ||` @@ -2052,7 +2051,7 @@ %}')dnl dnl define(`VSRLA_IMM', ` -instruct vsrla$3$4_imm`'(vec$6 dst, vec$6 src, immI shift) %{ +instruct vsrla$3$4_imm`'(vec$6 dst, vec$6 src, immI_positive shift) %{ predicate(n->as_Vector()->length() == $3); match(Set dst (AddV$4 dst (URShiftV$4 src (RShiftCntV shift)))); ins_cost(INSN_COST); @@ -2076,7 +2075,7 @@ %}')dnl dnl define(`VSRAA_IMM', ` -instruct vsraa$3$4_imm`'(vec$6 dst, vec$6 src, immI shift) %{ +instruct vsraa$3$4_imm`'(vec$6 dst, vec$6 src, immI_positive shift) %{ predicate(n->as_Vector()->length() == $3); match(Set dst (AddV$4 dst (RShiftV$4 src (RShiftCntV shift)))); ins_cost(INSN_COST); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/assembler_aarch64.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/assembler_aarch64.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/assembler_aarch64.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/assembler_aarch64.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, 2020 Red Hat Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -313,6 +313,53 @@ return encode_logical_immediate(is32, imm) != 0xffffffff; } +// Check immediate encoding for movi. +// Return the shift amount which can be {0, 8, 16, 24} for B/H/S types. As the D type +// movi does not have shift variant, in this case the return value is the immediate +// after encoding. +// Return -1 if the input imm64 can not be encoded. +int Assembler::operand_valid_for_movi_immediate(uint64_t imm64, SIMD_Arrangement T) { + if (T == T1D || T == T2D) { + // To encode into movi, the 64-bit imm must be in the form of + // 'aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffffgggggggghhhhhhhh' + // and encoded in "a:b:c:d:e:f:g:h". + uint64_t tmp = imm64; + uint64_t one_byte = 0; + for (int i = 0; i < 8; i++) { + one_byte = tmp & 0xffULL; + if (one_byte != 0xffULL && one_byte != 0) { + return -1; // can not be encoded + } + tmp = tmp >> 8; + } + + imm64 &= 0x0101010101010101ULL; + imm64 |= (imm64 >> 7); + imm64 |= (imm64 >> 14); + imm64 |= (imm64 >> 28); + + return imm64 & 0xff; + } + + uint32_t imm32 = imm64 & 0xffffffffULL; + if (T == T8B || T == T16B) { // 8-bit variant + if (0 == (imm32 & ~0xff)) return 0; + } else if(T == T4H || T == T8H) { // 16-bit variant + if (0 == (imm32 & ~0xff)) return 0; + if (0 == (imm32 & ~0xff00)) return 8; + } else if (T == T2S || T == T4S) { // 32-bit variant + if (0 == (imm32 & ~0xff)) return 0; + if (0 == (imm32 & ~0xff00)) return 8; + if (0 == (imm32 & ~0xff0000)) return 16; + if (0 == (imm32 & ~0xff000000)) return 24; + } else { + assert(false, "unsupported"); + ShouldNotReachHere(); + } + + return -1; +} + static uint64_t doubleTo64Bits(jdouble d) { union { jdouble double_value; diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/assembler_aarch64.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/assembler_aarch64.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/assembler_aarch64.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/assembler_aarch64.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -476,16 +476,17 @@ assert(size == 0, "bad size"); size = 0b100; } + assert(offset_ok_for_immed(_offset, size), + "must be, was: " INT64_FORMAT ", %d", _offset, size); unsigned mask = (1 << size) - 1; - if (_offset < 0 || _offset & mask) - { - i->f(0b00, 25, 24); - i->f(0, 21), i->f(0b00, 11, 10); - i->sf(_offset, 20, 12); - } else { - i->f(0b01, 25, 24); - i->f(_offset >> size, 21, 10); - } + if (_offset < 0 || _offset & mask) { + i->f(0b00, 25, 24); + i->f(0, 21), i->f(0b00, 11, 10); + i->sf(_offset, 20, 12); + } else { + i->f(0b01, 25, 24); + i->f(_offset >> size, 21, 10); + } } break; @@ -3254,6 +3255,7 @@ static bool operand_valid_for_logical_immediate(bool is32, uint64_t imm); static bool operand_valid_for_add_sub_immediate(int64_t imm); static bool operand_valid_for_float_immediate(double imm); + static int operand_valid_for_movi_immediate(uint64_t imm64, SIMD_Arrangement T); void emit_data64(jlong data, relocInfo::relocType rtype, int format = 0); void emit_data64(jlong data, RelocationHolder const& rspec, int format = 0); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/assembler_aarch64.inline.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/assembler_aarch64.inline.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/assembler_aarch64.inline.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/assembler_aarch64.inline.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -30,8 +30,14 @@ #include "asm/codeBuffer.hpp" #include "code/codeCache.hpp" - +// Check if an offset is within the encoding range for LDR/STR instructions +// with an immediate offset, either using unscaled signed 9-bits or, scaled +// unsigned 12-bits. We favour the scaled unsigned encoding for all aligned +// offsets (only using the signed 9-bit encoding for negative and unaligned +// offsets). As a precondition, 0 <= shift <= 4 is the log2(size), for the +// supported data widths, {1, 2, 4, 8, 16} bytes. inline bool Address::offset_ok_for_immed(int64_t offset, uint shift) { + precond(shift < 5); uint mask = (1 << shift) - 1; if (offset < 0 || (offset & mask) != 0) { // Unscaled signed offset, encoded in a signed imm9 field. diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -187,14 +187,13 @@ default: ShouldNotReachHere(); } - } else { - intptr_t addr_offset = intptr_t(addr->disp()); - if (Address::offset_ok_for_immed(addr_offset, addr->scale())) - return Address(base, addr_offset, Address::lsl(addr->scale())); - else { - __ mov(tmp, addr_offset); - return Address(base, tmp, Address::lsl(addr->scale())); - } + } else { + assert(addr->scale() == 0, + "expected for immediate operand, was: %d", addr->scale()); + ptrdiff_t offset = ptrdiff_t(addr->disp()); + // NOTE: Does not handle any 16 byte vector access. + const uint type_size = type2aelembytes(addr->type(), true); + return __ legitimize_address(Address(base, offset), type_size, tmp); } return Address(); } @@ -283,10 +282,9 @@ __ bind(L); } #endif - __ ldr(r19, Address(OSR_buf, slot_offset + 0)); + __ ldp(r19, r20, Address(OSR_buf, slot_offset)); __ str(r19, frame_map()->address_for_monitor_lock(i)); - __ ldr(r19, Address(OSR_buf, slot_offset + 1*BytesPerWord)); - __ str(r19, frame_map()->address_for_monitor_object(i)); + __ str(r20, frame_map()->address_for_monitor_object(i)); } } } diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -148,7 +148,7 @@ if (index->is_constant()) { LIR_Const *constant = index->as_constant_ptr(); if (constant->type() == T_INT) { - large_disp += index->as_jint() << shift; + large_disp += ((intx)index->as_jint()) << shift; } else { assert(constant->type() == T_LONG, "should be"); jlong c = index->as_jlong() << shift; @@ -194,7 +194,7 @@ if (large_disp == 0 && index->is_register()) { return new LIR_Address(base, index, type); } else { - assert(Address::offset_ok_for_immed(large_disp, 0), "must be"); + assert(Address::offset_ok_for_immed(large_disp, shift), "failed for large_disp: " INTPTR_FORMAT " and shift %d", large_disp, shift); return new LIR_Address(base, large_disp, type); } } @@ -204,24 +204,7 @@ int offset_in_bytes = arrayOopDesc::base_offset_in_bytes(type); int elem_size = type2aelembytes(type); int shift = exact_log2(elem_size); - - LIR_Address* addr; - if (index_opr->is_constant()) { - addr = new LIR_Address(array_opr, - offset_in_bytes + (intx)(index_opr->as_jint()) * elem_size, type); - } else { - if (offset_in_bytes) { - LIR_Opr tmp = new_pointer_register(); - __ add(array_opr, LIR_OprFact::intConst(offset_in_bytes), tmp); - array_opr = tmp; - offset_in_bytes = 0; - } - addr = new LIR_Address(array_opr, - index_opr, - LIR_Address::scale(type), - offset_in_bytes, type); - } - return addr; + return generate_address(array_opr, index_opr, shift, offset_in_bytes, type); } LIR_Opr LIRGenerator::load_immediate(int x, BasicType type) { @@ -1132,8 +1115,8 @@ CodeEmitInfo* info = state_for(x, x->state()); LIR_Opr reg = result_register_for(x->type()); new_instance(reg, x->klass(), x->is_unresolved(), - FrameMap::r2_oop_opr, - FrameMap::r5_oop_opr, + FrameMap::r10_oop_opr, + FrameMap::r11_oop_opr, FrameMap::r4_oop_opr, LIR_OprFact::illegalOpr, FrameMap::r3_metadata_opr, info); @@ -1148,8 +1131,8 @@ length.load_item_force(FrameMap::r19_opr); LIR_Opr reg = result_register_for(x->type()); - LIR_Opr tmp1 = FrameMap::r2_oop_opr; - LIR_Opr tmp2 = FrameMap::r4_oop_opr; + LIR_Opr tmp1 = FrameMap::r10_oop_opr; + LIR_Opr tmp2 = FrameMap::r11_oop_opr; LIR_Opr tmp3 = FrameMap::r5_oop_opr; LIR_Opr tmp4 = reg; LIR_Opr klass_reg = FrameMap::r3_metadata_opr; @@ -1177,8 +1160,8 @@ CodeEmitInfo* info = state_for(x, x->state()); LIR_Opr reg = result_register_for(x->type()); - LIR_Opr tmp1 = FrameMap::r2_oop_opr; - LIR_Opr tmp2 = FrameMap::r4_oop_opr; + LIR_Opr tmp1 = FrameMap::r10_oop_opr; + LIR_Opr tmp2 = FrameMap::r11_oop_opr; LIR_Opr tmp3 = FrameMap::r5_oop_opr; LIR_Opr tmp4 = reg; LIR_Opr klass_reg = FrameMap::r3_metadata_opr; diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/c1_MacroAssembler_aarch64.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/c1_MacroAssembler_aarch64.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/c1_MacroAssembler_aarch64.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/c1_MacroAssembler_aarch64.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,6 +1,6 @@ /* * Copyright (c) 1999, 2021, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2014, Red Hat Inc. All rights reserved. + * Copyright (c) 2014, 2021, Red Hat Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -203,20 +203,24 @@ } // preserves obj, destroys len_in_bytes -void C1_MacroAssembler::initialize_body(Register obj, Register len_in_bytes, int hdr_size_in_bytes, Register t1) { +// +// Scratch registers: t1 = r10, t2 = r11 +// +void C1_MacroAssembler::initialize_body(Register obj, Register len_in_bytes, int hdr_size_in_bytes, Register t1, Register t2) { assert(hdr_size_in_bytes >= 0, "header size must be positive or 0"); + assert(t1 == r10 && t2 == r11, "must be"); + Label done; // len_in_bytes is positive and ptr sized subs(len_in_bytes, len_in_bytes, hdr_size_in_bytes); br(Assembler::EQ, done); - // Preserve obj - if (hdr_size_in_bytes) - add(obj, obj, hdr_size_in_bytes); - zero_memory(obj, len_in_bytes, t1); - if (hdr_size_in_bytes) - sub(obj, obj, hdr_size_in_bytes); + // zero_words() takes ptr in r10 and count in words in r11 + mov(rscratch1, len_in_bytes); + lea(t1, Address(obj, hdr_size_in_bytes)); + lsr(t2, rscratch1, LogBytesPerWord); + zero_words(t1, t2); bind(done); } @@ -231,6 +235,7 @@ initialize_object(obj, klass, noreg, object_size * HeapWordSize, t1, t2, UseTLAB); } +// Scratch registers: t1 = r10, t2 = r11 void C1_MacroAssembler::initialize_object(Register obj, Register klass, Register var_size_in_bytes, int con_size_in_bytes, Register t1, Register t2, bool is_tlab_allocated) { assert((con_size_in_bytes & MinObjAlignmentInBytesMask) == 0, "con_size_in_bytes is not multiple of alignment"); @@ -241,45 +246,13 @@ if (!(UseTLAB && ZeroTLAB && is_tlab_allocated)) { // clear rest of allocated space const Register index = t2; - const int threshold = 16 * BytesPerWord; // approximate break even point for code size (see comments below) if (var_size_in_bytes != noreg) { mov(index, var_size_in_bytes); - initialize_body(obj, index, hdr_size_in_bytes, t1); - } else if (con_size_in_bytes <= threshold) { - // use explicit null stores - int i = hdr_size_in_bytes; - if (i < con_size_in_bytes && (con_size_in_bytes % (2 * BytesPerWord))) { - str(zr, Address(obj, i)); - i += BytesPerWord; - } - for (; i < con_size_in_bytes; i += 2 * BytesPerWord) - stp(zr, zr, Address(obj, i)); + initialize_body(obj, index, hdr_size_in_bytes, t1, t2); } else if (con_size_in_bytes > hdr_size_in_bytes) { - block_comment("zero memory"); - // use loop to null out the fields - - int words = (con_size_in_bytes - hdr_size_in_bytes) / BytesPerWord; - mov(index, words / 8); - - const int unroll = 8; // Number of str(zr) instructions we'll unroll - int remainder = words % unroll; - lea(rscratch1, Address(obj, hdr_size_in_bytes + remainder * BytesPerWord)); - - Label entry_point, loop; - b(entry_point); - - bind(loop); - sub(index, index, 1); - for (int i = -unroll; i < 0; i++) { - if (-i == remainder) - bind(entry_point); - str(zr, Address(rscratch1, i * wordSize)); - } - if (remainder == 0) - bind(entry_point); - add(rscratch1, rscratch1, unroll * wordSize); - cbnz(index, loop); - + con_size_in_bytes -= hdr_size_in_bytes; + lea(t1, Address(obj, hdr_size_in_bytes)); + zero_words(t1, con_size_in_bytes / BytesPerWord); } } @@ -314,8 +287,7 @@ initialize_header(obj, klass, len, t1, t2); // clear rest of allocated space - const Register len_zero = len; - initialize_body(obj, arr_size, header_size * BytesPerWord, len_zero); + initialize_body(obj, arr_size, header_size * BytesPerWord, t1, t2); membar(StoreStore); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/c1_MacroAssembler_aarch64.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/c1_MacroAssembler_aarch64.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/c1_MacroAssembler_aarch64.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/c1_MacroAssembler_aarch64.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,6 +1,6 @@ /* - * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2014, 2015, Red Hat Inc. All rights reserved. + * Copyright (c) 1999, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2021, Red Hat Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,7 +48,7 @@ ); void initialize_header(Register obj, Register klass, Register len, Register t1, Register t2); - void initialize_body(Register obj, Register len_in_bytes, int hdr_size_in_bytes, Register t1); + void initialize_body(Register obj, Register len_in_bytes, int hdr_size_in_bytes, Register t1, Register t2); void float_cmp(bool is_float, int unordered_result, FloatRegister f0, FloatRegister f1, diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/c1_Runtime1_aarch64.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/c1_Runtime1_aarch64.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/c1_Runtime1_aarch64.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/c1_Runtime1_aarch64.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,6 +1,6 @@ /* * Copyright (c) 1999, 2021, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2014, Red Hat Inc. All rights reserved. + * Copyright (c) 2014, 2021, Red Hat Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -656,9 +656,9 @@ if ((id == fast_new_instance_id || id == fast_new_instance_init_check_id) && !UseTLAB && Universe::heap()->supports_inline_contig_alloc()) { Label slow_path; - Register obj_size = r2; - Register t1 = r19; - Register t2 = r4; + Register obj_size = r19; + Register t1 = r10; + Register t2 = r11; assert_different_registers(klass, obj, obj_size, t1, t2); __ stp(r19, zr, Address(__ pre(sp, -2 * wordSize))); @@ -769,9 +769,9 @@ // allocations. // Otherwise, just go to the slow path. if (!UseTLAB && Universe::heap()->supports_inline_contig_alloc()) { - Register arr_size = r4; - Register t1 = r2; - Register t2 = r5; + Register arr_size = r5; + Register t1 = r10; + Register t2 = r11; Label slow_path; assert_different_registers(length, klass, obj, arr_size, t1, t2); @@ -801,7 +801,7 @@ __ andr(t1, t1, Klass::_lh_header_size_mask); __ sub(arr_size, arr_size, t1); // body length __ add(t1, t1, obj); // body start - __ initialize_body(t1, arr_size, 0, t2); + __ initialize_body(t1, arr_size, 0, t1, t2); __ membar(Assembler::StoreStore); __ verify_oop(obj); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/frame_aarch64.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/frame_aarch64.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/frame_aarch64.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/frame_aarch64.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -350,13 +350,9 @@ assert(jfa->last_Java_sp() > sp(), "must be above this frame on stack"); // Since we are walking the stack now this nested anchor is obviously walkable // even if it wasn't when it was stacked. - if (!jfa->walkable()) { - // Capture _last_Java_pc (if needed) and mark anchor walkable. - jfa->capture_last_Java_pc(); - } + jfa->make_walkable(); map->clear(); assert(map->include_argument_oops(), "should be set by clear"); - vmassert(jfa->last_Java_pc() != NULL, "not walkable"); frame fr(jfa->last_Java_sp(), jfa->last_Java_fp(), jfa->last_Java_pc()); return fr; @@ -817,20 +813,14 @@ void frame::pd_ps() {} #endif -void JavaFrameAnchor::make_walkable(JavaThread* thread) { +void JavaFrameAnchor::make_walkable() { // last frame set? if (last_Java_sp() == NULL) return; // already walkable? if (walkable()) return; - vmassert(Thread::current() == (Thread*)thread, "not current thread"); vmassert(last_Java_sp() != NULL, "not called from Java code?"); vmassert(last_Java_pc() == NULL, "already walkable"); - capture_last_Java_pc(); + _last_Java_pc = (address)_last_Java_sp[-1]; vmassert(walkable(), "something went wrong"); } -void JavaFrameAnchor::capture_last_Java_pc() { - vmassert(_last_Java_sp != NULL, "no last frame set"); - vmassert(_last_Java_pc == NULL, "already walkable"); - _last_Java_pc = (address)_last_Java_sp[-1]; -} diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/frame_aarch64.inline.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/frame_aarch64.inline.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/frame_aarch64.inline.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/frame_aarch64.inline.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -144,10 +144,12 @@ inline bool frame::is_older(intptr_t* id) const { assert(this->id() != NULL && id != NULL, "NULL frame id"); return this->id() > id ; } - - inline intptr_t* frame::link() const { return (intptr_t*) *(intptr_t **)addr_at(link_offset); } +inline intptr_t* frame::link_or_null() const { + intptr_t** ptr = (intptr_t **)addr_at(link_offset); + return os::is_readable_pointer(ptr) ? *ptr : NULL; +} inline intptr_t* frame::unextended_sp() const { return _unextended_sp; } diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/globals_aarch64.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/globals_aarch64.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/globals_aarch64.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/globals_aarch64.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -106,7 +106,7 @@ "Use DC ZVA for block zeroing") \ product(intx, BlockZeroingLowLimit, 256, \ "Minimum size in bytes when block zeroing will be used") \ - range(1, max_jint) \ + range(wordSize, max_jint) \ product(bool, TraceTraps, false, "Trace all traps the signal handler")\ product(int, SoftwarePrefetchHintDistance, -1, \ "Use prfm hint with specified distance in compiled code." \ diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/icBuffer_aarch64.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/icBuffer_aarch64.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/icBuffer_aarch64.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/icBuffer_aarch64.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -52,9 +52,15 @@ address start = __ pc(); Label l; __ ldr(rscratch2, l); - __ far_jump(ExternalAddress(entry_point)); - __ align(wordSize); + int jump_code_size = __ far_jump(ExternalAddress(entry_point)); + // IC stub code size is not expected to vary depending on target address. + // We use NOPs to make the [ldr + far_jump + nops + int64] stub size equal to ic_stub_code_size. + for (int size = NativeInstruction::instruction_size + jump_code_size + 8; + size < ic_stub_code_size(); size += NativeInstruction::instruction_size) { + __ nop(); + } __ bind(l); + assert((uintptr_t)__ pc() % wordSize == 0, ""); __ emit_int64((int64_t)cached_value); // Only need to invalidate the 1st two instructions - not the whole ic stub ICache::invalidate_range(code_begin, InlineCacheBuffer::ic_stub_code_size()); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/javaFrameAnchor_aarch64.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/javaFrameAnchor_aarch64.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/javaFrameAnchor_aarch64.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/javaFrameAnchor_aarch64.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -65,8 +65,8 @@ } bool walkable(void) { return _last_Java_sp != NULL && _last_Java_pc != NULL; } - void make_walkable(JavaThread* thread); - void capture_last_Java_pc(void); + + void make_walkable(); intptr_t* last_Java_sp(void) const { return _last_Java_sp; } diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -29,6 +29,7 @@ #include "jvm.h" #include "asm/assembler.hpp" #include "asm/assembler.inline.hpp" +#include "ci/ciEnv.hpp" #include "gc/shared/barrierSet.hpp" #include "gc/shared/barrierSetAssembler.hpp" #include "gc/shared/cardTableBarrierSet.hpp" @@ -37,6 +38,7 @@ #include "gc/shared/tlab_globals.hpp" #include "interpreter/bytecodeHistogram.hpp" #include "interpreter/interpreter.hpp" +#include "compiler/compileTask.hpp" #include "compiler/disassembler.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.hpp" @@ -382,14 +384,27 @@ } } +static inline bool target_needs_far_branch(address addr) { + // codecache size <= 128M + if (!MacroAssembler::far_branches()) { + return false; + } + // codecache size > 240M + if (MacroAssembler::codestub_branch_needs_far_jump()) { + return true; + } + // codecache size: 128M..240M + return !CodeCache::is_non_nmethod(addr); +} + void MacroAssembler::far_call(Address entry, CodeBuffer *cbuf, Register tmp) { assert(ReservedCodeCacheSize < 4*G, "branch out of range"); assert(CodeCache::find_blob(entry.target()) != NULL, "destination of far call not found in code cache"); - if (far_branches()) { + if (target_needs_far_branch(entry.target())) { uint64_t offset; // We can use ADRP here because we know that the total size of - // the code cache cannot exceed 2Gb. + // the code cache cannot exceed 2Gb (ADRP limit is 4GB). adrp(tmp, entry, offset); add(tmp, tmp, offset); if (cbuf) cbuf->set_insts_mark(); @@ -400,14 +415,15 @@ } } -void MacroAssembler::far_jump(Address entry, CodeBuffer *cbuf, Register tmp) { +int MacroAssembler::far_jump(Address entry, CodeBuffer *cbuf, Register tmp) { assert(ReservedCodeCacheSize < 4*G, "branch out of range"); assert(CodeCache::find_blob(entry.target()) != NULL, "destination of far call not found in code cache"); - if (far_branches()) { + address start = pc(); + if (target_needs_far_branch(entry.target())) { uint64_t offset; // We can use ADRP here because we know that the total size of - // the code cache cannot exceed 2Gb. + // the code cache cannot exceed 2Gb (ADRP limit is 4GB). adrp(tmp, entry, offset); add(tmp, tmp, offset); if (cbuf) cbuf->set_insts_mark(); @@ -416,6 +432,7 @@ if (cbuf) cbuf->set_insts_mark(); b(entry); } + return pc() - start; } void MacroAssembler::reserved_stack_check() { @@ -721,8 +738,23 @@ || 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 @@ -743,7 +775,7 @@ if (cbuf) cbuf->set_insts_mark(); relocate(entry.rspec()); - if (!far_branches()) { + if (!need_trampoline) { bl(entry.target()); } else { bl(pc()); @@ -1214,7 +1246,7 @@ if (!IS_A_TEMP(r2)) pushed_registers += r2; if (!IS_A_TEMP(r5)) pushed_registers += r5; - if (super_klass != r0 || UseCompressedOops) { + if (super_klass != r0) { if (!IS_A_TEMP(r0)) pushed_registers += r0; } @@ -1494,48 +1526,43 @@ } // Macro to mov replicated immediate to vector register. -// Vd will get the following values for different arrangements in T -// imm32 == hex 000000gh T8B: Vd = ghghghghghghghgh -// imm32 == hex 000000gh T16B: Vd = ghghghghghghghghghghghghghghghgh -// imm32 == hex 0000efgh T4H: Vd = efghefghefghefgh -// imm32 == hex 0000efgh T8H: Vd = efghefghefghefghefghefghefghefgh -// imm32 == hex abcdefgh T2S: Vd = abcdefghabcdefgh -// imm32 == hex abcdefgh T4S: Vd = abcdefghabcdefghabcdefghabcdefgh -// T1D/T2D: invalid -void MacroAssembler::mov(FloatRegister Vd, SIMD_Arrangement T, uint32_t imm32) { - assert(T != T1D && T != T2D, "invalid arrangement"); - if (T == T8B || T == T16B) { - assert((imm32 & ~0xff) == 0, "extraneous bits in unsigned imm32 (T8B/T16B)"); - movi(Vd, T, imm32 & 0xff, 0); +// imm64: only the lower 8/16/32 bits are considered for B/H/S type. That is, +// the upper 56/48/32 bits must be zeros for B/H/S type. +// Vd will get the following values for different arrangements in T +// imm64 == hex 000000gh T8B: Vd = ghghghghghghghgh +// imm64 == hex 000000gh T16B: Vd = ghghghghghghghghghghghghghghghgh +// imm64 == hex 0000efgh T4H: Vd = efghefghefghefgh +// imm64 == hex 0000efgh T8H: Vd = efghefghefghefghefghefghefghefgh +// imm64 == hex abcdefgh T2S: Vd = abcdefghabcdefgh +// imm64 == hex abcdefgh T4S: Vd = abcdefghabcdefghabcdefghabcdefgh +// imm64 == hex abcdefgh T1D: Vd = 00000000abcdefgh +// imm64 == hex abcdefgh T2D: Vd = 00000000abcdefgh00000000abcdefgh +// Clobbers rscratch1 +void MacroAssembler::mov(FloatRegister Vd, SIMD_Arrangement T, uint64_t imm64) { + assert(T != T1Q, "unsupported"); + if (T == T1D || T == T2D) { + int imm = operand_valid_for_movi_immediate(imm64, T); + if (-1 != imm) { + movi(Vd, T, imm); + } else { + mov(rscratch1, imm64); + dup(Vd, T, rscratch1); + } return; } - uint32_t nimm32 = ~imm32; - if (T == T4H || T == T8H) { - assert((imm32 & ~0xffff) == 0, "extraneous bits in unsigned imm32 (T4H/T8H)"); - imm32 &= 0xffff; - nimm32 &= 0xffff; - } - uint32_t x = imm32; - int movi_cnt = 0; - int movn_cnt = 0; - while (x) { if (x & 0xff) movi_cnt++; x >>= 8; } - x = nimm32; - while (x) { if (x & 0xff) movn_cnt++; x >>= 8; } - if (movn_cnt < movi_cnt) imm32 = nimm32; - unsigned lsl = 0; - while (imm32 && (imm32 & 0xff) == 0) { lsl += 8; imm32 >>= 8; } - if (movn_cnt < movi_cnt) - mvni(Vd, T, imm32 & 0xff, lsl); - else - movi(Vd, T, imm32 & 0xff, lsl); - imm32 >>= 8; lsl += 8; - while (imm32) { - while ((imm32 & 0xff) == 0) { lsl += 8; imm32 >>= 8; } - if (movn_cnt < movi_cnt) - bici(Vd, T, imm32 & 0xff, lsl); - else - orri(Vd, T, imm32 & 0xff, lsl); - lsl += 8; imm32 >>= 8; + +#ifdef ASSERT + if (T == T8B || T == T16B) assert((imm64 & ~0xff) == 0, "extraneous bits (T8B/T16B)"); + if (T == T4H || T == T8H) assert((imm64 & ~0xffff) == 0, "extraneous bits (T4H/T8H)"); + if (T == T2S || T == T4S) assert((imm64 & ~0xffffffff) == 0, "extraneous bits (T2S/T4S)"); +#endif + int shift = operand_valid_for_movi_immediate(imm64, T); + uint32_t imm32 = imm64 & 0xffffffffULL; + if (shift >= 0) { + movi(Vd, T, (imm32 >> shift) & 0xff, shift); + } else { + movw(rscratch1, imm32); + dup(Vd, T, rscratch1); } } @@ -2270,11 +2297,13 @@ // If a constant does not fit in an immediate field, generate some // number of MOV instructions and then perform the operation. -void MacroAssembler::wrap_add_sub_imm_insn(Register Rd, Register Rn, unsigned imm, +void MacroAssembler::wrap_add_sub_imm_insn(Register Rd, Register Rn, uint64_t imm, add_sub_imm_insn insn1, - add_sub_reg_insn insn2) { + add_sub_reg_insn insn2, + bool is32) { assert(Rd != zr, "Rd = zr and not setting flags?"); - if (operand_valid_for_add_sub_immediate((int)imm)) { + bool fits = operand_valid_for_add_sub_immediate(is32 ? (int32_t)imm : imm); + if (fits) { (this->*insn1)(Rd, Rn, imm); } else { if (uabs(imm) < (1 << 24)) { @@ -2282,7 +2311,7 @@ (this->*insn1)(Rd, Rd, imm & ((1 << 12)-1)); } else { assert_different_registers(Rd, Rn); - mov(Rd, (uint64_t)imm); + mov(Rd, imm); (this->*insn2)(Rd, Rn, Rd, LSL, 0); } } @@ -2290,15 +2319,17 @@ // Seperate vsn which sets the flags. Optimisations are more restricted // because we must set the flags correctly. -void MacroAssembler::wrap_adds_subs_imm_insn(Register Rd, Register Rn, unsigned imm, - add_sub_imm_insn insn1, - add_sub_reg_insn insn2) { - if (operand_valid_for_add_sub_immediate((int)imm)) { +void MacroAssembler::wrap_adds_subs_imm_insn(Register Rd, Register Rn, uint64_t imm, + add_sub_imm_insn insn1, + add_sub_reg_insn insn2, + bool is32) { + bool fits = operand_valid_for_add_sub_immediate(is32 ? (int32_t)imm : imm); + if (fits) { (this->*insn1)(Rd, Rn, imm); } else { assert_different_registers(Rd, Rn); assert(Rd != zr, "overflow in immediate operand"); - mov(Rd, (uint64_t)imm); + mov(Rd, imm); (this->*insn2)(Rd, Rn, Rd, LSL, 0); } } @@ -3342,7 +3373,7 @@ crc32x(crc, crc, tmp2); crc32x(crc, crc, tmp3); br(Assembler::GE, CRC_by32_loop); - cmn(len, 32); + cmn(len, (u1)32); br(Assembler::NE, CRC_less32); b(L_exit); @@ -3405,7 +3436,7 @@ sub(len, len, 64); add(buf, buf, 8); - cmn(len, 128); + cmn(len, (u1)128); br(Assembler::NE, CRC_less64); BIND(L_exit); mvnw(crc, crc); @@ -3639,7 +3670,7 @@ crc32cx(crc, crc, tmp2); crc32cx(crc, crc, tmp3); br(Assembler::GE, CRC_by32_loop); - cmn(len, 32); + cmn(len, (u1)32); br(Assembler::NE, CRC_less32); b(L_exit); @@ -3702,7 +3733,7 @@ sub(len, len, 64); add(buf, buf, 8); - cmn(len, 128); + cmn(len, (u1)128); br(Assembler::NE, CRC_less64); BIND(L_exit); } @@ -4264,68 +4295,6 @@ bs->eden_allocate(this, obj, var_size_in_bytes, con_size_in_bytes, t1, slow_case); } -// Zero words; len is in bytes -// Destroys all registers except addr -// len must be a nonzero multiple of wordSize -void MacroAssembler::zero_memory(Register addr, Register len, Register t1) { - assert_different_registers(addr, len, t1, rscratch1, rscratch2); - -#ifdef ASSERT - { Label L; - tst(len, BytesPerWord - 1); - br(Assembler::EQ, L); - stop("len is not a multiple of BytesPerWord"); - bind(L); - } -#endif - -#ifndef PRODUCT - block_comment("zero memory"); -#endif - - Label loop; - Label entry; - -// Algorithm: -// -// scratch1 = cnt & 7; -// cnt -= scratch1; -// p += scratch1; -// switch (scratch1) { -// do { -// cnt -= 8; -// p[-8] = 0; -// case 7: -// p[-7] = 0; -// case 6: -// p[-6] = 0; -// // ... -// case 1: -// p[-1] = 0; -// case 0: -// p += 8; -// } while (cnt); -// } - - const int unroll = 8; // Number of str(zr) instructions we'll unroll - - lsr(len, len, LogBytesPerWord); - andr(rscratch1, len, unroll - 1); // tmp1 = cnt % unroll - sub(len, len, rscratch1); // cnt -= unroll - // t1 always points to the end of the region we're about to zero - add(t1, addr, rscratch1, Assembler::LSL, LogBytesPerWord); - adr(rscratch2, entry); - sub(rscratch2, rscratch2, rscratch1, Assembler::LSL, 2); - br(rscratch2); - bind(loop); - sub(len, len, unroll); - for (int i = -unroll; i < 0; i++) - Assembler::str(zr, Address(t1, i * wordSize)); - bind(entry); - add(t1, t1, unroll * wordSize); - cbnz(len, loop); -} - void MacroAssembler::verify_tlab() { #ifdef ASSERT if (UseTLAB && VerifyOops) { @@ -4844,10 +4813,11 @@ // handle anything smaller than this ourselves in zero_words(). const int MacroAssembler::zero_words_block_size = 8; -// zero_words() is used by C2 ClearArray patterns. It is as small as -// possible, handling small word counts locally and delegating -// anything larger to the zero_blocks stub. It is expanded many times -// in compiled code, so it is important to keep it short. +// zero_words() is used by C2 ClearArray patterns and by +// C1_MacroAssembler. It is as small as possible, handling small word +// counts locally and delegating anything larger to the zero_blocks +// stub. It is expanded many times in compiled code, so it is +// important to keep it short. // ptr: Address of a buffer to be zeroed. // cnt: Count in HeapWords. @@ -4856,32 +4826,45 @@ address MacroAssembler::zero_words(Register ptr, Register cnt) { assert(is_power_of_2(zero_words_block_size), "adjust this"); - assert(ptr == r10 && cnt == r11, "mismatch in register usage"); BLOCK_COMMENT("zero_words {"); - cmp(cnt, (u1)zero_words_block_size); + assert(ptr == r10 && cnt == r11, "mismatch in register usage"); + RuntimeAddress zero_blocks = RuntimeAddress(StubRoutines::aarch64::zero_blocks()); + assert(zero_blocks.target() != NULL, "zero_blocks stub has not been generated"); + + subs(rscratch1, cnt, zero_words_block_size); Label around; br(LO, around); { RuntimeAddress zero_blocks = RuntimeAddress(StubRoutines::aarch64::zero_blocks()); assert(zero_blocks.target() != NULL, "zero_blocks stub has not been generated"); - if (StubRoutines::aarch64::complete()) { + // Make sure this is a C2 compilation. C1 allocates space only for + // trampoline stubs generated by Call LIR ops, and in any case it + // makes sense for a C1 compilation task to proceed as quickly as + // possible. + CompileTask* task; + if (StubRoutines::aarch64::complete() + && Thread::current()->is_Compiler_thread() + && (task = ciEnv::current()->task()) + && is_c2_compile(task->comp_level())) { address tpc = trampoline_call(zero_blocks); if (tpc == NULL) { DEBUG_ONLY(reset_labels(around)); - postcond(pc() == badAddress); return NULL; } } else { - bl(zero_blocks); + far_call(zero_blocks); } } bind(around); + + // We have a few words left to do. zero_blocks has adjusted r10 and r11 + // for us. for (int i = zero_words_block_size >> 1; i > 1; i >>= 1) { Label l; tbz(cnt, exact_log2(i), l); for (int j = 0; j < i; j += 2) { - stp(zr, zr, post(ptr, 16)); + stp(zr, zr, post(ptr, 2 * BytesPerWord)); } bind(l); } @@ -4891,46 +4874,59 @@ str(zr, Address(ptr)); bind(l); } + BLOCK_COMMENT("} zero_words"); - postcond(pc() != badAddress); return pc(); } // base: Address of a buffer to be zeroed, 8 bytes aligned. // cnt: Immediate count in HeapWords. -#define SmallArraySize (18 * BytesPerLong) -void MacroAssembler::zero_words(Register base, uint64_t cnt) +// +// r10, r11, rscratch1, and rscratch2 are clobbered. +address MacroAssembler::zero_words(Register base, uint64_t cnt) { - BLOCK_COMMENT("zero_words {"); - int i = cnt & 1; // store any odd word to start - if (i) str(zr, Address(base)); - - if (cnt <= SmallArraySize / BytesPerLong) { + assert(wordSize <= BlockZeroingLowLimit, + "increase BlockZeroingLowLimit"); + address result = nullptr; + if (cnt <= (uint64_t)BlockZeroingLowLimit / BytesPerWord) { +#ifndef PRODUCT + { + char buf[64]; + snprintf(buf, sizeof buf, "zero_words (count = %" PRIu64 ") {", cnt); + BLOCK_COMMENT(buf); + } +#endif + if (cnt >= 16) { + uint64_t loops = cnt/16; + if (loops > 1) { + mov(rscratch2, loops - 1); + } + { + Label loop; + bind(loop); + for (int i = 0; i < 16; i += 2) { + stp(zr, zr, Address(base, i * BytesPerWord)); + } + add(base, base, 16 * BytesPerWord); + if (loops > 1) { + subs(rscratch2, rscratch2, 1); + br(GE, loop); + } + } + } + cnt %= 16; + int i = cnt & 1; // store any odd word to start + if (i) str(zr, Address(base)); for (; i < (int)cnt; i += 2) { stp(zr, zr, Address(base, i * wordSize)); } + BLOCK_COMMENT("} zero_words"); + result = pc(); } else { - const int unroll = 4; // Number of stp(zr, zr) instructions we'll unroll - int remainder = cnt % (2 * unroll); - for (; i < remainder; i += 2) { - stp(zr, zr, Address(base, i * wordSize)); - } - Label loop; - Register cnt_reg = rscratch1; - Register loop_base = rscratch2; - cnt = cnt - remainder; - mov(cnt_reg, cnt); - // adjust base and prebias by -2 * wordSize so we can pre-increment - add(loop_base, base, (remainder - 2) * wordSize); - bind(loop); - sub(cnt_reg, cnt_reg, 2 * unroll); - for (i = 1; i < unroll; i++) { - stp(zr, zr, Address(loop_base, 2 * i * wordSize)); - } - stp(zr, zr, Address(pre(loop_base, 2 * unroll * wordSize))); - cbnz(cnt_reg, loop); + mov(r10, base); mov(r11, cnt); + result = zero_words(r10, r11); } - BLOCK_COMMENT("} zero_words"); + return result; } // Zero blocks of memory by using DC ZVA. diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -206,8 +206,11 @@ inline void cmp(Register Rd, unsigned char imm8) { subs(zr, Rd, imm8); } inline void cmp(Register Rd, unsigned imm) = delete; - inline void cmnw(Register Rd, unsigned imm) { addsw(zr, Rd, imm); } - inline void cmn(Register Rd, unsigned imm) { adds(zr, Rd, imm); } + template + inline void cmnw(Register Rd, T imm) { addsw(zr, Rd, imm); } + + inline void cmn(Register Rd, unsigned char imm8) { adds(zr, Rd, imm8); } + inline void cmn(Register Rd, unsigned imm) = delete; void cset(Register Rd, Assembler::Condition cond) { csinc(Rd, zr, zr, ~cond); @@ -225,7 +228,7 @@ inline void movw(Register Rd, Register Rn) { if (Rd == sp || Rn == sp) { - addw(Rd, Rn, 0U); + Assembler::addw(Rd, Rn, 0U); } else { orrw(Rd, zr, Rn); } @@ -234,7 +237,7 @@ assert(Rd != r31_sp && Rn != r31_sp, "should be"); if (Rd == Rn) { } else if (Rd == sp || Rn == sp) { - add(Rd, Rn, 0U); + Assembler::add(Rd, Rn, 0U); } else { orr(Rd, zr, Rn); } @@ -522,7 +525,7 @@ void movptr(Register r, uintptr_t imm64); - void mov(FloatRegister Vd, SIMD_Arrangement T, uint32_t imm32); + void mov(FloatRegister Vd, SIMD_Arrangement T, uint64_t imm64); void mov(FloatRegister Vd, SIMD_Arrangement T, FloatRegister Vn) { orr(Vd, T, Vn, Vn); @@ -904,7 +907,6 @@ Register t2, // temp register Label& slow_case // continuation point if fast allocation fails ); - void zero_memory(Register addr, Register len, Register t1); void verify_tlab(); // interface method calling @@ -1084,13 +1086,18 @@ return ReservedCodeCacheSize > branch_range; } + // Check if branches to the the non nmethod section require a far jump + static bool codestub_branch_needs_far_jump() { + return CodeCache::max_distance_to_non_nmethod() > branch_range; + } + // Jumps that can reach anywhere in the code cache. // Trashes tmp. void far_call(Address entry, CodeBuffer *cbuf = NULL, Register tmp = rscratch1); - void far_jump(Address entry, CodeBuffer *cbuf = NULL, Register tmp = rscratch1); + int far_jump(Address entry, CodeBuffer *cbuf = NULL, Register tmp = rscratch1); - static int far_branch_size() { - if (far_branches()) { + static int far_codestub_branch_size() { + if (codestub_branch_needs_far_jump()) { return 3 * 4; // adrp, add, br } else { return 4; @@ -1133,17 +1140,17 @@ // If a constant does not fit in an immediate field, generate some // number of MOV instructions and then perform the operation - void wrap_add_sub_imm_insn(Register Rd, Register Rn, unsigned imm, + void wrap_add_sub_imm_insn(Register Rd, Register Rn, uint64_t imm, add_sub_imm_insn insn1, - add_sub_reg_insn insn2); + add_sub_reg_insn insn2, bool is32); // Seperate vsn which sets the flags - void wrap_adds_subs_imm_insn(Register Rd, Register Rn, unsigned imm, - add_sub_imm_insn insn1, - add_sub_reg_insn insn2); - -#define WRAP(INSN) \ - void INSN(Register Rd, Register Rn, unsigned imm) { \ - wrap_add_sub_imm_insn(Rd, Rn, imm, &Assembler::INSN, &Assembler::INSN); \ + void wrap_adds_subs_imm_insn(Register Rd, Register Rn, uint64_t imm, + add_sub_imm_insn insn1, + add_sub_reg_insn insn2, bool is32); + +#define WRAP(INSN, is32) \ + void INSN(Register Rd, Register Rn, uint64_t imm) { \ + wrap_add_sub_imm_insn(Rd, Rn, imm, &Assembler::INSN, &Assembler::INSN, is32); \ } \ \ void INSN(Register Rd, Register Rn, Register Rm, \ @@ -1160,12 +1167,12 @@ Assembler::INSN(Rd, Rn, Rm, option, amount); \ } - WRAP(add) WRAP(addw) WRAP(sub) WRAP(subw) + WRAP(add, false) WRAP(addw, true) WRAP(sub, false) WRAP(subw, true) #undef WRAP -#define WRAP(INSN) \ - void INSN(Register Rd, Register Rn, unsigned imm) { \ - wrap_adds_subs_imm_insn(Rd, Rn, imm, &Assembler::INSN, &Assembler::INSN); \ +#define WRAP(INSN, is32) \ + void INSN(Register Rd, Register Rn, uint64_t imm) { \ + wrap_adds_subs_imm_insn(Rd, Rn, imm, &Assembler::INSN, &Assembler::INSN, is32); \ } \ \ void INSN(Register Rd, Register Rn, Register Rm, \ @@ -1182,7 +1189,7 @@ Assembler::INSN(Rd, Rn, Rm, option, amount); \ } - WRAP(adds) WRAP(addsw) WRAP(subs) WRAP(subsw) + WRAP(adds, false) WRAP(addsw, true) WRAP(subs, false) WRAP(subsw, true) void add(Register Rd, Register Rn, RegisterOrConstant increment); void addw(Register Rd, Register Rn, RegisterOrConstant increment); @@ -1255,7 +1262,7 @@ int elem_size); void fill_words(Register base, Register cnt, Register value); - void zero_words(Register base, uint64_t cnt); + address zero_words(Register base, uint64_t cnt); address zero_words(Register ptr, Register cnt); void zero_dcache_blocks(Register base, Register cnt); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -4752,7 +4752,7 @@ __ enter(); - Label RET_TRUE, RET_TRUE_NO_POP, RET_FALSE, ALIGNED, LOOP16, CHECK_16, DONE, + Label RET_TRUE, RET_TRUE_NO_POP, RET_FALSE, ALIGNED, LOOP16, CHECK_16, LARGE_LOOP, POST_LOOP16, LEN_OVER_15, LEN_OVER_8, POST_LOOP16_LOAD_TAIL; __ cmp(len, (u1)15); @@ -4894,10 +4894,6 @@ __ mov(result, 1); __ ret(lr); - __ bind(DONE); - __ pop(spilled_regs, sp); - __ leave(); - __ ret(lr); return entry; } @@ -6129,6 +6125,7 @@ * c_rarg3 - dest_start * c_rarg4 - dest_offset * c_rarg5 - isURL + * c_rarg6 - isMIME * */ address generate_base64_decodeBlock() { @@ -6211,12 +6208,13 @@ StubCodeMark mark(this, "StubRoutines", "decodeBlock"); address start = __ pc(); - Register src = c_rarg0; // source array - Register soff = c_rarg1; // source start offset - Register send = c_rarg2; // source end offset - Register dst = c_rarg3; // dest array - Register doff = c_rarg4; // position for writing to dest array - Register isURL = c_rarg5; // Base64 or URL character set + Register src = c_rarg0; // source array + Register soff = c_rarg1; // source start offset + Register send = c_rarg2; // source end offset + Register dst = c_rarg3; // dest array + Register doff = c_rarg4; // position for writing to dest array + Register isURL = c_rarg5; // Base64 or URL character set + Register isMIME = c_rarg6; // Decoding MIME block - unused in this implementation Register length = send; // reuse send as length of source data to process @@ -6619,7 +6617,7 @@ assert(is_even(framesize/2), "sp not 16-byte aligned"); // lr and fp are already in place - __ sub(sp, rfp, ((unsigned)framesize-4) << LogBytesPerInt); // prolog + __ sub(sp, rfp, ((uint64_t)framesize-4) << LogBytesPerInt); // prolog int frame_complete = __ pc() - start; diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -266,7 +266,7 @@ UseAES = true; } if (FLAG_IS_DEFAULT(UseAESCTRIntrinsics)) { - FLAG_SET_DEFAULT(UseAESCTRIntrinsics, false); + FLAG_SET_DEFAULT(UseAESCTRIntrinsics, true); } } else { if (UseAES) { diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1483,6 +1483,9 @@ __ mov_double(result->as_double_reg(), c->as_jdouble(), acond); #endif // __SOFTFP__ break; + case T_METADATA: + __ mov_metadata(result->as_register(), c->as_metadata(), acond); + break; default: ShouldNotReachHere(); } diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/arm/frame_arm.inline.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/arm/frame_arm.inline.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/arm/frame_arm.inline.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/arm/frame_arm.inline.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -124,9 +124,13 @@ inline bool frame::is_older(intptr_t* id) const { assert(this->id() != NULL && id != NULL, "NULL frame id"); return this->id() > id ; } - inline intptr_t* frame::link() const { return (intptr_t*) *(intptr_t **)addr_at(link_offset); } +inline intptr_t* frame::link_or_null() const { + intptr_t** ptr = (intptr_t **)addr_at(link_offset); + return os::is_readable_pointer(ptr) ? *ptr : NULL; +} + inline intptr_t* frame::unextended_sp() const { return _unextended_sp; } // Return address: diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/arm/javaFrameAnchor_arm.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/arm/javaFrameAnchor_arm.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/arm/javaFrameAnchor_arm.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/arm/javaFrameAnchor_arm.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -65,7 +65,7 @@ // Always walkable bool walkable(void) { return true; } // Never any thing to do since we are always walkable and can find address of return addresses - void make_walkable(JavaThread* thread) { } + void make_walkable() { } intptr_t* last_Java_sp(void) const { return _last_Java_sp; } diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/arm/stubGenerator_arm.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/arm/stubGenerator_arm.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/arm/stubGenerator_arm.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/arm/stubGenerator_arm.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -635,17 +635,17 @@ Register result_hi = R1; Register src = R0; - if (!os::is_MP()) { - __ ldmia(src, RegisterSet(result_lo, result_hi)); - __ bx(LR); - } else if (VM_Version::supports_ldrexd()) { + if (VM_Version::supports_ldrexd()) { __ ldrexd(result_lo, Address(src)); __ clrex(); // FIXME: safe to remove? - __ bx(LR); + } else if (!os::is_MP()) { + // Last-ditch attempt: we are allegedly running on uni-processor. + // Load the thing non-atomically and hope for the best. + __ ldmia(src, RegisterSet(result_lo, result_hi)); } else { __ stop("Atomic load(jlong) unsupported on this platform"); - __ bx(LR); } + __ bx(LR); return start; } @@ -662,10 +662,7 @@ Register scratch_hi = R3; /* After load from stack */ Register result = R3; - if (!os::is_MP()) { - __ stmia(dest, RegisterSet(newval_lo, newval_hi)); - __ bx(LR); - } else if (VM_Version::supports_ldrexd()) { + if (VM_Version::supports_ldrexd()) { __ mov(Rtemp, dest); // get dest to Rtemp Label retry; __ bind(retry); @@ -673,11 +670,14 @@ __ strexd(result, R0, Address(Rtemp)); __ rsbs(result, result, 1); __ b(retry, eq); - __ bx(LR); + } else if (!os::is_MP()) { + // Last-ditch attempt: we are allegedly running on uni-processor. + // Store the thing non-atomically and hope for the best. + __ stmia(dest, RegisterSet(newval_lo, newval_hi)); } else { __ stop("Atomic store(jlong) unsupported on this platform"); - __ bx(LR); } + __ bx(LR); return start; } diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/arm/templateTable_arm.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/arm/templateTable_arm.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/arm/templateTable_arm.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/arm/templateTable_arm.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -490,29 +490,30 @@ __ add(Rtemp, Rtags, tags_offset); __ ldrb(Rtemp, Address(Rtemp, Rindex)); - Label Condy, exit; -#ifdef __ABI_HARD__ - Label NotDouble; + Label Done, NotLong, NotDouble; __ cmp(Rtemp, JVM_CONSTANT_Double); __ b(NotDouble, ne); +#ifdef __SOFTFP__ + __ ldr(R0_tos_lo, Address(Rbase, base_offset + 0 * wordSize)); + __ ldr(R1_tos_hi, Address(Rbase, base_offset + 1 * wordSize)); +#else // !__SOFTFP__ __ ldr_double(D0_tos, Address(Rbase, base_offset)); - +#endif // __SOFTFP__ __ push(dtos); - __ b(exit); + __ b(Done); __ bind(NotDouble); -#endif __ cmp(Rtemp, JVM_CONSTANT_Long); - __ b(Condy, ne); + __ b(NotLong, ne); __ ldr(R0_tos_lo, Address(Rbase, base_offset + 0 * wordSize)); __ ldr(R1_tos_hi, Address(Rbase, base_offset + 1 * wordSize)); __ push(ltos); - __ b(exit); + __ b(Done); + __ bind(NotLong); - __ bind(Condy); - condy_helper(exit); + condy_helper(Done); - __ bind(exit); + __ bind(Done); } diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/ppc/frame_ppc.inline.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/frame_ppc.inline.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/ppc/frame_ppc.inline.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/frame_ppc.inline.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -117,6 +117,10 @@ return (intptr_t*)callers_abi()->callers_sp; } +inline intptr_t* frame::link_or_null() const { + return link(); +} + inline intptr_t* frame::real_fp() const { return fp(); } diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/ppc/gc/z/zBarrierSetAssembler_ppc.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/gc/z/zBarrierSetAssembler_ppc.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/ppc/gc/z/zBarrierSetAssembler_ppc.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/gc/z/zBarrierSetAssembler_ppc.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,6 +1,6 @@ /* * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2021 SAP SE. All rights reserved. + * Copyright (c) 2021, 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 @@ -400,36 +400,40 @@ #define __ _masm-> class ZSaveLiveRegisters { - - private: MacroAssembler* _masm; RegMask _reg_mask; Register _result_reg; + int _frame_size; public: ZSaveLiveRegisters(MacroAssembler *masm, ZLoadBarrierStubC2 *stub) : _masm(masm), _reg_mask(stub->live()), _result_reg(stub->ref()) { - const int total_regs_amount = iterate_over_register_mask(ACTION_SAVE); + const int register_save_size = iterate_over_register_mask(ACTION_COUNT_ONLY) * BytesPerWord; + _frame_size = align_up(register_save_size, frame::alignment_in_bytes) + + frame::abi_reg_args_size; __ save_LR_CR(R0); - __ push_frame_reg_args(total_regs_amount * BytesPerWord, R0); + __ push_frame(_frame_size, R0); + + iterate_over_register_mask(ACTION_SAVE, _frame_size); } ~ZSaveLiveRegisters() { - __ pop_frame(); - __ restore_LR_CR(R0); + iterate_over_register_mask(ACTION_RESTORE, _frame_size); - iterate_over_register_mask(ACTION_RESTORE); + __ addi(R1_SP, R1_SP, _frame_size); + __ restore_LR_CR(R0); } private: enum IterationAction : int { - ACTION_SAVE = 0, - ACTION_RESTORE = 1 + ACTION_SAVE, + ACTION_RESTORE, + ACTION_COUNT_ONLY }; - int iterate_over_register_mask(IterationAction action) { + int iterate_over_register_mask(IterationAction action, int offset = 0) { int reg_save_index = 0; RegMaskIterator live_regs_iterator(_reg_mask); @@ -454,11 +458,11 @@ reg_save_index++; if (action == ACTION_SAVE) { - _masm->std(std_reg, (intptr_t) -reg_save_index * BytesPerWord, R1_SP); + _masm->std(std_reg, offset - reg_save_index * BytesPerWord, R1_SP); } else if (action == ACTION_RESTORE) { - _masm->ld(std_reg, (intptr_t) -reg_save_index * BytesPerWord, R1_SP); + _masm->ld(std_reg, offset - reg_save_index * BytesPerWord, R1_SP); } else { - fatal("Sanity"); + assert(action == ACTION_COUNT_ONLY, "Sanity"); } } } else if (vm_reg->is_FloatRegister()) { @@ -467,19 +471,34 @@ reg_save_index++; if (action == ACTION_SAVE) { - _masm->stfd(fp_reg, (intptr_t) -reg_save_index * BytesPerWord, R1_SP); + _masm->stfd(fp_reg, offset - reg_save_index * BytesPerWord, R1_SP); } else if (action == ACTION_RESTORE) { - _masm->lfd(fp_reg, (intptr_t) -reg_save_index * BytesPerWord, R1_SP); + _masm->lfd(fp_reg, offset - reg_save_index * BytesPerWord, R1_SP); } else { - fatal("Sanity"); + assert(action == ACTION_COUNT_ONLY, "Sanity"); } } } else if (vm_reg->is_ConditionRegister()) { // NOP. Conditions registers are covered by save_LR_CR + } else if (vm_reg->is_VectorSRegister()) { + assert(SuperwordUseVSX, "or should not reach here"); + VectorSRegister vs_reg = vm_reg->as_VectorSRegister(); + if (vs_reg->encoding() >= VSR32->encoding() && vs_reg->encoding() <= VSR51->encoding()) { + reg_save_index += 2; + + Register spill_addr = R0; + if (action == ACTION_SAVE) { + _masm->addi(spill_addr, R1_SP, offset - reg_save_index * BytesPerWord); + _masm->stxvd2x(vs_reg, spill_addr); + } else if (action == ACTION_RESTORE) { + _masm->addi(spill_addr, R1_SP, offset - reg_save_index * BytesPerWord); + _masm->lxvd2x(vs_reg, spill_addr); + } else { + assert(action == ACTION_COUNT_ONLY, "Sanity"); + } + } } else { - if (vm_reg->is_VectorRegister()) { - fatal("Vector registers are unsupported. Found register %s", vm_reg->name()); - } else if (vm_reg->is_SpecialRegister()) { + if (vm_reg->is_SpecialRegister()) { fatal("Special registers are unsupported. Found register %s", vm_reg->name()); } else { fatal("Register type is not known"); @@ -495,7 +514,6 @@ #define __ _masm-> class ZSetupArguments { - private: MacroAssembler* const _masm; const Register _ref; const Address _ref_addr; diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/ppc/javaFrameAnchor_ppc.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/javaFrameAnchor_ppc.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/ppc/javaFrameAnchor_ppc.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/javaFrameAnchor_ppc.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -67,7 +67,7 @@ // Always walkable. bool walkable(void) { return true; } // Never any thing to do since we are always walkable and can find address of return addresses. - void make_walkable(JavaThread* thread) { } + void make_walkable() { } intptr_t* last_Java_sp(void) const { return _last_Java_sp; } diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/ppc/ppc.ad openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/ppc.ad --- openjdk-17-17.0.4+8/src/hotspot/cpu/ppc/ppc.ad 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/ppc.ad 2023-01-10 13:21:55.000000000 +0000 @@ -1,6 +1,6 @@ // // Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved. -// Copyright (c) 2012, 2021 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,72 @@ // ---------------------------- // 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); + // 1st 32 VSRs are aliases for the FPRs which are already defined above. + 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, SOE, Op_VecX, 14, VMRegImpl::Bad()); + reg_def VSR15 ( SOC, SOE, Op_VecX, 15, VMRegImpl::Bad()); + reg_def VSR16 ( SOC, SOE, Op_VecX, 16, VMRegImpl::Bad()); + reg_def VSR17 ( SOC, SOE, Op_VecX, 17, VMRegImpl::Bad()); + reg_def VSR18 ( SOC, SOE, Op_VecX, 18, VMRegImpl::Bad()); + reg_def VSR19 ( SOC, SOE, Op_VecX, 19, VMRegImpl::Bad()); + reg_def VSR20 ( SOC, SOE, Op_VecX, 20, VMRegImpl::Bad()); + reg_def VSR21 ( SOC, SOE, Op_VecX, 21, VMRegImpl::Bad()); + reg_def VSR22 ( SOC, SOE, Op_VecX, 22, VMRegImpl::Bad()); + reg_def VSR23 ( SOC, SOE, Op_VecX, 23, VMRegImpl::Bad()); + reg_def VSR24 ( SOC, SOE, Op_VecX, 24, VMRegImpl::Bad()); + reg_def VSR25 ( SOC, SOE, Op_VecX, 25, VMRegImpl::Bad()); + reg_def VSR26 ( SOC, SOE, Op_VecX, 26, VMRegImpl::Bad()); + reg_def VSR27 ( SOC, SOE, Op_VecX, 27, VMRegImpl::Bad()); + reg_def VSR28 ( SOC, SOE, Op_VecX, 28, VMRegImpl::Bad()); + reg_def VSR29 ( SOC, SOE, Op_VecX, 29, VMRegImpl::Bad()); + reg_def VSR30 ( SOC, SOE, Op_VecX, 30, VMRegImpl::Bad()); + reg_def VSR31 ( SOC, SOE, Op_VecX, 31, VMRegImpl::Bad()); + // 2nd 32 VSRs are aliases for the VRs which are only defined here. + reg_def VSR32 ( SOC, SOC, Op_VecX, 32, VSR32->as_VMReg()); + reg_def VSR33 ( SOC, SOC, Op_VecX, 33, VSR33->as_VMReg()); + reg_def VSR34 ( SOC, SOC, Op_VecX, 34, VSR34->as_VMReg()); + reg_def VSR35 ( SOC, SOC, Op_VecX, 35, VSR35->as_VMReg()); + reg_def VSR36 ( SOC, SOC, Op_VecX, 36, VSR36->as_VMReg()); + reg_def VSR37 ( SOC, SOC, Op_VecX, 37, VSR37->as_VMReg()); + reg_def VSR38 ( SOC, SOC, Op_VecX, 38, VSR38->as_VMReg()); + reg_def VSR39 ( SOC, SOC, Op_VecX, 39, VSR39->as_VMReg()); + reg_def VSR40 ( SOC, SOC, Op_VecX, 40, VSR40->as_VMReg()); + reg_def VSR41 ( SOC, SOC, Op_VecX, 41, VSR41->as_VMReg()); + reg_def VSR42 ( SOC, SOC, Op_VecX, 42, VSR42->as_VMReg()); + reg_def VSR43 ( SOC, SOC, Op_VecX, 43, VSR43->as_VMReg()); + reg_def VSR44 ( SOC, SOC, Op_VecX, 44, VSR44->as_VMReg()); + reg_def VSR45 ( SOC, SOC, Op_VecX, 45, VSR45->as_VMReg()); + reg_def VSR46 ( SOC, SOC, Op_VecX, 46, VSR46->as_VMReg()); + reg_def VSR47 ( SOC, SOC, Op_VecX, 47, VSR47->as_VMReg()); + reg_def VSR48 ( SOC, SOC, Op_VecX, 48, VSR48->as_VMReg()); + reg_def VSR49 ( SOC, SOC, Op_VecX, 49, VSR49->as_VMReg()); + reg_def VSR50 ( SOC, SOC, Op_VecX, 50, VSR50->as_VMReg()); + reg_def VSR51 ( SOC, SOC, Op_VecX, 51, VSR51->as_VMReg()); + reg_def VSR52 ( SOC, SOE, Op_VecX, 52, VSR52->as_VMReg()); + reg_def VSR53 ( SOC, SOE, Op_VecX, 53, VSR53->as_VMReg()); + reg_def VSR54 ( SOC, SOE, Op_VecX, 54, VSR54->as_VMReg()); + reg_def VSR55 ( SOC, SOE, Op_VecX, 55, VSR55->as_VMReg()); + reg_def VSR56 ( SOC, SOE, Op_VecX, 56, VSR56->as_VMReg()); + reg_def VSR57 ( SOC, SOE, Op_VecX, 57, VSR57->as_VMReg()); + reg_def VSR58 ( SOC, SOE, Op_VecX, 58, VSR58->as_VMReg()); + reg_def VSR59 ( SOC, SOE, Op_VecX, 59, VSR59->as_VMReg()); + reg_def VSR60 ( SOC, SOE, Op_VecX, 60, VSR60->as_VMReg()); + reg_def VSR61 ( SOC, SOE, Op_VecX, 61, VSR61->as_VMReg()); + reg_def VSR62 ( SOC, SOE, Op_VecX, 62, VSR62->as_VMReg()); + reg_def VSR63 ( SOC, SOE, Op_VecX, 63, VSR63->as_VMReg()); // ---------------------------- // Specify priority of register selection within phases of register @@ -6832,6 +6834,9 @@ n2->_opnds[2] = op_dst; n2->_bottom_type = _bottom_type; + assert(ra_->is_oop(this) == true, "A decodeN node must produce an oop!"); + ra_->set_oop(n2, true); + ra_->set_pair(n1->_idx, ra_->get_reg_second(this), ra_->get_reg_first(this)); ra_->set_pair(n2->_idx, ra_->get_reg_second(this), ra_->get_reg_first(this)); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/ppc/register_ppc.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/register_ppc.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/ppc/register_ppc.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/register_ppc.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,6 +1,6 @@ /* - * Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012, 2018 SAP SE. All rights reserved. + * Copyright (c) 2000, 2022, Oracle and/or its affiliates. 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 @@ -69,7 +69,11 @@ // v14-v19 Volatile scratch registers // v20-v31 Non-volatile registers // vrsave Non-volatile 32-bit register - +// +// ---------------------------------------------- +// On processors with VSX feature: +// vs0-31 Alias for f0-f31 (64 bit, see above) +// vs32-63 Alias for v0-31 (128 bit, see above) // Use Register as shortcut class RegisterImpl; diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -3757,6 +3757,7 @@ Register d = R6_ARG4; // destination address Register dp = R7_ARG5; // destination offset Register isURL = R8_ARG6; // boolean, if non-zero indicates use of RFC 4648 base64url encoding + Register isMIME = R9_ARG7; // boolean, if non-zero indicates use of RFC 2045 MIME encoding - not used // Local variables Register const_ptr = R9; // used for loading constants diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/ppc/vmreg_ppc.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/vmreg_ppc.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/ppc/vmreg_ppc.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/vmreg_ppc.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,6 +1,6 @@ /* * Copyright (c) 2002, 2013, 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 @@ -44,8 +44,14 @@ if (reg->encoding() < FloatRegisterImpl::number_of_registers-1) freg = freg->successor(); } - for ( ; i < ConcreteRegisterImpl::number_of_registers; i++) { - regName[i] = "NON-GPR-FPR"; + + VectorSRegister vsreg = ::as_VectorSRegister(0); + for ( ; i < ConcreteRegisterImpl::max_vsr; ) { + regName[i++] = vsreg->name(); + } + + for ( ; i < ConcreteRegisterImpl::number_of_registers; ) { + regName[i++] = "NON-GPR-FPR-VSR"; } } diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/ppc/vmreg_ppc.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/vmreg_ppc.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/ppc/vmreg_ppc.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/ppc/vmreg_ppc.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,6 +1,6 @@ /* - * Copyright (c) 2001, 2021, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012, 2021 SAP SE. All rights reserved. + * Copyright (c) 2001, 2022, Oracle and/or its affiliates. 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 @@ -35,7 +35,7 @@ value() < ConcreteRegisterImpl::max_fpr; } -inline bool is_VectorRegister() { +inline bool is_VectorSRegister() { return value() >= ConcreteRegisterImpl::max_fpr && value() < ConcreteRegisterImpl::max_vsr; } @@ -60,6 +60,11 @@ return ::as_FloatRegister((value() - ConcreteRegisterImpl::max_gpr) >> 1); } +inline VectorSRegister as_VectorSRegister() { + assert(is_VectorSRegister(), "must be"); + return ::as_VectorSRegister(value() - ConcreteRegisterImpl::max_fpr); +} + inline bool is_concrete() { assert(is_reg(), "must be"); return is_even(value()); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/s390/assembler_s390.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/s390/assembler_s390.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/s390/assembler_s390.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/s390/assembler_s390.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -139,7 +139,7 @@ return inverse_cc; } -#ifdef ASSERT +#ifndef PRODUCT void Assembler::print_dbg_msg(outputStream* out, unsigned long inst, const char* msg, int ilen) { out->flush(); switch (ilen) { diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/s390/frame_s390.inline.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/s390/frame_s390.inline.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/s390/frame_s390.inline.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/s390/frame_s390.inline.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -155,6 +155,10 @@ return (intptr_t*) callers_abi()->callers_sp; } +inline intptr_t* frame::link_or_null() const { + return link(); +} + inline intptr_t** frame::interpreter_frame_locals_addr() const { return (intptr_t**) &(ijava_state()->locals); } diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/s390/interp_masm_s390.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/s390/interp_masm_s390.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/s390/interp_masm_s390.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/s390/interp_masm_s390.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -166,7 +166,7 @@ // Accessors to the template interpreter state. - void asm_assert_ijava_state_magic(Register tmp) PRODUCT_RETURN; + void asm_assert_ijava_state_magic(Register tmp) NOT_DEBUG_RETURN; void save_bcp(); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/s390/javaFrameAnchor_s390.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/s390/javaFrameAnchor_s390.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/s390/javaFrameAnchor_s390.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/s390/javaFrameAnchor_s390.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -72,7 +72,7 @@ // We don't have to flush registers, so the stack is always walkable. inline bool walkable(void) { return true; } - inline void make_walkable(JavaThread* thread) { } + inline void make_walkable() { } public: diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/assembler_x86.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/x86/assembler_x86.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/assembler_x86.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/assembler_x86.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -3758,6 +3758,15 @@ emit_int16((unsigned char)0x8D, (0xC0 | encode)); } +void Assembler::vpermb(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { + assert(VM_Version::supports_avx512_vbmi(), ""); + InstructionAttr attributes(vector_len, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true); + attributes.set_is_evex_instruction(); + vex_prefix(src, nds->encoding(), dst->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes); + emit_int8((unsigned char)0x8D); + emit_operand(dst, src); +} + void Assembler::vpermw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { assert(vector_len == AVX_128bit ? VM_Version::supports_avx512vlbw() : vector_len == AVX_256bit ? VM_Version::supports_avx512vlbw() : @@ -3830,6 +3839,22 @@ emit_int16(0x76, (0xC0 | encode)); } +void Assembler::evpermt2b(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { + assert(VM_Version::supports_avx512_vbmi(), ""); + InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true); + attributes.set_is_evex_instruction(); + int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes); + emit_int16(0x7D, (0xC0 | encode)); +} + +void Assembler::evpmultishiftqb(XMMRegister dst, XMMRegister ctl, XMMRegister src, int vector_len) { + assert(VM_Version::supports_avx512_vbmi(), ""); + InstructionAttr attributes(vector_len, /* vex_w */ true, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true); + attributes.set_is_evex_instruction(); + int encode = vex_prefix_and_encode(dst->encoding(), ctl->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes); + emit_int16((unsigned char)0x83, (unsigned char)(0xC0 | encode)); +} + void Assembler::pause() { emit_int16((unsigned char)0xF3, (unsigned char)0x90); } @@ -4128,6 +4153,15 @@ emit_int16((unsigned char)0xD7, (0xC0 | encode)); } +void Assembler::vpmaskmovd(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { + assert((VM_Version::supports_avx2() && vector_len == AVX_256bit), ""); + InstructionMark im(this); + InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ true, /* no_mask_reg */ false, /* uses_vl */ true); + vex_prefix(src, nds->encoding(), dst->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes); + emit_int8((unsigned char)0x8C); + emit_operand(dst, src); +} + void Assembler::pextrd(Register dst, XMMRegister src, int imm8) { assert(VM_Version::supports_sse4_1(), ""); InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ _legacy_mode_dq, /* no_mask_reg */ true, /* uses_vl */ false); @@ -4549,6 +4583,15 @@ emit_int16((unsigned char)0xF5, (0xC0 | encode)); } +void Assembler::vpmaddubsw(XMMRegister dst, XMMRegister src1, XMMRegister src2, int vector_len) { +assert(vector_len == AVX_128bit? VM_Version::supports_avx() : + vector_len == AVX_256bit? VM_Version::supports_avx2() : + vector_len == AVX_512bit? VM_Version::supports_avx512bw() : 0, ""); + InstructionAttr attributes(vector_len, /* rex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true); + int encode = simd_prefix_and_encode(dst, src1, src2, VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes); + emit_int16(0x04, (0xC0 | encode)); +} + void Assembler::evpdpwssd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { assert(VM_Version::supports_evex(), ""); assert(VM_Version::supports_avx512_vnni(), "must support vnni"); @@ -4857,6 +4900,15 @@ emit_int16(0x17, (0xC0 | encode)); } +void Assembler::evptestmb(KRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { + assert(VM_Version::supports_avx512vlbw(), ""); + // Encoding: EVEX.NDS.XXX.66.0F.W0 DB /r + InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true); + attributes.set_is_evex_instruction(); + int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes); + emit_int16((unsigned char)0x26, (0xC0 | encode)); +} + void Assembler::punpcklbw(XMMRegister dst, Address src) { NOT_LP64(assert(VM_Version::supports_sse2(), "")); assert((UseAVX > 0), "SSE mode requires address alignment 16 bytes"); @@ -6539,6 +6591,13 @@ emit_int8((0xC0 | encode)); } +void Assembler::vpsubusb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { + assert(UseAVX > 0, "requires some form of AVX"); + InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true); + int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F, &attributes); + emit_int16((unsigned char)0xD8, (0xC0 | encode)); +} + void Assembler::vpsubb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { assert(UseAVX > 0, "requires some form of AVX"); InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true); @@ -6630,6 +6689,15 @@ emit_int16((unsigned char)0xF4, (0xC0 | encode)); } +void Assembler::vpmulhuw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { + assert((vector_len == AVX_128bit && VM_Version::supports_avx()) || + (vector_len == AVX_256bit && VM_Version::supports_avx2()) || + (vector_len == AVX_512bit && VM_Version::supports_avx512bw()), ""); + InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true); + int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F, &attributes); + emit_int16((unsigned char)0xE4, (0xC0 | encode)); +} + void Assembler::vpmullw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { assert(UseAVX > 0, "requires some form of AVX"); InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true); @@ -9410,6 +9478,13 @@ emit_int16((unsigned char)0xF7, (0xC0 | encode)); } +void Assembler::shrxl(Register dst, Register src1, Register src2) { + assert(VM_Version::supports_bmi2(), ""); + InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ true, /* no_mask_reg */ true, /* uses_vl */ true); + int encode = vex_prefix_and_encode(dst->encoding(), src2->encoding(), src1->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F_38, &attributes); + emit_int16((unsigned char)0xF7, (0xC0 | encode)); +} + void Assembler::shrxq(Register dst, Register src1, Register src2) { assert(VM_Version::supports_bmi2(), ""); InstructionAttr attributes(AVX_128bit, /* vex_w */ true, /* legacy_mode */ true, /* no_mask_reg */ true, /* uses_vl */ true); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/assembler_x86.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/x86/assembler_x86.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/assembler_x86.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/assembler_x86.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -1690,6 +1690,7 @@ void vpermq(XMMRegister dst, XMMRegister src, int imm8); void vpermq(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); void vpermb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); + void vpermb(XMMRegister dst, XMMRegister nds, Address src, int vector_len); void vpermw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); void vpermd(XMMRegister dst, XMMRegister nds, Address src, int vector_len); void vpermd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); @@ -1699,6 +1700,8 @@ void vpermilpd(XMMRegister dst, XMMRegister src, int imm8, int vector_len); void vpermpd(XMMRegister dst, XMMRegister src, int imm8, int vector_len); void evpermi2q(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); + void evpermt2b(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); + void evpmultishiftqb(XMMRegister dst, XMMRegister ctl, XMMRegister src, int vector_len); void pause(); @@ -1747,6 +1750,7 @@ void pmovmskb(Register dst, XMMRegister src); void vpmovmskb(Register dst, XMMRegister src, int vec_enc); + void vpmaskmovd(XMMRegister dst, XMMRegister nds, Address src, int vector_len); // SSE 4.1 extract void pextrd(Register dst, XMMRegister src, int imm8); @@ -1812,6 +1816,8 @@ // Multiply add void pmaddwd(XMMRegister dst, XMMRegister src); void vpmaddwd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); + void vpmaddubsw(XMMRegister dst, XMMRegister src1, XMMRegister src2, int vector_len); + // Multiply add accumulate void evpdpwssd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); @@ -1879,6 +1885,8 @@ void vptest(XMMRegister dst, XMMRegister src); void vptest(XMMRegister dst, Address src); + void evptestmb(KRegister dst, XMMRegister nds, XMMRegister src, int vector_len); + // Vector compare void vptest(XMMRegister dst, XMMRegister src, int vector_len); @@ -2140,6 +2148,7 @@ void shlxl(Register dst, Register src1, Register src2); void shlxq(Register dst, Register src1, Register src2); + void shrxl(Register dst, Register src1, Register src2); void shrxq(Register dst, Register src1, Register src2); void bzhiq(Register dst, Register src1, Register src2); @@ -2244,6 +2253,7 @@ void psubw(XMMRegister dst, XMMRegister src); void psubd(XMMRegister dst, XMMRegister src); void psubq(XMMRegister dst, XMMRegister src); + void vpsubusb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); void vpsubb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); void vpsubw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); void vpsubd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); @@ -2264,6 +2274,7 @@ void vpmullw(XMMRegister dst, XMMRegister nds, Address src, int vector_len); void vpmulld(XMMRegister dst, XMMRegister nds, Address src, int vector_len); void vpmullq(XMMRegister dst, XMMRegister nds, Address src, int vector_len); + void vpmulhuw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); // Minimum of packed integers void pminsb(XMMRegister dst, XMMRegister src); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/frame_x86.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/x86/frame_x86.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/frame_x86.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/frame_x86.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -341,13 +341,9 @@ assert(jfa->last_Java_sp() > sp(), "must be above this frame on stack"); // Since we are walking the stack now this nested anchor is obviously walkable // even if it wasn't when it was stacked. - if (!jfa->walkable()) { - // Capture _last_Java_pc (if needed) and mark anchor walkable. - jfa->capture_last_Java_pc(); - } + jfa->make_walkable(); map->clear(); assert(map->include_argument_oops(), "should be set by clear"); - vmassert(jfa->last_Java_pc() != NULL, "not walkable"); frame fr(jfa->last_Java_sp(), jfa->last_Java_fp(), jfa->last_Java_pc()); return fr; @@ -377,13 +373,9 @@ assert(jfa->last_Java_sp() > sp(), "must be above this frame on stack"); // Since we are walking the stack now this nested anchor is obviously walkable // even if it wasn't when it was stacked. - if (!jfa->walkable()) { - // Capture _last_Java_pc (if needed) and mark anchor walkable. - jfa->capture_last_Java_pc(); - } + jfa->make_walkable(); map->clear(); assert(map->include_argument_oops(), "should be set by clear"); - vmassert(jfa->last_Java_pc() != NULL, "not walkable"); frame fr(jfa->last_Java_sp(), jfa->last_Java_fp(), jfa->last_Java_pc()); return fr; @@ -721,20 +713,12 @@ void frame::pd_ps() {} #endif -void JavaFrameAnchor::make_walkable(JavaThread* thread) { +void JavaFrameAnchor::make_walkable() { // last frame set? if (last_Java_sp() == NULL) return; // already walkable? if (walkable()) return; - vmassert(Thread::current() == (Thread*)thread, "not current thread"); - vmassert(last_Java_sp() != NULL, "not called from Java code?"); vmassert(last_Java_pc() == NULL, "already walkable"); - capture_last_Java_pc(); - vmassert(walkable(), "something went wrong"); -} - -void JavaFrameAnchor::capture_last_Java_pc() { - vmassert(_last_Java_sp != NULL, "no last frame set"); - vmassert(_last_Java_pc == NULL, "already walkable"); _last_Java_pc = (address)_last_Java_sp[-1]; + vmassert(walkable(), "something went wrong"); } diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/frame_x86.inline.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/x86/frame_x86.inline.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/frame_x86.inline.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/frame_x86.inline.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -138,10 +138,13 @@ inline bool frame::is_older(intptr_t* id) const { assert(this->id() != NULL && id != NULL, "NULL frame id"); return this->id() > id ; } - - inline intptr_t* frame::link() const { return (intptr_t*) *(intptr_t **)addr_at(link_offset); } +inline intptr_t* frame::link_or_null() const { + intptr_t** ptr = (intptr_t **)addr_at(link_offset); + return os::is_readable_pointer(ptr) ? *ptr : NULL; +} + inline intptr_t* frame::unextended_sp() const { return _unextended_sp; } // Return address: diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/interp_masm_x86.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/x86/interp_masm_x86.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/interp_masm_x86.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/interp_masm_x86.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1123,7 +1123,7 @@ bind(loop); // check if current entry is used - cmpptr(Address(rmon, BasicObjectLock::obj_offset_in_bytes()), (int32_t) NULL); + cmpptr(Address(rmon, BasicObjectLock::obj_offset_in_bytes()), (int32_t) NULL_WORD); jcc(Assembler::notEqual, exception); addptr(rmon, entry_size); // otherwise advance to next entry diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/interpreterRT_x86_64.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/x86/interpreterRT_x86_64.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/interpreterRT_x86_64.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/interpreterRT_x86_64.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 @@ -348,10 +348,10 @@ intptr_t *from_addr = (intptr_t*)(_from + Interpreter::local_offset_in_bytes(0)); _from -= Interpreter::stackElementSize; if (_num_args < Argument::n_int_register_parameters_c-1) { - *_reg_args++ = (*from_addr == 0) ? NULL : (intptr_t) from_addr; + *_reg_args++ = (*from_addr == 0) ? NULL_WORD : (intptr_t) from_addr; _num_args++; } else { - *_to++ = (*from_addr == 0) ? NULL : (intptr_t) from_addr; + *_to++ = (*from_addr == 0) ? NULL_WORD : (intptr_t) from_addr; } } @@ -443,10 +443,10 @@ _from -= Interpreter::stackElementSize; if (_num_int_args < Argument::n_int_register_parameters_c-1) { - *_int_args++ = (*from_addr == 0) ? NULL : (intptr_t)from_addr; + *_int_args++ = (*from_addr == 0) ? NULL_WORD : (intptr_t)from_addr; _num_int_args++; } else { - *_to++ = (*from_addr == 0) ? NULL : (intptr_t) from_addr; + *_to++ = (*from_addr == 0) ? NULL_WORD : (intptr_t) from_addr; } } diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/javaFrameAnchor_x86.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/x86/javaFrameAnchor_x86.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/javaFrameAnchor_x86.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/javaFrameAnchor_x86.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -63,8 +63,7 @@ } bool walkable(void) { return _last_Java_sp != NULL && _last_Java_pc != NULL; } - void make_walkable(JavaThread* thread); - void capture_last_Java_pc(void); + void make_walkable(); intptr_t* last_Java_sp(void) const { return _last_Java_sp; } diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/macroAssembler_x86.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/x86/macroAssembler_x86.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/macroAssembler_x86.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/macroAssembler_x86.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1171,7 +1171,20 @@ } } +// See 8273459. Function for ensuring 64-byte alignment, intended for stubs only. +// Stub code is generated once and never copied. +// NMethods can't use this because they get copied and we can't force alignment > 32 bytes. +void MacroAssembler::align64() { + align(64, (unsigned long long) pc()); +} + +void MacroAssembler::align32() { + align(32, (unsigned long long) pc()); +} + void MacroAssembler::align(int modulus) { + // 8273459: Ensure alignment is possible with current segment alignment + assert(modulus <= CodeEntryAlignment, "Alignment must be <= CodeEntryAlignment"); align(modulus, offset()); } @@ -4051,7 +4064,7 @@ // Get super_klass value into rax (even if it was in rdi or rcx). bool pushed_rax = false, pushed_rcx = false, pushed_rdi = false; - if (super_klass != rax || UseCompressedOops) { + if (super_klass != rax) { if (!IS_A_TEMP(rax)) { push(rax); pushed_rax = true; } mov(rax, super_klass); } @@ -5269,10 +5282,28 @@ int vector64_count = (cnt & (~0x7)) >> 3; cnt = cnt & 0x7; + const int fill64_per_loop = 4; + const int max_unrolled_fill64 = 8; // 64 byte initialization loop. vpxor(xtmp, xtmp, xtmp, use64byteVector ? AVX_512bit : AVX_256bit); - for (int i = 0; i < vector64_count; i++) { + int start64 = 0; + if (vector64_count > max_unrolled_fill64) { + Label LOOP; + Register index = rtmp; + + start64 = vector64_count - (vector64_count % fill64_per_loop); + + movl(index, 0); + BIND(LOOP); + for (int i = 0; i < fill64_per_loop; i++) { + fill64(Address(base, index, Address::times_1, i * 64), xtmp, use64byteVector); + } + addl(index, fill64_per_loop * 64); + cmpl(index, start64 * 64); + jccb(Assembler::less, LOOP); + } + for (int i = start64; i < vector64_count; i++) { fill64_avx(base, i * 64, xtmp, use64byteVector); } @@ -7096,7 +7127,7 @@ // 128 bits per each of 4 parallel streams. movdqu(xmm0, ExternalAddress(StubRoutines::x86::crc_by128_masks_addr() + 32)); - align(32); + align32(); BIND(L_fold_512b_loop); fold_128bit_crc32(xmm1, xmm0, xmm5, buf, 0); fold_128bit_crc32(xmm2, xmm0, xmm5, buf, 16); @@ -7186,7 +7217,7 @@ // Helper function for AVX 512 CRC32 // Compute CRC32 for < 256B buffers -void MacroAssembler::kernel_crc32_avx512_256B(Register crc, Register buf, Register len, Register key, Register pos, +void MacroAssembler::kernel_crc32_avx512_256B(Register crc, Register buf, Register len, Register table, Register pos, Register tmp1, Register tmp2, Label& L_barrett, Label& L_16B_reduction_loop, Label& L_get_last_two_xmms, Label& L_128_done, Label& L_cleanup) { @@ -7199,7 +7230,7 @@ jcc(Assembler::less, L_less_than_32); // if there is, load the constants - movdqu(xmm10, Address(key, 1 * 16)); //rk1 and rk2 in xmm10 + movdqu(xmm10, Address(table, 1 * 16)); //rk1 and rk2 in xmm10 movdl(xmm0, crc); // get the initial crc value movdqu(xmm7, Address(buf, pos, Address::times_1, 0 * 16)); //load the plaintext pxor(xmm7, xmm0); @@ -7226,7 +7257,7 @@ pxor(xmm7, xmm0); //xor the initial crc value addl(pos, 16); subl(len, 16); - movdqu(xmm10, Address(key, 1 * 16)); // rk1 and rk2 in xmm10 + movdqu(xmm10, Address(table, 1 * 16)); // rk1 and rk2 in xmm10 jmp(L_get_last_two_xmms); bind(L_less_than_16_left); @@ -7346,12 +7377,17 @@ * param crc register containing existing CRC (32-bit) * param buf register pointing to input byte buffer (byte*) * param len register containing number of bytes +* param table address of crc or crc32c table * param tmp1 scratch register * param tmp2 scratch register * return rax result register +* +* This routine is identical for crc32c with the exception of the precomputed constant +* table which will be passed as the table argument. The calculation steps are +* the same for both variants. */ -void MacroAssembler::kernel_crc32_avx512(Register crc, Register buf, Register len, Register key, Register tmp1, Register tmp2) { - assert_different_registers(crc, buf, len, key, tmp1, tmp2, rax); +void MacroAssembler::kernel_crc32_avx512(Register crc, Register buf, Register len, Register table, Register tmp1, Register tmp2) { + assert_different_registers(crc, buf, len, table, tmp1, tmp2, rax, r12); Label L_tail, L_tail_restore, L_tail_loop, L_exit, L_align_loop, L_aligned; Label L_fold_tail, L_fold_128b, L_fold_512b, L_fold_512b_loop, L_fold_tail_loop; @@ -7366,8 +7402,6 @@ // For EVEX with VL and BW, provide a standard mask, VL = 128 will guide the merge // context for the registers used, where all instructions below are using 128-bit mode // On EVEX without VL and BW, these instructions will all be AVX. - lea(key, ExternalAddress(StubRoutines::x86::crc_table_avx512_addr())); - notl(crc); movl(pos, 0); // check if smaller than 256B @@ -7381,7 +7415,7 @@ evmovdquq(xmm0, Address(buf, pos, Address::times_1, 0 * 64), Assembler::AVX_512bit); evmovdquq(xmm4, Address(buf, pos, Address::times_1, 1 * 64), Assembler::AVX_512bit); evpxorq(xmm0, xmm0, xmm10, Assembler::AVX_512bit); - evbroadcasti32x4(xmm10, Address(key, 2 * 16), Assembler::AVX_512bit); //zmm10 has rk3 and rk4 + evbroadcasti32x4(xmm10, Address(table, 2 * 16), Assembler::AVX_512bit); //zmm10 has rk3 and rk4 subl(len, 256); cmpl(len, 256); @@ -7389,7 +7423,7 @@ evmovdquq(xmm7, Address(buf, pos, Address::times_1, 2 * 64), Assembler::AVX_512bit); evmovdquq(xmm8, Address(buf, pos, Address::times_1, 3 * 64), Assembler::AVX_512bit); - evbroadcasti32x4(xmm16, Address(key, 0 * 16), Assembler::AVX_512bit); //zmm16 has rk-1 and rk-2 + evbroadcasti32x4(xmm16, Address(table, 0 * 16), Assembler::AVX_512bit); //zmm16 has rk-1 and rk-2 subl(len, 256); bind(L_fold_256_B_loop); @@ -7435,8 +7469,8 @@ // at this point, the buffer pointer is pointing at the last y Bytes of the buffer, where 0 <= y < 128 // the 128B of folded data is in 8 of the xmm registers : xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7 bind(L_fold_128_B_register); - evmovdquq(xmm16, Address(key, 5 * 16), Assembler::AVX_512bit); // multiply by rk9-rk16 - evmovdquq(xmm11, Address(key, 9 * 16), Assembler::AVX_512bit); // multiply by rk17-rk20, rk1,rk2, 0,0 + evmovdquq(xmm16, Address(table, 5 * 16), Assembler::AVX_512bit); // multiply by rk9-rk16 + evmovdquq(xmm11, Address(table, 9 * 16), Assembler::AVX_512bit); // multiply by rk17-rk20, rk1,rk2, 0,0 evpclmulqdq(xmm1, xmm0, xmm16, 0x01, Assembler::AVX_512bit); evpclmulqdq(xmm2, xmm0, xmm16, 0x10, Assembler::AVX_512bit); // save last that has no multiplicand @@ -7445,7 +7479,7 @@ evpclmulqdq(xmm5, xmm4, xmm11, 0x01, Assembler::AVX_512bit); evpclmulqdq(xmm6, xmm4, xmm11, 0x10, Assembler::AVX_512bit); // Needed later in reduction loop - movdqu(xmm10, Address(key, 1 * 16)); + movdqu(xmm10, Address(table, 1 * 16)); vpternlogq(xmm1, 0x96, xmm2, xmm5, Assembler::AVX_512bit); // xor ABC vpternlogq(xmm1, 0x96, xmm6, xmm7, Assembler::AVX_512bit); // xor ABC @@ -7461,7 +7495,7 @@ jcc(Assembler::less, L_final_reduction_for_128); bind(L_16B_reduction_loop); - vpclmulqdq(xmm8, xmm7, xmm10, 0x1); + vpclmulqdq(xmm8, xmm7, xmm10, 0x01); vpclmulqdq(xmm7, xmm7, xmm10, 0x10); vpxor(xmm7, xmm7, xmm8, Assembler::AVX_128bit); movdqu(xmm0, Address(buf, pos, Address::times_1, 0 * 16)); @@ -7492,14 +7526,14 @@ vpshufb(xmm2, xmm2, xmm0, Assembler::AVX_128bit); blendvpb(xmm2, xmm2, xmm1, xmm0, Assembler::AVX_128bit); - vpclmulqdq(xmm8, xmm7, xmm10, 0x1); + vpclmulqdq(xmm8, xmm7, xmm10, 0x01); vpclmulqdq(xmm7, xmm7, xmm10, 0x10); vpxor(xmm7, xmm7, xmm8, Assembler::AVX_128bit); vpxor(xmm7, xmm7, xmm2, Assembler::AVX_128bit); bind(L_128_done); // compute crc of a 128-bit value - movdqu(xmm10, Address(key, 3 * 16)); + movdqu(xmm10, Address(table, 3 * 16)); movdqu(xmm0, xmm7); // 64b fold @@ -7515,14 +7549,14 @@ jmp(L_barrett); bind(L_less_than_256); - kernel_crc32_avx512_256B(crc, buf, len, key, pos, tmp1, tmp2, L_barrett, L_16B_reduction_loop, L_get_last_two_xmms, L_128_done, L_cleanup); + kernel_crc32_avx512_256B(crc, buf, len, table, pos, tmp1, tmp2, L_barrett, L_16B_reduction_loop, L_get_last_two_xmms, L_128_done, L_cleanup); //barrett reduction bind(L_barrett); vpand(xmm7, xmm7, ExternalAddress(StubRoutines::x86::crc_by128_masks_avx512_addr() + 1 * 16), Assembler::AVX_128bit, tmp2); movdqu(xmm1, xmm7); movdqu(xmm2, xmm7); - movdqu(xmm10, Address(key, 4 * 16)); + movdqu(xmm10, Address(table, 4 * 16)); pclmulqdq(xmm7, xmm10, 0x0); pxor(xmm7, xmm2); @@ -7534,7 +7568,6 @@ pextrd(crc, xmm7, 2); bind(L_cleanup); - notl(crc); // ~c addptr(rsp, 16 * 2 + 8); pop(r12); } @@ -8459,23 +8492,29 @@ evmovdqu(type[shift], mask, Address(dst, disp), xmm, Assembler::AVX_256bit); } +void MacroAssembler::fill32(Address dst, XMMRegister xmm) { + assert(MaxVectorSize >= 32, "vector length should be >= 32"); + vmovdqu(dst, xmm); +} void MacroAssembler::fill32_avx(Register dst, int disp, XMMRegister xmm) { - assert(MaxVectorSize >= 32, "vector length should be >= 32"); - vmovdqu(Address(dst, disp), xmm); + fill32(Address(dst, disp), xmm); } -void MacroAssembler::fill64_avx(Register dst, int disp, XMMRegister xmm, bool use64byteVector) { +void MacroAssembler::fill64(Address dst, XMMRegister xmm, bool use64byteVector) { assert(MaxVectorSize >= 32, "vector length should be >= 32"); - BasicType type[] = {T_BYTE, T_SHORT, T_INT, T_LONG}; if (!use64byteVector) { - fill32_avx(dst, disp, xmm); - fill32_avx(dst, disp + 32, xmm); + fill32(dst, xmm); + fill32(dst.plus_disp(32), xmm); } else { - evmovdquq(Address(dst, disp), xmm, Assembler::AVX_512bit); + evmovdquq(dst, xmm, Assembler::AVX_512bit); } } +void MacroAssembler::fill64_avx(Register dst, int disp, XMMRegister xmm, bool use64byteVector) { + fill64(Address(dst, disp), xmm, use64byteVector); +} + #endif //COMPILER2_OR_JVMCI diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/macroAssembler_x86.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/x86/macroAssembler_x86.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/macroAssembler_x86.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/macroAssembler_x86.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -194,6 +194,8 @@ void incrementq(AddressLiteral dst); // Alignment + void align32(); + void align64(); void align(int modulus); void align(int modulus, int target); @@ -1860,8 +1862,12 @@ XMMRegister xmm, KRegister mask, Register length, Register temp); + void fill32(Address dst, XMMRegister xmm); + void fill32_avx(Register dst, int disp, XMMRegister xmm); + void fill64(Address dst, XMMRegister xmm, bool use64byteVector = false); + void fill64_avx(Register dst, int dis, XMMRegister xmm, bool use64byteVector = false); #ifdef _LP64 diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/macroAssembler_x86_adler.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/x86/macroAssembler_x86_adler.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/macroAssembler_x86_adler.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/macroAssembler_x86_adler.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -80,7 +80,7 @@ cmpptr(data, end); jcc(Assembler::aboveEqual, SKIP_LOOP_1A); - align(32); + align32(); bind(SLOOP1A); vbroadcastf128(ydata, Address(data, 0), Assembler::AVX_256bit); addptr(data, CHUNKSIZE); @@ -178,7 +178,7 @@ movdl(rax, xb); addl(b_d, rax); - align(32); + align32(); bind(FINAL_LOOP); movzbl(rax, Address(data, 0)); //movzx eax, byte[data] addl(a_d, rax); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/macroAssembler_x86_aes.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/x86/macroAssembler_x86_aes.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/macroAssembler_x86_aes.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/macroAssembler_x86_aes.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -808,11 +808,14 @@ addptr(pos, 1); addptr(used, 1); decrement(len_reg); - jmp(PRELOOP_START); + jcc(Assembler::notEqual, PRELOOP_START); bind(EXIT_PRELOOP); movl(Address(used_addr, 0), used); + cmpl(len_reg, 0); + jcc(Assembler::equal, EXIT); + // Calculate number of rounds i.e. 10, 12, 14, based on key length(128, 192, 256). movl(rounds, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT))); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/matcher_x86.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/x86/matcher_x86.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/matcher_x86.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/matcher_x86.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -178,11 +178,7 @@ // Some microarchitectures have mask registers used on vectors static const bool has_predicated_vectors(void) { - bool ret_value = false; - if (UseAVX > 2) { - ret_value = VM_Version::supports_avx512vl(); - } - return ret_value; + return VM_Version::supports_evex(); } // true means we have fast l2f convers diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -150,8 +150,8 @@ }; 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 @@ -168,19 +168,19 @@ 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 @@ -201,7 +201,7 @@ __ 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++) { @@ -230,11 +230,12 @@ } } 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); } #if COMPILER2_OR_JVMCI base_addr = XSAVE_AREA_OPMASK_BEGIN; @@ -298,7 +299,7 @@ } #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; @@ -361,7 +362,7 @@ 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; @@ -372,18 +373,18 @@ } #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++) { @@ -412,11 +413,12 @@ } } 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); } #if COMPILER2_OR_JVMCI base_addr = XSAVE_AREA_OPMASK_BEGIN; @@ -2501,7 +2503,7 @@ // 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 @@ -2519,7 +2521,7 @@ // 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); @@ -2538,7 +2540,7 @@ 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); @@ -2585,7 +2587,7 @@ __ 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 @@ -3016,7 +3018,7 @@ 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 @@ -3031,7 +3033,7 @@ } // 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 @@ -3070,7 +3072,7 @@ // Exception pending - RegisterSaver::restore_live_registers(masm, save_vectors); + RegisterSaver::restore_live_registers(masm, save_wide_vectors); __ jump(RuntimeAddress(StubRoutines::forward_exception_entry())); @@ -3143,7 +3145,7 @@ __ 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 @@ -3183,7 +3185,7 @@ 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(); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -2998,7 +2998,7 @@ } address generate_upper_word_mask() { - __ align(64); + __ align64(); StubCodeMark mark(this, "StubRoutines", "upper_word_mask"); address start = __ pc(); __ emit_data(0x00000000, relocInfo::none, 0); @@ -3009,7 +3009,7 @@ } address generate_shuffle_byte_flip_mask() { - __ align(64); + __ align64(); StubCodeMark mark(this, "StubRoutines", "shuffle_byte_flip_mask"); address start = __ pc(); __ emit_data(0x0c0d0e0f, relocInfo::none, 0); @@ -3068,7 +3068,7 @@ } address generate_pshuffle_byte_flip_mask() { - __ align(64); + __ align64(); StubCodeMark mark(this, "StubRoutines", "pshuffle_byte_flip_mask"); address start = __ pc(); __ emit_data(0x00010203, relocInfo::none, 0); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -517,7 +517,7 @@ // make sure this code is only executed if there is a pending exception { Label L; - __ cmpptr(Address(r15_thread, Thread::pending_exception_offset()), (int32_t) NULL); + __ cmpptr(Address(r15_thread, Thread::pending_exception_offset()), (int32_t) NULL_WORD); __ jcc(Assembler::notEqual, L); __ stop("StubRoutines::forward exception: no pending exception (1)"); __ bind(L); @@ -1484,7 +1484,7 @@ __ subq(temp1, loop_size[shift]); // Main loop with aligned copy block size of 192 bytes at 32 byte granularity. - __ align(32); + __ align32(); __ BIND(L_main_loop); __ copy64_avx(to, from, temp4, xmm1, false, shift, 0); __ copy64_avx(to, from, temp4, xmm1, false, shift, 64); @@ -1551,7 +1551,7 @@ // Main loop with aligned copy block size of 192 bytes at // 64 byte copy granularity. - __ align(32); + __ align32(); __ BIND(L_main_loop_64bytes); __ copy64_avx(to, from, temp4, xmm1, false, shift, 0 , true); __ copy64_avx(to, from, temp4, xmm1, false, shift, 64, true); @@ -1691,7 +1691,7 @@ __ BIND(L_main_pre_loop); // Main loop with aligned copy block size of 192 bytes at 32 byte granularity. - __ align(32); + __ align32(); __ BIND(L_main_loop); __ copy64_avx(to, from, temp1, xmm1, true, shift, -64); __ copy64_avx(to, from, temp1, xmm1, true, shift, -128); @@ -1724,7 +1724,7 @@ // Main loop with aligned copy block size of 192 bytes at // 64 byte copy granularity. - __ align(32); + __ align32(); __ BIND(L_main_loop_64bytes); __ copy64_avx(to, from, temp1, xmm1, true, shift, -64 , true); __ copy64_avx(to, from, temp1, xmm1, true, shift, -128, true); @@ -4194,7 +4194,7 @@ } address generate_upper_word_mask() { - __ align(64); + __ align64(); StubCodeMark mark(this, "StubRoutines", "upper_word_mask"); address start = __ pc(); __ emit_data64(0x0000000000000000, relocInfo::none); @@ -4203,7 +4203,7 @@ } address generate_shuffle_byte_flip_mask() { - __ align(64); + __ align64(); StubCodeMark mark(this, "StubRoutines", "shuffle_byte_flip_mask"); address start = __ pc(); __ emit_data64(0x08090a0b0c0d0e0f, relocInfo::none); @@ -4248,7 +4248,7 @@ } address generate_pshuffle_byte_flip_mask() { - __ align(64); + __ align64(); StubCodeMark mark(this, "StubRoutines", "pshuffle_byte_flip_mask"); address start = __ pc(); __ emit_data64(0x0405060700010203, relocInfo::none); @@ -4274,7 +4274,7 @@ //Mask for byte-swapping a couple of qwords in an XMM register using (v)pshufb. address generate_pshuffle_byte_flip_mask_sha512() { - __ align(32); + __ align32(); StubCodeMark mark(this, "StubRoutines", "pshuffle_byte_flip_mask_sha512"); address start = __ pc(); if (VM_Version::supports_avx2()) { @@ -4370,7 +4370,7 @@ // This mask is used for incrementing counter value(linc0, linc4, etc.) address counter_mask_addr() { - __ align(64); + __ align64(); StubCodeMark mark(this, "StubRoutines", "counter_mask_addr"); address start = __ pc(); __ emit_data64(0x08090a0b0c0d0e0f, relocInfo::none);//lbswapmask @@ -5287,164 +5287,691 @@ return start; } - //base64 character set - address base64_charset_addr() { + address base64_shuffle_addr() + { + __ align64(); + StubCodeMark mark(this, "StubRoutines", "shuffle_base64"); + address start = __ pc(); + assert(((unsigned long long)start & 0x3f) == 0, + "Alignment problem (0x%08llx)", (unsigned long long)start); + __ emit_data64(0x0405030401020001, relocInfo::none); + __ emit_data64(0x0a0b090a07080607, relocInfo::none); + __ emit_data64(0x10110f100d0e0c0d, relocInfo::none); + __ emit_data64(0x1617151613141213, relocInfo::none); + __ emit_data64(0x1c1d1b1c191a1819, relocInfo::none); + __ emit_data64(0x222321221f201e1f, relocInfo::none); + __ emit_data64(0x2829272825262425, relocInfo::none); + __ emit_data64(0x2e2f2d2e2b2c2a2b, relocInfo::none); + return start; + } + + address base64_avx2_shuffle_addr() + { + __ align32(); + StubCodeMark mark(this, "StubRoutines", "avx2_shuffle_base64"); + address start = __ pc(); + __ emit_data64(0x0809070805060405, relocInfo::none); + __ emit_data64(0x0e0f0d0e0b0c0a0b, relocInfo::none); + __ emit_data64(0x0405030401020001, relocInfo::none); + __ emit_data64(0x0a0b090a07080607, relocInfo::none); + return start; + } + + address base64_avx2_input_mask_addr() + { + __ align32(); + StubCodeMark mark(this, "StubRoutines", "avx2_input_mask_base64"); + address start = __ pc(); + __ emit_data64(0x8000000000000000, relocInfo::none); + __ emit_data64(0x8000000080000000, relocInfo::none); + __ emit_data64(0x8000000080000000, relocInfo::none); + __ emit_data64(0x8000000080000000, relocInfo::none); + return start; + } + + address base64_avx2_lut_addr() + { + __ align32(); + StubCodeMark mark(this, "StubRoutines", "avx2_lut_base64"); + address start = __ pc(); + __ emit_data64(0xfcfcfcfcfcfc4741, relocInfo::none); + __ emit_data64(0x0000f0edfcfcfcfc, relocInfo::none); + __ emit_data64(0xfcfcfcfcfcfc4741, relocInfo::none); + __ emit_data64(0x0000f0edfcfcfcfc, relocInfo::none); + + // URL LUT + __ emit_data64(0xfcfcfcfcfcfc4741, relocInfo::none); + __ emit_data64(0x000020effcfcfcfc, relocInfo::none); + __ emit_data64(0xfcfcfcfcfcfc4741, relocInfo::none); + __ emit_data64(0x000020effcfcfcfc, relocInfo::none); + return start; + } + + address base64_encoding_table_addr() + { + __ align64(); + StubCodeMark mark(this, "StubRoutines", "encoding_table_base64"); + address start = __ pc(); + assert(((unsigned long long)start & 0x3f) == 0, "Alignment problem (0x%08llx)", (unsigned long long)start); + __ emit_data64(0x4847464544434241, relocInfo::none); + __ emit_data64(0x504f4e4d4c4b4a49, relocInfo::none); + __ emit_data64(0x5857565554535251, relocInfo::none); + __ emit_data64(0x6665646362615a59, relocInfo::none); + __ emit_data64(0x6e6d6c6b6a696867, relocInfo::none); + __ emit_data64(0x767574737271706f, relocInfo::none); + __ emit_data64(0x333231307a797877, relocInfo::none); + __ emit_data64(0x2f2b393837363534, relocInfo::none); + + // URL table + __ emit_data64(0x4847464544434241, relocInfo::none); + __ emit_data64(0x504f4e4d4c4b4a49, relocInfo::none); + __ emit_data64(0x5857565554535251, relocInfo::none); + __ emit_data64(0x6665646362615a59, relocInfo::none); + __ emit_data64(0x6e6d6c6b6a696867, relocInfo::none); + __ emit_data64(0x767574737271706f, relocInfo::none); + __ emit_data64(0x333231307a797877, relocInfo::none); + __ emit_data64(0x5f2d393837363534, relocInfo::none); + return start; + } + + // Code for generating Base64 encoding. + // Intrinsic function prototype in Base64.java: + // private void encodeBlock(byte[] src, int sp, int sl, byte[] dst, int dp, + // boolean isURL) { + address generate_base64_encodeBlock() + { __ align(CodeEntryAlignment); - StubCodeMark mark(this, "StubRoutines", "base64_charset"); + StubCodeMark mark(this, "StubRoutines", "implEncode"); address start = __ pc(); - __ emit_data64(0x0000004200000041, relocInfo::none); - __ emit_data64(0x0000004400000043, relocInfo::none); - __ emit_data64(0x0000004600000045, relocInfo::none); - __ emit_data64(0x0000004800000047, relocInfo::none); - __ emit_data64(0x0000004a00000049, relocInfo::none); - __ emit_data64(0x0000004c0000004b, relocInfo::none); - __ emit_data64(0x0000004e0000004d, relocInfo::none); - __ emit_data64(0x000000500000004f, relocInfo::none); - __ emit_data64(0x0000005200000051, relocInfo::none); - __ emit_data64(0x0000005400000053, relocInfo::none); - __ emit_data64(0x0000005600000055, relocInfo::none); - __ emit_data64(0x0000005800000057, relocInfo::none); - __ emit_data64(0x0000005a00000059, relocInfo::none); - __ emit_data64(0x0000006200000061, relocInfo::none); - __ emit_data64(0x0000006400000063, relocInfo::none); - __ emit_data64(0x0000006600000065, relocInfo::none); - __ emit_data64(0x0000006800000067, relocInfo::none); - __ emit_data64(0x0000006a00000069, relocInfo::none); - __ emit_data64(0x0000006c0000006b, relocInfo::none); - __ emit_data64(0x0000006e0000006d, relocInfo::none); - __ emit_data64(0x000000700000006f, relocInfo::none); - __ emit_data64(0x0000007200000071, relocInfo::none); - __ emit_data64(0x0000007400000073, relocInfo::none); - __ emit_data64(0x0000007600000075, relocInfo::none); - __ emit_data64(0x0000007800000077, relocInfo::none); - __ emit_data64(0x0000007a00000079, relocInfo::none); - __ emit_data64(0x0000003100000030, relocInfo::none); - __ emit_data64(0x0000003300000032, relocInfo::none); - __ emit_data64(0x0000003500000034, relocInfo::none); - __ emit_data64(0x0000003700000036, relocInfo::none); - __ emit_data64(0x0000003900000038, relocInfo::none); - __ emit_data64(0x0000002f0000002b, relocInfo::none); - return start; - } + __ enter(); - //base64 url character set - address base64url_charset_addr() { - __ align(CodeEntryAlignment); - StubCodeMark mark(this, "StubRoutines", "base64url_charset"); - address start = __ pc(); - __ emit_data64(0x0000004200000041, relocInfo::none); - __ emit_data64(0x0000004400000043, relocInfo::none); - __ emit_data64(0x0000004600000045, relocInfo::none); - __ emit_data64(0x0000004800000047, relocInfo::none); - __ emit_data64(0x0000004a00000049, relocInfo::none); - __ emit_data64(0x0000004c0000004b, relocInfo::none); - __ emit_data64(0x0000004e0000004d, relocInfo::none); - __ emit_data64(0x000000500000004f, relocInfo::none); - __ emit_data64(0x0000005200000051, relocInfo::none); - __ emit_data64(0x0000005400000053, relocInfo::none); - __ emit_data64(0x0000005600000055, relocInfo::none); - __ emit_data64(0x0000005800000057, relocInfo::none); - __ emit_data64(0x0000005a00000059, relocInfo::none); - __ emit_data64(0x0000006200000061, relocInfo::none); - __ emit_data64(0x0000006400000063, relocInfo::none); - __ emit_data64(0x0000006600000065, relocInfo::none); - __ emit_data64(0x0000006800000067, relocInfo::none); - __ emit_data64(0x0000006a00000069, relocInfo::none); - __ emit_data64(0x0000006c0000006b, relocInfo::none); - __ emit_data64(0x0000006e0000006d, relocInfo::none); - __ emit_data64(0x000000700000006f, relocInfo::none); - __ emit_data64(0x0000007200000071, relocInfo::none); - __ emit_data64(0x0000007400000073, relocInfo::none); - __ emit_data64(0x0000007600000075, relocInfo::none); - __ emit_data64(0x0000007800000077, relocInfo::none); - __ emit_data64(0x0000007a00000079, relocInfo::none); - __ emit_data64(0x0000003100000030, relocInfo::none); - __ emit_data64(0x0000003300000032, relocInfo::none); - __ emit_data64(0x0000003500000034, relocInfo::none); - __ emit_data64(0x0000003700000036, relocInfo::none); - __ emit_data64(0x0000003900000038, relocInfo::none); - __ emit_data64(0x0000005f0000002d, relocInfo::none); + // Save callee-saved registers before using them + __ push(r12); + __ push(r13); + __ push(r14); + __ push(r15); - return start; - } + // arguments + const Register source = c_rarg0; // Source Array + const Register start_offset = c_rarg1; // start offset + const Register end_offset = c_rarg2; // end offset + const Register dest = c_rarg3; // destination array - address base64_bswap_mask_addr() { - __ align(CodeEntryAlignment); - StubCodeMark mark(this, "StubRoutines", "bswap_mask_base64"); - address start = __ pc(); - __ emit_data64(0x0504038002010080, relocInfo::none); - __ emit_data64(0x0b0a098008070680, relocInfo::none); - __ emit_data64(0x0908078006050480, relocInfo::none); - __ emit_data64(0x0f0e0d800c0b0a80, relocInfo::none); - __ emit_data64(0x0605048003020180, relocInfo::none); - __ emit_data64(0x0c0b0a8009080780, relocInfo::none); - __ emit_data64(0x0504038002010080, relocInfo::none); - __ emit_data64(0x0b0a098008070680, relocInfo::none); +#ifndef _WIN64 + const Register dp = c_rarg4; // Position for writing to dest array + const Register isURL = c_rarg5; // Base64 or URL character set +#else + const Address dp_mem(rbp, 6 * wordSize); // length is on stack on Win64 + const Address isURL_mem(rbp, 7 * wordSize); + const Register isURL = r10; // pick the volatile windows register + const Register dp = r12; + __ movl(dp, dp_mem); + __ movl(isURL, isURL_mem); +#endif + + const Register length = r14; + const Register encode_table = r13; + Label L_process3, L_exit, L_processdata, L_vbmiLoop, L_not512, L_32byteLoop; + + // calculate length from offsets + __ movl(length, end_offset); + __ subl(length, start_offset); + __ cmpl(length, 0); + __ jcc(Assembler::lessEqual, L_exit); + + // Code for 512-bit VBMI encoding. Encodes 48 input bytes into 64 + // output bytes. We read 64 input bytes and ignore the last 16, so be + // sure not to read past the end of the input buffer. + if (VM_Version::supports_avx512_vbmi()) { + __ cmpl(length, 64); // Do not overrun input buffer. + __ jcc(Assembler::below, L_not512); + + __ shll(isURL, 6); // index into decode table based on isURL + __ lea(encode_table, ExternalAddress(StubRoutines::x86::base64_encoding_table_addr())); + __ addptr(encode_table, isURL); + __ shrl(isURL, 6); // restore isURL + + __ mov64(rax, 0x3036242a1016040aull); // Shifts + __ evmovdquq(xmm3, ExternalAddress(StubRoutines::x86::base64_shuffle_addr()), Assembler::AVX_512bit, r15); + __ evmovdquq(xmm2, Address(encode_table, 0), Assembler::AVX_512bit); + __ evpbroadcastq(xmm1, rax, Assembler::AVX_512bit); + + __ align32(); + __ BIND(L_vbmiLoop); + + __ vpermb(xmm0, xmm3, Address(source, start_offset), Assembler::AVX_512bit); + __ subl(length, 48); + + // Put the input bytes into the proper lanes for writing, then + // encode them. + __ evpmultishiftqb(xmm0, xmm1, xmm0, Assembler::AVX_512bit); + __ vpermb(xmm0, xmm0, xmm2, Assembler::AVX_512bit); + + // Write to destination + __ evmovdquq(Address(dest, dp), xmm0, Assembler::AVX_512bit); + + __ addptr(dest, 64); + __ addptr(source, 48); + __ cmpl(length, 64); + __ jcc(Assembler::aboveEqual, L_vbmiLoop); + + __ vzeroupper(); + } + + __ BIND(L_not512); + if (VM_Version::supports_avx2() + && VM_Version::supports_avx512vlbw()) { + /* + ** This AVX2 encoder is based off the paper at: + ** https://dl.acm.org/doi/10.1145/3132709 + ** + ** We use AVX2 SIMD instructions to encode 24 bytes into 32 + ** output bytes. + ** + */ + // Lengths under 32 bytes are done with scalar routine + __ cmpl(length, 31); + __ jcc(Assembler::belowEqual, L_process3); + + // Set up supporting constant table data + __ vmovdqu(xmm9, ExternalAddress(StubRoutines::x86::base64_avx2_shuffle_addr()), rax); + // 6-bit mask for 2nd and 4th (and multiples) 6-bit values + __ movl(rax, 0x0fc0fc00); + __ vmovdqu(xmm1, ExternalAddress(StubRoutines::x86::base64_avx2_input_mask_addr()), rax); + __ evpbroadcastd(xmm8, rax, Assembler::AVX_256bit); + + // Multiplication constant for "shifting" right by 6 and 10 + // bits + __ movl(rax, 0x04000040); + + __ subl(length, 24); + __ evpbroadcastd(xmm7, rax, Assembler::AVX_256bit); + + // For the first load, we mask off reading of the first 4 + // bytes into the register. This is so we can get 4 3-byte + // chunks into each lane of the register, avoiding having to + // handle end conditions. We then shuffle these bytes into a + // specific order so that manipulation is easier. + // + // The initial read loads the XMM register like this: + // + // Lower 128-bit lane: + // +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ + // | XX | XX | XX | XX | A0 | A1 | A2 | B0 | B1 | B2 | C0 | C1 + // | C2 | D0 | D1 | D2 | + // +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ + // + // Upper 128-bit lane: + // +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ + // | E0 | E1 | E2 | F0 | F1 | F2 | G0 | G1 | G2 | H0 | H1 | H2 + // | XX | XX | XX | XX | + // +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ + // + // Where A0 is the first input byte, B0 is the fourth, etc. + // The alphabetical significance denotes the 3 bytes to be + // consumed and encoded into 4 bytes. + // + // We then shuffle the register so each 32-bit word contains + // the sequence: + // A1 A0 A2 A1, B1, B0, B2, B1, etc. + // Each of these byte sequences are then manipulated into 4 + // 6-bit values ready for encoding. + // + // If we focus on one set of 3-byte chunks, changing the + // nomenclature such that A0 => a, A1 => b, and A2 => c, we + // shuffle such that each 24-bit chunk contains: + // + // b7 b6 b5 b4 b3 b2 b1 b0 | a7 a6 a5 a4 a3 a2 a1 a0 | c7 c6 + // c5 c4 c3 c2 c1 c0 | b7 b6 b5 b4 b3 b2 b1 b0 + // Explain this step. + // b3 b2 b1 b0 c5 c4 c3 c2 | c1 c0 d5 d4 d3 d2 d1 d0 | a5 a4 + // a3 a2 a1 a0 b5 b4 | b3 b2 b1 b0 c5 c4 c3 c2 + // + // W first and off all but bits 4-9 and 16-21 (c5..c0 and + // a5..a0) and shift them using a vector multiplication + // operation (vpmulhuw) which effectively shifts c right by 6 + // bits and a right by 10 bits. We similarly mask bits 10-15 + // (d5..d0) and 22-27 (b5..b0) and shift them left by 8 and 4 + // bits respecively. This is done using vpmullw. We end up + // with 4 6-bit values, thus splitting the 3 input bytes, + // ready for encoding: + // 0 0 d5..d0 0 0 c5..c0 0 0 b5..b0 0 0 a5..a0 + // + // For translation, we recognize that there are 5 distinct + // ranges of legal Base64 characters as below: + // + // +-------------+-------------+------------+ + // | 6-bit value | ASCII range | offset | + // +-------------+-------------+------------+ + // | 0..25 | A..Z | 65 | + // | 26..51 | a..z | 71 | + // | 52..61 | 0..9 | -4 | + // | 62 | + or - | -19 or -17 | + // | 63 | / or _ | -16 or 32 | + // +-------------+-------------+------------+ + // + // We note that vpshufb does a parallel lookup in a + // destination register using the lower 4 bits of bytes from a + // source register. If we use a saturated subtraction and + // subtract 51 from each 6-bit value, bytes from [0,51] + // saturate to 0, and [52,63] map to a range of [1,12]. We + // distinguish the [0,25] and [26,51] ranges by assigning a + // value of 13 for all 6-bit values less than 26. We end up + // with: + // + // +-------------+-------------+------------+ + // | 6-bit value | Reduced | offset | + // +-------------+-------------+------------+ + // | 0..25 | 13 | 65 | + // | 26..51 | 0 | 71 | + // | 52..61 | 0..9 | -4 | + // | 62 | 11 | -19 or -17 | + // | 63 | 12 | -16 or 32 | + // +-------------+-------------+------------+ + // + // We then use a final vpshufb to add the appropriate offset, + // translating the bytes. + // + // Load input bytes - only 28 bytes. Mask the first load to + // not load into the full register. + __ vpmaskmovd(xmm1, xmm1, Address(source, start_offset, Address::times_1, -4), Assembler::AVX_256bit); + + // Move 3-byte chunks of input (12 bytes) into 16 bytes, + // ordering by: + // 1, 0, 2, 1; 4, 3, 5, 4; etc. This groups 6-bit chunks + // for easy masking + __ vpshufb(xmm1, xmm1, xmm9, Assembler::AVX_256bit); + + __ addl(start_offset, 24); + + // Load masking register for first and third (and multiples) + // 6-bit values. + __ movl(rax, 0x003f03f0); + __ evpbroadcastd(xmm6, rax, Assembler::AVX_256bit); + // Multiplication constant for "shifting" left by 4 and 8 bits + __ movl(rax, 0x01000010); + __ evpbroadcastd(xmm5, rax, Assembler::AVX_256bit); + + // Isolate 6-bit chunks of interest + __ vpand(xmm0, xmm8, xmm1, Assembler::AVX_256bit); + + // Load constants for encoding + __ movl(rax, 0x19191919); + __ evpbroadcastd(xmm3, rax, Assembler::AVX_256bit); + __ movl(rax, 0x33333333); + __ evpbroadcastd(xmm4, rax, Assembler::AVX_256bit); + + // Shift output bytes 0 and 2 into proper lanes + __ vpmulhuw(xmm2, xmm0, xmm7, Assembler::AVX_256bit); + + // Mask and shift output bytes 1 and 3 into proper lanes and + // combine + __ vpand(xmm0, xmm6, xmm1, Assembler::AVX_256bit); + __ vpmullw(xmm0, xmm5, xmm0, Assembler::AVX_256bit); + __ vpor(xmm0, xmm0, xmm2, Assembler::AVX_256bit); + + // Find out which are 0..25. This indicates which input + // values fall in the range of 'A'-'Z', which require an + // additional offset (see comments above) + __ vpcmpgtb(xmm2, xmm0, xmm3, Assembler::AVX_256bit); + __ vpsubusb(xmm1, xmm0, xmm4, Assembler::AVX_256bit); + __ vpsubb(xmm1, xmm1, xmm2, Assembler::AVX_256bit); + + // Load the proper lookup table + __ lea(r11, ExternalAddress(StubRoutines::x86::base64_avx2_lut_addr())); + __ movl(r15, isURL); + __ shll(r15, 5); + __ vmovdqu(xmm2, Address(r11, r15)); + + // Shuffle the offsets based on the range calculation done + // above. This allows us to add the correct offset to the + // 6-bit value corresponding to the range documented above. + __ vpshufb(xmm1, xmm2, xmm1, Assembler::AVX_256bit); + __ vpaddb(xmm0, xmm1, xmm0, Assembler::AVX_256bit); + + // Store the encoded bytes + __ vmovdqu(Address(dest, dp), xmm0); + __ addl(dp, 32); + + __ cmpl(length, 31); + __ jcc(Assembler::belowEqual, L_process3); + + __ align32(); + __ BIND(L_32byteLoop); + + // Get next 32 bytes + __ vmovdqu(xmm1, Address(source, start_offset, Address::times_1, -4)); + + __ subl(length, 24); + __ addl(start_offset, 24); + + // This logic is identical to the above, with only constant + // register loads removed. Shuffle the input, mask off 6-bit + // chunks, shift them into place, then add the offset to + // encode. + __ vpshufb(xmm1, xmm1, xmm9, Assembler::AVX_256bit); + + __ vpand(xmm0, xmm8, xmm1, Assembler::AVX_256bit); + __ vpmulhuw(xmm10, xmm0, xmm7, Assembler::AVX_256bit); + __ vpand(xmm0, xmm6, xmm1, Assembler::AVX_256bit); + __ vpmullw(xmm0, xmm5, xmm0, Assembler::AVX_256bit); + __ vpor(xmm0, xmm0, xmm10, Assembler::AVX_256bit); + __ vpcmpgtb(xmm10, xmm0, xmm3, Assembler::AVX_256bit); + __ vpsubusb(xmm1, xmm0, xmm4, Assembler::AVX_256bit); + __ vpsubb(xmm1, xmm1, xmm10, Assembler::AVX_256bit); + __ vpshufb(xmm1, xmm2, xmm1, Assembler::AVX_256bit); + __ vpaddb(xmm0, xmm1, xmm0, Assembler::AVX_256bit); + + // Store the encoded bytes + __ vmovdqu(Address(dest, dp), xmm0); + __ addl(dp, 32); + + __ cmpl(length, 31); + __ jcc(Assembler::above, L_32byteLoop); + + __ BIND(L_process3); + __ vzeroupper(); + } else { + __ BIND(L_process3); + } + __ cmpl(length, 3); + __ jcc(Assembler::below, L_exit); + + // Load the encoding table based on isURL + __ lea(r11, ExternalAddress(StubRoutines::x86::base64_encoding_table_addr())); + __ movl(r15, isURL); + __ shll(r15, 6); + __ addptr(r11, r15); + + __ BIND(L_processdata); + + // Load 3 bytes + __ load_unsigned_byte(r15, Address(source, start_offset)); + __ load_unsigned_byte(r10, Address(source, start_offset, Address::times_1, 1)); + __ load_unsigned_byte(r13, Address(source, start_offset, Address::times_1, 2)); + + // Build a 32-bit word with bytes 1, 2, 0, 1 + __ movl(rax, r10); + __ shll(r10, 24); + __ orl(rax, r10); + + __ subl(length, 3); + + __ shll(r15, 8); + __ shll(r13, 16); + __ orl(rax, r15); + + __ addl(start_offset, 3); + + __ orl(rax, r13); + // At this point, rax contains | byte1 | byte2 | byte0 | byte1 + // r13 has byte2 << 16 - need low-order 6 bits to translate. + // This translated byte is the fourth output byte. + __ shrl(r13, 16); + __ andl(r13, 0x3f); + + // The high-order 6 bits of r15 (byte0) is translated. + // The translated byte is the first output byte. + __ shrl(r15, 10); + + __ load_unsigned_byte(r13, Address(r11, r13)); + __ load_unsigned_byte(r15, Address(r11, r15)); + + __ movb(Address(dest, dp, Address::times_1, 3), r13); + + // Extract high-order 4 bits of byte1 and low-order 2 bits of byte0. + // This translated byte is the second output byte. + __ shrl(rax, 4); + __ movl(r10, rax); + __ andl(rax, 0x3f); + + __ movb(Address(dest, dp, Address::times_1, 0), r15); + + __ load_unsigned_byte(rax, Address(r11, rax)); + + // Extract low-order 2 bits of byte1 and high-order 4 bits of byte2. + // This translated byte is the third output byte. + __ shrl(r10, 18); + __ andl(r10, 0x3f); + + __ load_unsigned_byte(r10, Address(r11, r10)); + + __ movb(Address(dest, dp, Address::times_1, 1), rax); + __ movb(Address(dest, dp, Address::times_1, 2), r10); + + __ addl(dp, 4); + __ cmpl(length, 3); + __ jcc(Assembler::aboveEqual, L_processdata); + + __ BIND(L_exit); + __ pop(r15); + __ pop(r14); + __ pop(r13); + __ pop(r12); + __ leave(); + __ ret(0); return start; } - address base64_right_shift_mask_addr() { - __ align(CodeEntryAlignment); - StubCodeMark mark(this, "StubRoutines", "right_shift_mask"); - address start = __ pc(); - __ emit_data64(0x0006000400020000, relocInfo::none); - __ emit_data64(0x0006000400020000, relocInfo::none); - __ emit_data64(0x0006000400020000, relocInfo::none); - __ emit_data64(0x0006000400020000, relocInfo::none); - __ emit_data64(0x0006000400020000, relocInfo::none); - __ emit_data64(0x0006000400020000, relocInfo::none); - __ emit_data64(0x0006000400020000, relocInfo::none); - __ emit_data64(0x0006000400020000, relocInfo::none); - + // base64 AVX512vbmi tables + address base64_vbmi_lookup_lo_addr() { + __ align64(); + StubCodeMark mark(this, "StubRoutines", "lookup_lo_base64"); + address start = __ pc(); + assert(((unsigned long long)start & 0x3f) == 0, + "Alignment problem (0x%08llx)", (unsigned long long)start); + __ emit_data64(0x8080808080808080, relocInfo::none); + __ emit_data64(0x8080808080808080, relocInfo::none); + __ emit_data64(0x8080808080808080, relocInfo::none); + __ emit_data64(0x8080808080808080, relocInfo::none); + __ emit_data64(0x8080808080808080, relocInfo::none); + __ emit_data64(0x3f8080803e808080, relocInfo::none); + __ emit_data64(0x3b3a393837363534, relocInfo::none); + __ emit_data64(0x8080808080803d3c, relocInfo::none); + return start; + } + + address base64_vbmi_lookup_hi_addr() { + __ align64(); + StubCodeMark mark(this, "StubRoutines", "lookup_hi_base64"); + address start = __ pc(); + assert(((unsigned long long)start & 0x3f) == 0, + "Alignment problem (0x%08llx)", (unsigned long long)start); + __ emit_data64(0x0605040302010080, relocInfo::none); + __ emit_data64(0x0e0d0c0b0a090807, relocInfo::none); + __ emit_data64(0x161514131211100f, relocInfo::none); + __ emit_data64(0x8080808080191817, relocInfo::none); + __ emit_data64(0x201f1e1d1c1b1a80, relocInfo::none); + __ emit_data64(0x2827262524232221, relocInfo::none); + __ emit_data64(0x302f2e2d2c2b2a29, relocInfo::none); + __ emit_data64(0x8080808080333231, relocInfo::none); + return start; + } + address base64_vbmi_lookup_lo_url_addr() { + __ align64(); + StubCodeMark mark(this, "StubRoutines", "lookup_lo_base64url"); + address start = __ pc(); + assert(((unsigned long long)start & 0x3f) == 0, + "Alignment problem (0x%08llx)", (unsigned long long)start); + __ emit_data64(0x8080808080808080, relocInfo::none); + __ emit_data64(0x8080808080808080, relocInfo::none); + __ emit_data64(0x8080808080808080, relocInfo::none); + __ emit_data64(0x8080808080808080, relocInfo::none); + __ emit_data64(0x8080808080808080, relocInfo::none); + __ emit_data64(0x80803e8080808080, relocInfo::none); + __ emit_data64(0x3b3a393837363534, relocInfo::none); + __ emit_data64(0x8080808080803d3c, relocInfo::none); + return start; + } + + address base64_vbmi_lookup_hi_url_addr() { + __ align64(); + StubCodeMark mark(this, "StubRoutines", "lookup_hi_base64url"); + address start = __ pc(); + assert(((unsigned long long)start & 0x3f) == 0, + "Alignment problem (0x%08llx)", (unsigned long long)start); + __ emit_data64(0x0605040302010080, relocInfo::none); + __ emit_data64(0x0e0d0c0b0a090807, relocInfo::none); + __ emit_data64(0x161514131211100f, relocInfo::none); + __ emit_data64(0x3f80808080191817, relocInfo::none); + __ emit_data64(0x201f1e1d1c1b1a80, relocInfo::none); + __ emit_data64(0x2827262524232221, relocInfo::none); + __ emit_data64(0x302f2e2d2c2b2a29, relocInfo::none); + __ emit_data64(0x8080808080333231, relocInfo::none); + return start; + } + + address base64_vbmi_pack_vec_addr() { + __ align64(); + StubCodeMark mark(this, "StubRoutines", "pack_vec_base64"); + address start = __ pc(); + assert(((unsigned long long)start & 0x3f) == 0, + "Alignment problem (0x%08llx)", (unsigned long long)start); + __ emit_data64(0x090a040506000102, relocInfo::none); + __ emit_data64(0x161011120c0d0e08, relocInfo::none); + __ emit_data64(0x1c1d1e18191a1415, relocInfo::none); + __ emit_data64(0x292a242526202122, relocInfo::none); + __ emit_data64(0x363031322c2d2e28, relocInfo::none); + __ emit_data64(0x3c3d3e38393a3435, relocInfo::none); + __ emit_data64(0x0000000000000000, relocInfo::none); + __ emit_data64(0x0000000000000000, relocInfo::none); return start; } - address base64_left_shift_mask_addr() { - __ align(CodeEntryAlignment); - StubCodeMark mark(this, "StubRoutines", "left_shift_mask"); - address start = __ pc(); - __ emit_data64(0x0000000200040000, relocInfo::none); - __ emit_data64(0x0000000200040000, relocInfo::none); - __ emit_data64(0x0000000200040000, relocInfo::none); - __ emit_data64(0x0000000200040000, relocInfo::none); - __ emit_data64(0x0000000200040000, relocInfo::none); - __ emit_data64(0x0000000200040000, relocInfo::none); - __ emit_data64(0x0000000200040000, relocInfo::none); - __ emit_data64(0x0000000200040000, relocInfo::none); + address base64_vbmi_join_0_1_addr() { + __ align64(); + StubCodeMark mark(this, "StubRoutines", "join_0_1_base64"); + address start = __ pc(); + assert(((unsigned long long)start & 0x3f) == 0, + "Alignment problem (0x%08llx)", (unsigned long long)start); + __ emit_data64(0x090a040506000102, relocInfo::none); + __ emit_data64(0x161011120c0d0e08, relocInfo::none); + __ emit_data64(0x1c1d1e18191a1415, relocInfo::none); + __ emit_data64(0x292a242526202122, relocInfo::none); + __ emit_data64(0x363031322c2d2e28, relocInfo::none); + __ emit_data64(0x3c3d3e38393a3435, relocInfo::none); + __ emit_data64(0x494a444546404142, relocInfo::none); + __ emit_data64(0x565051524c4d4e48, relocInfo::none); + return start; + } + address base64_vbmi_join_1_2_addr() { + __ align64(); + StubCodeMark mark(this, "StubRoutines", "join_1_2_base64"); + address start = __ pc(); + assert(((unsigned long long)start & 0x3f) == 0, + "Alignment problem (0x%08llx)", (unsigned long long)start); + __ emit_data64(0x1c1d1e18191a1415, relocInfo::none); + __ emit_data64(0x292a242526202122, relocInfo::none); + __ emit_data64(0x363031322c2d2e28, relocInfo::none); + __ emit_data64(0x3c3d3e38393a3435, relocInfo::none); + __ emit_data64(0x494a444546404142, relocInfo::none); + __ emit_data64(0x565051524c4d4e48, relocInfo::none); + __ emit_data64(0x5c5d5e58595a5455, relocInfo::none); + __ emit_data64(0x696a646566606162, relocInfo::none); return start; } - address base64_and_mask_addr() { - __ align(CodeEntryAlignment); - StubCodeMark mark(this, "StubRoutines", "and_mask"); - address start = __ pc(); - __ emit_data64(0x3f003f003f000000, relocInfo::none); - __ emit_data64(0x3f003f003f000000, relocInfo::none); - __ emit_data64(0x3f003f003f000000, relocInfo::none); - __ emit_data64(0x3f003f003f000000, relocInfo::none); - __ emit_data64(0x3f003f003f000000, relocInfo::none); - __ emit_data64(0x3f003f003f000000, relocInfo::none); - __ emit_data64(0x3f003f003f000000, relocInfo::none); - __ emit_data64(0x3f003f003f000000, relocInfo::none); + address base64_vbmi_join_2_3_addr() { + __ align64(); + StubCodeMark mark(this, "StubRoutines", "join_2_3_base64"); + address start = __ pc(); + assert(((unsigned long long)start & 0x3f) == 0, + "Alignment problem (0x%08llx)", (unsigned long long)start); + __ emit_data64(0x363031322c2d2e28, relocInfo::none); + __ emit_data64(0x3c3d3e38393a3435, relocInfo::none); + __ emit_data64(0x494a444546404142, relocInfo::none); + __ emit_data64(0x565051524c4d4e48, relocInfo::none); + __ emit_data64(0x5c5d5e58595a5455, relocInfo::none); + __ emit_data64(0x696a646566606162, relocInfo::none); + __ emit_data64(0x767071726c6d6e68, relocInfo::none); + __ emit_data64(0x7c7d7e78797a7475, relocInfo::none); return start; } - address base64_gather_mask_addr() { - __ align(CodeEntryAlignment); - StubCodeMark mark(this, "StubRoutines", "gather_mask"); + address base64_decoding_table_addr() { + StubCodeMark mark(this, "StubRoutines", "decoding_table_base64"); address start = __ pc(); __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0x3fffffff3effffff, relocInfo::none); + __ emit_data64(0x3b3a393837363534, relocInfo::none); + __ emit_data64(0xffffffffffff3d3c, relocInfo::none); + __ emit_data64(0x06050403020100ff, relocInfo::none); + __ emit_data64(0x0e0d0c0b0a090807, relocInfo::none); + __ emit_data64(0x161514131211100f, relocInfo::none); + __ emit_data64(0xffffffffff191817, relocInfo::none); + __ emit_data64(0x201f1e1d1c1b1aff, relocInfo::none); + __ emit_data64(0x2827262524232221, relocInfo::none); + __ emit_data64(0x302f2e2d2c2b2a29, relocInfo::none); + __ emit_data64(0xffffffffff333231, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + + // URL table + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffff3effffffffff, relocInfo::none); + __ emit_data64(0x3b3a393837363534, relocInfo::none); + __ emit_data64(0xffffffffffff3d3c, relocInfo::none); + __ emit_data64(0x06050403020100ff, relocInfo::none); + __ emit_data64(0x0e0d0c0b0a090807, relocInfo::none); + __ emit_data64(0x161514131211100f, relocInfo::none); + __ emit_data64(0x3fffffffff191817, relocInfo::none); + __ emit_data64(0x201f1e1d1c1b1aff, relocInfo::none); + __ emit_data64(0x2827262524232221, relocInfo::none); + __ emit_data64(0x302f2e2d2c2b2a29, relocInfo::none); + __ emit_data64(0xffffffffff333231, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); + __ emit_data64(0xffffffffffffffff, relocInfo::none); return start; } -// Code for generating Base64 encoding. + +// Code for generating Base64 decoding. +// +// Based on the article (and associated code) from https://arxiv.org/abs/1910.05109. +// // Intrinsic function prototype in Base64.java: -// private void encodeBlock(byte[] src, int sp, int sl, byte[] dst, int dp, boolean isURL) { - address generate_base64_encodeBlock() { +// private void decodeBlock(byte[] src, int sp, int sl, byte[] dst, int dp, boolean isURL, isMIME) { + address generate_base64_decodeBlock() { __ align(CodeEntryAlignment); - StubCodeMark mark(this, "StubRoutines", "implEncode"); + StubCodeMark mark(this, "StubRoutines", "implDecode"); address start = __ pc(); __ enter(); @@ -5453,16 +5980,19 @@ __ push(r13); __ push(r14); __ push(r15); + __ push(rbx); // arguments const Register source = c_rarg0; // Source Array const Register start_offset = c_rarg1; // start offset const Register end_offset = c_rarg2; // end offset const Register dest = c_rarg3; // destination array + const Register isMIME = rbx; #ifndef _WIN64 const Register dp = c_rarg4; // Position for writing to dest array const Register isURL = c_rarg5;// Base64 or URL character set + __ movl(isMIME, Address(rbp, 2 * wordSize)); #else const Address dp_mem(rbp, 6 * wordSize); // length is on stack on Win64 const Address isURL_mem(rbp, 7 * wordSize); @@ -5470,219 +6000,407 @@ const Register dp = r12; __ movl(dp, dp_mem); __ movl(isURL, isURL_mem); + __ movl(isMIME, Address(rbp, 8 * wordSize)); #endif + const XMMRegister lookup_lo = xmm5; + const XMMRegister lookup_hi = xmm6; + const XMMRegister errorvec = xmm7; + const XMMRegister pack16_op = xmm9; + const XMMRegister pack32_op = xmm8; + const XMMRegister input0 = xmm3; + const XMMRegister input1 = xmm20; + const XMMRegister input2 = xmm21; + const XMMRegister input3 = xmm19; + const XMMRegister join01 = xmm12; + const XMMRegister join12 = xmm11; + const XMMRegister join23 = xmm10; + const XMMRegister translated0 = xmm2; + const XMMRegister translated1 = xmm1; + const XMMRegister translated2 = xmm0; + const XMMRegister translated3 = xmm4; + + const XMMRegister merged0 = xmm2; + const XMMRegister merged1 = xmm1; + const XMMRegister merged2 = xmm0; + const XMMRegister merged3 = xmm4; + const XMMRegister merge_ab_bc0 = xmm2; + const XMMRegister merge_ab_bc1 = xmm1; + const XMMRegister merge_ab_bc2 = xmm0; + const XMMRegister merge_ab_bc3 = xmm4; + + const XMMRegister pack24bits = xmm4; + const Register length = r14; - Label L_process80, L_process32, L_process3, L_exit, L_processdata; + const Register output_size = r13; + const Register output_mask = r15; + const KRegister input_mask = k1; + + const XMMRegister input_initial_valid_b64 = xmm0; + const XMMRegister tmp = xmm10; + const XMMRegister mask = xmm0; + const XMMRegister invalid_b64 = xmm1; + + Label L_process256, L_process64, L_process64Loop, L_exit, L_processdata, L_loadURL; + Label L_continue, L_finalBit, L_padding, L_donePadding, L_bruteForce; + Label L_forceLoop, L_bottomLoop, L_checkMIME, L_exit_no_vzero; // calculate length from offsets __ movl(length, end_offset); __ subl(length, start_offset); - __ cmpl(length, 0); - __ jcc(Assembler::lessEqual, L_exit); + __ push(dest); // Save for return value calc - __ lea(r11, ExternalAddress(StubRoutines::x86::base64_charset_addr())); - // check if base64 charset(isURL=0) or base64 url charset(isURL=1) needs to be loaded - __ cmpl(isURL, 0); - __ jcc(Assembler::equal, L_processdata); - __ lea(r11, ExternalAddress(StubRoutines::x86::base64url_charset_addr())); + // If AVX512 VBMI not supported, just compile non-AVX code + if(VM_Version::supports_avx512_vbmi() && + VM_Version::supports_avx512bw()) { + __ cmpl(length, 128); // 128-bytes is break-even for AVX-512 + __ jcc(Assembler::lessEqual, L_bruteForce); + + __ cmpl(isMIME, 0); + __ jcc(Assembler::notEqual, L_bruteForce); + + // Load lookup tables based on isURL + __ cmpl(isURL, 0); + __ jcc(Assembler::notZero, L_loadURL); + + __ evmovdquq(lookup_lo, ExternalAddress(StubRoutines::x86::base64_vbmi_lookup_lo_addr()), Assembler::AVX_512bit, r13); + __ evmovdquq(lookup_hi, ExternalAddress(StubRoutines::x86::base64_vbmi_lookup_hi_addr()), Assembler::AVX_512bit, r13); + + __ BIND(L_continue); + + __ movl(r15, 0x01400140); + __ evpbroadcastd(pack16_op, r15, Assembler::AVX_512bit); + + __ movl(r15, 0x00011000); + __ evpbroadcastd(pack32_op, r15, Assembler::AVX_512bit); + + __ cmpl(length, 0xff); + __ jcc(Assembler::lessEqual, L_process64); + + // load masks required for decoding data + __ BIND(L_processdata); + __ evmovdquq(join01, ExternalAddress(StubRoutines::x86::base64_vbmi_join_0_1_addr()), Assembler::AVX_512bit,r13); + __ evmovdquq(join12, ExternalAddress(StubRoutines::x86::base64_vbmi_join_1_2_addr()), Assembler::AVX_512bit, r13); + __ evmovdquq(join23, ExternalAddress(StubRoutines::x86::base64_vbmi_join_2_3_addr()), Assembler::AVX_512bit, r13); + + __ align32(); + __ BIND(L_process256); + // Grab input data + __ evmovdquq(input0, Address(source, start_offset, Address::times_1, 0x00), Assembler::AVX_512bit); + __ evmovdquq(input1, Address(source, start_offset, Address::times_1, 0x40), Assembler::AVX_512bit); + __ evmovdquq(input2, Address(source, start_offset, Address::times_1, 0x80), Assembler::AVX_512bit); + __ evmovdquq(input3, Address(source, start_offset, Address::times_1, 0xc0), Assembler::AVX_512bit); + + // Copy the low part of the lookup table into the destination of the permutation + __ evmovdquq(translated0, lookup_lo, Assembler::AVX_512bit); + __ evmovdquq(translated1, lookup_lo, Assembler::AVX_512bit); + __ evmovdquq(translated2, lookup_lo, Assembler::AVX_512bit); + __ evmovdquq(translated3, lookup_lo, Assembler::AVX_512bit); + + // Translate the base64 input into "decoded" bytes + __ evpermt2b(translated0, input0, lookup_hi, Assembler::AVX_512bit); + __ evpermt2b(translated1, input1, lookup_hi, Assembler::AVX_512bit); + __ evpermt2b(translated2, input2, lookup_hi, Assembler::AVX_512bit); + __ evpermt2b(translated3, input3, lookup_hi, Assembler::AVX_512bit); + + // OR all of the translations together to check for errors (high-order bit of byte set) + __ vpternlogd(input0, 0xfe, input1, input2, Assembler::AVX_512bit); + + __ vpternlogd(input3, 0xfe, translated0, translated1, Assembler::AVX_512bit); + __ vpternlogd(input0, 0xfe, translated2, translated3, Assembler::AVX_512bit); + __ vpor(errorvec, input3, input0, Assembler::AVX_512bit); + + // Check if there was an error - if so, try 64-byte chunks + __ evpmovb2m(k3, errorvec, Assembler::AVX_512bit); + __ kortestql(k3, k3); + __ jcc(Assembler::notZero, L_process64); + + // The merging and shuffling happens here + // We multiply each byte pair [00dddddd | 00cccccc | 00bbbbbb | 00aaaaaa] + // Multiply [00cccccc] by 2^6 added to [00dddddd] to get [0000cccc | ccdddddd] + // The pack16_op is a vector of 0x01400140, so multiply D by 1 and C by 0x40 + __ vpmaddubsw(merge_ab_bc0, translated0, pack16_op, Assembler::AVX_512bit); + __ vpmaddubsw(merge_ab_bc1, translated1, pack16_op, Assembler::AVX_512bit); + __ vpmaddubsw(merge_ab_bc2, translated2, pack16_op, Assembler::AVX_512bit); + __ vpmaddubsw(merge_ab_bc3, translated3, pack16_op, Assembler::AVX_512bit); + + // Now do the same with packed 16-bit values. + // We start with [0000cccc | ccdddddd | 0000aaaa | aabbbbbb] + // pack32_op is 0x00011000 (2^12, 1), so this multiplies [0000aaaa | aabbbbbb] by 2^12 + // and adds [0000cccc | ccdddddd] to yield [00000000 | aaaaaabb | bbbbcccc | ccdddddd] + __ vpmaddwd(merged0, merge_ab_bc0, pack32_op, Assembler::AVX_512bit); + __ vpmaddwd(merged1, merge_ab_bc1, pack32_op, Assembler::AVX_512bit); + __ vpmaddwd(merged2, merge_ab_bc2, pack32_op, Assembler::AVX_512bit); + __ vpmaddwd(merged3, merge_ab_bc3, pack32_op, Assembler::AVX_512bit); + + // The join vectors specify which byte from which vector goes into the outputs + // One of every 4 bytes in the extended vector is zero, so we pack them into their + // final positions in the register for storing (256 bytes in, 192 bytes out) + __ evpermt2b(merged0, join01, merged1, Assembler::AVX_512bit); + __ evpermt2b(merged1, join12, merged2, Assembler::AVX_512bit); + __ evpermt2b(merged2, join23, merged3, Assembler::AVX_512bit); + + // Store result + __ evmovdquq(Address(dest, dp, Address::times_1, 0x00), merged0, Assembler::AVX_512bit); + __ evmovdquq(Address(dest, dp, Address::times_1, 0x40), merged1, Assembler::AVX_512bit); + __ evmovdquq(Address(dest, dp, Address::times_1, 0x80), merged2, Assembler::AVX_512bit); + + __ addptr(source, 0x100); + __ addptr(dest, 0xc0); + __ subl(length, 0x100); + __ cmpl(length, 64 * 4); + __ jcc(Assembler::greaterEqual, L_process256); + + // At this point, we've decoded 64 * 4 * n bytes. + // The remaining length will be <= 64 * 4 - 1. + // UNLESS there was an error decoding the first 256-byte chunk. In this + // case, the length will be arbitrarily long. + // + // Note that this will be the path for MIME-encoded strings. + + __ BIND(L_process64); + + __ evmovdquq(pack24bits, ExternalAddress(StubRoutines::x86::base64_vbmi_pack_vec_addr()), Assembler::AVX_512bit, r13); + + __ cmpl(length, 63); + __ jcc(Assembler::lessEqual, L_finalBit); + + __ mov64(rax, 0x0000ffffffffffff); + __ kmovql(k2, rax); + + __ align32(); + __ BIND(L_process64Loop); + + // Handle first 64-byte block + + __ evmovdquq(input0, Address(source, start_offset), Assembler::AVX_512bit); + __ evmovdquq(translated0, lookup_lo, Assembler::AVX_512bit); + __ evpermt2b(translated0, input0, lookup_hi, Assembler::AVX_512bit); + + __ vpor(errorvec, translated0, input0, Assembler::AVX_512bit); + + // Check for error and bomb out before updating dest + __ evpmovb2m(k3, errorvec, Assembler::AVX_512bit); + __ kortestql(k3, k3); + __ jcc(Assembler::notZero, L_exit); + + // Pack output register, selecting correct byte ordering + __ vpmaddubsw(merge_ab_bc0, translated0, pack16_op, Assembler::AVX_512bit); + __ vpmaddwd(merged0, merge_ab_bc0, pack32_op, Assembler::AVX_512bit); + __ vpermb(merged0, pack24bits, merged0, Assembler::AVX_512bit); + + __ evmovdqub(Address(dest, dp), k2, merged0, true, Assembler::AVX_512bit); + + __ subl(length, 64); + __ addptr(source, 64); + __ addptr(dest, 48); - // load masks required for encoding data - __ BIND(L_processdata); - __ movdqu(xmm16, ExternalAddress(StubRoutines::x86::base64_gather_mask_addr())); - // Set 64 bits of K register. - __ evpcmpeqb(k3, xmm16, xmm16, Assembler::AVX_512bit); - __ evmovdquq(xmm12, ExternalAddress(StubRoutines::x86::base64_bswap_mask_addr()), Assembler::AVX_256bit, r13); - __ evmovdquq(xmm13, ExternalAddress(StubRoutines::x86::base64_right_shift_mask_addr()), Assembler::AVX_512bit, r13); - __ evmovdquq(xmm14, ExternalAddress(StubRoutines::x86::base64_left_shift_mask_addr()), Assembler::AVX_512bit, r13); - __ evmovdquq(xmm15, ExternalAddress(StubRoutines::x86::base64_and_mask_addr()), Assembler::AVX_512bit, r13); - - // Vector Base64 implementation, producing 96 bytes of encoded data - __ BIND(L_process80); - __ cmpl(length, 80); - __ jcc(Assembler::below, L_process32); - __ evmovdquq(xmm0, Address(source, start_offset, Address::times_1, 0), Assembler::AVX_256bit); - __ evmovdquq(xmm1, Address(source, start_offset, Address::times_1, 24), Assembler::AVX_256bit); - __ evmovdquq(xmm2, Address(source, start_offset, Address::times_1, 48), Assembler::AVX_256bit); - - //permute the input data in such a manner that we have continuity of the source - __ vpermq(xmm3, xmm0, 148, Assembler::AVX_256bit); - __ vpermq(xmm4, xmm1, 148, Assembler::AVX_256bit); - __ vpermq(xmm5, xmm2, 148, Assembler::AVX_256bit); - - //shuffle input and group 3 bytes of data and to it add 0 as the 4th byte. - //we can deal with 12 bytes at a time in a 128 bit register - __ vpshufb(xmm3, xmm3, xmm12, Assembler::AVX_256bit); - __ vpshufb(xmm4, xmm4, xmm12, Assembler::AVX_256bit); - __ vpshufb(xmm5, xmm5, xmm12, Assembler::AVX_256bit); - - //convert byte to word. Each 128 bit register will have 6 bytes for processing - __ vpmovzxbw(xmm3, xmm3, Assembler::AVX_512bit); - __ vpmovzxbw(xmm4, xmm4, Assembler::AVX_512bit); - __ vpmovzxbw(xmm5, xmm5, Assembler::AVX_512bit); - - // Extract bits in the following pattern 6, 4+2, 2+4, 6 to convert 3, 8 bit numbers to 4, 6 bit numbers - __ evpsrlvw(xmm0, xmm3, xmm13, Assembler::AVX_512bit); - __ evpsrlvw(xmm1, xmm4, xmm13, Assembler::AVX_512bit); - __ evpsrlvw(xmm2, xmm5, xmm13, Assembler::AVX_512bit); - - __ evpsllvw(xmm3, xmm3, xmm14, Assembler::AVX_512bit); - __ evpsllvw(xmm4, xmm4, xmm14, Assembler::AVX_512bit); - __ evpsllvw(xmm5, xmm5, xmm14, Assembler::AVX_512bit); - - __ vpsrlq(xmm0, xmm0, 8, Assembler::AVX_512bit); - __ vpsrlq(xmm1, xmm1, 8, Assembler::AVX_512bit); - __ vpsrlq(xmm2, xmm2, 8, Assembler::AVX_512bit); - - __ vpsllq(xmm3, xmm3, 8, Assembler::AVX_512bit); - __ vpsllq(xmm4, xmm4, 8, Assembler::AVX_512bit); - __ vpsllq(xmm5, xmm5, 8, Assembler::AVX_512bit); - - __ vpandq(xmm3, xmm3, xmm15, Assembler::AVX_512bit); - __ vpandq(xmm4, xmm4, xmm15, Assembler::AVX_512bit); - __ vpandq(xmm5, xmm5, xmm15, Assembler::AVX_512bit); - - // Get the final 4*6 bits base64 encoding - __ vporq(xmm3, xmm3, xmm0, Assembler::AVX_512bit); - __ vporq(xmm4, xmm4, xmm1, Assembler::AVX_512bit); - __ vporq(xmm5, xmm5, xmm2, Assembler::AVX_512bit); - - // Shift - __ vpsrlq(xmm3, xmm3, 8, Assembler::AVX_512bit); - __ vpsrlq(xmm4, xmm4, 8, Assembler::AVX_512bit); - __ vpsrlq(xmm5, xmm5, 8, Assembler::AVX_512bit); - - // look up 6 bits in the base64 character set to fetch the encoding - // we are converting word to dword as gather instructions need dword indices for looking up encoding - __ vextracti64x4(xmm6, xmm3, 0); - __ vpmovzxwd(xmm0, xmm6, Assembler::AVX_512bit); - __ vextracti64x4(xmm6, xmm3, 1); - __ vpmovzxwd(xmm1, xmm6, Assembler::AVX_512bit); - - __ vextracti64x4(xmm6, xmm4, 0); - __ vpmovzxwd(xmm2, xmm6, Assembler::AVX_512bit); - __ vextracti64x4(xmm6, xmm4, 1); - __ vpmovzxwd(xmm3, xmm6, Assembler::AVX_512bit); - - __ vextracti64x4(xmm4, xmm5, 0); - __ vpmovzxwd(xmm6, xmm4, Assembler::AVX_512bit); - - __ vextracti64x4(xmm4, xmm5, 1); - __ vpmovzxwd(xmm7, xmm4, Assembler::AVX_512bit); - - __ kmovql(k2, k3); - __ evpgatherdd(xmm4, k2, Address(r11, xmm0, Address::times_4, 0), Assembler::AVX_512bit); - __ kmovql(k2, k3); - __ evpgatherdd(xmm5, k2, Address(r11, xmm1, Address::times_4, 0), Assembler::AVX_512bit); - __ kmovql(k2, k3); - __ evpgatherdd(xmm8, k2, Address(r11, xmm2, Address::times_4, 0), Assembler::AVX_512bit); - __ kmovql(k2, k3); - __ evpgatherdd(xmm9, k2, Address(r11, xmm3, Address::times_4, 0), Assembler::AVX_512bit); - __ kmovql(k2, k3); - __ evpgatherdd(xmm10, k2, Address(r11, xmm6, Address::times_4, 0), Assembler::AVX_512bit); - __ kmovql(k2, k3); - __ evpgatherdd(xmm11, k2, Address(r11, xmm7, Address::times_4, 0), Assembler::AVX_512bit); - - //Down convert dword to byte. Final output is 16*6 = 96 bytes long - __ evpmovdb(Address(dest, dp, Address::times_1, 0), xmm4, Assembler::AVX_512bit); - __ evpmovdb(Address(dest, dp, Address::times_1, 16), xmm5, Assembler::AVX_512bit); - __ evpmovdb(Address(dest, dp, Address::times_1, 32), xmm8, Assembler::AVX_512bit); - __ evpmovdb(Address(dest, dp, Address::times_1, 48), xmm9, Assembler::AVX_512bit); - __ evpmovdb(Address(dest, dp, Address::times_1, 64), xmm10, Assembler::AVX_512bit); - __ evpmovdb(Address(dest, dp, Address::times_1, 80), xmm11, Assembler::AVX_512bit); - - __ addq(dest, 96); - __ addq(source, 72); - __ subq(length, 72); - __ jmp(L_process80); - - // Vector Base64 implementation generating 32 bytes of encoded data - __ BIND(L_process32); - __ cmpl(length, 32); - __ jcc(Assembler::below, L_process3); - __ evmovdquq(xmm0, Address(source, start_offset), Assembler::AVX_256bit); - __ vpermq(xmm0, xmm0, 148, Assembler::AVX_256bit); - __ vpshufb(xmm6, xmm0, xmm12, Assembler::AVX_256bit); - __ vpmovzxbw(xmm6, xmm6, Assembler::AVX_512bit); - __ evpsrlvw(xmm2, xmm6, xmm13, Assembler::AVX_512bit); - __ evpsllvw(xmm3, xmm6, xmm14, Assembler::AVX_512bit); - - __ vpsrlq(xmm2, xmm2, 8, Assembler::AVX_512bit); - __ vpsllq(xmm3, xmm3, 8, Assembler::AVX_512bit); - __ vpandq(xmm3, xmm3, xmm15, Assembler::AVX_512bit); - __ vporq(xmm1, xmm2, xmm3, Assembler::AVX_512bit); - __ vpsrlq(xmm1, xmm1, 8, Assembler::AVX_512bit); - __ vextracti64x4(xmm9, xmm1, 0); - __ vpmovzxwd(xmm6, xmm9, Assembler::AVX_512bit); - __ vextracti64x4(xmm9, xmm1, 1); - __ vpmovzxwd(xmm5, xmm9, Assembler::AVX_512bit); - __ kmovql(k2, k3); - __ evpgatherdd(xmm8, k2, Address(r11, xmm6, Address::times_4, 0), Assembler::AVX_512bit); - __ kmovql(k2, k3); - __ evpgatherdd(xmm10, k2, Address(r11, xmm5, Address::times_4, 0), Assembler::AVX_512bit); - __ evpmovdb(Address(dest, dp, Address::times_1, 0), xmm8, Assembler::AVX_512bit); - __ evpmovdb(Address(dest, dp, Address::times_1, 16), xmm10, Assembler::AVX_512bit); - __ subq(length, 24); - __ addq(dest, 32); - __ addq(source, 24); - __ jmp(L_process32); - - // Scalar data processing takes 3 bytes at a time and produces 4 bytes of encoded data - /* This code corresponds to the scalar version of the following snippet in Base64.java - ** int bits = (src[sp0++] & 0xff) << 16 |(src[sp0++] & 0xff) << 8 |(src[sp0++] & 0xff); - ** dst[dp0++] = (byte)base64[(bits >> > 18) & 0x3f]; - ** dst[dp0++] = (byte)base64[(bits >> > 12) & 0x3f]; - ** dst[dp0++] = (byte)base64[(bits >> > 6) & 0x3f]; - ** dst[dp0++] = (byte)base64[bits & 0x3f];*/ - __ BIND(L_process3); - __ cmpl(length, 3); - __ jcc(Assembler::below, L_exit); - // Read 1 byte at a time - __ movzbl(rax, Address(source, start_offset)); - __ shll(rax, 0x10); - __ movl(r15, rax); - __ movzbl(rax, Address(source, start_offset, Address::times_1, 1)); - __ shll(rax, 0x8); - __ movzwl(rax, rax); - __ orl(r15, rax); - __ movzbl(rax, Address(source, start_offset, Address::times_1, 2)); - __ orl(rax, r15); - // Save 3 bytes read in r15 - __ movl(r15, rax); - __ shrl(rax, 0x12); - __ andl(rax, 0x3f); - // rax contains the index, r11 contains base64 lookup table - __ movb(rax, Address(r11, rax, Address::times_4)); - // Write the encoded byte to destination - __ movb(Address(dest, dp, Address::times_1, 0), rax); - __ movl(rax, r15); - __ shrl(rax, 0xc); - __ andl(rax, 0x3f); - __ movb(rax, Address(r11, rax, Address::times_4)); - __ movb(Address(dest, dp, Address::times_1, 1), rax); - __ movl(rax, r15); - __ shrl(rax, 0x6); - __ andl(rax, 0x3f); - __ movb(rax, Address(r11, rax, Address::times_4)); - __ movb(Address(dest, dp, Address::times_1, 2), rax); - __ movl(rax, r15); - __ andl(rax, 0x3f); - __ movb(rax, Address(r11, rax, Address::times_4)); - __ movb(Address(dest, dp, Address::times_1, 3), rax); - __ subl(length, 3); - __ addq(dest, 4); - __ addq(source, 3); - __ jmp(L_process3); - __ BIND(L_exit); + __ cmpl(length, 64); + __ jcc(Assembler::greaterEqual, L_process64Loop); + + __ cmpl(length, 0); + __ jcc(Assembler::lessEqual, L_exit); + + __ BIND(L_finalBit); + // Now have 1 to 63 bytes left to decode + + // I was going to let Java take care of the final fragment + // however it will repeatedly call this routine for every 4 bytes + // of input data, so handle the rest here. + __ movq(rax, -1); + __ bzhiq(rax, rax, length); // Input mask in rax + + __ movl(output_size, length); + __ shrl(output_size, 2); // Find (len / 4) * 3 (output length) + __ lea(output_size, Address(output_size, output_size, Address::times_2, 0)); + // output_size in r13 + + // Strip pad characters, if any, and adjust length and mask + __ cmpb(Address(source, length, Address::times_1, -1), '='); + __ jcc(Assembler::equal, L_padding); + + __ BIND(L_donePadding); + + // Output size is (64 - output_size), output mask is (all 1s >> output_size). + __ kmovql(input_mask, rax); + __ movq(output_mask, -1); + __ bzhiq(output_mask, output_mask, output_size); + + // Load initial input with all valid base64 characters. Will be used + // in merging source bytes to avoid masking when determining if an error occurred. + __ movl(rax, 0x61616161); + __ evpbroadcastd(input_initial_valid_b64, rax, Assembler::AVX_512bit); + + // A register containing all invalid base64 decoded values + __ movl(rax, 0x80808080); + __ evpbroadcastd(invalid_b64, rax, Assembler::AVX_512bit); + + // input_mask is in k1 + // output_size is in r13 + // output_mask is in r15 + // zmm0 - free + // zmm1 - 0x00011000 + // zmm2 - 0x01400140 + // zmm3 - errorvec + // zmm4 - pack vector + // zmm5 - lookup_lo + // zmm6 - lookup_hi + // zmm7 - errorvec + // zmm8 - 0x61616161 + // zmm9 - 0x80808080 + + // Load only the bytes from source, merging into our "fully-valid" register + __ evmovdqub(input_initial_valid_b64, input_mask, Address(source, start_offset, Address::times_1, 0x0), true, Assembler::AVX_512bit); + + // Decode all bytes within our merged input + __ evmovdquq(tmp, lookup_lo, Assembler::AVX_512bit); + __ evpermt2b(tmp, input_initial_valid_b64, lookup_hi, Assembler::AVX_512bit); + __ vporq(mask, tmp, input_initial_valid_b64, Assembler::AVX_512bit); + + // Check for error. Compare (decoded | initial) to all invalid. + // If any bytes have their high-order bit set, then we have an error. + __ evptestmb(k2, mask, invalid_b64, Assembler::AVX_512bit); + __ kortestql(k2, k2); + + // If we have an error, use the brute force loop to decode what we can (4-byte chunks). + __ jcc(Assembler::notZero, L_bruteForce); + + // Shuffle output bytes + __ vpmaddubsw(tmp, tmp, pack16_op, Assembler::AVX_512bit); + __ vpmaddwd(tmp, tmp, pack32_op, Assembler::AVX_512bit); + + __ vpermb(tmp, pack24bits, tmp, Assembler::AVX_512bit); + __ kmovql(k1, output_mask); + __ evmovdqub(Address(dest, dp), k1, tmp, true, Assembler::AVX_512bit); + + __ addptr(dest, output_size); + + __ BIND(L_exit); + __ vzeroupper(); + __ pop(rax); // Get original dest value + __ subptr(dest, rax); // Number of bytes converted + __ movptr(rax, dest); + __ pop(rbx); + __ pop(r15); + __ pop(r14); + __ pop(r13); + __ pop(r12); + __ leave(); + __ ret(0); + + __ BIND(L_loadURL); + __ evmovdquq(lookup_lo, ExternalAddress(StubRoutines::x86::base64_vbmi_lookup_lo_url_addr()), Assembler::AVX_512bit, r13); + __ evmovdquq(lookup_hi, ExternalAddress(StubRoutines::x86::base64_vbmi_lookup_hi_url_addr()), Assembler::AVX_512bit, r13); + __ jmp(L_continue); + + __ BIND(L_padding); + __ decrementq(output_size, 1); + __ shrq(rax, 1); + + __ cmpb(Address(source, length, Address::times_1, -2), '='); + __ jcc(Assembler::notEqual, L_donePadding); + + __ decrementq(output_size, 1); + __ shrq(rax, 1); + __ jmp(L_donePadding); + + __ align32(); + __ BIND(L_bruteForce); + } // End of if(avx512_vbmi) + + // Use non-AVX code to decode 4-byte chunks into 3 bytes of output + + // Register state (Linux): + // r12-15 - saved on stack + // rdi - src + // rsi - sp + // rdx - sl + // rcx - dst + // r8 - dp + // r9 - isURL + + // Register state (Windows): + // r12-15 - saved on stack + // rcx - src + // rdx - sp + // r8 - sl + // r9 - dst + // r12 - dp + // r10 - isURL + + // Registers (common): + // length (r14) - bytes in src + + const Register decode_table = r11; + const Register out_byte_count = rbx; + const Register byte1 = r13; + const Register byte2 = r15; + const Register byte3 = WINDOWS_ONLY(r8) NOT_WINDOWS(rdx); + const Register byte4 = WINDOWS_ONLY(r10) NOT_WINDOWS(r9); + + __ shrl(length, 2); // Multiple of 4 bytes only - length is # 4-byte chunks + __ cmpl(length, 0); + __ jcc(Assembler::lessEqual, L_exit_no_vzero); + + __ shll(isURL, 8); // index into decode table based on isURL + __ lea(decode_table, ExternalAddress(StubRoutines::x86::base64_decoding_table_addr())); + __ addptr(decode_table, isURL); + + __ jmp(L_bottomLoop); + + __ align32(); + __ BIND(L_forceLoop); + __ shll(byte1, 18); + __ shll(byte2, 12); + __ shll(byte3, 6); + __ orl(byte1, byte2); + __ orl(byte1, byte3); + __ orl(byte1, byte4); + + __ addptr(source, 4); + + __ movb(Address(dest, dp, Address::times_1, 2), byte1); + __ shrl(byte1, 8); + __ movb(Address(dest, dp, Address::times_1, 1), byte1); + __ shrl(byte1, 8); + __ movb(Address(dest, dp, Address::times_1, 0), byte1); + + __ addptr(dest, 3); + __ decrementl(length, 1); + __ jcc(Assembler::zero, L_exit_no_vzero); + + __ BIND(L_bottomLoop); + __ load_unsigned_byte(byte1, Address(source, start_offset, Address::times_1, 0x00)); + __ load_unsigned_byte(byte2, Address(source, start_offset, Address::times_1, 0x01)); + __ load_signed_byte(byte1, Address(decode_table, byte1)); + __ load_signed_byte(byte2, Address(decode_table, byte2)); + __ load_unsigned_byte(byte3, Address(source, start_offset, Address::times_1, 0x02)); + __ load_unsigned_byte(byte4, Address(source, start_offset, Address::times_1, 0x03)); + __ load_signed_byte(byte3, Address(decode_table, byte3)); + __ load_signed_byte(byte4, Address(decode_table, byte4)); + + __ mov(rax, byte1); + __ orl(rax, byte2); + __ orl(rax, byte3); + __ orl(rax, byte4); + __ jcc(Assembler::positive, L_forceLoop); + + __ BIND(L_exit_no_vzero); + __ pop(rax); // Get original dest value + __ subptr(dest, rax); // Number of bytes converted + __ movptr(rax, dest); + __ pop(rbx); __ pop(r15); __ pop(r14); __ pop(r13); __ pop(r12); __ leave(); __ ret(0); + return start; } + /** * Arguments: * @@ -5718,7 +6436,13 @@ if (VM_Version::supports_sse4_1() && VM_Version::supports_avx512_vpclmulqdq() && VM_Version::supports_avx512bw() && VM_Version::supports_avx512vl()) { + // The constants used in the CRC32 algorithm requires the 1's compliment of the initial crc value. + // However, the constant table for CRC32-C assumes the original crc value. Account for this + // difference before calling and after returning. + __ lea(table, ExternalAddress(StubRoutines::x86::crc_table_avx512_addr())); + __ notl(crc); __ kernel_crc32_avx512(crc, buf, len, table, tmp1, tmp2); + __ notl(crc); } else { __ kernel_crc32(crc, buf, len, table, tmp1); } @@ -5770,20 +6494,27 @@ BLOCK_COMMENT("Entry:"); __ enter(); // required for proper stackwalking of RuntimeStub frame + if (VM_Version::supports_sse4_1() && VM_Version::supports_avx512_vpclmulqdq() && + VM_Version::supports_avx512bw() && + VM_Version::supports_avx512vl()) { + __ lea(j, ExternalAddress(StubRoutines::x86::crc32c_table_avx512_addr())); + __ kernel_crc32_avx512(crc, buf, len, j, l, k); + } else { #ifdef _WIN64 - __ push(y); - __ push(z); + __ push(y); + __ push(z); #endif - __ crc32c_ipl_alg2_alt2(crc, buf, len, - a, j, k, - l, y, z, - c_farg0, c_farg1, c_farg2, - is_pclmulqdq_supported); - __ movl(rax, crc); + __ crc32c_ipl_alg2_alt2(crc, buf, len, + a, j, k, + l, y, z, + c_farg0, c_farg1, c_farg2, + is_pclmulqdq_supported); #ifdef _WIN64 - __ pop(z); - __ pop(y); + __ pop(z); + __ pop(y); #endif + } + __ movl(rax, crc); __ vzeroupper(); __ leave(); // required for proper stackwalking of RuntimeStub frame __ ret(0); @@ -6960,15 +7691,30 @@ } } + if (UseBASE64Intrinsics) { - StubRoutines::x86::_and_mask = base64_and_mask_addr(); - StubRoutines::x86::_bswap_mask = base64_bswap_mask_addr(); - StubRoutines::x86::_base64_charset = base64_charset_addr(); - StubRoutines::x86::_url_charset = base64url_charset_addr(); - StubRoutines::x86::_gather_mask = base64_gather_mask_addr(); - StubRoutines::x86::_left_shift_mask = base64_left_shift_mask_addr(); - StubRoutines::x86::_right_shift_mask = base64_right_shift_mask_addr(); + if(VM_Version::supports_avx2() && + VM_Version::supports_avx512bw() && + VM_Version::supports_avx512vl()) { + StubRoutines::x86::_avx2_shuffle_base64 = base64_avx2_shuffle_addr(); + StubRoutines::x86::_avx2_input_mask_base64 = base64_avx2_input_mask_addr(); + StubRoutines::x86::_avx2_lut_base64 = base64_avx2_lut_addr(); + } + StubRoutines::x86::_encoding_table_base64 = base64_encoding_table_addr(); + if (VM_Version::supports_avx512_vbmi()) { + StubRoutines::x86::_shuffle_base64 = base64_shuffle_addr(); + StubRoutines::x86::_lookup_lo_base64 = base64_vbmi_lookup_lo_addr(); + StubRoutines::x86::_lookup_hi_base64 = base64_vbmi_lookup_hi_addr(); + StubRoutines::x86::_lookup_lo_base64url = base64_vbmi_lookup_lo_url_addr(); + StubRoutines::x86::_lookup_hi_base64url = base64_vbmi_lookup_hi_url_addr(); + StubRoutines::x86::_pack_vec_base64 = base64_vbmi_pack_vec_addr(); + StubRoutines::x86::_join_0_1_base64 = base64_vbmi_join_0_1_addr(); + StubRoutines::x86::_join_1_2_base64 = base64_vbmi_join_1_2_addr(); + StubRoutines::x86::_join_2_3_base64 = base64_vbmi_join_2_3_addr(); + } + StubRoutines::x86::_decoding_table_base64 = base64_decoding_table_addr(); StubRoutines::_base64_encodeBlock = generate_base64_encodeBlock(); + StubRoutines::_base64_decodeBlock = generate_base64_decodeBlock(); } BarrierSetNMethod* bs_nm = BarrierSet::barrier_set()->barrier_set_nmethod(); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/stubRoutines_x86.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/x86/stubRoutines_x86.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/stubRoutines_x86.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/stubRoutines_x86.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -65,14 +65,21 @@ address StubRoutines::x86::_k512_W_addr = NULL; address StubRoutines::x86::_pshuffle_byte_flip_mask_addr_sha512 = NULL; // Base64 masks -address StubRoutines::x86::_bswap_mask = NULL; -address StubRoutines::x86::_base64_charset = NULL; -address StubRoutines::x86::_gather_mask = NULL; -address StubRoutines::x86::_right_shift_mask = NULL; -address StubRoutines::x86::_left_shift_mask = NULL; -address StubRoutines::x86::_and_mask = NULL; -address StubRoutines::x86::_url_charset = NULL; +address StubRoutines::x86::_encoding_table_base64 = NULL; +address StubRoutines::x86::_shuffle_base64 = NULL; +address StubRoutines::x86::_avx2_shuffle_base64 = NULL; +address StubRoutines::x86::_avx2_input_mask_base64 = NULL; +address StubRoutines::x86::_avx2_lut_base64 = NULL; address StubRoutines::x86::_counter_mask_addr = NULL; +address StubRoutines::x86::_lookup_lo_base64 = NULL; +address StubRoutines::x86::_lookup_hi_base64 = NULL; +address StubRoutines::x86::_lookup_lo_base64url = NULL; +address StubRoutines::x86::_lookup_hi_base64url = NULL; +address StubRoutines::x86::_pack_vec_base64 = NULL; +address StubRoutines::x86::_join_0_1_base64 = NULL; +address StubRoutines::x86::_join_1_2_base64 = NULL; +address StubRoutines::x86::_join_2_3_base64 = NULL; +address StubRoutines::x86::_decoding_table_base64 = NULL; #endif address StubRoutines::x86::_pshuffle_byte_flip_mask_addr = NULL; @@ -212,6 +219,23 @@ 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL }; +juint StubRoutines::x86::_crc32c_table_avx512[] = +{ + 0xb9e02b86UL, 0x00000000UL, 0xdcb17aa4UL, 0x00000000UL, + 0x493c7d27UL, 0x00000000UL, 0xc1068c50UL, 0x0000000eUL, + 0x06e38d70UL, 0x00000002UL, 0x6992cea2UL, 0x00000000UL, + 0x493c7d27UL, 0x00000000UL, 0xdd45aab8UL, 0x00000000UL, + 0xdea713f0UL, 0x00000000UL, 0x05ec76f0UL, 0x00000001UL, + 0x47db8317UL, 0x00000000UL, 0x2ad91c30UL, 0x00000000UL, + 0x0715ce53UL, 0x00000000UL, 0xc49f4f67UL, 0x00000000UL, + 0x39d3b296UL, 0x00000000UL, 0x083a6eecUL, 0x00000000UL, + 0x9e4addf8UL, 0x00000000UL, 0x740eef02UL, 0x00000000UL, + 0xddc0152bUL, 0x00000000UL, 0x1c291d04UL, 0x00000000UL, + 0xba4fc28eUL, 0x00000000UL, 0x3da6d0cbUL, 0x00000000UL, + 0x493c7d27UL, 0x00000000UL, 0xc1068c50UL, 0x0000000eUL, + 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL +}; + juint StubRoutines::x86::_crc_by128_masks_avx512[] = { 0xffffffffUL, 0xffffffffUL, 0x00000000UL, 0x00000000UL, diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/stubRoutines_x86.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/x86/stubRoutines_x86.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/stubRoutines_x86.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/stubRoutines_x86.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -137,6 +137,7 @@ #ifdef _LP64 static juint _crc_by128_masks_avx512[]; static juint _crc_table_avx512[]; + static juint _crc32c_table_avx512[]; static juint _shuf_table_crc32_avx512[]; static juint _adler32_shuf0_table[]; static juint _adler32_shuf1_table[]; @@ -184,13 +185,20 @@ static address _pshuffle_byte_flip_mask_addr_sha512; static address _counter_mask_addr; // Masks for base64 - static address _base64_charset; - static address _bswap_mask; - static address _gather_mask; - static address _right_shift_mask; - static address _left_shift_mask; - static address _and_mask; - static address _url_charset; + static address _encoding_table_base64; + static address _shuffle_base64; + static address _avx2_shuffle_base64; + static address _avx2_input_mask_base64; + static address _avx2_lut_base64; + static address _lookup_lo_base64; + static address _lookup_hi_base64; + static address _lookup_lo_base64url; + static address _lookup_hi_base64url; + static address _pack_vec_base64; + static address _join_0_1_base64; + static address _join_1_2_base64; + static address _join_2_3_base64; + static address _decoding_table_base64; #endif // byte flip mask for sha256 static address _pshuffle_byte_flip_mask_addr; @@ -247,6 +255,7 @@ static address crc_by128_masks_avx512_addr() { return (address)_crc_by128_masks_avx512; } static address shuf_table_crc32_avx512_addr() { return (address)_shuf_table_crc32_avx512; } static address crc_table_avx512_addr() { return (address)_crc_table_avx512; } + static address crc32c_table_avx512_addr() { return (address)_crc32c_table_avx512; } #endif // _LP64 static address ghash_long_swap_mask_addr() { return _ghash_long_swap_mask_addr; } static address ghash_byte_swap_mask_addr() { return _ghash_byte_swap_mask_addr; } @@ -328,14 +337,21 @@ static address k256_W_addr() { return _k256_W_adr; } static address k512_W_addr() { return _k512_W_addr; } static address pshuffle_byte_flip_mask_addr_sha512() { return _pshuffle_byte_flip_mask_addr_sha512; } - static address base64_charset_addr() { return _base64_charset; } - static address base64url_charset_addr() { return _url_charset; } - static address base64_bswap_mask_addr() { return _bswap_mask; } - static address base64_gather_mask_addr() { return _gather_mask; } - static address base64_right_shift_mask_addr() { return _right_shift_mask; } - static address base64_left_shift_mask_addr() { return _left_shift_mask; } - static address base64_and_mask_addr() { return _and_mask; } + static address base64_encoding_table_addr() { return _encoding_table_base64; } + static address base64_shuffle_addr() { return _shuffle_base64; } + static address base64_avx2_shuffle_addr() { return _avx2_shuffle_base64; } + static address base64_avx2_input_mask_addr() { return _avx2_input_mask_base64; } + static address base64_avx2_lut_addr() { return _avx2_lut_base64; } static address counter_mask_addr() { return _counter_mask_addr; } + static address base64_vbmi_lookup_lo_addr() { return _lookup_lo_base64; } + static address base64_vbmi_lookup_hi_addr() { return _lookup_hi_base64; } + static address base64_vbmi_lookup_lo_url_addr() { return _lookup_lo_base64url; } + static address base64_vbmi_lookup_hi_url_addr() { return _lookup_hi_base64url; } + static address base64_vbmi_pack_vec_addr() { return _pack_vec_base64; } + static address base64_vbmi_join_0_1_addr() { return _join_0_1_base64; } + static address base64_vbmi_join_1_2_addr() { return _join_1_2_base64; } + static address base64_vbmi_join_2_3_addr() { return _join_2_3_base64; } + static address base64_decoding_table_addr() { return _decoding_table_base64; } #endif static address pshuffle_byte_flip_mask_addr() { return _pshuffle_byte_flip_mask_addr; } static void generate_CRC32C_table(bool is_pclmulqdq_supported); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/templateInterpreterGenerator_x86.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/x86/templateInterpreterGenerator_x86.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/templateInterpreterGenerator_x86.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/templateInterpreterGenerator_x86.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1702,21 +1702,21 @@ #ifndef _LP64 fep = __ pc(); // ftos entry point __ push(ftos); - __ jmp(L); + __ jmpb(L); dep = __ pc(); // dtos entry point __ push(dtos); - __ jmp(L); + __ jmpb(L); #else fep = __ pc(); // ftos entry point __ push_f(xmm0); - __ jmp(L); + __ jmpb(L); dep = __ pc(); // dtos entry point __ push_d(xmm0); - __ jmp(L); + __ jmpb(L); #endif // _LP64 lep = __ pc(); // ltos entry point __ push_l(); - __ jmp(L); + __ jmpb(L); aep = bep = cep = sep = iep = __ pc(); // [abcsi]tos entry point __ push_i_or_ptr(); vep = __ pc(); // vtos entry point diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/x86_32.ad openjdk-17-17.0.6+10/src/hotspot/cpu/x86/x86_32.ad --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/x86_32.ad 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/x86_32.ad 2023-01-10 13:21:55.000000000 +0000 @@ -11727,7 +11727,7 @@ instruct string_compareL(eDIRegP str1, eCXRegI cnt1, eSIRegP str2, eDXRegI cnt2, eAXRegI result, regD tmp1, eFlagsReg cr) %{ - predicate(UseAVX <= 2 && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::LL); + predicate(!VM_Version::supports_avx512vlbw() && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::LL); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); @@ -11742,7 +11742,7 @@ instruct string_compareL_evex(eDIRegP str1, eCXRegI cnt1, eSIRegP str2, eDXRegI cnt2, eAXRegI result, regD tmp1, kReg ktmp, eFlagsReg cr) %{ - predicate(UseAVX > 2 && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::LL); + predicate(VM_Version::supports_avx512vlbw() && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::LL); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, TEMP ktmp, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); @@ -11757,7 +11757,7 @@ instruct string_compareU(eDIRegP str1, eCXRegI cnt1, eSIRegP str2, eDXRegI cnt2, eAXRegI result, regD tmp1, eFlagsReg cr) %{ - predicate(UseAVX <= 2 && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::UU); + predicate(!VM_Version::supports_avx512vlbw() && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::UU); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); @@ -11772,7 +11772,7 @@ instruct string_compareU_evex(eDIRegP str1, eCXRegI cnt1, eSIRegP str2, eDXRegI cnt2, eAXRegI result, regD tmp1, kReg ktmp, eFlagsReg cr) %{ - predicate(UseAVX > 2 && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::UU); + predicate(VM_Version::supports_avx512vlbw() && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::UU); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, TEMP ktmp, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); @@ -11787,7 +11787,7 @@ instruct string_compareLU(eDIRegP str1, eCXRegI cnt1, eSIRegP str2, eDXRegI cnt2, eAXRegI result, regD tmp1, eFlagsReg cr) %{ - predicate(UseAVX <= 2 && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::LU); + predicate(!VM_Version::supports_avx512vlbw() && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::LU); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); @@ -11802,7 +11802,7 @@ instruct string_compareLU_evex(eDIRegP str1, eCXRegI cnt1, eSIRegP str2, eDXRegI cnt2, eAXRegI result, regD tmp1, kReg ktmp, eFlagsReg cr) %{ - predicate(UseAVX > 2 && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::LU); + predicate(VM_Version::supports_avx512vlbw() && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::LU); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, TEMP ktmp, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); @@ -11817,7 +11817,7 @@ instruct string_compareUL(eSIRegP str1, eDXRegI cnt1, eDIRegP str2, eCXRegI cnt2, eAXRegI result, regD tmp1, eFlagsReg cr) %{ - predicate(UseAVX <= 2 && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::UL); + predicate(!VM_Version::supports_avx512vlbw() && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::UL); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); @@ -11832,7 +11832,7 @@ instruct string_compareUL_evex(eSIRegP str1, eDXRegI cnt1, eDIRegP str2, eCXRegI cnt2, eAXRegI result, regD tmp1, kReg ktmp, eFlagsReg cr) %{ - predicate(UseAVX > 2 && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::UL); + predicate(VM_Version::supports_avx512vlbw() && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::UL); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, TEMP ktmp, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); @@ -11848,7 +11848,7 @@ // fast string equals instruct string_equals(eDIRegP str1, eSIRegP str2, eCXRegI cnt, eAXRegI result, regD tmp1, regD tmp2, eBXRegI tmp3, eFlagsReg cr) %{ - predicate(UseAVX <= 2); + predicate(!VM_Version::supports_avx512vlbw()); match(Set result (StrEquals (Binary str1 str2) cnt)); effect(TEMP tmp1, TEMP tmp2, USE_KILL str1, USE_KILL str2, USE_KILL cnt, KILL tmp3, KILL cr); @@ -11864,7 +11864,7 @@ instruct string_equals_evex(eDIRegP str1, eSIRegP str2, eCXRegI cnt, eAXRegI result, regD tmp1, regD tmp2, kReg ktmp, eBXRegI tmp3, eFlagsReg cr) %{ - predicate(UseAVX > 2); + predicate(VM_Version::supports_avx512vlbw()); match(Set result (StrEquals (Binary str1 str2) cnt)); effect(TEMP tmp1, TEMP tmp2, TEMP ktmp, USE_KILL str1, USE_KILL str2, USE_KILL cnt, KILL tmp3, KILL cr); @@ -12042,7 +12042,7 @@ instruct array_equalsB(eDIRegP ary1, eSIRegP ary2, eAXRegI result, regD tmp1, regD tmp2, eCXRegI tmp3, eBXRegI tmp4, eFlagsReg cr) %{ - predicate(UseAVX <= 2 && ((AryEqNode*)n)->encoding() == StrIntrinsicNode::LL); + predicate(!VM_Version::supports_avx512vlbw() && ((AryEqNode*)n)->encoding() == StrIntrinsicNode::LL); match(Set result (AryEq ary1 ary2)); effect(TEMP tmp1, TEMP tmp2, USE_KILL ary1, USE_KILL ary2, KILL tmp3, KILL tmp4, KILL cr); //ins_cost(300); @@ -12059,7 +12059,7 @@ instruct array_equalsB_evex(eDIRegP ary1, eSIRegP ary2, eAXRegI result, regD tmp1, regD tmp2, kReg ktmp, eCXRegI tmp3, eBXRegI tmp4, eFlagsReg cr) %{ - predicate(UseAVX > 2 && ((AryEqNode*)n)->encoding() == StrIntrinsicNode::LL); + predicate(VM_Version::supports_avx512vlbw() && ((AryEqNode*)n)->encoding() == StrIntrinsicNode::LL); match(Set result (AryEq ary1 ary2)); effect(TEMP tmp1, TEMP tmp2, TEMP ktmp, USE_KILL ary1, USE_KILL ary2, KILL tmp3, KILL tmp4, KILL cr); //ins_cost(300); @@ -12076,7 +12076,7 @@ instruct array_equalsC(eDIRegP ary1, eSIRegP ary2, eAXRegI result, regD tmp1, regD tmp2, eCXRegI tmp3, eBXRegI tmp4, eFlagsReg cr) %{ - predicate(UseAVX <= 2 && ((AryEqNode*)n)->encoding() == StrIntrinsicNode::UU); + predicate(!VM_Version::supports_avx512vlbw() && ((AryEqNode*)n)->encoding() == StrIntrinsicNode::UU); match(Set result (AryEq ary1 ary2)); effect(TEMP tmp1, TEMP tmp2, USE_KILL ary1, USE_KILL ary2, KILL tmp3, KILL tmp4, KILL cr); //ins_cost(300); @@ -12093,7 +12093,7 @@ instruct array_equalsC_evex(eDIRegP ary1, eSIRegP ary2, eAXRegI result, regD tmp1, regD tmp2, kReg ktmp, eCXRegI tmp3, eBXRegI tmp4, eFlagsReg cr) %{ - predicate(UseAVX > 2 && ((AryEqNode*)n)->encoding() == StrIntrinsicNode::UU); + predicate(VM_Version::supports_avx512vlbw() && ((AryEqNode*)n)->encoding() == StrIntrinsicNode::UU); match(Set result (AryEq ary1 ary2)); effect(TEMP tmp1, TEMP tmp2, TEMP ktmp, USE_KILL ary1, USE_KILL ary2, KILL tmp3, KILL tmp4, KILL cr); //ins_cost(300); @@ -12110,7 +12110,7 @@ instruct has_negatives(eSIRegP ary1, eCXRegI len, eAXRegI result, regD tmp1, regD tmp2, eBXRegI tmp3, eFlagsReg cr) %{ - predicate(UseAVX <= 2); + predicate(!VM_Version::supports_avx512vlbw() || !VM_Version::supports_bmi2()); match(Set result (HasNegatives ary1 len)); effect(TEMP tmp1, TEMP tmp2, USE_KILL ary1, USE_KILL len, KILL tmp3, KILL cr); @@ -12126,7 +12126,7 @@ instruct has_negatives_evex(eSIRegP ary1, eCXRegI len, eAXRegI result, regD tmp1, regD tmp2, kReg ktmp1, kReg ktmp2, eBXRegI tmp3, eFlagsReg cr) %{ - predicate(UseAVX > 2); + predicate(VM_Version::supports_avx512vlbw() && VM_Version::supports_bmi2()); match(Set result (HasNegatives ary1 len)); effect(TEMP tmp1, TEMP tmp2, TEMP ktmp1, TEMP ktmp2, USE_KILL ary1, USE_KILL len, KILL tmp3, KILL cr); @@ -12143,7 +12143,7 @@ // fast char[] to byte[] compression instruct string_compress(eSIRegP src, eDIRegP dst, eDXRegI len, regD tmp1, regD tmp2, regD tmp3, regD tmp4, eCXRegI tmp5, eAXRegI result, eFlagsReg cr) %{ - predicate(UseAVX <= 2); + predicate(!VM_Version::supports_avx512vlbw() || !VM_Version::supports_bmi2()); match(Set result (StrCompressedCopy src (Binary dst len))); effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, USE_KILL src, USE_KILL dst, USE_KILL len, KILL tmp5, KILL cr); @@ -12159,7 +12159,7 @@ instruct string_compress_evex(eSIRegP src, eDIRegP dst, eDXRegI len, regD tmp1, regD tmp2, regD tmp3, regD tmp4, kReg ktmp1, kReg ktmp2, eCXRegI tmp5, eAXRegI result, eFlagsReg cr) %{ - predicate(UseAVX > 2); + predicate(VM_Version::supports_avx512vlbw() && VM_Version::supports_bmi2()); match(Set result (StrCompressedCopy src (Binary dst len))); effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, TEMP ktmp1, TEMP ktmp2, USE_KILL src, USE_KILL dst, USE_KILL len, KILL tmp5, KILL cr); @@ -12176,7 +12176,7 @@ // fast byte[] to char[] inflation instruct string_inflate(Universe dummy, eSIRegP src, eDIRegP dst, eDXRegI len, regD tmp1, eCXRegI tmp2, eFlagsReg cr) %{ - predicate(UseAVX <= 2); + predicate(!VM_Version::supports_avx512vlbw() || !VM_Version::supports_bmi2()); match(Set dummy (StrInflatedCopy src (Binary dst len))); effect(TEMP tmp1, TEMP tmp2, USE_KILL src, USE_KILL dst, USE_KILL len, KILL cr); @@ -12190,7 +12190,7 @@ instruct string_inflate_evex(Universe dummy, eSIRegP src, eDIRegP dst, eDXRegI len, regD tmp1, kReg ktmp, eCXRegI tmp2, eFlagsReg cr) %{ - predicate(UseAVX > 2); + predicate(VM_Version::supports_avx512vlbw() && VM_Version::supports_bmi2()); match(Set dummy (StrInflatedCopy src (Binary dst len))); effect(TEMP tmp1, TEMP tmp2, TEMP ktmp, USE_KILL src, USE_KILL dst, USE_KILL len, KILL cr); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/x86/x86_64.ad openjdk-17-17.0.6+10/src/hotspot/cpu/x86/x86_64.ad --- openjdk-17-17.0.4+8/src/hotspot/cpu/x86/x86_64.ad 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/x86/x86_64.ad 2023-01-10 13:21:55.000000000 +0000 @@ -11260,7 +11260,7 @@ instruct string_compareL(rdi_RegP str1, rcx_RegI cnt1, rsi_RegP str2, rdx_RegI cnt2, rax_RegI result, legRegD tmp1, rFlagsReg cr) %{ - predicate(UseAVX <= 2 && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::LL); + predicate(!VM_Version::supports_avx512vlbw() && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::LL); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); @@ -11276,7 +11276,7 @@ instruct string_compareL_evex(rdi_RegP str1, rcx_RegI cnt1, rsi_RegP str2, rdx_RegI cnt2, rax_RegI result, legRegD tmp1, kReg ktmp, rFlagsReg cr) %{ - predicate(UseAVX > 2 && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::LL); + predicate(VM_Version::supports_avx512vlbw() && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::LL); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, TEMP ktmp, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); @@ -11292,7 +11292,7 @@ instruct string_compareU(rdi_RegP str1, rcx_RegI cnt1, rsi_RegP str2, rdx_RegI cnt2, rax_RegI result, legRegD tmp1, rFlagsReg cr) %{ - predicate(UseAVX <= 2 && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::UU); + predicate(!VM_Version::supports_avx512vlbw() && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::UU); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); @@ -11308,7 +11308,7 @@ instruct string_compareU_evex(rdi_RegP str1, rcx_RegI cnt1, rsi_RegP str2, rdx_RegI cnt2, rax_RegI result, legRegD tmp1, kReg ktmp, rFlagsReg cr) %{ - predicate(UseAVX > 2 && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::UU); + predicate(VM_Version::supports_avx512vlbw() && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::UU); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, TEMP ktmp, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); @@ -11324,7 +11324,7 @@ instruct string_compareLU(rdi_RegP str1, rcx_RegI cnt1, rsi_RegP str2, rdx_RegI cnt2, rax_RegI result, legRegD tmp1, rFlagsReg cr) %{ - predicate(UseAVX <= 2 && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::LU); + predicate(!VM_Version::supports_avx512vlbw() && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::LU); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); @@ -11340,7 +11340,7 @@ instruct string_compareLU_evex(rdi_RegP str1, rcx_RegI cnt1, rsi_RegP str2, rdx_RegI cnt2, rax_RegI result, legRegD tmp1, kReg ktmp, rFlagsReg cr) %{ - predicate(UseAVX > 2 && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::LU); + predicate(VM_Version::supports_avx512vlbw() && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::LU); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, TEMP ktmp, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); @@ -11356,7 +11356,7 @@ instruct string_compareUL(rsi_RegP str1, rdx_RegI cnt1, rdi_RegP str2, rcx_RegI cnt2, rax_RegI result, legRegD tmp1, rFlagsReg cr) %{ - predicate(UseAVX <= 2 && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::UL); + predicate(!VM_Version::supports_avx512vlbw() && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::UL); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); @@ -11372,7 +11372,7 @@ instruct string_compareUL_evex(rsi_RegP str1, rdx_RegI cnt1, rdi_RegP str2, rcx_RegI cnt2, rax_RegI result, legRegD tmp1, kReg ktmp, rFlagsReg cr) %{ - predicate(UseAVX > 2 && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::UL); + predicate(VM_Version::supports_avx512vlbw() && ((StrCompNode*)n)->encoding() == StrIntrinsicNode::UL); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, TEMP ktmp, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); @@ -11555,7 +11555,7 @@ instruct string_equals(rdi_RegP str1, rsi_RegP str2, rcx_RegI cnt, rax_RegI result, legRegD tmp1, legRegD tmp2, rbx_RegI tmp3, rFlagsReg cr) %{ - predicate(UseAVX <= 2); + predicate(!VM_Version::supports_avx512vlbw()); match(Set result (StrEquals (Binary str1 str2) cnt)); effect(TEMP tmp1, TEMP tmp2, USE_KILL str1, USE_KILL str2, USE_KILL cnt, KILL tmp3, KILL cr); @@ -11571,7 +11571,7 @@ instruct string_equals_evex(rdi_RegP str1, rsi_RegP str2, rcx_RegI cnt, rax_RegI result, legRegD tmp1, legRegD tmp2, kReg ktmp, rbx_RegI tmp3, rFlagsReg cr) %{ - predicate(UseAVX > 2); + predicate(VM_Version::supports_avx512vlbw()); match(Set result (StrEquals (Binary str1 str2) cnt)); effect(TEMP tmp1, TEMP tmp2, TEMP ktmp, USE_KILL str1, USE_KILL str2, USE_KILL cnt, KILL tmp3, KILL cr); @@ -11588,7 +11588,7 @@ instruct array_equalsB(rdi_RegP ary1, rsi_RegP ary2, rax_RegI result, legRegD tmp1, legRegD tmp2, rcx_RegI tmp3, rbx_RegI tmp4, rFlagsReg cr) %{ - predicate(UseAVX <= 2 && ((AryEqNode*)n)->encoding() == StrIntrinsicNode::LL); + predicate(!VM_Version::supports_avx512vlbw() && ((AryEqNode*)n)->encoding() == StrIntrinsicNode::LL); match(Set result (AryEq ary1 ary2)); effect(TEMP tmp1, TEMP tmp2, USE_KILL ary1, USE_KILL ary2, KILL tmp3, KILL tmp4, KILL cr); @@ -11604,7 +11604,7 @@ instruct array_equalsB_evex(rdi_RegP ary1, rsi_RegP ary2, rax_RegI result, legRegD tmp1, legRegD tmp2, kReg ktmp, rcx_RegI tmp3, rbx_RegI tmp4, rFlagsReg cr) %{ - predicate(UseAVX > 2 && ((AryEqNode*)n)->encoding() == StrIntrinsicNode::LL); + predicate(VM_Version::supports_avx512vlbw() && ((AryEqNode*)n)->encoding() == StrIntrinsicNode::LL); match(Set result (AryEq ary1 ary2)); effect(TEMP tmp1, TEMP tmp2, TEMP ktmp, USE_KILL ary1, USE_KILL ary2, KILL tmp3, KILL tmp4, KILL cr); @@ -11620,7 +11620,7 @@ instruct array_equalsC(rdi_RegP ary1, rsi_RegP ary2, rax_RegI result, legRegD tmp1, legRegD tmp2, rcx_RegI tmp3, rbx_RegI tmp4, rFlagsReg cr) %{ - predicate(UseAVX <= 2 && ((AryEqNode*)n)->encoding() == StrIntrinsicNode::UU); + predicate(!VM_Version::supports_avx512vlbw() && ((AryEqNode*)n)->encoding() == StrIntrinsicNode::UU); match(Set result (AryEq ary1 ary2)); effect(TEMP tmp1, TEMP tmp2, USE_KILL ary1, USE_KILL ary2, KILL tmp3, KILL tmp4, KILL cr); @@ -11636,7 +11636,7 @@ instruct array_equalsC_evex(rdi_RegP ary1, rsi_RegP ary2, rax_RegI result, legRegD tmp1, legRegD tmp2, kReg ktmp, rcx_RegI tmp3, rbx_RegI tmp4, rFlagsReg cr) %{ - predicate(UseAVX > 2 && ((AryEqNode*)n)->encoding() == StrIntrinsicNode::UU); + predicate(VM_Version::supports_avx512vlbw() && ((AryEqNode*)n)->encoding() == StrIntrinsicNode::UU); match(Set result (AryEq ary1 ary2)); effect(TEMP tmp1, TEMP tmp2, TEMP ktmp, USE_KILL ary1, USE_KILL ary2, KILL tmp3, KILL tmp4, KILL cr); @@ -11652,7 +11652,7 @@ instruct has_negatives(rsi_RegP ary1, rcx_RegI len, rax_RegI result, legRegD tmp1, legRegD tmp2, rbx_RegI tmp3, rFlagsReg cr,) %{ - predicate(UseAVX <= 2); + predicate(!VM_Version::supports_avx512vlbw() || !VM_Version::supports_bmi2()); match(Set result (HasNegatives ary1 len)); effect(TEMP tmp1, TEMP tmp2, USE_KILL ary1, USE_KILL len, KILL tmp3, KILL cr); @@ -11668,7 +11668,7 @@ instruct has_negatives_evex(rsi_RegP ary1, rcx_RegI len, rax_RegI result, legRegD tmp1, legRegD tmp2, kReg ktmp1, kReg ktmp2, rbx_RegI tmp3, rFlagsReg cr,) %{ - predicate(UseAVX > 2); + predicate(VM_Version::supports_avx512vlbw() && VM_Version::supports_bmi2()); match(Set result (HasNegatives ary1 len)); effect(TEMP tmp1, TEMP tmp2, TEMP ktmp1, TEMP ktmp2, USE_KILL ary1, USE_KILL len, KILL tmp3, KILL cr); @@ -11684,7 +11684,7 @@ // fast char[] to byte[] compression instruct string_compress(rsi_RegP src, rdi_RegP dst, rdx_RegI len, legRegD tmp1, legRegD tmp2, legRegD tmp3, legRegD tmp4, rcx_RegI tmp5, rax_RegI result, rFlagsReg cr) %{ - predicate(UseAVX <= 2); + predicate(!VM_Version::supports_avx512vlbw() || !VM_Version::supports_bmi2()); match(Set result (StrCompressedCopy src (Binary dst len))); effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, USE_KILL src, USE_KILL dst, USE_KILL len, KILL tmp5, KILL cr); @@ -11701,7 +11701,7 @@ instruct string_compress_evex(rsi_RegP src, rdi_RegP dst, rdx_RegI len, legRegD tmp1, legRegD tmp2, legRegD tmp3, legRegD tmp4, kReg ktmp1, kReg ktmp2, rcx_RegI tmp5, rax_RegI result, rFlagsReg cr) %{ - predicate(UseAVX > 2); + predicate(VM_Version::supports_avx512vlbw() && VM_Version::supports_bmi2()); match(Set result (StrCompressedCopy src (Binary dst len))); effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, TEMP ktmp1, TEMP ktmp2, USE_KILL src, USE_KILL dst, USE_KILL len, KILL tmp5, KILL cr); @@ -11718,7 +11718,7 @@ // fast byte[] to char[] inflation instruct string_inflate(Universe dummy, rsi_RegP src, rdi_RegP dst, rdx_RegI len, legRegD tmp1, rcx_RegI tmp2, rFlagsReg cr) %{ - predicate(UseAVX <= 2); + predicate(!VM_Version::supports_avx512vlbw() || !VM_Version::supports_bmi2()); match(Set dummy (StrInflatedCopy src (Binary dst len))); effect(TEMP tmp1, TEMP tmp2, USE_KILL src, USE_KILL dst, USE_KILL len, KILL cr); @@ -11732,7 +11732,7 @@ instruct string_inflate_evex(Universe dummy, rsi_RegP src, rdi_RegP dst, rdx_RegI len, legRegD tmp1, kReg ktmp, rcx_RegI tmp2, rFlagsReg cr) %{ - predicate(UseAVX > 2); + predicate(VM_Version::supports_avx512vlbw() && VM_Version::supports_bmi2()); match(Set dummy (StrInflatedCopy src (Binary dst len))); effect(TEMP tmp1, TEMP tmp2, TEMP ktmp, USE_KILL src, USE_KILL dst, USE_KILL len, KILL cr); diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/zero/frame_zero.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/zero/frame_zero.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/zero/frame_zero.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/zero/frame_zero.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,6 +1,6 @@ /* * Copyright (c) 2003, 2021, Oracle and/or its affiliates. All rights reserved. - * Copyright 2007, 2008, 2009, 2010, 2011 Red Hat, Inc. + * Copyright (c) 2007, 2021, Red Hat, Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -116,13 +116,67 @@ } bool frame::safe_for_sender(JavaThread *thread) { - ShouldNotCallThis(); - return false; + address sp = (address)_sp; + + // consider stack guards when trying to determine "safe" stack pointers + // sp must be within the usable part of the stack (not in guards) + if (!thread->is_in_usable_stack(sp)) { + return false; + } + + // an fp must be within the stack and above (but not equal) sp + if (!thread->is_in_stack_range_excl((address)fp(), sp)) { + return false; + } + + // All good. + return true; } bool frame::is_interpreted_frame_valid(JavaThread *thread) const { - ShouldNotCallThis(); - return false; + assert(is_interpreted_frame(), "Not an interpreted frame"); + // These are reasonable sanity checks + if (fp() == 0 || (intptr_t(fp()) & (wordSize-1)) != 0) { + return false; + } + if (sp() == 0 || (intptr_t(sp()) & (wordSize-1)) != 0) { + return false; + } + // These are hacks to keep us out of trouble. + // The problem with these is that they mask other problems + if (fp() <= sp()) { // this attempts to deal with unsigned comparison above + return false; + } + + // do some validation of frame elements + // first the method + + Method* m = *interpreter_frame_method_addr(); + + // validate the method we'd find in this potential sender + if (!Method::is_valid_method(m)) { + return false; + } + + // validate bci/bcp + address bcp = interpreter_frame_bcp(); + if (m->validate_bci_from_bcp(bcp) < 0) { + return false; + } + + // validate ConstantPoolCache* + ConstantPoolCache* cp = *interpreter_frame_cache_addr(); + if (MetaspaceObj::is_valid(cp) == false) { + return false; + } + + // validate locals + address locals = (address) *interpreter_frame_locals_addr(); + if (!thread->is_in_stack_range_incl(locals, (address)fp())) { + return false; + } + + return true; } BasicType frame::interpreter_frame_result(oop* oop_result, diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/zero/frame_zero.inline.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/zero/frame_zero.inline.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/zero/frame_zero.inline.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/zero/frame_zero.inline.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -82,6 +82,11 @@ return NULL; } +inline intptr_t* frame::link_or_null() const { + ShouldNotCallThis(); + return NULL; +} + inline interpreterState frame::get_interpreterState() const { return zero_interpreterframe()->interpreter_state(); } diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/zero/globalDefinitions_zero.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/zero/globalDefinitions_zero.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/zero/globalDefinitions_zero.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/zero/globalDefinitions_zero.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -30,6 +30,10 @@ #define SUPPORTS_NATIVE_CX8 #endif +#ifndef FFI_GO_CLOSURES +#define FFI_GO_CLOSURES 0 +#endif + #include // Indicates whether the C calling conventions require that diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/zero/javaFrameAnchor_zero.hpp openjdk-17-17.0.6+10/src/hotspot/cpu/zero/javaFrameAnchor_zero.hpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/zero/javaFrameAnchor_zero.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/zero/javaFrameAnchor_zero.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -73,7 +73,7 @@ return true; } - void make_walkable(JavaThread* thread) { + void make_walkable() { // nothing to do } diff -Nru openjdk-17-17.0.4+8/src/hotspot/cpu/zero/vm_version_zero.cpp openjdk-17-17.0.6+10/src/hotspot/cpu/zero/vm_version_zero.cpp --- openjdk-17-17.0.4+8/src/hotspot/cpu/zero/vm_version_zero.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/cpu/zero/vm_version_zero.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -50,6 +50,71 @@ FLAG_SET_DEFAULT(UseHeavyMonitors, true); } + if (UseAESIntrinsics) { + warning("AES intrinsics are not available on this CPU"); + FLAG_SET_DEFAULT(UseAESIntrinsics, false); + } + + if (UseAES) { + warning("AES instructions are not available on this CPU"); + FLAG_SET_DEFAULT(UseAES, false); + } + + if (UseAESCTRIntrinsics) { + warning("AES/CTR intrinsics are not available on this CPU"); + FLAG_SET_DEFAULT(UseAESCTRIntrinsics, false); + } + + if (UseFMA) { + warning("FMA instructions are not available on this CPU"); + FLAG_SET_DEFAULT(UseFMA, false); + } + + if (UseMD5Intrinsics) { + warning("MD5 intrinsics are not available on this CPU"); + FLAG_SET_DEFAULT(UseMD5Intrinsics, false); + } + + if (UseSHA) { + warning("SHA instructions are not available on this CPU"); + FLAG_SET_DEFAULT(UseSHA, false); + } + + if (UseSHA1Intrinsics) { + warning("Intrinsics for SHA-1 crypto hash functions not available on this CPU."); + FLAG_SET_DEFAULT(UseSHA1Intrinsics, false); + } + + if (UseSHA256Intrinsics) { + warning("Intrinsics for SHA-224 and SHA-256 crypto hash functions not available on this CPU."); + FLAG_SET_DEFAULT(UseSHA256Intrinsics, false); + } + + if (UseSHA512Intrinsics) { + warning("Intrinsics for SHA-384 and SHA-512 crypto hash functions not available on this CPU."); + FLAG_SET_DEFAULT(UseSHA512Intrinsics, false); + } + + if (UseSHA3Intrinsics) { + warning("Intrinsics for SHA3-224, SHA3-256, SHA3-384 and SHA3-512 crypto hash functions not available on this CPU."); + FLAG_SET_DEFAULT(UseSHA3Intrinsics, false); + } + + if (UseCRC32Intrinsics) { + warning("CRC32 intrinsics are not available on this CPU"); + FLAG_SET_DEFAULT(UseCRC32Intrinsics, false); + } + + if (UseAdler32Intrinsics) { + warning("Adler32 intrinsics are not available on this CPU"); + FLAG_SET_DEFAULT(UseAdler32Intrinsics, false); + } + + if (UseVectorizedMismatchIntrinsic) { + warning("vectorizedMismatch intrinsic is not available on this CPU."); + FLAG_SET_DEFAULT(UseVectorizedMismatchIntrinsic, false); + } + // Not implemented UNSUPPORTED_OPTION(CriticalJNINatives); UNSUPPORTED_OPTION(UseCompiler); diff -Nru openjdk-17-17.0.4+8/src/hotspot/os/aix/os_aix.cpp openjdk-17-17.0.6+10/src/hotspot/os/aix/os_aix.cpp --- openjdk-17-17.0.4+8/src/hotspot/os/aix/os_aix.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os/aix/os_aix.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1161,7 +1161,7 @@ // RTLD_LAZY is currently not implemented. The dl is loaded immediately with all its dependants. void * result= ::dlopen(filename, RTLD_LAZY); if (result != NULL) { - Events::log(NULL, "Loaded shared library %s", filename); + Events::log_dll_message(NULL, "Loaded shared library %s", filename); // Reload dll cache. Don't do this in signal handling. LoadedLibraries::reload(); log_info(os)("shared library load of %s was successful", filename); @@ -1176,21 +1176,12 @@ snprintf(ebuf, ebuflen - 1, "%s, LIBPATH=%s, LD_LIBRARY_PATH=%s : %s", filename, ::getenv("LIBPATH"), ::getenv("LD_LIBRARY_PATH"), error_report); } - Events::log(NULL, "Loading shared library %s failed, %s", filename, error_report); + Events::log_dll_message(NULL, "Loading shared library %s failed, %s", filename, error_report); log_info(os)("shared library load of %s failed, %s", filename, error_report); } return NULL; } -void* os::dll_lookup(void* handle, const char* name) { - void* res = dlsym(handle, name); - return res; -} - -void* os::get_default_process_handle() { - return (void*)::dlopen(NULL, RTLD_LAZY); -} - void os::print_dll_info(outputStream *st) { st->print_cr("Dynamic libraries:"); LoadedLibraries::print(st); @@ -2209,13 +2200,6 @@ return addr; } -// Sleep forever; naked call to OS-specific sleep; use with CAUTION -void os::infinite_sleep() { - while (true) { // sleep forever ... - ::sleep(100); // ... 100 seconds at a time - } -} - // Used to convert frequent JVM_Yield() to nops bool os::dont_yield() { return DontYieldALot; @@ -2551,47 +2535,6 @@ f(value, method, args, thread); } -void os::print_statistics() { -} - -bool os::message_box(const char* title, const char* message) { - int i; - fdStream err(defaultStream::error_fd()); - for (i = 0; i < 78; i++) err.print_raw("="); - err.cr(); - err.print_raw_cr(title); - for (i = 0; i < 78; i++) err.print_raw("-"); - err.cr(); - err.print_raw_cr(message); - for (i = 0; i < 78; i++) err.print_raw("="); - err.cr(); - - char buf[16]; - // Prevent process from exiting upon "read error" without consuming all CPU - while (::read(0, buf, sizeof(buf)) <= 0) { ::sleep(100); } - - return buf[0] == 'y' || buf[0] == 'Y'; -} - -// Is a (classpath) directory empty? -bool os::dir_is_empty(const char* path) { - DIR *dir = NULL; - struct dirent *ptr; - - dir = opendir(path); - if (dir == NULL) return true; - - /* Scan the directory */ - bool result = true; - while (result && (ptr = readdir(dir)) != NULL) { - if (strcmp(ptr->d_name, ".") != 0 && strcmp(ptr->d_name, "..") != 0) { - result = false; - } - } - closedir(dir); - return result; -} - // This code originates from JDK's sysOpen and open64_w // from src/solaris/hpi/src/system_md.c diff -Nru openjdk-17-17.0.4+8/src/hotspot/os/bsd/os_bsd.cpp openjdk-17-17.0.6+10/src/hotspot/os/bsd/os_bsd.cpp --- openjdk-17-17.0.4+8/src/hotspot/os/bsd/os_bsd.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os/bsd/os_bsd.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1050,7 +1050,7 @@ void * result= ::dlopen(filename, RTLD_LAZY); if (result != NULL) { - Events::log(NULL, "Loaded shared library %s", filename); + Events::log_dll_message(NULL, "Loaded shared library %s", filename); // Successful loading log_info(os)("shared library load of %s was successful", filename); return result; @@ -1065,7 +1065,7 @@ ::strncpy(ebuf, error_report, ebuflen-1); ebuf[ebuflen-1]='\0'; } - Events::log(NULL, "Loading shared library %s failed, %s", filename, error_report); + Events::log_dll_message(NULL, "Loading shared library %s failed, %s", filename, error_report); log_info(os)("shared library load of %s failed, %s", filename, error_report); return NULL; @@ -1079,7 +1079,7 @@ log_info(os)("attempting shared library load of %s", filename); void * result= ::dlopen(filename, RTLD_LAZY); if (result != NULL) { - Events::log(NULL, "Loaded shared library %s", filename); + Events::log_dll_message(NULL, "Loaded shared library %s", filename); // Successful loading log_info(os)("shared library load of %s was successful", filename); return result; @@ -1096,7 +1096,7 @@ ::strncpy(ebuf, error_report, ebuflen-1); ebuf[ebuflen-1]='\0'; } - Events::log(NULL, "Loading shared library %s failed, %s", filename, error_report); + Events::log_dll_message(NULL, "Loading shared library %s failed, %s", filename, error_report); log_info(os)("shared library load of %s failed, %s", filename, error_report); int diag_msg_max_length=ebuflen-strlen(ebuf); @@ -1256,22 +1256,6 @@ } #endif // !__APPLE__ -void* os::get_default_process_handle() { -#ifdef __APPLE__ - // MacOS X needs to use RTLD_FIRST instead of RTLD_LAZY - // to avoid finding unexpected symbols on second (or later) - // loads of a library. - return (void*)::dlopen(NULL, RTLD_FIRST); -#else - return (void*)::dlopen(NULL, RTLD_LAZY); -#endif -} - -// XXX: Do we need a lock around this as per Linux? -void* os::dll_lookup(void* handle, const char* name) { - return dlsym(handle, name); -} - int _print_dll_info_cb(const char * name, address base_address, address top_address, void * param) { outputStream * out = (outputStream *) param; out->print_cr(INTPTR_FORMAT " \t%s", (intptr_t)base_address, name); @@ -1874,13 +1858,6 @@ return NULL; } -// Sleep forever; naked call to OS-specific sleep; use with CAUTION -void os::infinite_sleep() { - while (true) { // sleep forever ... - ::sleep(100); // ... 100 seconds at a time - } -} - // Used to convert frequent JVM_Yield() to nops bool os::dont_yield() { return DontYieldALot; @@ -2259,28 +2236,6 @@ f(value, method, args, thread); } -void os::print_statistics() { -} - -bool os::message_box(const char* title, const char* message) { - int i; - fdStream err(defaultStream::error_fd()); - for (i = 0; i < 78; i++) err.print_raw("="); - err.cr(); - err.print_raw_cr(title); - for (i = 0; i < 78; i++) err.print_raw("-"); - err.cr(); - err.print_raw_cr(message); - for (i = 0; i < 78; i++) err.print_raw("="); - err.cr(); - - char buf[16]; - // Prevent process from exiting upon "read error" without consuming all CPU - while (::read(0, buf, sizeof(buf)) <= 0) { ::sleep(100); } - - return buf[0] == 'y' || buf[0] == 'Y'; -} - static inline struct timespec get_mtime(const char* filename) { struct stat st; int ret = os::stat(filename, &st); @@ -2302,25 +2257,6 @@ return diff; } -// Is a (classpath) directory empty? -bool os::dir_is_empty(const char* path) { - DIR *dir = NULL; - struct dirent *ptr; - - dir = opendir(path); - if (dir == NULL) return true; - - // Scan the directory - bool result = true; - while (result && (ptr = readdir(dir)) != NULL) { - if (strcmp(ptr->d_name, ".") != 0 && strcmp(ptr->d_name, "..") != 0) { - result = false; - } - } - closedir(dir); - return result; -} - // This code originates from JDK's sysOpen and open64_w // from src/solaris/hpi/src/system_md.c diff -Nru openjdk-17-17.0.4+8/src/hotspot/os/linux/cgroupSubsystem_linux.cpp openjdk-17-17.0.6+10/src/hotspot/os/linux/cgroupSubsystem_linux.cpp --- openjdk-17-17.0.4+8/src/hotspot/os/linux/cgroupSubsystem_linux.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os/linux/cgroupSubsystem_linux.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2021, 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 @@ -122,6 +122,32 @@ return new CgroupV1Subsystem(cpuset, cpu, cpuacct, pids, memory); } +void CgroupSubsystemFactory::set_controller_paths(CgroupInfo* cg_infos, + int controller, + const char* name, + char* mount_path, + char* root_path) { + if (cg_infos[controller]._mount_path != NULL) { + // On some systems duplicate controllers get mounted in addition to + // the main cgroup controllers most likely under /sys/fs/cgroup. In that + // case pick the one under /sys/fs/cgroup and discard others. + if (strstr(cg_infos[controller]._mount_path, "/sys/fs/cgroup") != cg_infos[controller]._mount_path) { + log_debug(os, container)("Duplicate %s controllers detected. Picking %s, skipping %s.", + name, mount_path, cg_infos[controller]._mount_path); + os::free(cg_infos[controller]._mount_path); + os::free(cg_infos[controller]._root_mount_path); + cg_infos[controller]._mount_path = os::strdup(mount_path); + cg_infos[controller]._root_mount_path = os::strdup(root_path); + } else { + log_debug(os, container)("Duplicate %s controllers detected. Picking %s, skipping %s.", + name, cg_infos[controller]._mount_path, mount_path); + } + } else { + cg_infos[controller]._mount_path = os::strdup(mount_path); + cg_infos[controller]._root_mount_path = os::strdup(root_path); + } +} + bool CgroupSubsystemFactory::determine_type(CgroupInfo* cg_infos, const char* proc_cgroups, const char* proc_self_cgroup, @@ -260,7 +286,13 @@ } } 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,7 +313,6 @@ bool cgroupv2_mount_point_found = false; bool any_cgroup_mounts_found = false; while ((p = fgets(buf, MAXPATHLEN, mntinfo)) != NULL) { - char tmp_mount_point[MAXPATHLEN+1]; char tmp_fs_type[MAXPATHLEN+1]; char tmproot[MAXPATHLEN+1]; char tmpmount[MAXPATHLEN+1]; @@ -292,15 +323,13 @@ // Cgroup v2 relevant info. We only look for the _mount_path iff is_cgroupsV2 so // as to avoid memory stomping of the _mount_path pointer later on in the cgroup v1 // block in the hybrid case. - // - if (is_cgroupsV2 && sscanf(p, "%*d %*d %*d:%*d %*s %s %*[^-]- %s %*s %*s", tmp_mount_point, tmp_fs_type) == 2) { + if (is_cgroupsV2 && sscanf(p, "%*d %*d %*d:%*d %s %s %*[^-]- %s %*s %*s", tmproot, tmpmount, tmp_fs_type) == 3) { // we likely have an early match return (e.g. cgroup fs match), be sure we have cgroup2 as fstype - if (!cgroupv2_mount_point_found && strcmp("cgroup2", tmp_fs_type) == 0) { + if (strcmp("cgroup2", tmp_fs_type) == 0) { cgroupv2_mount_point_found = true; any_cgroup_mounts_found = true; for (int i = 0; i < CG_INFO_LENGTH; i++) { - assert(cg_infos[i]._mount_path == NULL, "_mount_path memory stomping"); - cg_infos[i]._mount_path = os::strdup(tmp_mount_point); + set_controller_paths(cg_infos, i, "(cg2, unified)", tmpmount, tmproot); } } } @@ -325,47 +354,23 @@ while ((token = strsep(&cptr, ",")) != NULL) { if (strcmp(token, "memory") == 0) { any_cgroup_mounts_found = true; - assert(cg_infos[MEMORY_IDX]._mount_path == NULL, "stomping of _mount_path"); - cg_infos[MEMORY_IDX]._mount_path = os::strdup(tmpmount); - cg_infos[MEMORY_IDX]._root_mount_path = os::strdup(tmproot); + set_controller_paths(cg_infos, MEMORY_IDX, token, tmpmount, tmproot); cg_infos[MEMORY_IDX]._data_complete = true; } else if (strcmp(token, "cpuset") == 0) { any_cgroup_mounts_found = true; - if (cg_infos[CPUSET_IDX]._mount_path != NULL) { - // On some systems duplicate cpuset controllers get mounted in addition to - // the main cgroup controllers most likely under /sys/fs/cgroup. In that - // case pick the one under /sys/fs/cgroup and discard others. - if (strstr(cg_infos[CPUSET_IDX]._mount_path, "/sys/fs/cgroup") != cg_infos[CPUSET_IDX]._mount_path) { - log_warning(os, container)("Duplicate cpuset controllers detected. Picking %s, skipping %s.", - tmpmount, cg_infos[CPUSET_IDX]._mount_path); - os::free(cg_infos[CPUSET_IDX]._mount_path); - cg_infos[CPUSET_IDX]._mount_path = os::strdup(tmpmount); - } else { - log_warning(os, container)("Duplicate cpuset controllers detected. Picking %s, skipping %s.", - cg_infos[CPUSET_IDX]._mount_path, tmpmount); - } - } else { - cg_infos[CPUSET_IDX]._mount_path = os::strdup(tmpmount); - } - cg_infos[CPUSET_IDX]._root_mount_path = os::strdup(tmproot); + set_controller_paths(cg_infos, CPUSET_IDX, token, tmpmount, tmproot); cg_infos[CPUSET_IDX]._data_complete = true; } else if (strcmp(token, "cpu") == 0) { any_cgroup_mounts_found = true; - assert(cg_infos[CPU_IDX]._mount_path == NULL, "stomping of _mount_path"); - cg_infos[CPU_IDX]._mount_path = os::strdup(tmpmount); - cg_infos[CPU_IDX]._root_mount_path = os::strdup(tmproot); + set_controller_paths(cg_infos, CPU_IDX, token, tmpmount, tmproot); cg_infos[CPU_IDX]._data_complete = true; } else if (strcmp(token, "cpuacct") == 0) { any_cgroup_mounts_found = true; - assert(cg_infos[CPUACCT_IDX]._mount_path == NULL, "stomping of _mount_path"); - cg_infos[CPUACCT_IDX]._mount_path = os::strdup(tmpmount); - cg_infos[CPUACCT_IDX]._root_mount_path = os::strdup(tmproot); + set_controller_paths(cg_infos, CPUACCT_IDX, token, tmpmount, 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); + set_controller_paths(cg_infos, PIDS_IDX, token, tmpmount, tmproot); cg_infos[PIDS_IDX]._data_complete = true; } } @@ -495,7 +500,10 @@ 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); @@ -546,7 +554,30 @@ if (!memory_limit->should_check_metric()) { return memory_limit->value(); } + jlong phys_mem = os::Linux::physical_memory(); + log_trace(os, container)("total physical memory: " JLONG_FORMAT, phys_mem); jlong mem_limit = read_memory_limit_in_bytes(); + + if (mem_limit <= 0 || mem_limit >= phys_mem) { + jlong read_mem_limit = mem_limit; + const char *reason; + if (mem_limit >= phys_mem) { + // Exceeding physical memory is treated as unlimited. Cg v1's implementation + // of read_memory_limit_in_bytes() caps this at phys_mem since Cg v1 has no + // value to represent 'max'. Cg v2 may return a value >= phys_mem if e.g. the + // container engine was started with a memory flag exceeding it. + reason = "ignored"; + mem_limit = -1; + } else if (OSCONTAINER_ERROR == mem_limit) { + reason = "failed"; + } else { + assert(mem_limit == -1, "Expected unlimited"); + reason = "unlimited"; + } + log_debug(os, container)("container memory limit %s: " JLONG_FORMAT ", using host value " JLONG_FORMAT, + reason, read_mem_limit, phys_mem); + } + // Update cached metric to avoid re-reading container settings too often memory_limit->set_value(mem_limit, OSCONTAINER_CACHE_TIMEOUT); return mem_limit; diff -Nru openjdk-17-17.0.4+8/src/hotspot/os/linux/cgroupSubsystem_linux.hpp openjdk-17-17.0.6+10/src/hotspot/os/linux/cgroupSubsystem_linux.hpp --- openjdk-17-17.0.4+8/src/hotspot/os/linux/cgroupSubsystem_linux.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os/linux/cgroupSubsystem_linux.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -252,12 +252,15 @@ virtual jlong memory_and_swap_limit_in_bytes() = 0; virtual jlong memory_soft_limit_in_bytes() = 0; virtual jlong memory_max_usage_in_bytes() = 0; + virtual char * cpu_cpuset_cpus() = 0; virtual char * cpu_cpuset_memory_nodes() = 0; virtual jlong read_memory_limit_in_bytes() = 0; virtual const char * container_type() = 0; virtual CachingCgroupController* memory_controller() = 0; virtual CachingCgroupController* cpu_controller() = 0; + + virtual void print_version_specific_info(outputStream* st) = 0; }; // Utility class for storing info retrieved from /proc/cgroups, @@ -308,6 +311,11 @@ } #endif + static void set_controller_paths(CgroupInfo* cg_infos, + int controller, + const char* name, + char* mount_path, + char* root_path); // Determine the cgroup type (version 1 or version 2), given // relevant paths to files. Sets 'flags' accordingly. static bool determine_type(CgroupInfo* cg_infos, diff -Nru openjdk-17-17.0.4+8/src/hotspot/os/linux/cgroupV1Subsystem_linux.cpp openjdk-17-17.0.6+10/src/hotspot/os/linux/cgroupV1Subsystem_linux.cpp --- openjdk-17-17.0.4+8/src/hotspot/os/linux/cgroupV1Subsystem_linux.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os/linux/cgroupV1Subsystem_linux.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2021, 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 @@ -31,6 +31,7 @@ #include "runtime/globals.hpp" #include "runtime/os.hpp" #include "utilities/globalDefinitions.hpp" +#include "os_linux.hpp" /* * Set directory to subsystem specific files based @@ -105,7 +106,7 @@ GET_CONTAINER_INFO(julong, _memory->controller(), "/memory.limit_in_bytes", "Memory Limit is: " JULONG_FORMAT, JULONG_FORMAT, memlimit); - if (memlimit >= _unlimited_memory) { + if (memlimit >= os::Linux::physical_memory()) { log_trace(os, container)("Non-Hierarchical Memory Limit is: Unlimited"); CgroupV1MemoryController* mem_controller = reinterpret_cast(_memory->controller()); if (mem_controller->is_hierarchical()) { @@ -113,7 +114,7 @@ const char* format = "%s " JULONG_FORMAT; GET_CONTAINER_INFO_LINE(julong, _memory->controller(), "/memory.stat", matchline, "Hierarchical Memory Limit is: " JULONG_FORMAT, format, hier_memlimit) - if (hier_memlimit >= _unlimited_memory) { + if (hier_memlimit >= os::Linux::physical_memory()) { log_trace(os, container)("Hierarchical Memory Limit is: Unlimited"); } else { return (jlong)hier_memlimit; @@ -127,32 +128,54 @@ } jlong CgroupV1Subsystem::memory_and_swap_limit_in_bytes() { + julong host_total_memsw; GET_CONTAINER_INFO(julong, _memory->controller(), "/memory.memsw.limit_in_bytes", "Memory and Swap Limit is: " JULONG_FORMAT, JULONG_FORMAT, memswlimit); - if (memswlimit >= _unlimited_memory) { + host_total_memsw = os::Linux::host_swap() + os::Linux::physical_memory(); + if (memswlimit >= host_total_memsw) { log_trace(os, container)("Non-Hierarchical Memory and Swap Limit is: Unlimited"); CgroupV1MemoryController* mem_controller = reinterpret_cast(_memory->controller()); if (mem_controller->is_hierarchical()) { 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 >= host_total_memsw) { 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); - if (memsoftlimit >= _unlimited_memory) { + if (memsoftlimit >= os::Linux::physical_memory()) { log_trace(os, container)("Memory Soft Limit is: Unlimited"); return (jlong)-1; } else { @@ -189,6 +212,38 @@ return memmaxusage; } + +jlong CgroupV1Subsystem::kernel_memory_usage_in_bytes() { + GET_CONTAINER_INFO(jlong, _memory->controller(), "/memory.kmem.usage_in_bytes", + "Kernel Memory Usage is: " JLONG_FORMAT, JLONG_FORMAT, kmem_usage); + return kmem_usage; +} + +jlong CgroupV1Subsystem::kernel_memory_limit_in_bytes() { + GET_CONTAINER_INFO(julong, _memory->controller(), "/memory.kmem.limit_in_bytes", + "Kernel Memory Limit is: " JULONG_FORMAT, JULONG_FORMAT, kmem_limit); + if (kmem_limit >= os::Linux::physical_memory()) { + return (jlong)-1; + } + return (jlong)kmem_limit; +} + +jlong CgroupV1Subsystem::kernel_memory_max_usage_in_bytes() { + GET_CONTAINER_INFO(jlong, _memory->controller(), "/memory.kmem.max_usage_in_bytes", + "Maximum Kernel Memory Usage is: " JLONG_FORMAT, JLONG_FORMAT, kmem_max_usage); + return kmem_max_usage; +} + +void CgroupV1Subsystem::print_version_specific_info(outputStream* st) { + jlong kmem_usage = kernel_memory_usage_in_bytes(); + jlong kmem_limit = kernel_memory_limit_in_bytes(); + jlong kmem_max_usage = kernel_memory_max_usage_in_bytes(); + + OSContainer::print_container_helper(st, kmem_usage, "kernel_memory_usage_in_bytes"); + OSContainer::print_container_helper(st, kmem_limit, "kernel_memory_max_usage_in_bytes"); + OSContainer::print_container_helper(st, kmem_max_usage, "kernel_memory_limit_in_bytes"); +} + char * CgroupV1Subsystem::cpu_cpuset_cpus() { GET_CONTAINER_INFO_CPTR(cptr, _cpuset, "/cpuset.cpus", "cpuset.cpus is: %s", "%1023s", cpus, 1024); diff -Nru openjdk-17-17.0.4+8/src/hotspot/os/linux/cgroupV1Subsystem_linux.hpp openjdk-17-17.0.6+10/src/hotspot/os/linux/cgroupV1Subsystem_linux.hpp --- openjdk-17-17.0.4+8/src/hotspot/os/linux/cgroupV1Subsystem_linux.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os/linux/cgroupV1Subsystem_linux.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -79,6 +79,11 @@ jlong memory_soft_limit_in_bytes(); jlong memory_usage_in_bytes(); jlong memory_max_usage_in_bytes(); + + jlong kernel_memory_usage_in_bytes(); + jlong kernel_memory_limit_in_bytes(); + jlong kernel_memory_max_usage_in_bytes(); + char * cpu_cpuset_cpus(); char * cpu_cpuset_memory_nodes(); @@ -90,6 +95,8 @@ jlong pids_max(); jlong pids_current(); + void print_version_specific_info(outputStream* st); + const char * container_type() { return "cgroupv1"; } @@ -97,8 +104,6 @@ CachingCgroupController * cpu_controller() { return _cpu; } private: - julong _unlimited_memory; - /* controllers */ CachingCgroupController* _memory = NULL; CgroupV1Controller* _cpuset = NULL; @@ -108,6 +113,8 @@ char * pids_max_val(); + jlong read_mem_swappiness(); + public: CgroupV1Subsystem(CgroupV1Controller* cpuset, CgroupV1Controller* cpu, @@ -119,7 +126,6 @@ _cpuacct = cpuacct; _pids = pids; _memory = new CachingCgroupController(memory); - _unlimited_memory = (LONG_MAX / os::vm_page_size()) * os::vm_page_size(); } }; diff -Nru openjdk-17-17.0.4+8/src/hotspot/os/linux/cgroupV2Subsystem_linux.cpp openjdk-17-17.0.6+10/src/hotspot/os/linux/cgroupV2Subsystem_linux.cpp --- openjdk-17-17.0.4+8/src/hotspot/os/linux/cgroupV2Subsystem_linux.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os/linux/cgroupV2Subsystem_linux.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -182,6 +182,16 @@ return os::strdup(mem_swp_limit_str); } +// memory.swap.current : total amount of swap currently used by the cgroup and its descendants +char* CgroupV2Subsystem::mem_swp_current_val() { + GET_CONTAINER_INFO_CPTR(cptr, _unified, "/memory.swap.current", + "Swap currently used is: %s", "%s", mem_swp_current_str, 1024); + if (mem_swp_current_str == NULL) { + return NULL; + } + return os::strdup(mem_swp_current_str); +} + /* memory_limit_in_bytes * * Return the limit of available memory for this process. @@ -212,6 +222,17 @@ return os::strdup(mem_limit_str); } +void CgroupV2Subsystem::print_version_specific_info(outputStream* st) { + char* mem_swp_current_str = mem_swp_current_val(); + jlong swap_current = limit_from_str(mem_swp_current_str); + + char* mem_swp_limit_str = mem_swp_limit_val(); + jlong swap_limit = limit_from_str(mem_swp_limit_str); + + OSContainer::print_container_helper(st, swap_current, "memory_swap_current_in_bytes"); + OSContainer::print_container_helper(st, swap_limit, "memory_swap_max_limit_in_bytes"); +} + char* CgroupV2Controller::construct_path(char* mount_path, char *cgroup_path) { char buf[MAXPATHLEN+1]; int buflen; diff -Nru openjdk-17-17.0.4+8/src/hotspot/os/linux/cgroupV2Subsystem_linux.hpp openjdk-17-17.0.6+10/src/hotspot/os/linux/cgroupV2Subsystem_linux.hpp --- openjdk-17-17.0.4+8/src/hotspot/os/linux/cgroupV2Subsystem_linux.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os/linux/cgroupV2Subsystem_linux.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, Red Hat Inc. + * Copyright (c) 2020, 2022, Red Hat 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 @@ -58,6 +58,7 @@ char *mem_limit_val(); char *mem_swp_limit_val(); + char *mem_swp_current_val(); char *mem_soft_limit_val(); char *cpu_quota_val(); char *pids_max_val(); @@ -77,11 +78,14 @@ jlong memory_soft_limit_in_bytes(); jlong memory_usage_in_bytes(); jlong memory_max_usage_in_bytes(); + char * cpu_cpuset_cpus(); char * cpu_cpuset_memory_nodes(); jlong pids_max(); jlong pids_current(); + void print_version_specific_info(outputStream* st); + const char * container_type() { return "cgroupv2"; } diff -Nru openjdk-17-17.0.4+8/src/hotspot/os/linux/globals_linux.hpp openjdk-17-17.0.6+10/src/hotspot/os/linux/globals_linux.hpp --- openjdk-17-17.0.4+8/src/hotspot/os/linux/globals_linux.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os/linux/globals_linux.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2020, 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 @@ -59,6 +59,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" \ diff -Nru openjdk-17-17.0.4+8/src/hotspot/os/linux/osContainer_linux.cpp openjdk-17-17.0.6+10/src/hotspot/os/linux/osContainer_linux.cpp --- openjdk-17-17.0.4+8/src/hotspot/os/linux/osContainer_linux.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os/linux/osContainer_linux.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 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 @@ -42,8 +42,6 @@ * we are running under cgroup control. */ void OSContainer::init() { - jlong mem_limit; - assert(!_is_initialized, "Initializing OSContainer more than once"); _is_initialized = true; @@ -59,15 +57,8 @@ if (cgroup_subsystem == NULL) { return; // Required subsystem files not found or other error } - // We need to update the amount of physical memory now that - // cgroup subsystem files have been processed. - if ((mem_limit = cgroup_subsystem->memory_limit_in_bytes()) > 0) { - os::Linux::set_physical_memory(mem_limit); - log_info(os, container)("Memory Limit is: " JLONG_FORMAT, mem_limit); - } _is_containerized = true; - } const char * OSContainer::container_type() { @@ -100,6 +91,11 @@ return cgroup_subsystem->memory_max_usage_in_bytes(); } +void OSContainer::print_version_specific_info(outputStream* st) { + assert(cgroup_subsystem != NULL, "cgroup subsystem not available"); + cgroup_subsystem->print_version_specific_info(st); +} + char * OSContainer::cpu_cpuset_cpus() { assert(cgroup_subsystem != NULL, "cgroup subsystem not available"); return cgroup_subsystem->cpu_cpuset_cpus(); @@ -139,3 +135,16 @@ assert(cgroup_subsystem != NULL, "cgroup subsystem not available"); return cgroup_subsystem->pids_current(); } + +void OSContainer::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"); + } +} diff -Nru openjdk-17-17.0.4+8/src/hotspot/os/linux/osContainer_linux.hpp openjdk-17-17.0.6+10/src/hotspot/os/linux/osContainer_linux.hpp --- openjdk-17-17.0.4+8/src/hotspot/os/linux/osContainer_linux.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os/linux/osContainer_linux.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -27,6 +27,7 @@ #include "utilities/globalDefinitions.hpp" #include "utilities/macros.hpp" +#include "utilities/ostream.hpp" #include "memory/allocation.hpp" #define OSCONTAINER_ERROR (-2) @@ -43,6 +44,9 @@ public: static void init(); + static void print_version_specific_info(outputStream* st); + static void print_container_helper(outputStream* st, jlong j, const char* metrics); + static inline bool is_containerized(); static const char * container_type(); diff -Nru openjdk-17-17.0.4+8/src/hotspot/os/linux/os_linux.cpp openjdk-17-17.0.6+10/src/hotspot/os/linux/os_linux.cpp --- openjdk-17-17.0.4+8/src/hotspot/os/linux/os_linux.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os/linux/os_linux.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -195,15 +195,12 @@ julong avail_mem; if (OSContainer::is_containerized()) { - jlong mem_limit, mem_usage; - if ((mem_limit = OSContainer::memory_limit_in_bytes()) < 1) { - log_debug(os, container)("container memory limit %s: " JLONG_FORMAT ", using host value", - mem_limit == OSCONTAINER_ERROR ? "failed" : "unlimited", mem_limit); - } + jlong mem_limit = OSContainer::memory_limit_in_bytes(); + jlong mem_usage; if (mem_limit > 0 && (mem_usage = OSContainer::memory_usage_in_bytes()) < 1) { log_debug(os, container)("container memory usage failed: " JLONG_FORMAT ", using host value", mem_usage); } - if (mem_limit > 0 && mem_usage > 0 ) { + if (mem_limit > 0 && mem_usage > 0) { avail_mem = mem_limit > mem_usage ? (julong)mem_limit - (julong)mem_usage : 0; log_trace(os)("available container memory: " JULONG_FORMAT, avail_mem); return avail_mem; @@ -224,8 +221,6 @@ log_trace(os)("total container memory: " JLONG_FORMAT, mem_limit); return mem_limit; } - log_debug(os, container)("container memory limit %s: " JLONG_FORMAT ", using host value", - mem_limit == OSCONTAINER_ERROR ? "failed" : "unlimited", mem_limit); } phys_mem = Linux::physical_memory(); @@ -354,6 +349,14 @@ return (pid_t)rslt; } +// Returns the amount of swap currently configured, in bytes. +// This can change at any time. +julong os::Linux::host_swap() { + struct sysinfo si; + sysinfo(&si); + return (julong)si.totalswap; +} + // Most versions of linux have a bug where the number of processors are // determined by looking at the /proc file system. In a chroot environment, // the system call returns 1. @@ -1818,10 +1821,10 @@ ::strncpy(ebuf, error_report, ebuflen-1); ebuf[ebuflen-1]='\0'; } - Events::log(NULL, "Loading shared library %s failed, %s", filename, error_report); + Events::log_dll_message(NULL, "Loading shared library %s failed, %s", filename, error_report); log_info(os)("shared library load of %s failed, %s", filename, error_report); } else { - Events::log(NULL, "Loaded shared library %s", filename); + Events::log_dll_message(NULL, "Loaded shared library %s", filename); log_info(os)("shared library load of %s was successful", filename); } return result; @@ -1857,13 +1860,16 @@ return result; } -void* os::dll_lookup(void* handle, const char* name) { - void* res = dlsym(handle, name); - return res; -} - -void* os::get_default_process_handle() { - return (void*)::dlopen(NULL, RTLD_LAZY); +const char* os::Linux::dll_path(void* lib) { + struct link_map *lmap; + const char* l_path = NULL; + assert(lib != NULL, "dll_path parameter must not be NULL"); + + int res_dli = ::dlinfo(lib, RTLD_DI_LINKMAP, &lmap); + if (res_dli == 0) { + l_path = lmap->l_name; + } + return l_path; } static bool _print_ascii_file(const char* filename, outputStream* st, const char* hdr = NULL) { @@ -2272,19 +2278,6 @@ } } -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"); - } -} - bool os::Linux::print_container_info(outputStream* st) { if (!OSContainer::is_containerized()) { st->print_cr("container information not found."); @@ -2340,11 +2333,13 @@ st->print_cr("%s", i == OSCONTAINER_ERROR ? "not supported" : "no shares"); } - 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"); + OSContainer::print_container_helper(st, OSContainer::memory_limit_in_bytes(), "memory_limit_in_bytes"); + OSContainer::print_container_helper(st, OSContainer::memory_and_swap_limit_in_bytes(), "memory_and_swap_limit_in_bytes"); + OSContainer::print_container_helper(st, OSContainer::memory_soft_limit_in_bytes(), "memory_soft_limit_in_bytes"); + OSContainer::print_container_helper(st, OSContainer::memory_usage_in_bytes(), "memory_usage_in_bytes"); + OSContainer::print_container_helper(st, OSContainer::memory_max_usage_in_bytes(), "memory_max_usage_in_bytes"); + + OSContainer::print_version_specific_info(st); jlong j = OSContainer::pids_max(); st->print("maximum number of tasks: "); @@ -4251,13 +4246,6 @@ return NULL; } -// Sleep forever; naked call to OS-specific sleep; use with CAUTION -void os::infinite_sleep() { - while (true) { // sleep forever ... - ::sleep(100); // ... 100 seconds at a time - } -} - // Used to convert frequent JVM_Yield() to nops bool os::dont_yield() { return DontYieldALot; @@ -4685,7 +4673,8 @@ // 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); @@ -4757,6 +4746,10 @@ 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: // @@ -4904,47 +4897,6 @@ f(value, method, args, thread); } -void os::print_statistics() { -} - -bool os::message_box(const char* title, const char* message) { - int i; - fdStream err(defaultStream::error_fd()); - for (i = 0; i < 78; i++) err.print_raw("="); - err.cr(); - err.print_raw_cr(title); - for (i = 0; i < 78; i++) err.print_raw("-"); - err.cr(); - err.print_raw_cr(message); - for (i = 0; i < 78; i++) err.print_raw("="); - err.cr(); - - char buf[16]; - // Prevent process from exiting upon "read error" without consuming all CPU - while (::read(0, buf, sizeof(buf)) <= 0) { ::sleep(100); } - - return buf[0] == 'y' || buf[0] == 'Y'; -} - -// Is a (classpath) directory empty? -bool os::dir_is_empty(const char* path) { - DIR *dir = NULL; - struct dirent *ptr; - - dir = opendir(path); - if (dir == NULL) return true; - - // Scan the directory - bool result = true; - while (result && (ptr = readdir(dir)) != NULL) { - if (strcmp(ptr->d_name, ".") != 0 && strcmp(ptr->d_name, "..") != 0) { - result = false; - } - } - closedir(dir); - return result; -} - // This code originates from JDK's sysOpen and open64_w // from src/solaris/hpi/src/system_md.c diff -Nru openjdk-17-17.0.4+8/src/hotspot/os/linux/os_linux.hpp openjdk-17-17.0.6+10/src/hotspot/os/linux/os_linux.hpp --- openjdk-17-17.0.4+8/src/hotspot/os/linux/os_linux.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os/linux/os_linux.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 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 @@ -59,8 +59,6 @@ static int _page_size; static julong available_memory(); - static julong physical_memory() { return _physical_memory; } - static void set_physical_memory(julong phys_mem) { _physical_memory = phys_mem; } static int active_processor_count(); static void initialize_system_info(); @@ -120,6 +118,7 @@ static bool _stack_is_executable; static void *dlopen_helper(const char *name, char *ebuf, int ebuflen); static void *dll_load_in_vmthread(const char *name, char *ebuf, int ebuflen); + static const char *dll_path(void* lib); static void init_thread_fpu_state(); static int get_fpu_control_word(); @@ -135,6 +134,9 @@ static int page_size(void) { return _page_size; } static void set_page_size(int val) { _page_size = val; } + static julong physical_memory() { return _physical_memory; } + static julong host_swap(); + static intptr_t* ucontext_get_sp(const ucontext_t* uc); static intptr_t* ucontext_get_fp(const ucontext_t* uc); diff -Nru openjdk-17-17.0.4+8/src/hotspot/os/posix/os_posix.cpp openjdk-17-17.0.6+10/src/hotspot/os/posix/os_posix.cpp --- openjdk-17-17.0.4+8/src/hotspot/os/posix/os_posix.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os/posix/os_posix.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -45,6 +45,7 @@ #include "runtime/orderAccess.hpp" #include "runtime/perfMemory.hpp" #include "utilities/align.hpp" +#include "utilities/defaultStream.hpp" #include "utilities/events.hpp" #include "utilities/formatBuffer.hpp" #include "utilities/macros.hpp" @@ -236,6 +237,25 @@ return fd; } +// Is a (classpath) directory empty? +bool os::dir_is_empty(const char* path) { + DIR *dir = NULL; + struct dirent *ptr; + + dir = ::opendir(path); + if (dir == NULL) return true; + + // Scan the directory + bool result = true; + while (result && (ptr = ::readdir(dir)) != NULL) { + if (strcmp(ptr->d_name, ".") != 0 && strcmp(ptr->d_name, "..") != 0) { + result = false; + } + } + ::closedir(dir); + return result; +} + static char* reserve_mmapped_memory(size_t bytes, char* requested_addr) { char * addr; int flags = MAP_PRIVATE NOT_AIX( | MAP_NORESERVE ) | MAP_ANONYMOUS; @@ -633,8 +653,42 @@ #endif } +void* os::get_default_process_handle() { +#ifdef __APPLE__ + // MacOS X needs to use RTLD_FIRST instead of RTLD_LAZY + // to avoid finding unexpected symbols on second (or later) + // loads of a library. + return (void*)::dlopen(NULL, RTLD_FIRST); +#else + return (void*)::dlopen(NULL, RTLD_LAZY); +#endif +} + +void* os::dll_lookup(void* handle, const char* name) { + return dlsym(handle, name); +} + void os::dll_unload(void *lib) { - ::dlclose(lib); + const char* l_path = LINUX_ONLY(os::Linux::dll_path(lib)) + NOT_LINUX(""); + if (l_path == NULL) l_path = ""; + int res = ::dlclose(lib); + + if (res == 0) { + Events::log_dll_message(NULL, "Unloaded shared library \"%s\" [" INTPTR_FORMAT "]", + l_path, p2i(lib)); + log_info(os)("Unloaded shared library \"%s\" [" INTPTR_FORMAT "]", l_path, p2i(lib)); + } else { + const char* error_report = ::dlerror(); + if (error_report == NULL) { + error_report = "dlerror returned no error description"; + } + + Events::log_dll_message(NULL, "Attempt to unload shared library \"%s\" [" INTPTR_FORMAT "] failed, %s", + l_path, p2i(lib), error_report); + log_info(os)("Attempt to unload shared library \"%s\" [" INTPTR_FORMAT "] failed, %s", + l_path, p2i(lib), error_report); + } } jlong os::lseek(int fd, jlong offset, int whence) { @@ -771,6 +825,12 @@ return agent_entry_name; } +// Sleep forever; naked call to OS-specific sleep; use with CAUTION +void os::infinite_sleep() { + while (true) { // sleep forever ... + ::sleep(100); // ... 100 seconds at a time + } +} void os::naked_short_nanosleep(jlong ns) { struct timespec req; @@ -1936,6 +1996,25 @@ } } +bool os::message_box(const char* title, const char* message) { + int i; + fdStream err(defaultStream::error_fd()); + for (i = 0; i < 78; i++) err.print_raw("="); + err.cr(); + err.print_raw_cr(title); + for (i = 0; i < 78; i++) err.print_raw("-"); + err.cr(); + err.print_raw_cr(message); + for (i = 0; i < 78; i++) err.print_raw("="); + err.cr(); + + char buf[16]; + // Prevent process from exiting upon "read error" without consuming all CPU + while (::read(0, buf, sizeof(buf)) <= 0) { ::sleep(100); } + + return buf[0] == 'y' || buf[0] == 'Y'; +} + //////////////////////////////////////////////////////////////////////////////// // runtime exit support diff -Nru openjdk-17-17.0.4+8/src/hotspot/os/posix/signals_posix.cpp openjdk-17-17.0.6+10/src/hotspot/os/posix/signals_posix.cpp --- openjdk-17-17.0.4+8/src/hotspot/os/posix/signals_posix.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os/posix/signals_posix.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -341,7 +341,7 @@ }; //////////////////////////////////////////////////////////////////////////////// -// sun.misc.Signal support +// sun.misc.Signal and BREAK_SIGNAL support void jdk_misc_signal_init() { // Initialize signal structures @@ -562,11 +562,6 @@ { assert(info != NULL && ucVoid != NULL, "sanity"); - if (sig == BREAK_SIGNAL) { - assert(!ReduceSignalUsage, "Should not happen with -Xrs/-XX:+ReduceSignalUsage"); - return true; // ignore it - } - // Note: it's not uncommon that JNI code uses signal/sigset to install, // then restore certain signal handler (e.g. to temporarily block SIGPIPE, // or have a SIGILL handler when detecting CPU type). When that happens, @@ -602,7 +597,7 @@ if (!signal_was_handled) { // Handle SafeFetch access. #ifndef ZERO - if (uc != NULL) { + if ((sig == SIGSEGV || sig == SIGBUS) && uc != NULL) { address pc = os::Posix::ucontext_get_pc(uc); if (StubRoutines::is_safefetch_fault(pc)) { os::Posix::ucontext_set_pc(uc, StubRoutines::continuation_for_safefetch_fault(pc)); @@ -1202,7 +1197,7 @@ return -1; } -void set_signal_handler(int sig, bool do_check = true) { +void set_signal_handler(int sig) { // Check for overwrite. struct sigaction oldAct; sigaction(sig, (struct sigaction*)NULL, &oldAct); @@ -1244,9 +1239,10 @@ } #endif - // Save handler setup for later checking + // Save handler setup for possible later checking vm_handlers.set(sig, &sigAct); - do_check_signal_periodically[sig] = do_check; + + do_check_signal_periodically[sig] = true; int ret = sigaction(sig, &sigAct, &oldAct); assert(ret == 0, "check"); @@ -1285,11 +1281,24 @@ PPC64_ONLY(set_signal_handler(SIGTRAP);) set_signal_handler(SIGXFSZ); if (!ReduceSignalUsage) { - // This is just for early initialization phase. Intercepting the signal here reduces the risk - // that an attach client accidentally forces HotSpot to quit prematurely. We skip the periodic - // check because late initialization will overwrite it to UserHandler. - set_signal_handler(BREAK_SIGNAL, false); + // Install BREAK_SIGNAL's handler in early initialization phase, in + // order to reduce the risk that an attach client accidentally forces + // HotSpot to quit prematurely. + // The actual work for handling BREAK_SIGNAL is performed by the Signal + // Dispatcher thread, which is created and started at a much later point, + // see os::initialize_jdk_signal_support(). Any BREAK_SIGNAL received + // before the Signal Dispatcher thread is started is queued up via the + // pending_signals[BREAK_SIGNAL] counter, and will be processed by the + // Signal Dispatcher thread in a delayed fashion. + // + // Also note that HotSpot does NOT support signal chaining for BREAK_SIGNAL. + // Applications that require a custom BREAK_SIGNAL handler should run with + // -XX:+ReduceSignalUsage. Otherwise if libjsig is used together with + // -XX:+ReduceSignalUsage, libjsig will prevent changing BREAK_SIGNAL's + // handler to a custom handler. + os::signal(BREAK_SIGNAL, os::user_handler()); } + #if defined(__APPLE__) // lldb (gdb) installs both standard BSD signal handlers, and mach exception // handlers. By replacing the existing task exception handler, we disable lldb's mach @@ -1784,12 +1793,12 @@ signal_sets_init(); - install_signal_handlers(); - - // Initialize data for jdk.internal.misc.Signal + // Initialize data for jdk.internal.misc.Signal and BREAK_SIGNAL's handler. if (!ReduceSignalUsage) { jdk_misc_signal_init(); } + install_signal_handlers(); + return JNI_OK; } diff -Nru openjdk-17-17.0.4+8/src/hotspot/os/posix/vmError_posix.cpp openjdk-17-17.0.6+10/src/hotspot/os/posix/vmError_posix.cpp --- openjdk-17-17.0.4+8/src/hotspot/os/posix/vmError_posix.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os/posix/vmError_posix.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -77,19 +77,21 @@ } // Needed to make it possible to call SafeFetch.. APIs in error handling. - if (uc && pc && StubRoutines::is_safefetch_fault(pc)) { - os::Posix::ucontext_set_pc(uc, StubRoutines::continuation_for_safefetch_fault(pc)); - return; - } + if (sig == SIGSEGV || sig == SIGBUS) { + if (uc && pc && StubRoutines::is_safefetch_fault(pc)) { + os::Posix::ucontext_set_pc(uc, StubRoutines::continuation_for_safefetch_fault(pc)); + return; + } - // Needed because asserts may happen in error handling too. + // Needed because asserts may happen in error handling too. #ifdef CAN_SHOW_REGISTERS_ON_ASSERT - if ((sig == SIGSEGV || sig == SIGBUS) && info != NULL && info->si_addr == g_assert_poison) { - if (handle_assert_poison_fault(ucVoid, info->si_addr)) { - return; + if (info != NULL && info->si_addr == g_assert_poison) { + if (handle_assert_poison_fault(ucVoid, info->si_addr)) { + return; + } } - } #endif // CAN_SHOW_REGISTERS_ON_ASSERT + } VMError::report_and_die(NULL, sig, pc, info, ucVoid); } diff -Nru openjdk-17-17.0.4+8/src/hotspot/os/windows/os_windows.cpp openjdk-17-17.0.6+10/src/hotspot/os/windows/os_windows.cpp --- openjdk-17-17.0.4+8/src/hotspot/os/windows/os_windows.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os/windows/os_windows.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -22,8 +22,7 @@ * */ -// Must be at least Windows Vista or Server 2008 to use InitOnceExecuteOnce -#define _WIN32_WINNT 0x0600 +// API level must be at least Windows Vista or Server 2008 to use InitOnceExecuteOnce // no precompiled headers #include "jvm.h" @@ -1255,7 +1254,18 @@ const char* os::dll_file_extension() { return ".dll"; } void os::dll_unload(void *lib) { - ::FreeLibrary((HMODULE)lib); + char name[MAX_PATH]; + if (::GetModuleFileName((HMODULE)lib, name, sizeof(name)) == 0) { + snprintf(name, MAX_PATH, ""); + } + if (::FreeLibrary((HMODULE)lib)) { + Events::log_dll_message(NULL, "Unloaded dll \"%s\" [" INTPTR_FORMAT "]", name, p2i(lib)); + log_info(os)("Unloaded dll \"%s\" [" INTPTR_FORMAT "]", name, p2i(lib)); + } else { + const DWORD errcode = ::GetLastError(); + Events::log_dll_message(NULL, "Attempt to unload dll \"%s\" [" INTPTR_FORMAT "] failed (error code %d)", name, p2i(lib), errcode); + log_info(os)("Attempt to unload dll \"%s\" [" INTPTR_FORMAT "] failed (error code %d)", name, p2i(lib), errcode); + } } void* os::dll_lookup(void *lib, const char *name) { @@ -1526,7 +1536,7 @@ void * result = LoadLibrary(name); if (result != NULL) { - Events::log(NULL, "Loaded shared library %s", name); + Events::log_dll_message(NULL, "Loaded shared library %s", name); // Recalculate pdb search path if a DLL was loaded successfully. SymbolEngine::recalc_search_path(); log_info(os)("shared library load of %s was successful", name); @@ -1537,7 +1547,7 @@ // It may or may not be overwritten below (in the for loop and just above) lasterror(ebuf, (size_t) ebuflen); ebuf[ebuflen - 1] = '\0'; - Events::log(NULL, "Loading shared library %s failed, error code %lu", name, errcode); + Events::log_dll_message(NULL, "Loading shared library %s failed, error code %lu", name, errcode); log_info(os)("shared library load of %s failed, error code %lu", name, errcode); if (errcode == ERROR_MOD_NOT_FOUND) { @@ -2256,6 +2266,15 @@ // Add a CTRL-C handler SetConsoleCtrlHandler(consoleHandler, TRUE); + + // Initialize sigbreakHandler. + // The actual work for handling CTRL-BREAK is performed by the Signal + // Dispatcher thread, which is created and started at a much later point, + // see os::initialize_jdk_signal_support(). Any CTRL-BREAK received + // before the Signal Dispatcher thread is started is queued up via the + // pending_signals[SIGBREAK] counter, and will be processed by the + // Signal Dispatcher thread in a delayed fashion. + os::signal(SIGBREAK, os::user_handler()); } void os::signal_notify(int sig) { @@ -3453,9 +3472,6 @@ return pd_release_memory(base, bytes); } -void os::print_statistics() { -} - static void warn_fail_commit_memory(char* addr, size_t bytes, bool exec) { int err = os::get_last_error(); char buf[256]; @@ -4379,7 +4395,8 @@ SymbolEngine::recalc_search_path(); - // Initialize data for jdk.internal.misc.Signal + // Initialize data for jdk.internal.misc.Signal, and install CTRL-C and + // CTRL-BREAK handlers. if (!ReduceSignalUsage) { jdk_misc_signal_init(); } diff -Nru openjdk-17-17.0.4+8/src/hotspot/os_cpu/aix_ppc/thread_aix_ppc.cpp openjdk-17-17.0.6+10/src/hotspot/os_cpu/aix_ppc/thread_aix_ppc.cpp --- openjdk-17-17.0.4+8/src/hotspot/os_cpu/aix_ppc/thread_aix_ppc.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os_cpu/aix_ppc/thread_aix_ppc.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,6 +1,7 @@ /* - * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, 2014 SAP SE. All rights reserved. + * Copyright (c) 2022, IBM Corp. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,33 +25,99 @@ */ #include "precompiled.hpp" +#include "memory/metaspace.hpp" #include "runtime/frame.inline.hpp" #include "runtime/thread.hpp" frame JavaThread::pd_last_frame() { assert(has_last_Java_frame(), "must have last_Java_sp() when suspended"); + // Only called by current thread or when the thread is suspended. + // No memory barrier needed, here. Only writer must write sp last (for use by profiler). intptr_t* sp = last_Java_sp(); address pc = _anchor.last_Java_pc(); // Last_Java_pc ist not set, if we come here from compiled code. - if (pc == NULL) - pc = (address) *(sp + 2); + // Assume spill slot for link register contains a suitable pc. + // Should have been filled by method entry code. + if (pc == NULL) { + pc = (address) *(sp + 2); + } return frame(sp, pc); } bool JavaThread::pd_get_top_frame_for_profiling(frame* fr_addr, void* ucontext, bool isInJava) { - ucontext_t* uc = (ucontext_t*) ucontext; - *fr_addr = frame((intptr_t*)uc->uc_mcontext.jmp_context.gpr[1/*REG_SP*/], - (address)uc->uc_mcontext.jmp_context.iar); - return true; + + // If we have a last_Java_frame, then we should use it even if + // isInJava == true. It should be more reliable than ucontext info. + if (has_last_Java_frame() && frame_anchor()->walkable()) { + intptr_t* sp = last_Java_sp(); + address pc = _anchor.last_Java_pc(); + // pc can be seen as null because not all writers use store pc + release store sp. + // Simply discard the sample in this very rare case. + if (pc == nullptr) return false; + *fr_addr = frame(sp, pc); + return true; + } + + // At this point, we don't have a last_Java_frame, so + // we try to glean some information out of the ucontext + // if we were running Java code when SIGPROF came in. + if (isInJava) { + ucontext_t* uc = (ucontext_t*) ucontext; + address pc = (address)uc->uc_mcontext.jmp_context.iar; + + if (pc == NULL) { + // ucontext wasn't useful + return false; + } + + frame ret_frame((intptr_t*)uc->uc_mcontext.jmp_context.gpr[1/*REG_SP*/], pc); + + if (ret_frame.fp() == NULL) { + // The found frame does not have a valid frame pointer. + // Bail out because this will create big trouble later on, either + // - when using istate, calculated as (NULL - ijava_state_size) or + // - when using fp() directly in safe_for_sender() + // + // There is no conclusive description (yet) how this could happen, but it does. + // For more details on what was observed, see thread_linux_s390.cpp + return false; + } + + if (ret_frame.is_interpreted_frame()) { + frame::ijava_state *istate = ret_frame.get_ijava_state(); + const Method *m = (const Method*)(istate->method); + if (!Method::is_valid_method(m)) return false; + if (!Metaspace::contains(m->constMethod())) return false; + + uint64_t reg_bcp = uc->uc_mcontext.jmp_context.gpr[14/*R14_bcp*/]; + uint64_t istate_bcp = istate->bcp; + uint64_t code_start = (uint64_t)(m->code_base()); + uint64_t code_end = (uint64_t)(m->code_base() + m->code_size()); + if (istate_bcp >= code_start && istate_bcp < code_end) { + // we have a valid bcp, don't touch it, do nothing + } else if (reg_bcp >= code_start && reg_bcp < code_end) { + istate->bcp = reg_bcp; + } else { + return false; + } + } + if (!ret_frame.safe_for_sender(this)) { + // nothing else to try if the frame isn't good + return false; + } + *fr_addr = ret_frame; + return true; + } + // nothing else to try + return false; } -// Forte Analyzer AsyncGetCallTrace profiling support is not implemented on Aix/PPC. +// Forte Analyzer AsyncGetCallTrace profiling support. bool JavaThread::pd_get_top_frame_for_signal_handler(frame* fr_addr, void* ucontext, bool isInJava) { - Unimplemented(); - return false; + return pd_get_top_frame_for_profiling(fr_addr, ucontext, isInJava); } void JavaThread::cache_global_variables() { } diff -Nru openjdk-17-17.0.4+8/src/hotspot/os_cpu/bsd_zero/os_bsd_zero.cpp openjdk-17-17.0.6+10/src/hotspot/os_cpu/bsd_zero/os_bsd_zero.cpp --- openjdk-17-17.0.4+8/src/hotspot/os_cpu/bsd_zero/os_bsd_zero.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os_cpu/bsd_zero/os_bsd_zero.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -350,3 +350,9 @@ // Zero does not require an additional stack bang. return 0; } + +#if defined(AARCH64) && defined(__APPLE__) +void os::current_thread_enable_wx(WXMode mode) { + pthread_jit_write_protect_np(mode == WXExec); +} +#endif diff -Nru openjdk-17-17.0.4+8/src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp openjdk-17-17.0.6+10/src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp --- openjdk-17-17.0.4+8/src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -468,9 +468,8 @@ st->print_cr("Register to memory mapping:"); st->cr(); for (int r = 0; r < ARM_REGS_IN_CONTEXT; r++) { - st->print_cr(" %-3s = " INTPTR_FORMAT, as_Register(r)->name(), reg_area[r]); + st->print(" %-3s = ", as_Register(r)->name()); print_location(st, reg_area[r]); - st->cr(); } st->cr(); } diff -Nru openjdk-17-17.0.4+8/src/hotspot/os_cpu/linux_ppc/thread_linux_ppc.cpp openjdk-17-17.0.6+10/src/hotspot/os_cpu/linux_ppc/thread_linux_ppc.cpp --- openjdk-17-17.0.4+8/src/hotspot/os_cpu/linux_ppc/thread_linux_ppc.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os_cpu/linux_ppc/thread_linux_ppc.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -31,6 +31,8 @@ frame JavaThread::pd_last_frame() { assert(has_last_Java_frame(), "must have last_Java_sp() when suspended"); + // Only called by current thread or when the thread is suspended. + // No memory barrier needed, here. Only writer must write sp last (for use by profiler). intptr_t* sp = last_Java_sp(); address pc = _anchor.last_Java_pc(); @@ -49,7 +51,12 @@ // If we have a last_Java_frame, then we should use it even if // isInJava == true. It should be more reliable than ucontext info. if (has_last_Java_frame() && frame_anchor()->walkable()) { - *fr_addr = pd_last_frame(); + intptr_t* sp = last_Java_sp(); + address pc = _anchor.last_Java_pc(); + // pc can be seen as null because not all writers use store pc + release store sp. + // Simply discard the sample in this very rare case. + if (pc == nullptr) return false; + *fr_addr = frame(sp, pc); return true; } diff -Nru openjdk-17-17.0.4+8/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp openjdk-17-17.0.6+10/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp --- openjdk-17-17.0.4+8/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -459,11 +459,26 @@ } juint os::cpu_microcode_revision() { + // Note: this code runs on startup, and therefore should not be slow, + // see JDK-8283200. + juint result = 0; - char data[2048] = {0}; // lines should fit in 2K buf - size_t len = sizeof(data); - FILE *fp = fopen("/proc/cpuinfo", "r"); + + // Attempt 1 (faster): Read the microcode version off the sysfs. + FILE *fp = fopen("/sys/devices/system/cpu/cpu0/microcode/version", "r"); + if (fp) { + int read = fscanf(fp, "%x", &result); + fclose(fp); + if (read > 0) { + return result; + } + } + + // Attempt 2 (slower): Read the microcode version off the procfs. + fp = fopen("/proc/cpuinfo", "r"); if (fp) { + char data[2048] = {0}; // lines should fit in 2K buf + size_t len = sizeof(data); while (!feof(fp)) { if (fgets(data, len, fp)) { if (strstr(data, "microcode") != NULL) { @@ -475,6 +490,7 @@ } fclose(fp); } + return result; } diff -Nru openjdk-17-17.0.4+8/src/hotspot/os_cpu/linux_zero/thread_linux_zero.cpp openjdk-17-17.0.6+10/src/hotspot/os_cpu/linux_zero/thread_linux_zero.cpp --- openjdk-17-17.0.4+8/src/hotspot/os_cpu/linux_zero/thread_linux_zero.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os_cpu/linux_zero/thread_linux_zero.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,6 +1,6 @@ /* - * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. - * Copyright 2009, 2010 Red Hat, Inc. + * Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2021, Red Hat, Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,3 +35,40 @@ void JavaThread::cache_global_variables() { // nothing to do } + +bool JavaThread::pd_get_top_frame_for_signal_handler(frame* fr_addr, + void* ucontext, + bool isInJava) { + if (has_last_Java_frame()) { + *fr_addr = pd_last_frame(); + return true; + } + + if (isInJava) { + // We know we are in Java, but there is no frame? + // Try to find the top-most Java frame on Zero stack then. + intptr_t* sp = zero_stack()->sp(); + ZeroFrame* zf = top_zero_frame(); + while (zf != NULL) { + if (zf->is_interpreter_frame()) { + interpreterState istate = zf->as_interpreter_frame()->interpreter_state(); + if (istate->self_link() == istate) { + // Valid interpreter state found, this is our frame. + *fr_addr = frame(zf, sp); + return true; + } + } + sp = ((intptr_t *) zf) + 1; + zf = zf->next(); + } + } + + // No dice. + return false; +} + +bool JavaThread::pd_get_top_frame_for_profiling(frame* fr_addr, + void* ucontext, + bool isInJava) { + return pd_get_top_frame_for_signal_handler(fr_addr, ucontext, isInJava); +} diff -Nru openjdk-17-17.0.4+8/src/hotspot/os_cpu/linux_zero/thread_linux_zero.hpp openjdk-17-17.0.6+10/src/hotspot/os_cpu/linux_zero/thread_linux_zero.hpp --- openjdk-17-17.0.4+8/src/hotspot/os_cpu/linux_zero/thread_linux_zero.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/os_cpu/linux_zero/thread_linux_zero.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,6 +1,6 @@ /* - * Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. - * Copyright 2007, 2008, 2009, 2010 Red Hat, Inc. + * Copyright (c) 2000, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2021, Red Hat, Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -96,16 +96,10 @@ public: bool pd_get_top_frame_for_signal_handler(frame* fr_addr, void* ucontext, - bool isInJava) { - ShouldNotCallThis(); - return false; // silence compile warning - } + bool isInJava); bool pd_get_top_frame_for_profiling(frame* fr_addr, void* ucontext, - bool isInJava) { - ShouldNotCallThis(); - return false; // silence compile warning - } + bool isInJava); #endif // OS_CPU_LINUX_ZERO_THREAD_LINUX_ZERO_HPP diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/c1/c1_Canonicalizer.cpp openjdk-17-17.0.6+10/src/hotspot/share/c1/c1_Canonicalizer.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/c1/c1_Canonicalizer.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/c1/c1_Canonicalizer.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -790,7 +790,7 @@ else if (lss_sux == gtr_sux) { cond = If::neq; tsux = lss_sux; fsux = eql_sux; } else if (eql_sux == gtr_sux) { cond = If::geq; tsux = eql_sux; fsux = lss_sux; } else { ShouldNotReachHere(); } - If* canon = new If(cmp->x(), cond, nan_sux == tsux, cmp->y(), tsux, fsux, cmp->state_before(), x->is_safepoint()); + If* canon = new If(cmp->x(), cond, nan_sux == tsux, cmp->y(), tsux, fsux, x->state_before(), x->is_safepoint()); if (cmp->x() == cmp->y()) { do_If(canon); } else { diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/c1/c1_GraphBuilder.cpp openjdk-17-17.0.6+10/src/hotspot/share/c1/c1_GraphBuilder.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/c1/c1_GraphBuilder.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/c1/c1_GraphBuilder.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -213,8 +213,10 @@ } 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); @@ -234,6 +236,8 @@ // 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(); @@ -304,7 +308,9 @@ 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; @@ -2148,8 +2154,7 @@ void GraphBuilder::new_instance(int klass_index) { ValueStack* state_before = copy_state_exhandling(); - bool will_link; - ciKlass* klass = stream()->get_klass(will_link); + ciKlass* klass = stream()->get_klass(); assert(klass->is_instance_klass(), "must be an instance klass"); NewInstance* new_instance = new NewInstance(klass->as_instance_klass(), state_before, stream()->is_unresolved_klass()); _memory->new_instance(new_instance); @@ -2164,8 +2169,7 @@ void GraphBuilder::new_object_array() { - bool will_link; - ciKlass* klass = stream()->get_klass(will_link); + ciKlass* klass = stream()->get_klass(); ValueStack* state_before = !klass->is_loaded() || PatchALot ? copy_state_before() : copy_state_exhandling(); NewArray* n = new NewObjectArray(klass, ipop(), state_before); apush(append_split(n)); @@ -2190,8 +2194,7 @@ void GraphBuilder::check_cast(int klass_index) { - bool will_link; - ciKlass* klass = stream()->get_klass(will_link); + ciKlass* klass = stream()->get_klass(); ValueStack* state_before = !klass->is_loaded() || PatchALot ? copy_state_before() : copy_state_for_exception(); CheckCast* c = new CheckCast(klass, apop(), state_before); apush(append_split(c)); @@ -2211,8 +2214,7 @@ void GraphBuilder::instance_of(int klass_index) { - bool will_link; - ciKlass* klass = stream()->get_klass(will_link); + ciKlass* klass = stream()->get_klass(); ValueStack* state_before = !klass->is_loaded() || PatchALot ? copy_state_before() : copy_state_exhandling(); InstanceOf* i = new InstanceOf(klass, apop(), state_before); ipush(append_split(i)); @@ -2246,8 +2248,7 @@ void GraphBuilder::new_multi_array(int dimensions) { - bool will_link; - ciKlass* klass = stream()->get_klass(will_link); + ciKlass* klass = stream()->get_klass(); ValueStack* state_before = !klass->is_loaded() || PatchALot ? copy_state_before() : copy_state_exhandling(); Values* dims = new Values(dimensions, dimensions, NULL); @@ -4045,20 +4046,28 @@ 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); diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/c1/c1_LIR.hpp openjdk-17-17.0.6+10/src/hotspot/share/c1/c1_LIR.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/c1/c1_LIR.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/c1/c1_LIR.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -231,13 +231,13 @@ , is_xmm_bits = 1 , last_use_bits = 1 , is_fpu_stack_offset_bits = 1 // used in assertion checking on x86 for FPU stack slot allocation - , non_data_bits = pointer_bits + kind_bits + type_bits + size_bits + destroys_bits + virtual_bits + , non_data_bits = kind_bits + type_bits + size_bits + destroys_bits + virtual_bits + is_xmm_bits + last_use_bits + is_fpu_stack_offset_bits , data_bits = BitsPerInt - non_data_bits , reg_bits = data_bits / 2 // for two registers in one value encoding }; - enum OprShift { + enum OprShift : uintptr_t { kind_shift = 0 , type_shift = kind_shift + kind_bits , size_shift = type_shift + type_bits @@ -270,7 +270,7 @@ , no_type_mask = (int)(~(type_mask | last_use_mask | is_fpu_stack_offset_mask)) }; - uintptr_t data() const { return value() >> data_shift; } + uint32_t data() const { return (uint32_t)value() >> data_shift; } int lo_reg_half() const { return data() & lower_reg_mask; } int hi_reg_half() const { return (data() >> reg_bits) & lower_reg_mask; } OprKind kind_field() const { return (OprKind)(value() & kind_mask); } @@ -281,7 +281,9 @@ public: enum { vreg_base = ConcreteRegisterImpl::number_of_registers, - vreg_max = (1 << data_bits) - 1 + data_max = (1 << data_bits) - 1, // max unsigned value for data bit field + vreg_limit = 10000, // choose a reasonable limit, + vreg_max = MIN2(vreg_limit, data_max) // and make sure if fits in the bit field }; static inline LIR_Opr illegalOpr(); @@ -736,7 +738,6 @@ res->validate_type(); assert(res->vreg_number() == index, "conversion check"); assert(index >= LIR_OprDesc::vreg_base, "must start at vreg_base"); - assert(index <= (max_jint >> LIR_OprDesc::data_shift), "index is too big"); // old-style calculation; check if old and new method are equal LIR_OprDesc::OprType t = as_OprType(type); @@ -815,7 +816,7 @@ #ifdef ASSERT assert(index >= 0, "index must be positive"); - assert(index <= (max_jint >> LIR_OprDesc::data_shift), "index is too big"); + assert(index == (int)res->data(), "conversion check"); LIR_Opr old_res = (LIR_Opr)(intptr_t)((index << LIR_OprDesc::data_shift) | LIR_OprDesc::stack_value | @@ -2314,7 +2315,7 @@ typedef enum { inputMode, firstMode = inputMode, tempMode, outputMode, numModes, invalidMode = -1 } OprMode; enum { - maxNumberOfOperands = 20, + maxNumberOfOperands = 21, maxNumberOfInfos = 4 }; diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/c1/c1_LIRGenerator.cpp openjdk-17-17.0.6+10/src/hotspot/share/c1/c1_LIRGenerator.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/c1/c1_LIRGenerator.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/c1/c1_LIRGenerator.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1311,20 +1311,27 @@ info = state_for(x); } - LabelObj* L_not_prim = new LabelObj(); - LabelObj* L_done = new LabelObj(); + // While reading off the universal constant mirror is less efficient than doing + // another branch and returning the constant answer, this branchless code runs into + // much less risk of confusion for C1 register allocator. The choice of the universe + // object here is correct as long as it returns the same modifiers we would expect + // from the primitive class itself. See spec for Class.getModifiers that provides + // the typed array klasses with similar modifiers as their component types. + Klass* univ_klass_obj = Universe::byteArrayKlassObj(); + assert(univ_klass_obj->modifier_flags() == (JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC), "Sanity"); + LIR_Opr prim_klass = LIR_OprFact::metadataConst(univ_klass_obj); + + LIR_Opr recv_klass = new_register(T_METADATA); + __ move(new LIR_Address(receiver.result(), java_lang_Class::klass_offset(), T_ADDRESS), recv_klass, info); + + // Check if this is a Java mirror of primitive type, and select the appropriate klass. LIR_Opr klass = new_register(T_METADATA); - // Checking if it's a java mirror of primitive type - __ move(new LIR_Address(receiver.result(), java_lang_Class::klass_offset(), T_ADDRESS), klass, info); - __ cmp(lir_cond_notEqual, klass, LIR_OprFact::metadataConst(0)); - __ branch(lir_cond_notEqual, L_not_prim->label()); - __ move(LIR_OprFact::intConst(JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC), result); - __ branch(lir_cond_always, L_done->label()); + __ cmp(lir_cond_equal, recv_klass, LIR_OprFact::metadataConst(0)); + __ cmove(lir_cond_equal, prim_klass, recv_klass, klass, T_ADDRESS); - __ branch_destination(L_not_prim->label()); + // Get the answer. __ move(new LIR_Address(klass, in_bytes(Klass::modifier_flags_offset()), T_INT), result); - __ branch_destination(L_done->label()); } // Example: Thread.currentThread() diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/c1/c1_Runtime1.cpp openjdk-17-17.0.6+10/src/hotspot/share/c1/c1_Runtime1.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/c1/c1_Runtime1.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/c1/c1_Runtime1.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1254,6 +1254,37 @@ #else // DEOPTIMIZE_WHEN_PATCHING +static bool is_patching_needed(JavaThread* current, Runtime1::StubID stub_id) { + if (stub_id == Runtime1::load_klass_patching_id || + stub_id == Runtime1::load_mirror_patching_id) { + // last java frame on stack + vframeStream vfst(current, true); + assert(!vfst.at_end(), "Java frame must exist"); + + methodHandle caller_method(current, vfst.method()); + int bci = vfst.bci(); + Bytecodes::Code code = caller_method()->java_code_at(bci); + + switch (code) { + case Bytecodes::_new: + case Bytecodes::_anewarray: + case Bytecodes::_multianewarray: + case Bytecodes::_instanceof: + case Bytecodes::_checkcast: { + Bytecode bc(caller_method(), caller_method->bcp_from(bci)); + constantTag tag = caller_method->constants()->tag_at(bc.get_index_u2(code)); + if (tag.is_unresolved_klass_in_error()) { + return false; // throws resolution error + } + break; + } + + default: break; + } + } + return true; +} + void Runtime1::patch_code(JavaThread* current, Runtime1::StubID stub_id) { NOT_PRODUCT(_patch_code_slowcase_cnt++); @@ -1271,10 +1302,12 @@ frame caller_frame = runtime_frame.sender(®_map); assert(caller_frame.is_compiled_frame(), "Wrong frame type"); - // Make sure the nmethod is invalidated, i.e. made not entrant. - nmethod* nm = CodeCache::find_nmethod(caller_frame.pc()); - if (nm != NULL) { - nm->make_not_entrant(); + if (is_patching_needed(current, stub_id)) { + // Make sure the nmethod is invalidated, i.e. made not entrant. + nmethod* nm = CodeCache::find_nmethod(caller_frame.pc()); + if (nm != NULL) { + nm->make_not_entrant(); + } } Deoptimization::deoptimize_frame(current, caller_frame.id()); diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/ci/ciInstanceKlass.cpp openjdk-17-17.0.6+10/src/hotspot/share/ci/ciInstanceKlass.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/ci/ciInstanceKlass.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/ci/ciInstanceKlass.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -355,7 +355,7 @@ ciKlass::print_impl(st); GUARDED_VM_ENTRY(st->print(" loader=" INTPTR_FORMAT, p2i(loader()));) if (is_loaded()) { - st->print(" loaded=true initialized=%s finalized=%s subklass=%s size=%d flags=", + st->print(" initialized=%s finalized=%s subklass=%s size=%d flags=", bool_to_str(is_initialized()), bool_to_str(has_finalizer()), bool_to_str(has_subklass()), @@ -370,8 +370,6 @@ if (_java_mirror) { st->print(" mirror=PRESENT"); } - } else { - st->print(" loaded=false"); } } @@ -638,8 +636,10 @@ 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(); @@ -653,9 +653,7 @@ } } // Memoize this result. - if (!is_shared()) { - _implementor = impl; - } + _implementor = impl; } return impl; } diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/ci/ciKlass.cpp openjdk-17-17.0.6+10/src/hotspot/share/ci/ciKlass.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/ci/ciKlass.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/ci/ciKlass.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -233,6 +233,7 @@ void ciKlass::print_impl(outputStream* st) { st->print(" name="); print_name_on(st); + st->print(" loaded=%s", (is_loaded() ? "true" : "false")); } // ------------------------------------------------------------------ diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/ci/ciMethodBlocks.cpp openjdk-17-17.0.6+10/src/hotspot/share/ci/ciMethodBlocks.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/ci/ciMethodBlocks.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/ci/ciMethodBlocks.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -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 @@ 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 @@ 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 @@ 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; diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/ci/ciStreams.cpp openjdk-17-17.0.6+10/src/hotspot/share/ci/ciStreams.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/ci/ciStreams.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/ci/ciStreams.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -23,9 +23,10 @@ */ #include "precompiled.hpp" -#include "ci/ciCallSite.hpp" #include "ci/ciConstant.hpp" #include "ci/ciField.hpp" +#include "ci/ciKlass.hpp" +#include "ci/ciObjArrayKlass.hpp" #include "ci/ciStreams.hpp" #include "ci/ciSymbols.hpp" #include "ci/ciUtilities.inline.hpp" @@ -191,6 +192,21 @@ return CURRENT_ENV->get_klass_by_index(cpool, get_klass_index(), will_link, _holder); } +// ciBytecodeStream::get_klass +// +// If this bytecode is a new, newarray, multianewarray, instanceof, +// or checkcast, get the referenced klass. Retuns an unloaded ciKlass +// if the referenced klass is not accessible. +ciKlass* ciBytecodeStream::get_klass() { + bool will_link; + ciKlass* klass = get_klass(will_link); + if (!will_link && klass->is_loaded()) { // klass not accessible + VM_ENTRY_MARK; + klass = CURRENT_ENV->get_unloaded_klass(_holder, klass->name()); + } + return klass; +} + // ------------------------------------------------------------------ // ciBytecodeStream::get_constant_raw_index // diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/ci/ciStreams.hpp openjdk-17-17.0.6+10/src/hotspot/share/ci/ciStreams.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/ci/ciStreams.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/ci/ciStreams.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -217,6 +217,7 @@ // If this bytecode is a new, newarray, multianewarray, instanceof, // or checkcast, get the referenced klass. + ciKlass* get_klass(); ciKlass* get_klass(bool& will_link); int get_klass_index() const; diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/classfile/classLoaderData.cpp openjdk-17-17.0.6+10/src/hotspot/share/classfile/classLoaderData.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/classfile/classLoaderData.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/classfile/classLoaderData.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -968,11 +968,13 @@ out->print_cr(" - keep alive %d", _keep_alive); out->print (" - claim "); switch(_claim) { - case _claim_none: out->print_cr("none"); break; - case _claim_finalizable:out->print_cr("finalizable"); break; - case _claim_strong: out->print_cr("strong"); break; - case _claim_other: out->print_cr("other"); break; - default: ShouldNotReachHere(); + case _claim_none: out->print_cr("none"); break; + case _claim_finalizable: out->print_cr("finalizable"); break; + case _claim_strong: out->print_cr("strong"); break; + case _claim_other: out->print_cr("other"); break; + case _claim_other | _claim_finalizable: out->print_cr("other and finalizable"); break; + case _claim_other | _claim_strong: out->print_cr("other and strong"); break; + default: ShouldNotReachHere(); } out->print_cr(" - handles %d", _handles.count()); out->print_cr(" - dependency count %d", _dependency_count); diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/classfile/javaClasses.cpp openjdk-17-17.0.6+10/src/hotspot/share/classfile/javaClasses.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/classfile/javaClasses.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/classfile/javaClasses.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -4480,6 +4480,7 @@ oop base = vmClasses::System_klass()->static_field_base_raw(); int never = base->int_field(_static_never_offset); allowed = (base->int_field(_static_allow_security_offset) != never); + initialized = true; } return allowed; } diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/classfile/verifier.cpp openjdk-17-17.0.6+10/src/hotspot/share/classfile/verifier.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/classfile/verifier.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/classfile/verifier.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -2947,15 +2947,15 @@ _klass, ref_class, method_name, method_sig, true)) { // It's protected access, check if stack object is // assignable to current class. - bool is_assignable = current_type().is_assignable_from( - stack_object_type, this, true, CHECK_VERIFY(this)); - if (!is_assignable) { - if (ref_class_type.name() == vmSymbols::java_lang_Object() - && stack_object_type.is_array() - && method_name == vmSymbols::clone_name()) { - // Special case: arrays pretend to implement public Object - // clone(). - } else { + if (ref_class_type.name() == vmSymbols::java_lang_Object() + && stack_object_type.is_array() + && method_name == vmSymbols::clone_name()) { + // Special case: arrays pretend to implement public Object + // clone(). + } else { + bool is_assignable = current_type().is_assignable_from( + stack_object_type, this, true, CHECK_VERIFY(this)); + if (!is_assignable) { verify_error(ErrorContext::bad_type(bci, current_frame->stack_top_ctx(), TypeOrigin::implicit(current_type())), diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/classfile/vmIntrinsics.hpp openjdk-17-17.0.6+10/src/hotspot/share/classfile/vmIntrinsics.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/classfile/vmIntrinsics.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/classfile/vmIntrinsics.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -460,7 +460,7 @@ do_class(java_util_Base64_Decoder, "java/util/Base64$Decoder") \ do_intrinsic(_base64_decodeBlock, java_util_Base64_Decoder, decodeBlock_name, decodeBlock_signature, F_R) \ do_name(decodeBlock_name, "decodeBlock") \ - do_signature(decodeBlock_signature, "([BII[BIZ)I") \ + do_signature(decodeBlock_signature, "([BII[BIZZ)I") \ \ /* support for com.sun.crypto.provider.GHASH */ \ do_class(com_sun_crypto_provider_ghash, "com/sun/crypto/provider/GHASH") \ diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/code/codeCache.cpp openjdk-17-17.0.6+10/src/hotspot/share/code/codeCache.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/code/codeCache.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/code/codeCache.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -296,19 +296,20 @@ const size_t alignment = MAX2(page_size(false, 8), (size_t) os::vm_allocation_granularity()); non_nmethod_size = align_up(non_nmethod_size, alignment); profiled_size = align_down(profiled_size, alignment); + non_profiled_size = align_down(non_profiled_size, alignment); // Reserve one continuous chunk of memory for CodeHeaps and split it into // parts for the individual heaps. The memory layout looks like this: // ---------- high ----------- // Non-profiled nmethods - // Profiled nmethods // Non-nmethods + // Profiled nmethods // ---------- low ------------ ReservedCodeSpace rs = reserve_heap_memory(cache_size); - ReservedSpace non_method_space = rs.first_part(non_nmethod_size); - ReservedSpace rest = rs.last_part(non_nmethod_size); - ReservedSpace profiled_space = rest.first_part(profiled_size); - ReservedSpace non_profiled_space = rest.last_part(profiled_size); + ReservedSpace profiled_space = rs.first_part(profiled_size); + ReservedSpace rest = rs.last_part(profiled_size); + ReservedSpace non_method_space = rest.first_part(non_nmethod_size); + ReservedSpace non_profiled_space = rest.last_part(non_nmethod_size); // Non-nmethods (stubs, adapters, ...) add_heap(non_method_space, "CodeHeap 'non-nmethods'", CodeBlobType::NonNMethod); @@ -630,14 +631,23 @@ 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() && current_thread->as_Java_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 @@ -889,6 +899,23 @@ return max_cap; } +bool CodeCache::is_non_nmethod(address addr) { + CodeHeap* blob = get_code_heap(CodeBlobType::NonNMethod); + return blob->contains(addr); +} + +size_t CodeCache::max_distance_to_non_nmethod() { + if (!SegmentedCodeCache) { + return ReservedCodeCacheSize; + } else { + CodeHeap* blob = get_code_heap(CodeBlobType::NonNMethod); + // the max distance is minimized by placing the NonNMethod segment + // in between MethodProfiled and MethodNonProfiled segments + size_t dist1 = (size_t)blob->high() - (size_t)_low_bound; + size_t dist2 = (size_t)_high_bound - (size_t)blob->low(); + return dist1 > dist2 ? dist1 : dist2; + } +} // Returns the reverse free ratio. E.g., if 25% (1/4) of the code cache // is free, reverse_free_ratio() returns 4. @@ -1286,6 +1313,7 @@ event.set_adaptorCount(heap->adapter_count()); event.set_unallocatedCapacity(heap->unallocated_capacity()); event.set_fullCount(heap->full_count()); + event.set_codeCacheMaxCapacity(CodeCache::max_capacity()); event.commit(); } } diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/code/codeCache.hpp openjdk-17-17.0.6+10/src/hotspot/share/code/codeCache.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/code/codeCache.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/code/codeCache.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -213,6 +213,9 @@ static double reverse_free_ratio(); + static size_t max_distance_to_non_nmethod(); + static bool is_non_nmethod(address addr); + static void clear_inline_caches(); // clear all inline caches static void cleanup_inline_caches(); // clean unloaded/zombie nmethods from inline caches diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/compiler/compilationPolicy.cpp openjdk-17-17.0.6+10/src/hotspot/share/compiler/compilationPolicy.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/compiler/compilationPolicy.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/compiler/compilationPolicy.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -191,7 +191,7 @@ // Simple methods are as good being compiled with C1 as C2. // Determine if a given method is such a case. -bool CompilationPolicy::is_trivial(Method* method) { +bool CompilationPolicy::is_trivial(const methodHandle& method) { if (method->is_accessor() || method->is_constant_getter()) { return true; @@ -245,7 +245,7 @@ } } - static bool apply(int i, int b, CompLevel cur_level, const methodHandle& method) { + static bool apply(const methodHandle& method, CompLevel cur_level, int i, int b) { double k = 1; switch(cur_level) { case CompLevel_none: @@ -285,7 +285,7 @@ } } - static bool apply(int i, int b, CompLevel cur_level, const methodHandle& method) { + static bool apply(const methodHandle& method, CompLevel cur_level, int i, int b) { double k = 1; switch(cur_level) { case CompLevel_none: @@ -596,7 +596,7 @@ } // Set carry flags on the counters if necessary -void CompilationPolicy::handle_counter_overflow(Method* method) { +void CompilationPolicy::handle_counter_overflow(const methodHandle& method) { MethodCounters *mcs = method->method_counters(); if (mcs != NULL) { mcs->invocation_counter()->set_carry_on_overflow(); @@ -619,21 +619,25 @@ // Iterate through the queue and find a method with a maximum rate. for (CompileTask* task = compile_queue->first(); task != NULL;) { CompileTask* next_task = task->next(); - Method* method = task->method(); // If a method was unloaded or has been stale for some time, remove it from the queue. // Blocking tasks and tasks submitted from whitebox API don't become stale - if (task->is_unloaded() || (task->can_become_stale() && is_stale(t, TieredCompileTaskTimeout, method) && !is_old(method))) { - if (!task->is_unloaded()) { - if (PrintTieredEvents) { - print_event(REMOVE_FROM_QUEUE, method, method, task->osr_bci(), (CompLevel) task->comp_level()); - } - method->clear_queued_for_compilation(); + if (task->is_unloaded()) { + compile_queue->remove_and_mark_stale(task); + task = next_task; + continue; + } + Method* method = task->method(); + methodHandle mh(Thread::current(), method); + if (task->can_become_stale() && is_stale(t, TieredCompileTaskTimeout, mh) && !is_old(mh)) { + if (PrintTieredEvents) { + print_event(REMOVE_FROM_QUEUE, method, method, task->osr_bci(), (CompLevel) task->comp_level()); } + method->clear_queued_for_compilation(); compile_queue->remove_and_mark_stale(task); task = next_task; continue; } - update_rate(t, method); + update_rate(t, mh); if (max_task == NULL || compare_methods(method, max_method)) { // Select a method with the highest rate max_task = task; @@ -711,9 +715,9 @@ return NULL; } - handle_counter_overflow(method()); + handle_counter_overflow(method); if (method() != inlinee()) { - handle_counter_overflow(inlinee()); + handle_counter_overflow(inlinee); } if (bci == InvocationEntryBci) { @@ -792,43 +796,43 @@ print_event(COMPILE, mh(), mh(), bci, level); } int hot_count = (bci == InvocationEntryBci) ? mh->invocation_count() : mh->backedge_count(); - update_rate(nanos_to_millis(os::javaTimeNanos()), mh()); + update_rate(nanos_to_millis(os::javaTimeNanos()), mh); CompileBroker::compile_method(mh, bci, level, mh, hot_count, CompileTask::Reason_Tiered, THREAD); } } // update_rate() is called from select_task() while holding a compile queue lock. -void CompilationPolicy::update_rate(jlong t, Method* m) { +void CompilationPolicy::update_rate(jlong t, const methodHandle& method) { // Skip update if counters are absent. // Can't allocate them since we are holding compile queue lock. - if (m->method_counters() == NULL) return; + if (method->method_counters() == NULL) return; - if (is_old(m)) { + if (is_old(method)) { // We don't remove old methods from the queue, // so we can just zero the rate. - m->set_rate(0); + method->set_rate(0); return; } // We don't update the rate if we've just came out of a safepoint. // delta_s is the time since last safepoint in milliseconds. jlong delta_s = t - SafepointTracing::end_of_last_safepoint_ms(); - jlong delta_t = t - (m->prev_time() != 0 ? m->prev_time() : start_time()); // milliseconds since the last measurement + jlong delta_t = t - (method->prev_time() != 0 ? method->prev_time() : start_time()); // milliseconds since the last measurement // How many events were there since the last time? - int event_count = m->invocation_count() + m->backedge_count(); - int delta_e = event_count - m->prev_event_count(); + int event_count = method->invocation_count() + method->backedge_count(); + int delta_e = event_count - method->prev_event_count(); // We should be running for at least 1ms. if (delta_s >= TieredRateUpdateMinTime) { // And we must've taken the previous point at least 1ms before. if (delta_t >= TieredRateUpdateMinTime && delta_e > 0) { - m->set_prev_time(t); - m->set_prev_event_count(event_count); - m->set_rate((float)delta_e / (float)delta_t); // Rate is events per millisecond + method->set_prev_time(t); + method->set_prev_event_count(event_count); + method->set_rate((float)delta_e / (float)delta_t); // Rate is events per millisecond } else { if (delta_t > TieredRateUpdateMaxTime && delta_e == 0) { // If nothing happened for 25ms, zero the rate. Don't modify prev values. - m->set_rate(0); + method->set_rate(0); } } } @@ -836,12 +840,12 @@ // Check if this method has been stale for a given number of milliseconds. // See select_task(). -bool CompilationPolicy::is_stale(jlong t, jlong timeout, Method* m) { +bool CompilationPolicy::is_stale(jlong t, jlong timeout, const methodHandle& method) { jlong delta_s = t - SafepointTracing::end_of_last_safepoint_ms(); - jlong delta_t = t - m->prev_time(); + jlong delta_t = t - method->prev_time(); if (delta_t > timeout && delta_s > timeout) { - int event_count = m->invocation_count() + m->backedge_count(); - int delta_e = event_count - m->prev_event_count(); + int event_count = method->invocation_count() + method->backedge_count(); + int delta_e = event_count - method->prev_event_count(); // Return true if there were no events. return delta_e == 0; } @@ -850,13 +854,16 @@ // We don't remove old methods from the compile queue even if they have // very low activity. See select_task(). -bool CompilationPolicy::is_old(Method* method) { - return method->invocation_count() > 50000 || method->backedge_count() > 500000; +bool CompilationPolicy::is_old(const methodHandle& method) { + int i = method->invocation_count(); + int b = method->backedge_count(); + double k = TieredOldPercentage / 100.0; + + return CallPredicate::apply_scaled(method, CompLevel_none, i, b, k) || LoopPredicate::apply_scaled(method, CompLevel_none, i, b, k); } double CompilationPolicy::weight(Method* method) { - return (double)(method->rate() + 1) * - (method->invocation_count() + 1) * (method->backedge_count() + 1); + return (double)(method->rate() + 1) * (method->invocation_count() + 1) * (method->backedge_count() + 1); } // Apply heuristics and return true if x should be compiled before y @@ -905,13 +912,16 @@ if (cur_level != CompLevel_none || force_comp_at_level_simple(method) || CompilationModeFlag::quick_only() || !ProfileInterpreter) { return false; } + if (is_old(method)) { + return true; + } int i = method->invocation_count(); int b = method->backedge_count(); double k = Tier0ProfilingStartPercentage / 100.0; // If the top level compiler is not keeping up, delay profiling. if (CompileBroker::queue_size(CompLevel_full_optimization) <= Tier0Delay * compiler_count(CompLevel_full_optimization)) { - return CallPredicate::apply_scaled(method, CompLevel_full_profile, i, b, k) || LoopPredicate::apply_scaled(method, CompLevel_full_profile, i, b, k); + return CallPredicate::apply_scaled(method, CompLevel_none, i, b, k) || LoopPredicate::apply_scaled(method, CompLevel_none, i, b, k); } return false; } @@ -1001,7 +1011,7 @@ if (force_comp_at_level_simple(method)) { next_level = CompLevel_simple; } else { - if (is_trivial(method())) { + if (is_trivial(method)) { next_level = CompilationModeFlag::disable_intermediate() ? CompLevel_full_optimization : CompLevel_simple; } else { switch(cur_level) { @@ -1010,7 +1020,7 @@ // If we were at full profile level, would we switch to full opt? if (common(method, CompLevel_full_profile, disable_feedback) == CompLevel_full_optimization) { next_level = CompLevel_full_optimization; - } else if (!CompilationModeFlag::disable_intermediate() && Predicate::apply(i, b, cur_level, method)) { + } else if (!CompilationModeFlag::disable_intermediate() && Predicate::apply(method, cur_level, i, b)) { // C1-generated fully profiled code is about 30% slower than the limited profile // code that has only invocation and backedge counters. The observation is that // if C2 queue is large enough we can spend too much time in the fully profiled code @@ -1036,7 +1046,7 @@ if (mdo->would_profile()) { if (disable_feedback || (CompileBroker::queue_size(CompLevel_full_optimization) <= Tier3DelayOff * compiler_count(CompLevel_full_optimization) && - Predicate::apply(i, b, cur_level, method))) { + Predicate::apply(method, cur_level, i, b))) { next_level = CompLevel_full_profile; } } else { @@ -1046,7 +1056,7 @@ // If there is no MDO we need to profile if (disable_feedback || (CompileBroker::queue_size(CompLevel_full_optimization) <= Tier3DelayOff * compiler_count(CompLevel_full_optimization) && - Predicate::apply(i, b, cur_level, method))) { + Predicate::apply(method, cur_level, i, b))) { next_level = CompLevel_full_profile; } } @@ -1059,7 +1069,7 @@ if (mdo->would_profile() || CompilationModeFlag::disable_intermediate()) { int mdo_i = mdo->invocation_count_delta(); int mdo_b = mdo->backedge_count_delta(); - if (Predicate::apply(mdo_i, mdo_b, cur_level, method)) { + if (Predicate::apply(method, cur_level, mdo_i, mdo_b)) { next_level = CompLevel_full_optimization; } } else { @@ -1079,7 +1089,7 @@ // Determine if a method should be compiled with a normal entry point at a different level. CompLevel CompilationPolicy::call_event(const methodHandle& method, CompLevel cur_level, Thread* thread) { CompLevel osr_level = MIN2((CompLevel) method->highest_osr_comp_level(), common(method, cur_level, true)); - CompLevel next_level = common(method, cur_level); + CompLevel next_level = common(method, cur_level, is_old(method)); // If OSR method level is greater than the regular method level, the levels should be // equalized by raising the regular method level in order to avoid OSRs during each diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/compiler/compilationPolicy.hpp openjdk-17-17.0.6+10/src/hotspot/share/compiler/compilationPolicy.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/compiler/compilationPolicy.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/compiler/compilationPolicy.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -169,7 +169,7 @@ static double _increase_threshold_at_ratio; // Set carry flags in the counters (in Method* and MDO). - inline static void handle_counter_overflow(Method* method); + inline static void handle_counter_overflow(const methodHandle& method); // Verify that a level is consistent with the compilation mode static bool verify_level(CompLevel level); // Clamp the request level according to various constraints. @@ -188,17 +188,17 @@ // Has a method been long around? // We don't remove old methods from the compile queue even if they have // very low activity (see select_task()). - inline static bool is_old(Method* method); + inline static bool is_old(const methodHandle& method); // Was a given method inactive for a given number of milliseconds. // If it is, we would remove it from the queue (see select_task()). - inline static bool is_stale(jlong t, jlong timeout, Method* m); + inline static bool is_stale(jlong t, jlong timeout, const methodHandle& method); // Compute the weight of the method for the compilation scheduling inline static double weight(Method* method); // Apply heuristics and return true if x should be compiled before y inline static bool compare_methods(Method* x, Method* y); // Compute event rate for a given method. The rate is the number of event (invocations + backedges) // per millisecond. - inline static void update_rate(jlong t, Method* m); + inline static void update_rate(jlong t, const methodHandle& method); // Compute threshold scaling coefficient inline static double threshold_scale(CompLevel level, int feedback_k); // If a method is old enough and is still in the interpreter we would want to @@ -219,7 +219,7 @@ static void compile(const methodHandle& mh, int bci, CompLevel level, TRAPS); // Simple methods are as good being compiled with C1 as C2. // This function tells if it's such a function. - inline static bool is_trivial(Method* method); + inline static bool is_trivial(const methodHandle& method); // Force method to be compiled at CompLevel_simple? inline static bool force_comp_at_level_simple(const methodHandle& method); diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/compiler/compileBroker.cpp openjdk-17-17.0.6+10/src/hotspot/share/compiler/compileBroker.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/compiler/compileBroker.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/compiler/compileBroker.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -2319,8 +2319,9 @@ /* Repeat compilation without installing code for profiling purposes */ int repeat_compilation_count = directive->RepeatCompilationOption; while (repeat_compilation_count > 0) { + ResourceMark rm(thread); task->print_ul("NO CODE INSTALLED"); - comp->compile_method(&ci_env, target, osr_bci, false , directive); + comp->compile_method(&ci_env, target, osr_bci, false, directive); repeat_compilation_count--; } } diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/compiler/compilerDefinitions.cpp openjdk-17-17.0.6+10/src/hotspot/share/compiler/compilerDefinitions.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/compiler/compilerDefinitions.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/compiler/compilerDefinitions.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -267,12 +267,11 @@ FLAG_SET_ERGO(Tier0BackedgeNotifyFreqLog, MAX2(10, osr_threshold_log)); } // Adjust the tiered policy flags to approximate the legacy behavior. - if (CompilerConfig::is_c1_only()) { - FLAG_SET_ERGO(Tier3InvocationThreshold, threshold); - FLAG_SET_ERGO(Tier3MinInvocationThreshold, threshold); - FLAG_SET_ERGO(Tier3CompileThreshold, threshold); - FLAG_SET_ERGO(Tier3BackEdgeThreshold, osr_threshold); - } else { + FLAG_SET_ERGO(Tier3InvocationThreshold, threshold); + FLAG_SET_ERGO(Tier3MinInvocationThreshold, threshold); + FLAG_SET_ERGO(Tier3CompileThreshold, threshold); + FLAG_SET_ERGO(Tier3BackEdgeThreshold, osr_threshold); + if (CompilerConfig::is_c2_or_jvmci_compiler_only()) { FLAG_SET_ERGO(Tier4InvocationThreshold, threshold); FLAG_SET_ERGO(Tier4MinInvocationThreshold, threshold); FLAG_SET_ERGO(Tier4CompileThreshold, threshold); @@ -339,6 +338,20 @@ if (FLAG_IS_DEFAULT(Tier4BackEdgeThreshold)) { FLAG_SET_DEFAULT(Tier4BackEdgeThreshold, 15000); } + + if (FLAG_IS_DEFAULT(Tier3InvocationThreshold)) { + FLAG_SET_DEFAULT(Tier3InvocationThreshold, Tier4InvocationThreshold); + } + if (FLAG_IS_DEFAULT(Tier3MinInvocationThreshold)) { + FLAG_SET_DEFAULT(Tier3MinInvocationThreshold, Tier4MinInvocationThreshold); + } + if (FLAG_IS_DEFAULT(Tier3CompileThreshold)) { + FLAG_SET_DEFAULT(Tier3CompileThreshold, Tier4CompileThreshold); + } + if (FLAG_IS_DEFAULT(Tier3BackEdgeThreshold)) { + FLAG_SET_DEFAULT(Tier3BackEdgeThreshold, Tier4BackEdgeThreshold); + } + } // Scale tiered compilation thresholds. diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/compiler/compiler_globals.hpp openjdk-17-17.0.6+10/src/hotspot/share/compiler/compiler_globals.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/compiler/compiler_globals.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/compiler/compiler_globals.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -213,6 +213,12 @@ "do not start profiling in the interpreter") \ range(0, max_jint) \ \ + product(intx, TieredOldPercentage, 1000, DIAGNOSTIC, \ + "Percentage over tier 3 thresholds after which a method is " \ + "considered old (turns off parts of prioritization based on " \ + "compile queue length)") \ + range(0, max_jint) \ + \ product(intx, Tier3DelayOn, 5, \ "If C2 queue size grows over this amount per compiler thread " \ "stop compiling at tier 3 and start compiling at tier 2") \ @@ -244,8 +250,7 @@ \ product(intx, Tier0ProfilingStartPercentage, 200, \ "Start profiling in interpreter if the counters exceed the " \ - "specified percentage of tier 3 thresholds (tier 4 thresholds " \ - "with CompilationMode=high-only|high-only-quick-internal)") \ + "specified percentage of tier 3 thresholds") \ range(0, max_jint) \ \ product(uintx, IncreaseFirstTierCompileThresholdAt, 50, \ diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/compiler/methodLiveness.cpp openjdk-17-17.0.6+10/src/hotspot/share/compiler/methodLiveness.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/compiler/methodLiveness.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/compiler/methodLiveness.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -164,10 +164,11 @@ 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); diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/gc/shared/barrierSet.hpp openjdk-17-17.0.6+10/src/hotspot/share/gc/shared/barrierSet.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/gc/shared/barrierSet.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/gc/shared/barrierSet.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -310,10 +310,6 @@ static void clone_in_heap(oop src, oop dst, size_t size) { Raw::clone(src, dst, size); } - - static oop resolve(oop obj) { - return Raw::resolve(obj); - } }; }; diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/gc/shared/c2/barrierSetC2.cpp openjdk-17-17.0.6+10/src/hotspot/share/gc/shared/c2/barrierSetC2.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/gc/shared/c2/barrierSetC2.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/gc/shared/c2/barrierSetC2.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -91,19 +91,19 @@ MemNode::MemOrd mo = access.mem_node_mo(); Node* store; + BasicType bt = access.type(); if (access.is_parse_access()) { C2ParseAccess& parse_access = static_cast(access); GraphKit* kit = parse_access.kit(); - if (access.type() == T_DOUBLE) { + if (bt == T_DOUBLE) { Node* new_val = kit->dstore_rounding(val.node()); val.set_node(new_val); } - store = kit->store_to_memory(kit->control(), access.addr().node(), val.node(), access.type(), - access.addr().type(), mo, requires_atomic_access, unaligned, mismatched, unsafe); + store = kit->store_to_memory(kit->control(), access.addr().node(), val.node(), bt, + access.addr().type(), mo, requires_atomic_access, unaligned, mismatched, unsafe); } else { - assert(!requires_atomic_access, "not yet supported"); assert(access.is_opt_access(), "either parse or opt access"); C2OptAccess& opt_access = static_cast(access); Node* ctl = opt_access.ctl(); @@ -113,7 +113,7 @@ int alias = gvn.C->get_alias_index(adr_type); Node* mem = mm->memory_at(alias); - StoreNode* st = StoreNode::make(gvn, ctl, mem, access.addr().node(), adr_type, val.node(), access.type(), mo); + StoreNode* st = StoreNode::make(gvn, ctl, mem, access.addr().node(), adr_type, val.node(), bt, mo, requires_atomic_access); if (unaligned) { st->set_unaligned_access(); } @@ -156,12 +156,11 @@ Node* control = control_dependent ? kit->control() : NULL; if (immutable) { - assert(!requires_atomic_access, "can't ensure atomicity"); Compile* C = Compile::current(); Node* mem = kit->immutable_memory(); load = LoadNode::make(kit->gvn(), control, mem, adr, - adr_type, val_type, access.type(), mo, dep, unaligned, - mismatched, unsafe, access.barrier_data()); + adr_type, val_type, access.type(), mo, dep, requires_atomic_access, + unaligned, mismatched, unsafe, access.barrier_data()); load = kit->gvn().transform(load); } else { load = kit->make_load(control, adr, val_type, access.type(), adr_type, mo, @@ -169,15 +168,14 @@ access.barrier_data()); } } else { - assert(!requires_atomic_access, "not yet supported"); assert(access.is_opt_access(), "either parse or opt access"); C2OptAccess& opt_access = static_cast(access); Node* control = control_dependent ? opt_access.ctl() : NULL; MergeMemNode* mm = opt_access.mem(); PhaseGVN& gvn = opt_access.gvn(); Node* mem = mm->memory_at(gvn.C->get_alias_index(adr_type)); - load = LoadNode::make(gvn, control, mem, adr, adr_type, val_type, access.type(), mo, - dep, unaligned, mismatched, unsafe, access.barrier_data()); + load = LoadNode::make(gvn, control, mem, adr, adr_type, val_type, access.type(), mo, dep, + requires_atomic_access, unaligned, mismatched, unsafe, access.barrier_data()); load = gvn.transform(load); } access.set_raw_access(load); diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/gc/shared/collectedHeap.hpp openjdk-17-17.0.6+10/src/hotspot/share/gc/shared/collectedHeap.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/gc/shared/collectedHeap.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/gc/shared/collectedHeap.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 @@ -77,7 +77,7 @@ // ShenandoahHeap // ZCollectedHeap // -class CollectedHeap : public CHeapObj { +class CollectedHeap : public CHeapObj { friend class VMStructs; friend class JVMCIVMStructs; friend class IsGCActiveMark; // Block structured external access to _is_gc_active diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1080,7 +1080,8 @@ } else if (can_reshape && n->Opcode() == Op_If && ShenandoahBarrierC2Support::is_heap_stable_test(n) && - n->in(0) != NULL) { + n->in(0) != NULL && + n->outcnt() == 2) { Node* dom = n->in(0); Node* prev_dom = n; int op = n->Opcode(); diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/gc/shenandoah/mode/shenandoahIUMode.cpp openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/mode/shenandoahIUMode.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/gc/shenandoah/mode/shenandoahIUMode.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/mode/shenandoahIUMode.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -65,19 +65,18 @@ } ShenandoahHeuristics* ShenandoahIUMode::initialize_heuristics() const { - if (ShenandoahGCHeuristics != NULL) { - if (strcmp(ShenandoahGCHeuristics, "aggressive") == 0) { - return new ShenandoahAggressiveHeuristics(); - } else if (strcmp(ShenandoahGCHeuristics, "static") == 0) { - return new ShenandoahStaticHeuristics(); - } else if (strcmp(ShenandoahGCHeuristics, "adaptive") == 0) { - return new ShenandoahAdaptiveHeuristics(); - } else if (strcmp(ShenandoahGCHeuristics, "compact") == 0) { - return new ShenandoahCompactHeuristics(); - } else { - vm_exit_during_initialization("Unknown -XX:ShenandoahGCHeuristics option"); - } + if (ShenandoahGCHeuristics == NULL) { + vm_exit_during_initialization("Unknown -XX:ShenandoahGCHeuristics option (null)"); } - ShouldNotReachHere(); + if (strcmp(ShenandoahGCHeuristics, "aggressive") == 0) { + return new ShenandoahAggressiveHeuristics(); + } else if (strcmp(ShenandoahGCHeuristics, "static") == 0) { + return new ShenandoahStaticHeuristics(); + } else if (strcmp(ShenandoahGCHeuristics, "adaptive") == 0) { + return new ShenandoahAdaptiveHeuristics(); + } else if (strcmp(ShenandoahGCHeuristics, "compact") == 0) { + return new ShenandoahCompactHeuristics(); + } + vm_exit_during_initialization("Unknown -XX:ShenandoahGCHeuristics option"); return NULL; } diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/gc/shenandoah/mode/shenandoahPassiveMode.cpp openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/mode/shenandoahPassiveMode.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/gc/shenandoah/mode/shenandoahPassiveMode.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/mode/shenandoahPassiveMode.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -28,6 +28,7 @@ #include "logging/log.hpp" #include "logging/logTag.hpp" #include "runtime/globals_extension.hpp" +#include "runtime/java.hpp" void ShenandoahPassiveMode::initialize_flags() const { // Do not allow concurrent cycles. @@ -55,9 +56,8 @@ // No barriers are required to run. } ShenandoahHeuristics* ShenandoahPassiveMode::initialize_heuristics() const { - if (ShenandoahGCHeuristics != NULL) { - return new ShenandoahPassiveHeuristics(); + if (ShenandoahGCHeuristics == NULL) { + vm_exit_during_initialization("Unknown -XX:ShenandoahGCHeuristics option (null)"); } - ShouldNotReachHere(); - return NULL; + return new ShenandoahPassiveHeuristics(); } diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/gc/shenandoah/mode/shenandoahSATBMode.cpp openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/mode/shenandoahSATBMode.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/gc/shenandoah/mode/shenandoahSATBMode.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/mode/shenandoahSATBMode.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -53,19 +53,18 @@ } ShenandoahHeuristics* ShenandoahSATBMode::initialize_heuristics() const { - if (ShenandoahGCHeuristics != NULL) { - if (strcmp(ShenandoahGCHeuristics, "aggressive") == 0) { - return new ShenandoahAggressiveHeuristics(); - } else if (strcmp(ShenandoahGCHeuristics, "static") == 0) { - return new ShenandoahStaticHeuristics(); - } else if (strcmp(ShenandoahGCHeuristics, "adaptive") == 0) { - return new ShenandoahAdaptiveHeuristics(); - } else if (strcmp(ShenandoahGCHeuristics, "compact") == 0) { - return new ShenandoahCompactHeuristics(); - } else { - vm_exit_during_initialization("Unknown -XX:ShenandoahGCHeuristics option"); - } + if (ShenandoahGCHeuristics == NULL) { + vm_exit_during_initialization("Unknown -XX:ShenandoahGCHeuristics option (null)"); } - ShouldNotReachHere(); + if (strcmp(ShenandoahGCHeuristics, "aggressive") == 0) { + return new ShenandoahAggressiveHeuristics(); + } else if (strcmp(ShenandoahGCHeuristics, "static") == 0) { + return new ShenandoahStaticHeuristics(); + } else if (strcmp(ShenandoahGCHeuristics, "adaptive") == 0) { + return new ShenandoahAdaptiveHeuristics(); + } else if (strcmp(ShenandoahGCHeuristics, "compact") == 0) { + return new ShenandoahCompactHeuristics(); + } + vm_exit_during_initialization("Unknown -XX:ShenandoahGCHeuristics option"); return NULL; } diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2021, Red Hat, Inc. All rights reserved. + * Copyright (c) 2015, 2022, Red Hat, Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -84,13 +84,8 @@ _heap->in_collection_set(obj)) { // Subsumes NULL-check assert(obj != NULL, "cset check must have subsumed NULL-check"); oop fwd = resolve_forwarded_not_null(obj); - // TODO: It should not be necessary to check evac-in-progress here. - // We do it for mark-compact, which may have forwarded objects, - // and objects in cset and gets here via runtime barriers. - // We can probably fix this as soon as mark-compact has its own - // marking phase. if (obj == fwd && _heap->is_evacuation_in_progress()) { - Thread* t = Thread::current(); + Thread* t = Thread::current(); ShenandoahEvacOOMScope oom_evac_scope(t); return _heap->evacuate_object(obj, t); } @@ -205,7 +200,7 @@ // Note: We don't need a keep-alive-barrier here. We already enqueue any loaded reference for SATB anyway, // because it must be the previous value. - res = load_reference_barrier(decorators, res, reinterpret_cast(NULL)); + res = load_reference_barrier(decorators, res, static_cast(nullptr)); satb_enqueue(res); return res; } @@ -216,7 +211,7 @@ oop previous = RawAccess<>::oop_atomic_xchg(addr, new_value); // Note: We don't need a keep-alive-barrier here. We already enqueue any loaded reference for SATB anyway, // because it must be the previous value. - previous = load_reference_barrier(decorators, previous, reinterpret_cast(NULL)); + previous = load_reference_barrier(decorators, previous, static_cast(nullptr)); satb_enqueue(previous); return previous; } diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/gc/shenandoah/shenandoahFullGC.cpp openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/shenandoahFullGC.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/gc/shenandoah/shenandoahFullGC.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/shenandoahFullGC.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -66,6 +66,10 @@ _gc_timer(ShenandoahHeap::heap()->gc_timer()), _preserved_marks(new PreservedMarksSet(true)) {} +ShenandoahFullGC::~ShenandoahFullGC() { + delete _preserved_marks; +} + bool ShenandoahFullGC::collect(GCCause::Cause cause) { vmop_entry_full(cause); // Always success diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/gc/shenandoah/shenandoahFullGC.hpp openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/shenandoahFullGC.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/gc/shenandoah/shenandoahFullGC.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/shenandoahFullGC.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -66,6 +66,7 @@ public: ShenandoahFullGC(); + ~ShenandoahFullGC(); bool collect(GCCause::Cause cause); private: diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -416,7 +416,7 @@ vm_exit_during_initialization("Unknown -XX:ShenandoahGCMode option"); } } else { - ShouldNotReachHere(); + vm_exit_during_initialization("Unknown -XX:ShenandoahGCMode option (null)"); } _gc_mode->initialize_flags(); if (_gc_mode->is_diagnostic() && !UnlockDiagnosticVMOptions) { diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/gc/z/zDriver.cpp openjdk-17-17.0.6+10/src/hotspot/share/gc/z/zDriver.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/gc/z/zDriver.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/gc/z/zDriver.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -493,6 +493,11 @@ // Run GC gc(request); + if (should_terminate()) { + // Abort + break; + } + // Notify GC completed _gc_cycle_port.ack(); diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/gc/z/zReferenceProcessor.cpp openjdk-17-17.0.6+10/src/hotspot/share/gc/z/zReferenceProcessor.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/gc/z/zReferenceProcessor.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/gc/z/zReferenceProcessor.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -59,7 +59,7 @@ default: ShouldNotReachHere(); - return NULL; + return "Unknown"; } } diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/interpreter/bytecode.hpp openjdk-17-17.0.6+10/src/hotspot/share/interpreter/bytecode.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/interpreter/bytecode.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/interpreter/bytecode.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -77,9 +77,11 @@ int get_index_u2(Bytecodes::Code bc, bool is_wide = false) const { assert_same_format_as(bc, is_wide); assert_index_size(2, bc, is_wide); address p = addr_at(is_wide ? 2 : 1); - if (can_use_native_byte_order(bc, is_wide)) + if (can_use_native_byte_order(bc, is_wide)) { return Bytes::get_native_u2(p); - else return Bytes::get_Java_u2(p); + } else { + return Bytes::get_Java_u2(p); + } } int get_index_u1_cpcache(Bytecodes::Code bc) const { assert_same_format_as(bc); assert_index_size(1, bc); diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/interpreter/interpreter.hpp openjdk-17-17.0.6+10/src/hotspot/share/interpreter/interpreter.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/interpreter/interpreter.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/interpreter/interpreter.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -46,10 +46,10 @@ friend class VMStructs; friend class CodeCacheDumper; // possible extension [do not remove] private: - int _size; // the size in bytes - const char* _description; // a description of the codelet, for debugging & printing - Bytecodes::Code _bytecode; // associated bytecode if any NOT_PRODUCT(CodeStrings _strings;) // Comments for annotating assembler output. + const char* _description; // A description of the codelet, for debugging & printing + int _size; // The codelet size in bytes + Bytecodes::Code _bytecode; // Associated bytecode, if any public: // Initialization/finalization diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/interpreter/templateInterpreter.cpp openjdk-17-17.0.6+10/src/hotspot/share/interpreter/templateInterpreter.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/interpreter/templateInterpreter.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/interpreter/templateInterpreter.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -47,7 +47,11 @@ // allocate interpreter int code_size = InterpreterCodeSize; NOT_PRODUCT(code_size *= 4;) // debug uses extra interpreter code space - _code = new StubQueue(new InterpreterCodeletInterface, code_size, NULL, + // 270+ interpreter codelets are generated and each of them is required to be aligned to + // CodeEntryAlignment twice. So we need additional size due to alignment. + int max_aligned_codelets = 280; + int max_aligned_bytes = max_aligned_codelets * CodeEntryAlignment * 2; + _code = new StubQueue(new InterpreterCodeletInterface, code_size + max_aligned_bytes, NULL, "Interpreter"); } diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/jfr/jfr.cpp openjdk-17-17.0.6+10/src/hotspot/share/jfr/jfr.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/jfr/jfr.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/jfr/jfr.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -92,8 +92,8 @@ return t != NULL && t->jfr_thread_local()->is_excluded(); } -void Jfr::on_vm_shutdown(bool exception_handler) { - if (JfrRecorder::is_recording()) { +void Jfr::on_vm_shutdown(bool exception_handler, bool halt) { + if (!halt && JfrRecorder::is_recording()) { JfrEmergencyDump::on_vm_shutdown(exception_handler); } } diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/jfr/jfr.hpp openjdk-17-17.0.6+10/src/hotspot/share/jfr/jfr.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/jfr/jfr.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/jfr/jfr.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -48,7 +48,7 @@ static void on_unloading_classes(); static void on_thread_start(Thread* thread); static void on_thread_exit(Thread* thread); - static void on_vm_shutdown(bool exception_handler = false); + static void on_vm_shutdown(bool exception_handler = false, bool halt = false); static bool on_flight_recorder_option(const JavaVMOption** option, char* delimiter); static bool on_start_flight_recording_option(const JavaVMOption** option, char* delimiter); static void on_vm_error_report(outputStream* st); diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/jfr/metadata/metadata.xml openjdk-17-17.0.6+10/src/hotspot/share/jfr/metadata/metadata.xml --- openjdk-17-17.0.4+8/src/hotspot/share/jfr/metadata/metadata.xml 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/jfr/metadata/metadata.xml 2023-01-10 13:21:55.000000000 +0000 @@ -494,6 +494,11 @@ + + + + + @@ -548,6 +553,7 @@ + diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointManager.cpp openjdk-17-17.0.6+10/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointManager.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointManager.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointManager.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -119,7 +119,9 @@ #ifdef ASSERT static void assert_lease(const BufferPtr buffer) { - assert(buffer != NULL, "invariant"); + if (buffer == nullptr) { + return; + } assert(buffer->acquired_by_self(), "invariant"); assert(buffer->lease(), "invariant"); } @@ -220,8 +222,9 @@ return NULL; } BufferPtr new_buffer = lease(old, thread, used + requested); - assert(new_buffer != NULL, "invariant"); - migrate_outstanding_writes(old, new_buffer, used, requested); + if (new_buffer != nullptr) { + migrate_outstanding_writes(old, new_buffer, used, requested); + } retire(old); return new_buffer; } diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/jfr/recorder/repository/jfrChunk.cpp openjdk-17-17.0.6+10/src/hotspot/share/jfr/recorder/repository/jfrChunk.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/jfr/recorder/repository/jfrChunk.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/jfr/recorder/repository/jfrChunk.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -47,6 +47,8 @@ const jlong now = seconds * 1000000000 + nanos; if (now > last) { last = now; + } else { + ++last; } return last; } diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/jfr/recorder/storage/jfrBuffer.cpp openjdk-17-17.0.6+10/src/hotspot/share/jfr/recorder/storage/jfrBuffer.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/jfr/recorder/storage/jfrBuffer.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/jfr/recorder/storage/jfrBuffer.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -35,13 +35,15 @@ _size(0), _header_size(0), _flags(0), - _context(0) {} + _context(0) + LP64_ONLY(COMMA _pad(0)) {} bool JfrBuffer::initialize(size_t header_size, size_t size) { assert(_next == NULL, "invariant"); assert(_identity == NULL, "invariant"); - _header_size = (u2)header_size; - _size = (u4)(size / BytesPerWord); + assert(header_size <= max_jushort, "invariant"); + _header_size = static_cast(header_size); + _size = size; set_pos(start()); set_top(start()); assert(free_size() == size, "invariant"); diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/jfr/recorder/storage/jfrBuffer.hpp openjdk-17-17.0.6+10/src/hotspot/share/jfr/recorder/storage/jfrBuffer.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/jfr/recorder/storage/jfrBuffer.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/jfr/recorder/storage/jfrBuffer.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -70,10 +70,11 @@ const void* _identity; u1* _pos; mutable const u1* _top; - u4 _size; + size_t _size; u2 _header_size; u1 _flags; u1 _context; + LP64_ONLY(const u4 _pad;) const u1* stable_top() const; @@ -125,7 +126,7 @@ void release_critical_section_top(const u1* new_top); size_t size() const { - return _size * BytesPerWord; + return _size; } size_t total_size() const { diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/jfr/recorder/storage/jfrMemorySpace.inline.hpp openjdk-17-17.0.6+10/src/hotspot/share/jfr/recorder/storage/jfrMemorySpace.inline.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/jfr/recorder/storage/jfrMemorySpace.inline.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/jfr/recorder/storage/jfrMemorySpace.inline.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -202,16 +202,24 @@ // allocations are even multiples of the mspace min size static inline size_t align_allocation_size(size_t requested_size, size_t min_element_size) { + if (requested_size > static_cast(min_intx)) { + assert(false, "requested size: " SIZE_FORMAT " is too large", requested_size); + return 0; + } u8 alloc_size_bytes = min_element_size; while (requested_size > alloc_size_bytes) { alloc_size_bytes <<= 1; } - return (size_t)alloc_size_bytes; + assert(alloc_size_bytes <= static_cast(min_intx), "invariant"); + return static_cast(alloc_size_bytes); } template class RetrievalPolicy, typename FreeListType, typename FullListType, bool epoch_aware> inline typename FreeListType::NodePtr JfrMemorySpace::allocate(size_t size) { const size_t aligned_size_bytes = align_allocation_size(size, _min_element_size); + if (aligned_size_bytes == 0) { + return NULL; + } void* const allocation = JfrCHeapObj::new_array(aligned_size_bytes + sizeof(Node)); if (allocation == NULL) { return NULL; diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/jfr/writers/jfrWriterHost.inline.hpp openjdk-17-17.0.6+10/src/hotspot/share/jfr/writers/jfrWriterHost.inline.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/jfr/writers/jfrWriterHost.inline.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/jfr/writers/jfrWriterHost.inline.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -73,6 +73,7 @@ inline void WriterHost::write(const T* value, size_t len) { assert(value != NULL, "invariant"); assert(len > 0, "invariant"); + assert(len <= max_jint, "invariant"); // Might need T + 1 size u1* const pos = ensure_size(sizeof(T) * len + len); if (pos) { @@ -125,8 +126,9 @@ inline void WriterHost::be_write(const T* value, size_t len) { assert(value != NULL, "invariant"); assert(len > 0, "invariant"); - // Might need T + 1 size - u1* const pos = ensure_size(sizeof(T) * len + len); + assert(len <= max_jint, "invariant"); + // Big endian writes map one-to-one for length, so no extra space is needed. + u1* const pos = ensure_size(sizeof(T) * len); if (pos) { this->set_current_pos(BE::be_write(value, len, pos)); } diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp openjdk-17-17.0.6+10/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -647,6 +647,16 @@ return JVMCIENV->get_jobject(JVMCIENV->get_object_constant(obj)); C2V_END +C2V_VMENTRY_NULL(jobject, getUncachedStringInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) + constantPoolHandle cp(THREAD, JVMCIENV->asConstantPool(jvmci_constant_pool)); + constantTag tag = cp->tag_at(index); + if (!tag.is_string()) { + JVMCI_THROW_MSG_NULL(IllegalArgumentException, err_msg("Unexpected constant pool tag at index %d: %d", index, tag.value())); + } + oop obj = cp->uncached_string_at(index, CHECK_NULL); + return JVMCIENV->get_jobject(JVMCIENV->get_object_constant(obj)); +C2V_END + C2V_VMENTRY_0(jint, lookupNameAndTypeRefIndexInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) constantPoolHandle cp(THREAD, JVMCIENV->asConstantPool(jvmci_constant_pool)); return cp->name_and_type_ref_index_at(index); @@ -1783,9 +1793,6 @@ } InstanceKlass* iklass = InstanceKlass::cast(klass); - // Ensure class is linked - iklass->link_class(CHECK_NULL); - GrowableArray constructors_array; for (int i = 0; i < iklass->methods()->length(); i++) { Method* m = iklass->methods()->at(i); @@ -1813,9 +1820,6 @@ } InstanceKlass* iklass = InstanceKlass::cast(klass); - // Ensure class is linked - iklass->link_class(CHECK_NULL); - GrowableArray methods_array; for (int i = 0; i < iklass->methods()->length(); i++) { Method* m = iklass->methods()->at(i); @@ -2590,6 +2594,49 @@ } } +C2V_VMENTRY(void, setThreadLocalObject, (JNIEnv* env, jobject, jint id, jobject value)) + requireInHotSpot("setThreadLocalObject", JVMCI_CHECK); + if (id == 0) { + thread->set_jvmci_reserved_oop0(JNIHandles::resolve(value)); + return; + } + THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), + err_msg("%d is not a valid thread local id", id)); +} + +C2V_VMENTRY_NULL(jobject, getThreadLocalObject, (JNIEnv* env, jobject, jint id)) + requireInHotSpot("getThreadLocalObject", JVMCI_CHECK_NULL); + if (id == 0) { + return JNIHandles::make_local(thread->get_jvmci_reserved_oop0()); + } + THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), + err_msg("%d is not a valid thread local id", id)); +} + +C2V_VMENTRY(void, setThreadLocalLong, (JNIEnv* env, jobject, jint id, jlong value)) + requireInHotSpot("setThreadLocalLong", JVMCI_CHECK); + if (id == 0) { + thread->set_jvmci_reserved0(value); + } else if (id == 1) { + thread->set_jvmci_reserved1(value); + } else { + THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), + err_msg("%d is not a valid thread local id", id)); + } +} + +C2V_VMENTRY_0(jlong, getThreadLocalLong, (JNIEnv* env, jobject, jint id)) + requireInHotSpot("getThreadLocalLong", JVMCI_CHECK_0); + if (id == 0) { + return thread->get_jvmci_reserved0(); + } else if (id == 1) { + return thread->get_jvmci_reserved1(); + } else { + THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), + err_msg("%d is not a valid thread local id", id)); + } +} + #define CC (char*) /*cast a literal from (const char*)*/ #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(c2v_ ## f)) @@ -2647,6 +2694,7 @@ {CC "lookupMethodInPool", CC "(" HS_CONSTANT_POOL "IB)" HS_RESOLVED_METHOD, FN_PTR(lookupMethodInPool)}, {CC "constantPoolRemapInstructionOperandFromCache", CC "(" HS_CONSTANT_POOL "I)I", FN_PTR(constantPoolRemapInstructionOperandFromCache)}, {CC "resolvePossiblyCachedConstantInPool", CC "(" HS_CONSTANT_POOL "I)" JAVACONSTANT, FN_PTR(resolvePossiblyCachedConstantInPool)}, + {CC "getUncachedStringInPool", CC "(" HS_CONSTANT_POOL "I)" JAVACONSTANT, FN_PTR(getUncachedStringInPool)}, {CC "resolveTypeInPool", CC "(" HS_CONSTANT_POOL "I)" HS_RESOLVED_KLASS, FN_PTR(resolveTypeInPool)}, {CC "resolveFieldInPool", CC "(" HS_CONSTANT_POOL "I" HS_RESOLVED_METHOD "B[I)" HS_RESOLVED_KLASS, FN_PTR(resolveFieldInPool)}, {CC "resolveInvokeDynamicInPool", CC "(" HS_CONSTANT_POOL "I)V", FN_PTR(resolveInvokeDynamicInPool)}, @@ -2731,6 +2779,10 @@ {CC "addFailedSpeculation", CC "(J[B)Z", FN_PTR(addFailedSpeculation)}, {CC "callSystemExit", CC "(I)V", FN_PTR(callSystemExit)}, {CC "ticksNow", CC "()J", FN_PTR(ticksNow)}, + {CC "getThreadLocalObject", CC "(I)" OBJECT, FN_PTR(getThreadLocalObject)}, + {CC "setThreadLocalObject", CC "(I" OBJECT ")V", FN_PTR(setThreadLocalObject)}, + {CC "getThreadLocalLong", CC "(I)J", FN_PTR(getThreadLocalLong)}, + {CC "setThreadLocalLong", CC "(IJ)V", FN_PTR(setThreadLocalLong)}, {CC "registerCompilerPhase", CC "(" STRING ")I", FN_PTR(registerCompilerPhase)}, {CC "notifyCompilerPhaseEvent", CC "(JIII)V", FN_PTR(notifyCompilerPhaseEvent)}, {CC "notifyCompilerInliningEvent", CC "(I" HS_RESOLVED_METHOD HS_RESOLVED_METHOD "ZLjava/lang/String;I)V", FN_PTR(notifyCompilerInliningEvent)}, diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/jvmci/vmStructs_jvmci.cpp openjdk-17-17.0.6+10/src/hotspot/share/jvmci/vmStructs_jvmci.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/jvmci/vmStructs_jvmci.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/jvmci/vmStructs_jvmci.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -183,8 +183,8 @@ nonstatic_field(JavaThread, _pending_failed_speculation, jlong) \ nonstatic_field(JavaThread, _pending_transfer_to_interpreter, bool) \ nonstatic_field(JavaThread, _jvmci_counters, jlong*) \ - nonstatic_field(JavaThread, _jvmci_reserved0, intptr_t*) \ - nonstatic_field(JavaThread, _jvmci_reserved1, intptr_t*) \ + nonstatic_field(JavaThread, _jvmci_reserved0, jlong) \ + nonstatic_field(JavaThread, _jvmci_reserved1, jlong) \ nonstatic_field(JavaThread, _jvmci_reserved_oop0, oop) \ nonstatic_field(JavaThread, _should_post_on_exceptions_flag, int) \ nonstatic_field(JavaThread, _jni_environment, JNIEnv) \ diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/oops/access.hpp openjdk-17-17.0.6+10/src/hotspot/share/oops/access.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/oops/access.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/oops/access.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -57,7 +57,6 @@ // * atomic_xchg_at: Atomically swap a new value at an internal pointer address if previous value matched the compared value. // * arraycopy: Copy data from one heap array to another heap array. The ArrayAccess class has convenience functions for this. // * clone: Clone the contents of an object to a newly allocated object. -// * resolve: Resolve a stable to-space invariant oop that is guaranteed not to relocate its payload until a subsequent thread transition. // // == IMPLEMENTATION == // Each access goes through the following steps in a template pipeline. @@ -295,8 +294,8 @@ static inline void arraycopy(arrayOop src_obj, size_t src_offset_in_bytes, arrayOop dst_obj, size_t dst_offset_in_bytes, size_t length) { - AccessT::arraycopy(src_obj, src_offset_in_bytes, reinterpret_cast(NULL), - dst_obj, dst_offset_in_bytes, reinterpret_cast(NULL), + AccessT::arraycopy(src_obj, src_offset_in_bytes, static_cast(nullptr), + dst_obj, dst_offset_in_bytes, static_cast(nullptr), length); } @@ -304,7 +303,7 @@ static inline void arraycopy_to_native(arrayOop src_obj, size_t src_offset_in_bytes, T* dst, size_t length) { - AccessT::arraycopy(src_obj, src_offset_in_bytes, reinterpret_cast(NULL), + AccessT::arraycopy(src_obj, src_offset_in_bytes, static_cast(nullptr), NULL, 0, dst, length); } @@ -314,15 +313,15 @@ arrayOop dst_obj, size_t dst_offset_in_bytes, size_t length) { AccessT::arraycopy(NULL, 0, src, - dst_obj, dst_offset_in_bytes, reinterpret_cast(NULL), + dst_obj, dst_offset_in_bytes, static_cast(nullptr), length); } static inline bool oop_arraycopy(arrayOop src_obj, size_t src_offset_in_bytes, arrayOop dst_obj, size_t dst_offset_in_bytes, size_t length) { - return AccessT::oop_arraycopy(src_obj, src_offset_in_bytes, reinterpret_cast(NULL), - dst_obj, dst_offset_in_bytes, reinterpret_cast(NULL), + return AccessT::oop_arraycopy(src_obj, src_offset_in_bytes, static_cast(nullptr), + dst_obj, dst_offset_in_bytes, static_cast(nullptr), length); } diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/oops/access.inline.hpp openjdk-17-17.0.6+10/src/hotspot/share/oops/access.inline.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/oops/access.inline.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/oops/access.inline.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -200,13 +200,6 @@ } }; - template - struct PostRuntimeDispatch: public AllStatic { - static oop access_barrier(oop obj) { - return GCBarrierType::resolve(obj); - } - }; - // Resolving accessors with barriers from the barrier set happens in two steps. // 1. Expand paths with runtime-decorators, e.g. is UseCompressedOops on or off. // 2. Expand paths for each BarrierSet available in the system. @@ -354,13 +347,6 @@ _clone_func = function; function(src, dst, size); } - - template - oop RuntimeDispatch::resolve_init(oop obj) { - func_t function = BarrierResolver::resolve_barrier(); - _resolve_func = function; - return function(obj); - } } #endif // SHARE_OOPS_ACCESS_INLINE_HPP diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/oops/accessBackend.hpp openjdk-17-17.0.6+10/src/hotspot/share/oops/accessBackend.hpp --- openjdk-17-17.0.4+8/src/hotspot/share/oops/accessBackend.hpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/oops/accessBackend.hpp 2023-01-10 13:21:55.000000000 +0000 @@ -63,8 +63,7 @@ BARRIER_ATOMIC_XCHG, BARRIER_ATOMIC_XCHG_AT, BARRIER_ARRAYCOPY, - BARRIER_CLONE, - BARRIER_RESOLVE + BARRIER_CLONE }; template @@ -114,7 +113,6 @@ arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw, size_t length); typedef void (*clone_func_t)(oop src, oop dst, size_t size); - typedef oop (*resolve_func_t)(oop obj); }; template @@ -141,7 +139,6 @@ ACCESS_GENERATE_ACCESS_FUNCTION(BARRIER_ATOMIC_XCHG_AT, atomic_xchg_at_func_t); ACCESS_GENERATE_ACCESS_FUNCTION(BARRIER_ARRAYCOPY, arraycopy_func_t); ACCESS_GENERATE_ACCESS_FUNCTION(BARRIER_CLONE, clone_func_t); - ACCESS_GENERATE_ACCESS_FUNCTION(BARRIER_RESOLVE, resolve_func_t); #undef ACCESS_GENERATE_ACCESS_FUNCTION template @@ -391,8 +388,6 @@ size_t length); static void clone(oop src, oop dst, size_t size); - - static oop resolve(oop obj) { return obj; } }; // Below is the implementation of the first 4 steps of the template pipeline: @@ -574,18 +569,6 @@ } }; - template - struct RuntimeDispatch: AllStatic { - typedef typename AccessFunction::type func_t; - static func_t _resolve_func; - - static oop resolve_init(oop obj); - - static inline oop resolve(oop obj) { - return _resolve_func(obj); - } - }; - // Initialize the function pointers to point to the resolving function. template typename AccessFunction::type @@ -627,10 +610,6 @@ typename AccessFunction::type RuntimeDispatch::_clone_func = &clone_init; - template - typename AccessFunction::type - RuntimeDispatch::_resolve_func = &resolve_init; - // Step 3: Pre-runtime dispatching. // The PreRuntimeDispatch class is responsible for filtering the barrier strength // decorators. That is, for AS_RAW, it hardwires the accesses without a runtime diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/oops/generateOopMap.cpp openjdk-17-17.0.6+10/src/hotspot/share/oops/generateOopMap.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/oops/generateOopMap.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/oops/generateOopMap.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -547,7 +547,13 @@ case Bytecodes::_ifnull: case Bytecodes::_ifnonnull: (*jmpFct)(this, bcs->dest(), data); - (*jmpFct)(this, bci + 3, data); + // Class files verified by the old verifier can have a conditional branch + // as their last bytecode, provided the conditional branch is unreachable + // during execution. Check if this instruction is the method's last bytecode + // and, if so, don't call the jmpFct. + if (bci + 3 < method()->code_size()) { + (*jmpFct)(this, bci + 3, data); + } break; case Bytecodes::_goto: diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/oops/methodData.cpp openjdk-17-17.0.6+10/src/hotspot/share/oops/methodData.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/oops/methodData.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/oops/methodData.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1242,7 +1242,9 @@ 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 diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/opto/callGenerator.cpp openjdk-17-17.0.6+10/src/hotspot/share/opto/callGenerator.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/opto/callGenerator.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/opto/callGenerator.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1115,22 +1115,29 @@ 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, + 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, - allow_inline, - PROB_ALWAYS); - return cg; } else { print_inlining_failure(C, callee, jvms->depth() - 1, jvms->bci(), "receiver not constant"); diff -Nru openjdk-17-17.0.4+8/src/hotspot/share/opto/callnode.cpp openjdk-17-17.0.6+10/src/hotspot/share/opto/callnode.cpp --- openjdk-17-17.0.4+8/src/hotspot/share/opto/callnode.cpp 2022-07-14 08:05:38.000000000 +0000 +++ openjdk-17-17.0.6+10/src/hotspot/share/opto/callnode.cpp 2023-01-10 13:21:55.000000000 +0000 @@ -1654,7 +1654,6 @@ init_req( KlassNode , klass_node); init_req( InitialTest , initial_test); init_req( ALength , topnode); - init_req( ValidLengthTest , topnode); C->add_macro_node(this); } @@ -1687,6 +1686,54 @@ return mark_node; } +//============================================================================= +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* catchpr