From 6c00f2c2500195869904cd74548585b204b0eea7 Mon Sep 17 00:00:00 2001 From: Benshuai5D Date: Sat, 30 Mar 2024 16:52:56 +0800 Subject: [PATCH] bug fix for 8u402 --- ...ndles-remove_dependent_nmethod-is-no.patch | 1220 ++++++++++++++++ ...ring-InstanceKlass-unloading-when-cl.patch | 135 ++ ...p-num_q-no_of_gc_workers-failed-sani.patch | 144 ++ ...bility-dcmd-framework-VMVersionTest..patch | 24 + ...725-tz-Update-Timezone-Data-to-2023d.patch | 833 +++++++++++ ...150-tz-Update-Timezone-Data-to-2024a.patch | 1257 +++++++++++++++++ GCC-12-reports-some-compiler-warnings.patch | 41 + openjdk-1.8.0.spec | 27 +- 8 files changed, 3680 insertions(+), 1 deletion(-) create mode 100644 8139595-MethodHandles-remove_dependent_nmethod-is-no.patch create mode 100644 8143408-Crash-during-InstanceKlass-unloading-when-cl.patch create mode 100644 8149343-assert-rp-num_q-no_of_gc_workers-failed-sani.patch create mode 100644 8220175-serviceability-dcmd-framework-VMVersionTest..patch create mode 100644 8322725-tz-Update-Timezone-Data-to-2023d.patch create mode 100644 8325150-tz-Update-Timezone-Data-to-2024a.patch create mode 100644 GCC-12-reports-some-compiler-warnings.patch diff --git a/8139595-MethodHandles-remove_dependent_nmethod-is-no.patch b/8139595-MethodHandles-remove_dependent_nmethod-is-no.patch new file mode 100644 index 0000000..94a3dc9 --- /dev/null +++ b/8139595-MethodHandles-remove_dependent_nmethod-is-no.patch @@ -0,0 +1,1220 @@ +Date: Sat, 30 Mar 2024 07:12:45 +0000 +Subject: 8139595: MethodHandles::remove_dependent_nmethod is not + MT safe + +--- + .../src/share/vm/classfile/javaClasses.cpp | 17 +- + .../src/share/vm/classfile/javaClasses.hpp | 5 +- + .../src/share/vm/code/dependencyContext.cpp | 347 ++++++++++++++++++ + .../src/share/vm/code/dependencyContext.hpp | 152 ++++++++ + .../src/share/vm/compiler/compileBroker.cpp | 2 +- + hotspot/src/share/vm/oops/instanceKlass.cpp | 207 +---------- + hotspot/src/share/vm/oops/instanceKlass.hpp | 62 +--- + hotspot/src/share/vm/prims/jni.cpp | 2 + + hotspot/src/share/vm/prims/methodHandles.cpp | 64 ++-- + hotspot/src/share/vm/runtime/init.cpp | 2 + + hotspot/src/share/vm/runtime/perfData.hpp | 1 + + hotspot/src/share/vm/runtime/vmStructs.cpp | 5 - + 12 files changed, 573 insertions(+), 293 deletions(-) + create mode 100644 hotspot/src/share/vm/code/dependencyContext.cpp + create mode 100644 hotspot/src/share/vm/code/dependencyContext.hpp + +diff --git a/hotspot/src/share/vm/classfile/javaClasses.cpp b/hotspot/src/share/vm/classfile/javaClasses.cpp +index 267bbacd..ece8ef03 100644 +--- a/hotspot/src/share/vm/classfile/javaClasses.cpp ++++ b/hotspot/src/share/vm/classfile/javaClasses.cpp +@@ -28,6 +28,7 @@ + #include "classfile/symbolTable.hpp" + #include "classfile/vmSymbols.hpp" + #include "code/debugInfo.hpp" ++#include "code/dependencyContext.hpp" + #include "code/pcDesc.hpp" + #include "compiler/compilerOracle.hpp" + #include "interpreter/interpreter.hpp" +@@ -3033,14 +3034,16 @@ void java_lang_invoke_MethodHandleNatives_CallSiteContext::compute_offsets() { + } + } + +-nmethodBucket* java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(oop call_site) { ++DependencyContext java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(oop call_site) { + assert(java_lang_invoke_MethodHandleNatives_CallSiteContext::is_instance(call_site), ""); +- return (nmethodBucket*) (address) call_site->long_field(_vmdependencies_offset); +-} +- +-void java_lang_invoke_MethodHandleNatives_CallSiteContext::set_vmdependencies(oop call_site, nmethodBucket* context) { +- assert(java_lang_invoke_MethodHandleNatives_CallSiteContext::is_instance(call_site), ""); +- call_site->long_field_put(_vmdependencies_offset, (jlong) (address) context); ++ intptr_t* vmdeps_addr = (intptr_t*)call_site->address_field_addr(_vmdependencies_offset); ++#ifndef ASSERT ++ DependencyContext dep_ctx(vmdeps_addr); ++#else ++ // Verify that call_site isn't moved during DependencyContext lifetime. ++ DependencyContext dep_ctx(vmdeps_addr, Handle(call_site)); ++#endif // ASSERT ++ return dep_ctx; + } + + // Support for java_security_AccessControlContext +diff --git a/hotspot/src/share/vm/classfile/javaClasses.hpp b/hotspot/src/share/vm/classfile/javaClasses.hpp +index 1eb04b96..ccd0cf27 100644 +--- a/hotspot/src/share/vm/classfile/javaClasses.hpp ++++ b/hotspot/src/share/vm/classfile/javaClasses.hpp +@@ -1243,6 +1243,8 @@ public: + #define CALLSITECONTEXT_INJECTED_FIELDS(macro) \ + macro(java_lang_invoke_MethodHandleNatives_CallSiteContext, vmdependencies, intptr_signature, false) + ++class DependencyContext; ++ + class java_lang_invoke_MethodHandleNatives_CallSiteContext : AllStatic { + friend class JavaClasses; + +@@ -1253,8 +1255,7 @@ private: + + public: + // Accessors +- static nmethodBucket* vmdependencies(oop context); +- static void set_vmdependencies(oop context, nmethodBucket* bucket); ++ static DependencyContext vmdependencies(oop context); + + // Testers + static bool is_subclass(Klass* klass) { +diff --git a/hotspot/src/share/vm/code/dependencyContext.cpp b/hotspot/src/share/vm/code/dependencyContext.cpp +new file mode 100644 +index 00000000..5c0af1e3 +--- /dev/null ++++ b/hotspot/src/share/vm/code/dependencyContext.cpp +@@ -0,0 +1,347 @@ ++/* ++ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ * ++ */ ++ ++#include "precompiled.hpp" ++#include "code/nmethod.hpp" ++#include "code/dependencies.hpp" ++#include "code/dependencyContext.hpp" ++#include "memory/resourceArea.hpp" ++#include "runtime/atomic.hpp" ++#include "runtime/perfData.hpp" ++#include "utilities/exceptions.hpp" ++ ++PerfCounter* DependencyContext::_perf_total_buckets_allocated_count = NULL; ++PerfCounter* DependencyContext::_perf_total_buckets_deallocated_count = NULL; ++PerfCounter* DependencyContext::_perf_total_buckets_stale_count = NULL; ++PerfCounter* DependencyContext::_perf_total_buckets_stale_acc_count = NULL; ++ ++void dependencyContext_init() { ++ DependencyContext::init(); ++} ++ ++void DependencyContext::init() { ++ if (UsePerfData) { ++ EXCEPTION_MARK; ++ _perf_total_buckets_allocated_count = ++ PerfDataManager::create_counter(SUN_CI, "nmethodBucketsAllocated", PerfData::U_Events, CHECK); ++ _perf_total_buckets_deallocated_count = ++ PerfDataManager::create_counter(SUN_CI, "nmethodBucketsDeallocated", PerfData::U_Events, CHECK); ++ _perf_total_buckets_stale_count = ++ PerfDataManager::create_counter(SUN_CI, "nmethodBucketsStale", PerfData::U_Events, CHECK); ++ _perf_total_buckets_stale_acc_count = ++ PerfDataManager::create_counter(SUN_CI, "nmethodBucketsStaleAccumulated", PerfData::U_Events, CHECK); ++ } ++} ++ ++// ++// Walk the list of dependent nmethods searching for nmethods which ++// are dependent on the changes that were passed in and mark them for ++// deoptimization. Returns the number of nmethods found. ++// ++int DependencyContext::mark_dependent_nmethods(DepChange& changes) { ++ int found = 0; ++ for (nmethodBucket* b = dependencies(); b != NULL; b = b->next()) { ++ nmethod* nm = b->get_nmethod(); ++ // since dependencies aren't removed until an nmethod becomes a zombie, ++ // the dependency list may contain nmethods which aren't alive. ++ if (b->count() > 0 && nm->is_alive() && !nm->is_marked_for_deoptimization() && nm->check_dependency_on(changes)) { ++ if (TraceDependencies) { ++ ResourceMark rm; ++ tty->print_cr("Marked for deoptimization"); ++ changes.print(); ++ nm->print(); ++ nm->print_dependencies(); ++ } ++ nm->mark_for_deoptimization(); ++ found++; ++ } ++ } ++ return found; ++} ++ ++// ++// Add an nmethod to the dependency context. ++// It's possible that an nmethod has multiple dependencies on a klass ++// so a count is kept for each bucket to guarantee that creation and ++// deletion of dependencies is consistent. ++// ++void DependencyContext::add_dependent_nmethod(nmethod* nm, bool expunge) { ++ assert_lock_strong(CodeCache_lock); ++ for (nmethodBucket* b = dependencies(); b != NULL; b = b->next()) { ++ if (nm == b->get_nmethod()) { ++ b->increment(); ++ return; ++ } ++ } ++ set_dependencies(new nmethodBucket(nm, dependencies())); ++ if (UsePerfData) { ++ _perf_total_buckets_allocated_count->inc(); ++ } ++ if (expunge) { ++ // Remove stale entries from the list. ++ expunge_stale_entries(); ++ } ++} ++ ++// ++// Remove an nmethod dependency from the context. ++// Decrement count of the nmethod in the dependency list and, optionally, remove ++// the bucket completely when the count goes to 0. This method must find ++// a corresponding bucket otherwise there's a bug in the recording of dependencies. ++// Can be called concurrently by parallel GC threads. ++// ++void DependencyContext::remove_dependent_nmethod(nmethod* nm, bool expunge) { ++ assert_locked_or_safepoint(CodeCache_lock); ++ nmethodBucket* first = dependencies(); ++ nmethodBucket* last = NULL; ++ for (nmethodBucket* b = first; b != NULL; b = b->next()) { ++ if (nm == b->get_nmethod()) { ++ int val = b->decrement(); ++ guarantee(val >= 0, err_msg("Underflow: %d", val)); ++ if (val == 0) { ++ if (expunge) { ++ if (last == NULL) { ++ set_dependencies(b->next()); ++ } else { ++ last->set_next(b->next()); ++ } ++ delete b; ++ if (UsePerfData) { ++ _perf_total_buckets_deallocated_count->inc(); ++ } ++ } else { ++ // Mark the context as having stale entries, since it is not safe to ++ // expunge the list right now. ++ set_has_stale_entries(true); ++ if (UsePerfData) { ++ _perf_total_buckets_stale_count->inc(); ++ _perf_total_buckets_stale_acc_count->inc(); ++ } ++ } ++ } ++ if (expunge) { ++ // Remove stale entries from the list. ++ expunge_stale_entries(); ++ } ++ return; ++ } ++ last = b; ++ } ++#ifdef ASSERT ++ tty->print_raw_cr("### can't find dependent nmethod"); ++ nm->print(); ++#endif // ASSERT ++ ShouldNotReachHere(); ++} ++ ++// ++// Reclaim all unused buckets. ++// ++void DependencyContext::expunge_stale_entries() { ++ assert_locked_or_safepoint(CodeCache_lock); ++ if (!has_stale_entries()) { ++ assert(!find_stale_entries(), "inconsistent info"); ++ return; ++ } ++ nmethodBucket* first = dependencies(); ++ nmethodBucket* last = NULL; ++ int removed = 0; ++ for (nmethodBucket* b = first; b != NULL;) { ++ assert(b->count() >= 0, err_msg("bucket count: %d", b->count())); ++ nmethodBucket* next = b->next(); ++ if (b->count() == 0) { ++ if (last == NULL) { ++ first = next; ++ } else { ++ last->set_next(next); ++ } ++ removed++; ++ delete b; ++ // last stays the same. ++ } else { ++ last = b; ++ } ++ b = next; ++ } ++ set_dependencies(first); ++ set_has_stale_entries(false); ++ if (UsePerfData && removed > 0) { ++ _perf_total_buckets_deallocated_count->inc(removed); ++ _perf_total_buckets_stale_count->dec(removed); ++ } ++} ++ ++// ++// Invalidate all dependencies in the context ++int DependencyContext::remove_all_dependents() { ++ assert_locked_or_safepoint(CodeCache_lock); ++ nmethodBucket* b = dependencies(); ++ set_dependencies(NULL); ++ int marked = 0; ++ int removed = 0; ++ while (b != NULL) { ++ nmethod* nm = b->get_nmethod(); ++ if (b->count() > 0 && nm->is_alive() && !nm->is_marked_for_deoptimization()) { ++ nm->mark_for_deoptimization(); ++ marked++; ++ } ++ nmethodBucket* next = b->next(); ++ removed++; ++ delete b; ++ b = next; ++ } ++ set_has_stale_entries(false); ++ if (UsePerfData && removed > 0) { ++ _perf_total_buckets_deallocated_count->inc(removed); ++ } ++ return marked; ++} ++ ++#ifndef PRODUCT ++void DependencyContext::print_dependent_nmethods(bool verbose) { ++ int idx = 0; ++ for (nmethodBucket* b = dependencies(); b != NULL; b = b->next()) { ++ nmethod* nm = b->get_nmethod(); ++ tty->print("[%d] count=%d { ", idx++, b->count()); ++ if (!verbose) { ++ nm->print_on(tty, "nmethod"); ++ tty->print_cr(" } "); ++ } else { ++ nm->print(); ++ nm->print_dependencies(); ++ tty->print_cr("--- } "); ++ } ++ } ++} ++ ++bool DependencyContext::is_dependent_nmethod(nmethod* nm) { ++ for (nmethodBucket* b = dependencies(); b != NULL; b = b->next()) { ++ if (nm == b->get_nmethod()) { ++#ifdef ASSERT ++ int count = b->count(); ++ assert(count >= 0, "count shouldn't be negative"); ++#endif ++ return true; ++ } ++ } ++ return false; ++} ++ ++bool DependencyContext::find_stale_entries() { ++ for (nmethodBucket* b = dependencies(); b != NULL; b = b->next()) { ++ if (b->count() == 0) return true; ++ } ++ return false; ++} ++ ++#endif //PRODUCT ++ ++int nmethodBucket::decrement() { ++ return Atomic::add(-1, (volatile int *)&_count); ++} ++ ++/////////////// Unit tests /////////////// ++ ++#ifndef PRODUCT ++ ++class TestDependencyContext { ++ public: ++ nmethod* _nmethods[3]; ++ ++ intptr_t _dependency_context; ++ ++ TestDependencyContext() : _dependency_context(DependencyContext::EMPTY) { ++ CodeCache_lock->lock_without_safepoint_check(); ++ ++ DependencyContext depContext(&_dependency_context); ++ ++ _nmethods[0] = reinterpret_cast(0x8 * 0); ++ _nmethods[1] = reinterpret_cast(0x8 * 1); ++ _nmethods[2] = reinterpret_cast(0x8 * 2); ++ ++ depContext.add_dependent_nmethod(_nmethods[2]); ++ depContext.add_dependent_nmethod(_nmethods[1]); ++ depContext.add_dependent_nmethod(_nmethods[0]); ++ } ++ ++ ~TestDependencyContext() { ++ wipe(); ++ CodeCache_lock->unlock(); ++ } ++ ++ static void testRemoveDependentNmethod(int id, bool delete_immediately) { ++ TestDependencyContext c; ++ DependencyContext depContext(&c._dependency_context); ++ assert(!has_stale_entries(depContext), "check"); ++ ++ nmethod* nm = c._nmethods[id]; ++ depContext.remove_dependent_nmethod(nm, delete_immediately); ++ ++ if (!delete_immediately) { ++ assert(has_stale_entries(depContext), "check"); ++ assert(depContext.is_dependent_nmethod(nm), "check"); ++ depContext.expunge_stale_entries(); ++ } ++ ++ assert(!has_stale_entries(depContext), "check"); ++ assert(!depContext.is_dependent_nmethod(nm), "check"); ++ } ++ ++ static void testRemoveDependentNmethod() { ++ testRemoveDependentNmethod(0, false); ++ testRemoveDependentNmethod(1, false); ++ testRemoveDependentNmethod(2, false); ++ ++ testRemoveDependentNmethod(0, true); ++ testRemoveDependentNmethod(1, true); ++ testRemoveDependentNmethod(2, true); ++ } ++ ++ static void test() { ++ testRemoveDependentNmethod(); ++ } ++ ++ static bool has_stale_entries(DependencyContext ctx) { ++ assert(ctx.has_stale_entries() == ctx.find_stale_entries(), "check"); ++ return ctx.has_stale_entries(); ++ } ++ ++ void wipe() { ++ DependencyContext ctx(&_dependency_context); ++ nmethodBucket* b = ctx.dependencies(); ++ ctx.set_dependencies(NULL); ++ ctx.set_has_stale_entries(false); ++ while (b != NULL) { ++ nmethodBucket* next = b->next(); ++ delete b; ++ b = next; ++ } ++ } ++}; ++ ++void TestDependencyContext_test() { ++ TestDependencyContext::test(); ++} ++ ++#endif // PRODUCT +\ No newline at end of file +diff --git a/hotspot/src/share/vm/code/dependencyContext.hpp b/hotspot/src/share/vm/code/dependencyContext.hpp +new file mode 100644 +index 00000000..533112b8 +--- /dev/null ++++ b/hotspot/src/share/vm/code/dependencyContext.hpp +@@ -0,0 +1,152 @@ ++/* ++ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ * ++ */ ++ ++#ifndef SHARE_VM_CODE_DEPENDENCYCONTEXT_HPP ++#define SHARE_VM_CODE_DEPENDENCYCONTEXT_HPP ++ ++#include "memory/allocation.hpp" ++#include "oops/oop.hpp" ++#include "runtime/handles.hpp" ++#include "runtime/perfData.hpp" ++ ++class nmethod; ++class DepChange; ++ ++// ++// nmethodBucket is used to record dependent nmethods for ++// deoptimization. nmethod dependencies are actually ++// pairs but we really only care about the klass part for purposes of ++// finding nmethods which might need to be deoptimized. Instead of ++// recording the method, a count of how many times a particular nmethod ++// was recorded is kept. This ensures that any recording errors are ++// noticed since an nmethod should be removed as many times are it's ++// added. ++// ++class nmethodBucket: public CHeapObj { ++ friend class VMStructs; ++ private: ++ nmethod* _nmethod; ++ int _count; ++ nmethodBucket* _next; ++ ++ public: ++ nmethodBucket(nmethod* nmethod, nmethodBucket* next) : ++ _nmethod(nmethod), _next(next), _count(1) {} ++ ++ int count() { return _count; } ++ int increment() { _count += 1; return _count; } ++ int decrement(); ++ nmethodBucket* next() { return _next; } ++ void set_next(nmethodBucket* b) { _next = b; } ++ nmethod* get_nmethod() { return _nmethod; } ++}; ++ ++// ++// Utility class to manipulate nmethod dependency context. ++// The context consists of nmethodBucket* (a head of a linked list) ++// and a boolean flag (does the list contains stale entries). The structure is ++// encoded as an intptr_t: lower bit is used for the flag. It is possible since ++// nmethodBucket* is aligned - the structure is malloc'ed in C heap. ++// Dependency context can be attached either to an InstanceKlass (_dep_context field) ++// or CallSiteContext oop for call_site_target dependencies (see javaClasses.hpp). ++// DependencyContext class operates on some location which holds a intptr_t value. ++// ++class DependencyContext : public StackObj { ++ friend class VMStructs; ++ friend class TestDependencyContext; ++ private: ++ enum TagBits { _has_stale_entries_bit = 1, _has_stale_entries_mask = 1 }; ++ ++ intptr_t* _dependency_context_addr; ++ ++ void set_dependencies(nmethodBucket* b) { ++ assert((intptr_t(b) & _has_stale_entries_mask) == 0, "should be aligned"); ++ if (has_stale_entries()) { ++ *_dependency_context_addr = intptr_t(b) | _has_stale_entries_mask; ++ } else { ++ *_dependency_context_addr = intptr_t(b); ++ } ++ } ++ ++ void set_has_stale_entries(bool x) { ++ if (x) { ++ *_dependency_context_addr |= _has_stale_entries_mask; ++ } else { ++ *_dependency_context_addr &= ~_has_stale_entries_mask; ++ } ++ } ++ ++ nmethodBucket* dependencies() { ++ intptr_t value = *_dependency_context_addr; ++ return (nmethodBucket*) (value & ~_has_stale_entries_mask); ++ } ++ ++ bool has_stale_entries() const { ++ intptr_t value = *_dependency_context_addr; ++ return (value & _has_stale_entries_mask) != 0; ++ } ++ ++ static PerfCounter* _perf_total_buckets_allocated_count; ++ static PerfCounter* _perf_total_buckets_deallocated_count; ++ static PerfCounter* _perf_total_buckets_stale_count; ++ static PerfCounter* _perf_total_buckets_stale_acc_count; ++ ++ public: ++#ifdef ASSERT ++ // Verification for dependency contexts rooted at Java objects. ++ Handle _base; // non-NULL if dependency context resides in an oop (e.g. CallSite). ++ oop _base_oop; ++ ++ DependencyContext(intptr_t* addr, Handle base = Handle()) ++ : _dependency_context_addr(addr), _base(base) ++ { ++ _base_oop = _base(); ++ } ++ ++ ~DependencyContext() { ++ // Base oop relocation invalidates _dependency_context_addr. ++ assert(_base_oop == _base(), "base oop relocation is forbidden"); ++ } ++#else ++ DependencyContext(intptr_t* addr) : _dependency_context_addr(addr) {} ++#endif // ASSERT ++ ++ static const intptr_t EMPTY = 0; // dependencies = NULL, has_stale_entries = false ++ ++ static void init(); ++ ++ int mark_dependent_nmethods(DepChange& changes); ++ void add_dependent_nmethod(nmethod* nm, bool expunge_stale_entries = false); ++ void remove_dependent_nmethod(nmethod* nm, bool expunge_stale_entries = false); ++ int remove_all_dependents(); ++ ++ void expunge_stale_entries(); ++ ++#ifndef PRODUCT ++ void print_dependent_nmethods(bool verbose); ++ bool is_dependent_nmethod(nmethod* nm); ++ bool find_stale_entries(); ++#endif //PRODUCT ++}; ++#endif // SHARE_VM_CODE_DEPENDENCYCONTEXT_HPP +\ No newline at end of file +diff --git a/hotspot/src/share/vm/compiler/compileBroker.cpp b/hotspot/src/share/vm/compiler/compileBroker.cpp +index e8f97074..22372d07 100644 +--- a/hotspot/src/share/vm/compiler/compileBroker.cpp ++++ b/hotspot/src/share/vm/compiler/compileBroker.cpp +@@ -26,6 +26,7 @@ + #include "classfile/systemDictionary.hpp" + #include "classfile/vmSymbols.hpp" + #include "code/codeCache.hpp" ++#include "code/dependencyContext.hpp" + #include "compiler/compileBroker.hpp" + #include "compiler/compileLog.hpp" + #include "compiler/compilerOracle.hpp" +@@ -919,7 +920,6 @@ void CompileBroker::compilation_init() { + PerfData::U_Ticks, CHECK); + } + +- + if (UsePerfData) { + + EXCEPTION_MARK; +diff --git a/hotspot/src/share/vm/oops/instanceKlass.cpp b/hotspot/src/share/vm/oops/instanceKlass.cpp +index ce297b68..1bff1309 100644 +--- a/hotspot/src/share/vm/oops/instanceKlass.cpp ++++ b/hotspot/src/share/vm/oops/instanceKlass.cpp +@@ -28,6 +28,7 @@ + #include "classfile/systemDictionaryShared.hpp" + #include "classfile/verifier.hpp" + #include "classfile/vmSymbols.hpp" ++#include "code/dependencyContext.hpp" + #include "compiler/compileBroker.hpp" + #include "gc_implementation/shared/markSweep.inline.hpp" + #include "gc_interface/collectedHeap.inline.hpp" +@@ -194,7 +195,6 @@ InstanceKlass* InstanceKlass::allocate_instance_klass( + + int size = InstanceKlass::size(vtable_len, itable_len, nonstatic_oop_map_size, + access_flags.is_interface(), is_anonymous); +- + // Allocation + InstanceKlass* ik; + if (rt == REF_NONE) { +@@ -296,7 +296,7 @@ InstanceKlass::InstanceKlass(int vtable_len, + set_static_oop_field_count(0); + set_nonstatic_field_size(0); + set_is_marked_dependent(false); +- set_has_unloaded_dependent(false); ++ _dep_context = DependencyContext::EMPTY; + set_init_state(InstanceKlass::allocated); + set_init_thread(NULL); + set_init_state(allocated); +@@ -311,7 +311,6 @@ InstanceKlass::InstanceKlass(int vtable_len, + set_annotations(NULL); + set_jvmti_cached_class_field_map(NULL); + set_initial_method_idnum(0); +- _dependencies = NULL; + set_jvmti_cached_class_field_map(NULL); + set_cached_class_file(NULL); + set_initial_method_idnum(0); +@@ -2093,200 +2092,31 @@ jmethodID InstanceKlass::jmethod_id_or_null(Method* method) { + return id; + } + +-int nmethodBucket::decrement() { +- return Atomic::add(-1, (volatile int *)&_count); +-} +- +-// +-// Walk the list of dependent nmethods searching for nmethods which +-// are dependent on the changes that were passed in and mark them for +-// deoptimization. Returns the number of nmethods found. +-// +-int nmethodBucket::mark_dependent_nmethods(nmethodBucket* deps, DepChange& changes) { +- assert_locked_or_safepoint(CodeCache_lock); +- int found = 0; +- for (nmethodBucket* b = deps; b != NULL; b = b->next()) { +- nmethod* nm = b->get_nmethod(); +- // since dependencies aren't removed until an nmethod becomes a zombie, +- // the dependency list may contain nmethods which aren't alive. +- if (b->count() > 0 && nm->is_alive() && !nm->is_marked_for_deoptimization() && nm->check_dependency_on(changes)) { +- if (TraceDependencies) { +- ResourceMark rm; +- tty->print_cr("Marked for deoptimization"); +- changes.print(); +- nm->print(); +- nm->print_dependencies(); +- } +- nm->mark_for_deoptimization(); +- found++; +- } +- } +- return found; +-} +- +-// +-// Add an nmethodBucket to the list of dependencies for this nmethod. +-// It's possible that an nmethod has multiple dependencies on this klass +-// so a count is kept for each bucket to guarantee that creation and +-// deletion of dependencies is consistent. Returns new head of the list. +-// +-nmethodBucket* nmethodBucket::add_dependent_nmethod(nmethodBucket* deps, nmethod* nm) { +- assert_locked_or_safepoint(CodeCache_lock); +- for (nmethodBucket* b = deps; b != NULL; b = b->next()) { +- if (nm == b->get_nmethod()) { +- b->increment(); +- return deps; +- } +- } +- return new nmethodBucket(nm, deps); +-} +- +-// +-// Decrement count of the nmethod in the dependency list and remove +-// the bucket completely when the count goes to 0. This method must +-// find a corresponding bucket otherwise there's a bug in the +-// recording of dependencies. Returns true if the bucket was deleted, +-// or marked ready for reclaimation. +-bool nmethodBucket::remove_dependent_nmethod(nmethodBucket** deps, nmethod* nm, bool delete_immediately) { +- assert_locked_or_safepoint(CodeCache_lock); +- +- nmethodBucket* first = *deps; +- nmethodBucket* last = NULL; +- for (nmethodBucket* b = first; b != NULL; b = b->next()) { +- if (nm == b->get_nmethod()) { +- int val = b->decrement(); +- guarantee(val >= 0, err_msg("Underflow: %d", val)); +- if (val == 0) { +- if (delete_immediately) { +- if (last == NULL) { +- *deps = b->next(); +- } else { +- last->set_next(b->next()); +- } +- delete b; +- } +- } +- return true; +- } +- last = b; +- } +- +-#ifdef ASSERT +- tty->print_raw_cr("### can't find dependent nmethod"); +- nm->print(); +-#endif // ASSERT +- ShouldNotReachHere(); +- return false; +-} +- +-// Convenience overload, for callers that don't want to delete the nmethodBucket entry. +-bool nmethodBucket::remove_dependent_nmethod(nmethodBucket* deps, nmethod* nm) { +- nmethodBucket** deps_addr = &deps; +- return remove_dependent_nmethod(deps_addr, nm, false /* Don't delete */); +-} +- +-// +-// Reclaim all unused buckets. Returns new head of the list. +-// +-nmethodBucket* nmethodBucket::clean_dependent_nmethods(nmethodBucket* deps) { +- nmethodBucket* first = deps; +- nmethodBucket* last = NULL; +- nmethodBucket* b = first; +- +- while (b != NULL) { +- assert(b->count() >= 0, err_msg("bucket count: %d", b->count())); +- nmethodBucket* next = b->next(); +- if (b->count() == 0) { +- if (last == NULL) { +- first = next; +- } else { +- last->set_next(next); +- } +- delete b; +- // last stays the same. +- } else { +- last = b; +- } +- b = next; +- } +- return first; +-} +- +-#ifndef PRODUCT +-void nmethodBucket::print_dependent_nmethods(nmethodBucket* deps, bool verbose) { +- int idx = 0; +- for (nmethodBucket* b = deps; b != NULL; b = b->next()) { +- nmethod* nm = b->get_nmethod(); +- tty->print("[%d] count=%d { ", idx++, b->count()); +- if (!verbose) { +- nm->print_on(tty, "nmethod"); +- tty->print_cr(" } "); +- } else { +- nm->print(); +- nm->print_dependencies(); +- tty->print_cr("--- } "); +- } +- } ++inline DependencyContext InstanceKlass::dependencies() { ++ DependencyContext dep_context(&_dep_context); ++ return dep_context; + } + +-bool nmethodBucket::is_dependent_nmethod(nmethodBucket* deps, nmethod* nm) { +- for (nmethodBucket* b = deps; b != NULL; b = b->next()) { +- if (nm == b->get_nmethod()) { +-#ifdef ASSERT +- int count = b->count(); +- assert(count >= 0, err_msg("count shouldn't be negative: %d", count)); +-#endif +- return true; +- } +- } +- return false; +-} +-#endif //PRODUCT +- + int InstanceKlass::mark_dependent_nmethods(DepChange& changes) { +- assert_locked_or_safepoint(CodeCache_lock); +- return nmethodBucket::mark_dependent_nmethods(_dependencies, changes); +-} +- +-void InstanceKlass::clean_dependent_nmethods() { +- assert_locked_or_safepoint(CodeCache_lock); +- +- if (has_unloaded_dependent()) { +- _dependencies = nmethodBucket::clean_dependent_nmethods(_dependencies); +- set_has_unloaded_dependent(false); +- } +-#ifdef ASSERT +- else { +- // Verification +- for (nmethodBucket* b = _dependencies; b != NULL; b = b->next()) { +- assert(b->count() >= 0, err_msg("bucket count: %d", b->count())); +- assert(b->count() != 0, "empty buckets need to be cleaned"); +- } +- } +-#endif ++ return dependencies().mark_dependent_nmethods(changes); + } + + void InstanceKlass::add_dependent_nmethod(nmethod* nm) { +- assert_locked_or_safepoint(CodeCache_lock); +- _dependencies = nmethodBucket::add_dependent_nmethod(_dependencies, nm); ++ dependencies().add_dependent_nmethod(nm); + } + + void InstanceKlass::remove_dependent_nmethod(nmethod* nm, bool delete_immediately) { +- assert_locked_or_safepoint(CodeCache_lock); +- +- if (nmethodBucket::remove_dependent_nmethod(&_dependencies, nm, delete_immediately)) { +- set_has_unloaded_dependent(true); +- } ++ dependencies().remove_dependent_nmethod(nm, delete_immediately); + } + + #ifndef PRODUCT + void InstanceKlass::print_dependent_nmethods(bool verbose) { +- nmethodBucket::print_dependent_nmethods(_dependencies, verbose); ++ dependencies().print_dependent_nmethods(verbose); + } + + + bool InstanceKlass::is_dependent_nmethod(nmethod* nm) { +- return nmethodBucket::is_dependent_nmethod(_dependencies, nm); ++ return dependencies().is_dependent_nmethod(nm); + } + #endif //PRODUCT + +@@ -2583,7 +2413,9 @@ void InstanceKlass::clean_weak_instanceklass_links(BoolObjectClosure* is_alive) + clean_implementors_list(is_alive); + clean_method_data(is_alive); + +- clean_dependent_nmethods(); ++ // Since GC iterates InstanceKlasses sequentially, it is safe to remove stale entries here. ++ DependencyContext dep_context(&_dep_context); ++ dep_context.expunge_stale_entries(); + } + + void InstanceKlass::clean_implementors_list(BoolObjectClosure* is_alive) { +@@ -2630,6 +2462,8 @@ void InstanceKlass::remove_unshareable_info() { + + constants()->remove_unshareable_info(); + ++ assert(_dep_context == DependencyContext::EMPTY, "dependency context is not shareable"); ++ + for (int i = 0; i < methods()->length(); i++) { + Method* m = methods()->at(i); + m->remove_unshareable_info(); +@@ -2654,7 +2488,6 @@ void InstanceKlass::remove_unshareable_info() { + array_klasses_do(remove_unshareable_in_class); + // These are not allocated from metaspace. They are safe to set to NULL. + _member_names = NULL; +- _dependencies = NULL; + _osr_nmethods_head = NULL; + _init_thread = NULL; + } +@@ -2796,12 +2629,10 @@ void InstanceKlass::release_C_heap_structures() { + } + + // release dependencies +- nmethodBucket* b = _dependencies; +- _dependencies = NULL; +- while (b != NULL) { +- nmethodBucket* next = b->next(); +- delete b; +- b = next; ++ { ++ DependencyContext ctx(&_dep_context); ++ int marked = ctx.remove_all_dependents(); ++ assert(marked == 0, "all dependencies should be already invalidated"); + } + + // Deallocate breakpoint records +diff --git a/hotspot/src/share/vm/oops/instanceKlass.hpp b/hotspot/src/share/vm/oops/instanceKlass.hpp +index 9750ae56..14556a38 100644 +--- a/hotspot/src/share/vm/oops/instanceKlass.hpp ++++ b/hotspot/src/share/vm/oops/instanceKlass.hpp +@@ -83,15 +83,15 @@ + + + // forward declaration for class -- see below for definition +-class SuperTypeClosure; +-class JNIid; +-class jniIdMapBase; + class BreakpointInfo; +-class fieldDescriptor; + class DepChange; +-class nmethodBucket; ++class DependencyContext; ++class fieldDescriptor; ++class jniIdMapBase; ++class JNIid; + class JvmtiCachedClassFieldMap; + class MemberNameTable; ++class SuperTypeClosure; + + // This is used in iterators below. + class FieldClosure: public StackObj { +@@ -227,7 +227,6 @@ class InstanceKlass: public Klass { + // _misc_flags. + bool _is_marked_dependent; // used for marking during flushing and deoptimization + bool _is_being_redefined; // used for locking redefinition +- bool _has_unloaded_dependent; + + enum { + _misc_rewritten = 1 << 0, // methods rewritten. +@@ -249,7 +248,7 @@ class InstanceKlass: public Klass { + MemberNameTable* _member_names; // Member names + JNIid* _jni_ids; // First JNI identifier for static fields in this class + jmethodID* _methods_jmethod_ids; // jmethodIDs corresponding to method_idnum, or NULL if none +- nmethodBucket* _dependencies; // list of dependent nmethods ++ intptr_t _dep_context; // packed DependencyContext structure + nmethod* _osr_nmethods_head; // Head of list of on-stack replacement nmethods for this class + BreakpointInfo* _breakpoints; // bpt lists, managed by Method* + // Linked instanceKlasses of previous versions +@@ -480,9 +479,6 @@ class InstanceKlass: public Klass { + bool is_marked_dependent() const { return _is_marked_dependent; } + void set_is_marked_dependent(bool value) { _is_marked_dependent = value; } + +- bool has_unloaded_dependent() const { return _has_unloaded_dependent; } +- void set_has_unloaded_dependent(bool value) { _has_unloaded_dependent = value; } +- + // initialization (virtuals from Klass) + bool should_be_initialized() const; // means that initialize should be called + void initialize(TRAPS); +@@ -831,7 +827,8 @@ class InstanceKlass: public Klass { + JNIid* jni_id_for(int offset); + + // maintenance of deoptimization dependencies +- int mark_dependent_nmethods(DepChange& changes); ++ inline DependencyContext dependencies(); ++ int mark_dependent_nmethods(DepChange& changes); + void add_dependent_nmethod(nmethod* nm); + void remove_dependent_nmethod(nmethod* nm, bool delete_immediately); + +@@ -1026,7 +1023,6 @@ class InstanceKlass: public Klass { + void clean_weak_instanceklass_links(BoolObjectClosure* is_alive); + void clean_implementors_list(BoolObjectClosure* is_alive); + void clean_method_data(BoolObjectClosure* is_alive); +- void clean_dependent_nmethods(); + + // Explicit metaspace deallocation of fields + // For RedefineClasses and class file parsing errors, we need to deallocate +@@ -1258,48 +1254,6 @@ class JNIid: public CHeapObj { + void verify(Klass* holder); + }; + +- +-// +-// nmethodBucket is used to record dependent nmethods for +-// deoptimization. nmethod dependencies are actually +-// pairs but we really only care about the klass part for purposes of +-// finding nmethods which might need to be deoptimized. Instead of +-// recording the method, a count of how many times a particular nmethod +-// was recorded is kept. This ensures that any recording errors are +-// noticed since an nmethod should be removed as many times are it's +-// added. +-// +-class nmethodBucket: public CHeapObj { +- friend class VMStructs; +- private: +- nmethod* _nmethod; +- int _count; +- nmethodBucket* _next; +- +- public: +- nmethodBucket(nmethod* nmethod, nmethodBucket* next) { +- _nmethod = nmethod; +- _next = next; +- _count = 1; +- } +- int count() { return _count; } +- int increment() { _count += 1; return _count; } +- int decrement(); +- nmethodBucket* next() { return _next; } +- void set_next(nmethodBucket* b) { _next = b; } +- nmethod* get_nmethod() { return _nmethod; } +- +- static int mark_dependent_nmethods(nmethodBucket* deps, DepChange& changes); +- static nmethodBucket* add_dependent_nmethod(nmethodBucket* deps, nmethod* nm); +- static bool remove_dependent_nmethod(nmethodBucket** deps, nmethod* nm, bool delete_immediately); +- static bool remove_dependent_nmethod(nmethodBucket* deps, nmethod* nm); +- static nmethodBucket* clean_dependent_nmethods(nmethodBucket* deps); +-#ifndef PRODUCT +- static void print_dependent_nmethods(nmethodBucket* deps, bool verbose); +- static bool is_dependent_nmethod(nmethodBucket* deps, nmethod* nm); +-#endif //PRODUCT +-}; +- + // An iterator that's used to access the inner classes indices in the + // InstanceKlass::_inner_classes array. + class InnerClassesIterator : public StackObj { +diff --git a/hotspot/src/share/vm/prims/jni.cpp b/hotspot/src/share/vm/prims/jni.cpp +index c0d789b4..bfb902d5 100644 +--- a/hotspot/src/share/vm/prims/jni.cpp ++++ b/hotspot/src/share/vm/prims/jni.cpp +@@ -5107,6 +5107,7 @@ _JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_GetDefaultJavaVMInitArgs(void *args_) { + unit_test_function_call + + // Forward declaration ++void TestDependencyContext_test(); + void TestOS_test(); + void TestReservedSpace_test(); + void TestReserveMemorySpecial_test(); +@@ -5132,6 +5133,7 @@ void ChunkManager_test_list_index(); + void execute_internal_vm_tests() { + if (ExecuteInternalVMTests) { + tty->print_cr("Running internal VM tests"); ++ run_unit_test(TestDependencyContext_test()); + run_unit_test(TestOS_test()); + run_unit_test(TestReservedSpace_test()); + run_unit_test(TestReserveMemorySpecial_test()); +diff --git a/hotspot/src/share/vm/prims/methodHandles.cpp b/hotspot/src/share/vm/prims/methodHandles.cpp +index d950d4f3..231d62d2 100644 +--- a/hotspot/src/share/vm/prims/methodHandles.cpp ++++ b/hotspot/src/share/vm/prims/methodHandles.cpp +@@ -24,6 +24,7 @@ + + #include "precompiled.hpp" + #include "classfile/symbolTable.hpp" ++#include "code/dependencyContext.hpp" + #include "compiler/compileBroker.hpp" + #include "interpreter/interpreter.hpp" + #include "interpreter/oopMapCache.hpp" +@@ -946,30 +947,33 @@ int MethodHandles::find_MemberNames(KlassHandle k, + return rfill + overflow; + } + ++// Is it safe to remove stale entries from a dependency list? ++static bool safe_to_expunge() { ++ // Since parallel GC threads can concurrently iterate over a dependency ++ // list during safepoint, it is safe to remove entries only when ++ // CodeCache lock is held. ++ return CodeCache_lock->owned_by_self(); ++} ++ + void MethodHandles::add_dependent_nmethod(oop call_site, nmethod* nm) { + assert_locked_or_safepoint(CodeCache_lock); + + oop context = java_lang_invoke_CallSite::context(call_site); +- nmethodBucket* deps = java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(context); +- +- nmethodBucket* new_deps = nmethodBucket::add_dependent_nmethod(deps, nm); +- if (deps != new_deps) { +- java_lang_invoke_MethodHandleNatives_CallSiteContext::set_vmdependencies(context, new_deps); +- } ++ DependencyContext deps = java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(context); ++ // Try to purge stale entries on updates. ++ // Since GC doesn't clean dependency contexts rooted at CallSiteContext objects, ++ // in order to avoid memory leak, stale entries are purged whenever a dependency list ++ // is changed (both on addition and removal). Though memory reclamation is delayed, ++ // it avoids indefinite memory usage growth. ++ deps.add_dependent_nmethod(nm, /*expunge_stale_entries=*/safe_to_expunge()); + } + + void MethodHandles::remove_dependent_nmethod(oop call_site, nmethod* nm) { + assert_locked_or_safepoint(CodeCache_lock); + + oop context = java_lang_invoke_CallSite::context(call_site); +- nmethodBucket* deps = java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(context); +- +- if (nmethodBucket::remove_dependent_nmethod(deps, nm)) { +- nmethodBucket* new_deps = nmethodBucket::clean_dependent_nmethods(deps); +- if (deps != new_deps) { +- java_lang_invoke_MethodHandleNatives_CallSiteContext::set_vmdependencies(context, new_deps); +- } +- } ++ DependencyContext deps = java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(context); ++ deps.remove_dependent_nmethod(nm, /*expunge_stale_entries=*/safe_to_expunge()); + } + + void MethodHandles::flush_dependent_nmethods(Handle call_site, Handle target) { +@@ -978,21 +982,15 @@ void MethodHandles::flush_dependent_nmethods(Handle call_site, Handle target) { + int marked = 0; + CallSiteDepChange changes(call_site(), target()); + { ++ No_Safepoint_Verifier nsv; + MutexLockerEx mu2(CodeCache_lock, Mutex::_no_safepoint_check_flag); + + oop context = java_lang_invoke_CallSite::context(call_site()); +- nmethodBucket* deps = java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(context); +- +- marked = nmethodBucket::mark_dependent_nmethods(deps, changes); +- if (marked > 0) { +- nmethodBucket* new_deps = nmethodBucket::clean_dependent_nmethods(deps); +- if (deps != new_deps) { +- java_lang_invoke_MethodHandleNatives_CallSiteContext::set_vmdependencies(context, new_deps); +- } +- } ++ DependencyContext deps = java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(context); ++ marked = deps.mark_dependent_nmethods(changes); + } + if (marked > 0) { +- // At least one nmethod has been marked for deoptimization ++ // At least one nmethod has been marked for deoptimization. + VM_Deoptimize op; + VMThread::execute(&op); + } +@@ -1379,6 +1377,8 @@ JVM_ENTRY(void, MHN_setCallSiteTargetVolatile(JNIEnv* env, jobject igcls, jobjec + } + JVM_END + ++// It is called by a Cleaner object which ensures that dropped CallSites properly ++// deallocate their dependency information. + JVM_ENTRY(void, MHN_clearCallSiteContext(JNIEnv* env, jobject igcls, jobject context_jh)) { + Handle context(THREAD, JNIHandles::resolve_non_null(context_jh)); + { +@@ -1387,19 +1387,11 @@ JVM_ENTRY(void, MHN_clearCallSiteContext(JNIEnv* env, jobject igcls, jobject con + + int marked = 0; + { ++ No_Safepoint_Verifier nsv; + MutexLockerEx mu2(CodeCache_lock, Mutex::_no_safepoint_check_flag); +- nmethodBucket* b = java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(context()); +- while(b != NULL) { +- nmethod* nm = b->get_nmethod(); +- if (b->count() > 0 && nm->is_alive() && !nm->is_marked_for_deoptimization()) { +- nm->mark_for_deoptimization(); +- marked++; +- } +- nmethodBucket* next = b->next(); +- delete b; +- b = next; +- } +- java_lang_invoke_MethodHandleNatives_CallSiteContext::set_vmdependencies(context(), NULL); // reset context ++ assert(safe_to_expunge(), "removal is not safe"); ++ DependencyContext deps = java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(context()); ++ marked = deps.remove_all_dependents(); + } + if (marked > 0) { + // At least one nmethod has been marked for deoptimization +diff --git a/hotspot/src/share/vm/runtime/init.cpp b/hotspot/src/share/vm/runtime/init.cpp +index b1854092..f709db94 100644 +--- a/hotspot/src/share/vm/runtime/init.cpp ++++ b/hotspot/src/share/vm/runtime/init.cpp +@@ -71,6 +71,7 @@ void InlineCacheBuffer_init(); + void compilerOracle_init(); + void compilationPolicy_init(); + void compileBroker_init(); ++void dependencyContext_init(); + + // Initialization after compiler initialization + bool universe_post_init(); // must happen after compiler_init +@@ -127,6 +128,7 @@ jint init_globals() { + compilerOracle_init(); + compilationPolicy_init(); + compileBroker_init(); ++ dependencyContext_init(); + VMRegImpl::set_regName(); + + if (!universe_post_init()) { +diff --git a/hotspot/src/share/vm/runtime/perfData.hpp b/hotspot/src/share/vm/runtime/perfData.hpp +index 4a62d2e0..b9f5c1a7 100644 +--- a/hotspot/src/share/vm/runtime/perfData.hpp ++++ b/hotspot/src/share/vm/runtime/perfData.hpp +@@ -424,6 +424,7 @@ class PerfLongVariant : public PerfLong { + public: + inline void inc() { (*(jlong*)_valuep)++; } + inline void inc(jlong val) { (*(jlong*)_valuep) += val; } ++ inline void dec(jlong val) { inc(-val); } + inline void add(jlong val) { (*(jlong*)_valuep) += val; } + void clear_sample_helper() { _sample_helper = NULL; } + }; +diff --git a/hotspot/src/share/vm/runtime/vmStructs.cpp b/hotspot/src/share/vm/runtime/vmStructs.cpp +index 744c43e0..5140c015 100644 +--- a/hotspot/src/share/vm/runtime/vmStructs.cpp ++++ b/hotspot/src/share/vm/runtime/vmStructs.cpp +@@ -330,10 +330,6 @@ typedef OffsetCompactHashtable*) \ + nonstatic_field(InstanceKlass, _default_vtable_indices, Array*) \ + nonstatic_field(Klass, _super_check_offset, juint) \ +@@ -1472,7 +1468,6 @@ typedef OffsetCompactHashtablenext(); ++ delete b; ++ b = next; ++ } ++} ++ + #ifndef PRODUCT + void DependencyContext::print_dependent_nmethods(bool verbose) { + int idx = 0; +@@ -271,28 +283,31 @@ class TestDependencyContext { + + intptr_t _dependency_context; + ++ DependencyContext dependencies() { ++ DependencyContext depContext(&_dependency_context); ++ return depContext; ++ } ++ + TestDependencyContext() : _dependency_context(DependencyContext::EMPTY) { + CodeCache_lock->lock_without_safepoint_check(); + +- DependencyContext depContext(&_dependency_context); +- + _nmethods[0] = reinterpret_cast(0x8 * 0); + _nmethods[1] = reinterpret_cast(0x8 * 1); + _nmethods[2] = reinterpret_cast(0x8 * 2); + +- depContext.add_dependent_nmethod(_nmethods[2]); +- depContext.add_dependent_nmethod(_nmethods[1]); +- depContext.add_dependent_nmethod(_nmethods[0]); ++ dependencies().add_dependent_nmethod(_nmethods[2]); ++ dependencies().add_dependent_nmethod(_nmethods[1]); ++ dependencies().add_dependent_nmethod(_nmethods[0]); + } + + ~TestDependencyContext() { +- wipe(); ++ dependencies().wipe(); + CodeCache_lock->unlock(); + } + + static void testRemoveDependentNmethod(int id, bool delete_immediately) { + TestDependencyContext c; +- DependencyContext depContext(&c._dependency_context); ++ DependencyContext depContext = c.dependencies(); + assert(!has_stale_entries(depContext), "check"); + + nmethod* nm = c._nmethods[id]; +@@ -327,17 +342,6 @@ class TestDependencyContext { + return ctx.has_stale_entries(); + } + +- void wipe() { +- DependencyContext ctx(&_dependency_context); +- nmethodBucket* b = ctx.dependencies(); +- ctx.set_dependencies(NULL); +- ctx.set_has_stale_entries(false); +- while (b != NULL) { +- nmethodBucket* next = b->next(); +- delete b; +- b = next; +- } +- } + }; + + void TestDependencyContext_test() { +diff --git a/hotspot/src/share/vm/code/dependencyContext.hpp b/hotspot/src/share/vm/code/dependencyContext.hpp +index 533112b8..414ce0c0 100644 +--- a/hotspot/src/share/vm/code/dependencyContext.hpp ++++ b/hotspot/src/share/vm/code/dependencyContext.hpp +@@ -143,6 +143,10 @@ class DependencyContext : public StackObj { + + void expunge_stale_entries(); + ++ // Unsafe deallocation of nmethodBuckets. Used in IK::release_C_heap_structures ++ // to clean up the context possibly containing live entries pointing to unloaded nmethods. ++ void wipe(); ++ + #ifndef PRODUCT + void print_dependent_nmethods(bool verbose); + bool is_dependent_nmethod(nmethod* nm); +diff --git a/hotspot/src/share/vm/oops/instanceKlass.cpp b/hotspot/src/share/vm/oops/instanceKlass.cpp +index 1bff1309..df44e531 100644 +--- a/hotspot/src/share/vm/oops/instanceKlass.cpp ++++ b/hotspot/src/share/vm/oops/instanceKlass.cpp +@@ -2628,12 +2628,16 @@ void InstanceKlass::release_C_heap_structures() { + } + } + +- // release dependencies +- { +- DependencyContext ctx(&_dep_context); +- int marked = ctx.remove_all_dependents(); +- assert(marked == 0, "all dependencies should be already invalidated"); +- } ++ // Release dependencies. ++ // It is desirable to use DC::remove_all_dependents() here, but, unfortunately, ++ // it is not safe (see JDK-8143408). The problem is that the klass dependency ++ // context can contain live dependencies, since there's a race between nmethod & ++ // klass unloading. If the klass is dead when nmethod unloading happens, relevant ++ // dependencies aren't removed from the context associated with the class (see ++ // nmethod::flush_dependencies). It ends up during klass unloading as seemingly ++ // live dependencies pointing to unloaded nmethods and causes a crash in ++ // DC::remove_all_dependents() when it touches unloaded nmethod. ++ dependencies().wipe(); + + // Deallocate breakpoint records + if (breakpoints() != 0x0) { +-- +2.17.1 + diff --git a/8149343-assert-rp-num_q-no_of_gc_workers-failed-sani.patch b/8149343-assert-rp-num_q-no_of_gc_workers-failed-sani.patch new file mode 100644 index 0000000..3264beb --- /dev/null +++ b/8149343-assert-rp-num_q-no_of_gc_workers-failed-sani.patch @@ -0,0 +1,144 @@ +Date: Sat, 30 Mar 2024 07:12:06 +0000 +Subject: 8149343: assert(rp->num_q() == no_of_gc_workers) failed: + sanity + +--- + .../gc_implementation/g1/g1CollectedHeap.cpp | 20 +++++++++++-------- + .../share/vm/memory/referenceProcessor.cpp | 9 +++++++-- + .../share/vm/memory/referenceProcessor.hpp | 4 +++- + .../TestDynamicNumberOfGCThreads.java | 8 ++++++++ + 4 files changed, 30 insertions(+), 11 deletions(-) + +diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp +index 84d5d4d8..5b156f99 100644 +--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp ++++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp +@@ -5462,7 +5462,7 @@ public: + _workers(workers), + _active_workers(n_workers) + { +- assert(n_workers > 0, "shouldn't call this otherwise"); ++ g1h->ref_processor_stw()->set_active_mt_degree(n_workers); + } + + // Executes the given task using concurrent marking worker threads. +@@ -5595,7 +5595,9 @@ public: + _queues(task_queues), + _terminator(workers, _queues), + _n_workers(workers) +- { } ++ { ++ g1h->ref_processor_cm()->set_active_mt_degree(workers); ++ } + + void work(uint worker_id) { + ResourceMark rm; +@@ -5760,8 +5762,10 @@ void G1CollectedHeap::process_discovered_references(uint no_of_gc_workers) { + _gc_tracer_stw->gc_id()); + } else { + // Parallel reference processing +- assert(rp->num_q() == no_of_gc_workers, "sanity"); +- assert(no_of_gc_workers <= rp->max_num_q(), "sanity"); ++ assert(no_of_gc_workers <= rp->max_num_q(), ++ err_msg( ++ "Mismatch between the number of GC workers %u and the maximum number of Reference process queues %u", ++ no_of_gc_workers, rp->max_num_q())); + + G1STWRefProcTaskExecutor par_task_executor(this, workers(), _task_queues, no_of_gc_workers); + stats = rp->process_discovered_references(&is_alive, +@@ -5796,10 +5800,10 @@ void G1CollectedHeap::enqueue_discovered_references(uint no_of_gc_workers) { + } else { + // Parallel reference enqueueing + +- assert(no_of_gc_workers == workers()->active_workers(), +- "Need to reset active workers"); +- assert(rp->num_q() == no_of_gc_workers, "sanity"); +- assert(no_of_gc_workers <= rp->max_num_q(), "sanity"); ++ assert(no_of_gc_workers <= rp->max_num_q(), ++ err_msg( ++ "Mismatch between the number of GC workers %u and the maximum number of Reference process queues %u", ++ no_of_gc_workers, rp->max_num_q())); + + G1STWRefProcTaskExecutor par_task_executor(this, workers(), _task_queues, no_of_gc_workers); + rp->enqueue_discovered_references(&par_task_executor); +diff --git a/hotspot/src/share/vm/memory/referenceProcessor.cpp b/hotspot/src/share/vm/memory/referenceProcessor.cpp +index b916e696..823fd49c 100644 +--- a/hotspot/src/share/vm/memory/referenceProcessor.cpp ++++ b/hotspot/src/share/vm/memory/referenceProcessor.cpp +@@ -136,7 +136,7 @@ void ReferenceProcessor::verify_no_references_recorded() { + guarantee(!_discovering_refs, "Discovering refs?"); + for (uint i = 0; i < _max_num_q * number_of_subclasses_of_ref(); i++) { + guarantee(_discovered_refs[i].is_empty(), +- "Found non-empty discovered list"); ++ err_msg("Found non-empty discovered list at %u", i)); + } + } + #endif +@@ -780,6 +780,11 @@ private: + bool _clear_referent; + }; + ++void ReferenceProcessor::set_active_mt_degree(uint v) { ++ _num_q = v; ++ _next_id = 0; ++} ++ + // Balances reference queues. + // Move entries from all queues[0, 1, ..., _max_num_q-1] to + // queues[0, 1, ..., _num_q-1] because only the first _num_q +@@ -862,7 +867,7 @@ void ReferenceProcessor::balance_queues(DiscoveredList ref_lists[]) + } + #ifdef ASSERT + size_t balanced_total_refs = 0; +- for (uint i = 0; i < _max_num_q; ++i) { ++ for (uint i = 0; i < _num_q; ++i) { + balanced_total_refs += ref_lists[i].length(); + if (TraceReferenceGC && PrintGCDetails) { + gclog_or_tty->print("%d ", ref_lists[i].length()); +diff --git a/hotspot/src/share/vm/memory/referenceProcessor.hpp b/hotspot/src/share/vm/memory/referenceProcessor.hpp +index 470503ee..da148a6c 100644 +--- a/hotspot/src/share/vm/memory/referenceProcessor.hpp ++++ b/hotspot/src/share/vm/memory/referenceProcessor.hpp +@@ -270,7 +270,7 @@ class ReferenceProcessor : public CHeapObj { + + uint num_q() { return _num_q; } + uint max_num_q() { return _max_num_q; } +- void set_active_mt_degree(uint v) { _num_q = v; } ++ void set_active_mt_degree(uint v); + + DiscoveredList* discovered_refs() { return _discovered_refs; } + +@@ -385,9 +385,11 @@ class ReferenceProcessor : public CHeapObj { + // round-robin mod _num_q (not: _not_ mode _max_num_q) + uint next_id() { + uint id = _next_id; ++ assert(!_discovery_is_mt, "Round robin should only be used in serial discovery"); + if (++_next_id == _num_q) { + _next_id = 0; + } ++ assert(_next_id < _num_q, err_msg("_next_id %u _num_q %u _max_num_q %u", _next_id, _num_q, _max_num_q)); + return id; + } + DiscoveredList* get_discovered_list(ReferenceType rt); +diff --git a/hotspot/test/gc/ergonomics/TestDynamicNumberOfGCThreads.java b/hotspot/test/gc/ergonomics/TestDynamicNumberOfGCThreads.java +index f4a6625a..2005a67e 100644 +--- a/hotspot/test/gc/ergonomics/TestDynamicNumberOfGCThreads.java ++++ b/hotspot/test/gc/ergonomics/TestDynamicNumberOfGCThreads.java +@@ -63,6 +63,14 @@ public class TestDynamicNumberOfGCThreads { + System.arraycopy(baseArgs, 0, finalArgs, extraArgs.length, baseArgs.length); + pb_enabled = ProcessTools.createJavaProcessBuilder(finalArgs); + verifyDynamicNumberOfGCThreads(new OutputAnalyzer(pb_enabled.start())); ++ ++ // Turn on parallel reference processing ++ String[] parRefProcArg = {"-XX:+ParallelRefProcEnabled", "-XX:-ShowMessageBoxOnError"}; ++ String[] parRefArgs = new String[baseArgs.length + parRefProcArg.length]; ++ System.arraycopy(parRefProcArg, 0, parRefArgs, 0, parRefProcArg.length); ++ System.arraycopy(baseArgs, 0, parRefArgs, parRefProcArg.length, baseArgs.length); ++ pb_enabled = ProcessTools.createJavaProcessBuilder(parRefArgs); ++ verifyDynamicNumberOfGCThreads(new OutputAnalyzer(pb_enabled.start())); + } + + static class GCTest { +-- +2.17.1 + diff --git a/8220175-serviceability-dcmd-framework-VMVersionTest..patch b/8220175-serviceability-dcmd-framework-VMVersionTest..patch new file mode 100644 index 0000000..6c149dc --- /dev/null +++ b/8220175-serviceability-dcmd-framework-VMVersionTest..patch @@ -0,0 +1,24 @@ +Date: Sat, 30 Mar 2024 07:11:17 +0000 +Subject: 8220175: serviceability/dcmd/framework/VMVersionTest.java + fails with a timeout + +--- + hotspot/src/os/linux/vm/perfMemory_linux.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hotspot/src/os/linux/vm/perfMemory_linux.cpp b/hotspot/src/os/linux/vm/perfMemory_linux.cpp +index b45032ed..4746531f 100644 +--- a/hotspot/src/os/linux/vm/perfMemory_linux.cpp ++++ b/hotspot/src/os/linux/vm/perfMemory_linux.cpp +@@ -659,7 +659,7 @@ static int get_namespace_pid(int vmid) { + if (fp) { + int pid, nspid; + int ret; +- while (!feof(fp)) { ++ while (!feof(fp) && !ferror(fp)) { + ret = fscanf(fp, "NSpid: %d %d", &pid, &nspid); + if (ret == 1) { + break; +-- +2.17.1 + diff --git a/8322725-tz-Update-Timezone-Data-to-2023d.patch b/8322725-tz-Update-Timezone-Data-to-2023d.patch new file mode 100644 index 0000000..d19fb8a --- /dev/null +++ b/8322725-tz-Update-Timezone-Data-to-2023d.patch @@ -0,0 +1,833 @@ +Date: Sat, 30 Mar 2024 07:07:50 +0000 +Subject: 8322725: (tz) Update Timezone Data to 2023d + +--- + jdk/make/data/tzdata/VERSION | 2 +- + jdk/make/data/tzdata/africa | 7 --- + jdk/make/data/tzdata/antarctica | 57 ++++++++++++++++++- + jdk/make/data/tzdata/asia | 6 +- + jdk/make/data/tzdata/australasia | 8 ++- + jdk/make/data/tzdata/backward | 1 - + jdk/make/data/tzdata/europe | 29 +++++++--- + jdk/make/data/tzdata/iso3166.tab | 17 ++++-- + jdk/make/data/tzdata/leapseconds | 8 +-- + jdk/make/data/tzdata/northamerica | 2 +- + jdk/make/data/tzdata/southamerica | 6 ++ + jdk/make/data/tzdata/zone.tab | 24 ++++---- + .../java/util/TimeZone/TimeZoneData/VERSION | 2 +- + jdk/test/sun/util/calendar/zi/tzdata/VERSION | 2 +- + jdk/test/sun/util/calendar/zi/tzdata/africa | 7 --- + .../sun/util/calendar/zi/tzdata/antarctica | 57 ++++++++++++++++++- + jdk/test/sun/util/calendar/zi/tzdata/asia | 6 +- + .../sun/util/calendar/zi/tzdata/australasia | 8 ++- + jdk/test/sun/util/calendar/zi/tzdata/backward | 1 - + jdk/test/sun/util/calendar/zi/tzdata/europe | 29 +++++++--- + .../sun/util/calendar/zi/tzdata/iso3166.tab | 17 ++++-- + .../sun/util/calendar/zi/tzdata/leapseconds | 8 +-- + .../sun/util/calendar/zi/tzdata/northamerica | 2 +- + .../sun/util/calendar/zi/tzdata/southamerica | 6 ++ + jdk/test/sun/util/calendar/zi/tzdata/zone.tab | 24 ++++---- + 25 files changed, 247 insertions(+), 89 deletions(-) + +diff --git a/jdk/make/data/tzdata/VERSION b/jdk/make/data/tzdata/VERSION +index 66bd061e..560884d1 100644 +--- a/jdk/make/data/tzdata/VERSION ++++ b/jdk/make/data/tzdata/VERSION +@@ -21,4 +21,4 @@ + # or visit www.oracle.com if you need additional information or have any + # questions. + # +-tzdata2023c ++tzdata2023d +diff --git a/jdk/make/data/tzdata/africa b/jdk/make/data/tzdata/africa +index 3e9728c5..c9f48463 100644 +--- a/jdk/make/data/tzdata/africa ++++ b/jdk/make/data/tzdata/africa +@@ -308,13 +308,6 @@ Rule Egypt 2007 only - Sep Thu>=1 24:00 0 - + # reproduced by other (more accessible) sites[, e.g.,]... + # http://elgornal.net/news/news.aspx?id=4699258 + +-# From Paul Eggert (2014-06-04): +-# Sarah El Deeb and Lee Keath of AP report that the Egyptian government says +-# the change is because of blackouts in Cairo, even though Ahram Online (cited +-# above) says DST had no affect on electricity consumption. There is +-# no information about when DST will end this fall. See: +-# http://abcnews.go.com/International/wireStory/el-sissi-pushes-egyptians-line-23614833 +- + # From Steffen Thorsen (2015-04-08): + # Egypt will start DST on midnight after Thursday, April 30, 2015. + # This is based on a law (no 35) from May 15, 2014 saying it starts the last +diff --git a/jdk/make/data/tzdata/antarctica b/jdk/make/data/tzdata/antarctica +index 3de5e726..fc7176cd 100644 +--- a/jdk/make/data/tzdata/antarctica ++++ b/jdk/make/data/tzdata/antarctica +@@ -103,6 +103,11 @@ + # - 2018 Oct 7 4:00 - 2019 Mar 17 3:00 - 2019 Oct 4 3:00 - 2020 Mar 8 3:00 + # and now - 2020 Oct 4 0:01 + ++# From Paul Eggert (2023-12-20): ++# Transitions from 2021 on are taken from: ++# https://www.timeanddate.com/time/zone/antarctica/casey ++# retrieved at various dates. ++ + # Zone NAME STDOFF RULES FORMAT [UNTIL] + Zone Antarctica/Casey 0 - -00 1969 + 8:00 - +08 2009 Oct 18 2:00 +@@ -116,7 +121,12 @@ Zone Antarctica/Casey 0 - -00 1969 + 8:00 - +08 2019 Oct 4 3:00 + 11:00 - +11 2020 Mar 8 3:00 + 8:00 - +08 2020 Oct 4 0:01 +- 11:00 - +11 ++ 11:00 - +11 2021 Mar 14 0:00 ++ 8:00 - +08 2021 Oct 3 0:01 ++ 11:00 - +11 2022 Mar 13 0:00 ++ 8:00 - +08 2022 Oct 2 0:01 ++ 11:00 - +11 2023 Mar 9 3:00 ++ 8:00 - +08 + Zone Antarctica/Davis 0 - -00 1957 Jan 13 + 7:00 - +07 1964 Nov + 0 - -00 1969 Feb +@@ -263,7 +273,50 @@ Zone Antarctica/Troll 0 - -00 2005 Feb 12 + # year-round from 1960/61 to 1992 + + # Vostok, since 1957-12-16, temporarily closed 1994-02/1994-11 +-# See Asia/Urumqi. ++# 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. ++# ++# From Zakhary V. Akulov (2023-12-17 22:00:48 +0700): ++# ... from December, 18, 2023 00:00 by my decision the local time of ++# the Antarctic research base Vostok will correspond to UTC+5. ++# (2023-12-19): We constantly interact with Progress base, with company who ++# builds new wintering station, with sledge convoys, with aviation - they all ++# use UTC+5. Besides, difference between Moscow time is just 2 hours now, not 4. ++# (2023-12-19, in response to the question "Has local time at Vostok ++# been UTC+6 ever since 1957, or has it changed before?"): No. At least ++# since my antarctic career start, 10 years ago, Vostok base has UTC+7. ++# (In response to a 2023-12-18 question "from 02:00 to 00:00 today"): This. ++# ++# From Paul Eggert (2023-12-18): ++# For lack of better info, guess Vostok was at +07 from founding through today, ++# except when closed. ++ ++# Zone NAME STDOFF RULES FORMAT [UNTIL] ++Zone Antarctica/Vostok 0 - -00 1957 Dec 16 ++ 7:00 - +07 1994 Feb ++ 0 - -00 1994 Nov ++ 7:00 - +07 2023 Dec 18 2:00 ++ 5:00 - +05 + + # S Africa - year-round bases + # Marion Island, -4653+03752 +diff --git a/jdk/make/data/tzdata/asia b/jdk/make/data/tzdata/asia +index 48a348bf..67a2ef6e 100644 +--- a/jdk/make/data/tzdata/asia ++++ b/jdk/make/data/tzdata/asia +@@ -678,7 +678,6 @@ Zone Asia/Shanghai 8:05:43 - LMT 1901 + 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 + +@@ -3450,6 +3449,9 @@ Zone Asia/Karachi 4:28:12 - LMT 1907 + # From Heba Hamad (2023-03-22): + # ... summer time will begin in Palestine from Saturday 04-29-2023, + # 02:00 AM by 60 minutes forward. ++# From Heba Hemad (2023-10-09): ++# ... winter time will begin in Palestine from Saturday 10-28-2023, ++# 02:00 AM by 60 minutes back. + # + # From Paul Eggert (2023-03-22): + # For now, guess that spring and fall transitions will normally +@@ -3571,13 +3573,13 @@ Rule Palestine 2070 only - Oct 4 2:00 0 - + Rule Palestine 2071 only - Sep 19 2:00 0 - + Rule Palestine 2072 only - Sep 10 2:00 0 - + Rule Palestine 2072 only - Oct 15 2:00 1:00 S ++Rule Palestine 2072 max - Oct Sat<=30 2:00 0 - + Rule Palestine 2073 only - Sep 2 2:00 0 - + Rule Palestine 2073 only - Oct 7 2:00 1:00 S + Rule Palestine 2074 only - Aug 18 2:00 0 - + Rule Palestine 2074 only - Sep 29 2:00 1:00 S + Rule Palestine 2075 only - Aug 10 2:00 0 - + Rule Palestine 2075 only - Sep 14 2:00 1:00 S +-Rule Palestine 2075 max - Oct Sat<=30 2:00 0 - + Rule Palestine 2076 only - Jul 25 2:00 0 - + Rule Palestine 2076 only - Sep 5 2:00 1:00 S + Rule Palestine 2077 only - Jul 17 2:00 0 - +diff --git a/jdk/make/data/tzdata/australasia b/jdk/make/data/tzdata/australasia +index 893d7055..d273b06e 100644 +--- a/jdk/make/data/tzdata/australasia ++++ b/jdk/make/data/tzdata/australasia +@@ -415,7 +415,13 @@ Zone Antarctica/Macquarie 0 - -00 1899 Nov + # in Fiji for 2022-2023.... + # https://www.facebook.com/FijianGovernment/posts/pfbid0mmWVTYmTibn66ybpFda75pDcf34SSpoSaskJW5gXwaKo5Sgc7273Q4fXWc6kQV6Hl + # +-# From Paul Eggert (2022-10-27): ++# From Almaz Mingaleev (2023-10-06): ++# Cabinet approved the suspension of Daylight Saving and appropriate ++# legislative changes will be considered including the repeal of the ++# Daylight Saving Act 1998 ++# https://www.fiji.gov.fj/Media-Centre/Speeches/English/CABINET-DECISIONS-3-OCTOBER-2023 ++# ++# From Paul Eggert (2023-10-06): + # For now, assume DST is suspended indefinitely. + + # Rule NAME FROM TO - IN ON AT SAVE LETTER/S +diff --git a/jdk/make/data/tzdata/backward b/jdk/make/data/tzdata/backward +index c0746d6d..7ddc6cc3 100644 +--- a/jdk/make/data/tzdata/backward ++++ b/jdk/make/data/tzdata/backward +@@ -228,7 +228,6 @@ 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 +diff --git a/jdk/make/data/tzdata/europe b/jdk/make/data/tzdata/europe +index 5a0e516f..e5260489 100644 +--- a/jdk/make/data/tzdata/europe ++++ b/jdk/make/data/tzdata/europe +@@ -1146,6 +1146,23 @@ Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Tórshavn + # 2. The shift *from* DST in 2023 happens as normal, but coincides with the + # shift to UTC-02 normaltime (people will not change their clocks here). + # 3. After this, DST is still observed, but as -02/-01 instead of -03/-02. ++# ++# From Múte Bourup Egede via Jógvan Svabo Samuelsen (2023-03-15): ++# Greenland will not switch to Daylight Saving Time this year, 2023, ++# because the standard time for Greenland will change from UTC -3 to UTC -2. ++# However, Greenland will change to Daylight Saving Time again in 2024 ++# and onwards. ++ ++# From a contributor who wishes to remain anonymous for now (2023-10-29): ++# https://www.dr.dk/nyheder/seneste/i-nat-skal-uret-stilles-en-time-tilbage-men-foerste-gang-sker-det-ikke-i-groenland ++# with a link to that page: ++# https://naalakkersuisut.gl/Nyheder/2023/10/2710_sommertid ++# ... Ittoqqortoormiit joins the time of Nuuk at March 2024. ++# What would mean that America/Scoresbysund would either be in -01 year round ++# or in -02/-01 like America/Nuuk, but no longer in -01/+00. ++# ++# From Paul Eggert (2023-10-29): ++# For now, assume it will be like America/Nuuk. + + # Rule NAME FROM TO - IN ON AT SAVE LETTER/S + Rule Thule 1991 1992 - Mar lastSun 2:00 1:00 D +@@ -1166,10 +1183,12 @@ Zone America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28 + Zone America/Scoresbysund -1:27:52 - LMT 1916 Jul 28 # Ittoqqortoormiit + -2:00 - -02 1980 Apr 6 2:00 + -2:00 C-Eur -02/-01 1981 Mar 29 +- -1:00 EU -01/+00 ++ -1:00 EU -01/+00 2024 Mar 31 ++ -2:00 EU -02/-01 + 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 2023 Oct 29 1:00u ++ -3:00 EU -03/-02 2023 Mar 26 1:00u ++ -2:00 - -02 2023 Oct 29 1:00u + -2:00 EU -02/-01 + Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik + -4:00 Thule A%sT +@@ -3734,11 +3753,7 @@ Zone Europe/Istanbul 1:55:52 - LMT 1880 + # and not at 3:00 as would have been under EU rules. + # This is why I have set the change to EU rules into May 1996, + # so that the change in March is stil covered by the Ukraine rule. +-# The next change in October 1996 happened under EU rules.... +-# TZ database holds three other zones for Ukraine.... I have not yet +-# worked out the consequences for these three zones, as we (me and my +-# US colleague David Cochrane) are still trying to get more +-# information upon these local deviations from Kiev rules. ++# The next change in October 1996 happened under EU rules. + # + # From Paul Eggert (2022-08-27): + # For now, assume that Ukraine's zones all followed the same rules, +diff --git a/jdk/make/data/tzdata/iso3166.tab b/jdk/make/data/tzdata/iso3166.tab +index cea17732..7fa350ec 100644 +--- a/jdk/make/data/tzdata/iso3166.tab ++++ b/jdk/make/data/tzdata/iso3166.tab +@@ -26,17 +26,22 @@ + # This file is in the public domain, so clarified as of + # 2009-05-17 by Arthur David Olson. + # +-# From Paul Eggert (2022-11-18): ++# From Paul Eggert (2023-09-06): + # 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 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. +-# This is not the same as the English name in the ISO 3166 tables. ++# ISO/TC 46 N1108 (2023-04-05). See: ISO/TC 46 Documents ++# https://www.iso.org/committee/48750.html?view=documents ++# 2. The usual English name for the coded region. This sometimes ++# departs from ISO-listed names, sometimes so that sorted subsets ++# of names are useful (e.g., "Samoa (American)" and "Samoa ++# (western)" rather than "American Samoa" and "Samoa"), ++# sometimes to avoid confusion among non-experts (e.g., ++# "Czech Republic" and "Turkey" rather than "Czechia" and "Türkiye"), ++# and sometimes to omit needless detail or churn (e.g., "Netherlands" ++# rather than "Netherlands (the)" or "Netherlands (Kingdom of the)"). + # + # The table is sorted by country code. + # +diff --git a/jdk/make/data/tzdata/leapseconds b/jdk/make/data/tzdata/leapseconds +index 89ce8b89..ab2c1af4 100644 +--- a/jdk/make/data/tzdata/leapseconds ++++ b/jdk/make/data/tzdata/leapseconds +@@ -95,11 +95,11 @@ Leap 2016 Dec 31 23:59:60 + S + # Any additional leap seconds will come after this. + # This Expires line is commented out for now, + # so that pre-2020a zic implementations do not reject this file. +-#Expires 2023 Dec 28 00:00:00 ++#Expires 2024 Jun 28 00:00:00 + + # POSIX timestamps for the data in this file: + #updated 1467936000 (2016-07-08 00:00:00 UTC) +-#expires 1703721600 (2023-12-28 00:00:00 UTC) ++#expires 1719532800 (2024-06-28 00:00:00 UTC) + +-# Updated through IERS Bulletin C65 +-# File expires on: 28 December 2023 ++# Updated through IERS Bulletin C66 ++# File expires on: 28 June 2024 +diff --git a/jdk/make/data/tzdata/northamerica b/jdk/make/data/tzdata/northamerica +index dade2a1d..b96269a0 100644 +--- a/jdk/make/data/tzdata/northamerica ++++ b/jdk/make/data/tzdata/northamerica +@@ -1476,7 +1476,7 @@ Rule StJohns 1989 2006 - Apr Sun>=1 0:01 1:00 D + Rule StJohns 2007 2011 - Mar Sun>=8 0:01 1:00 D + Rule StJohns 2007 2010 - Nov Sun>=1 0:01 0 S + # +-# St John's has an apostrophe, but Posix file names can't have apostrophes. ++# St John's has an apostrophe, but POSIX file names can't have apostrophes. + # Zone NAME STDOFF RULES FORMAT [UNTIL] + Zone America/St_Johns -3:30:52 - LMT 1884 + -3:30:52 StJohns N%sT 1918 +diff --git a/jdk/make/data/tzdata/southamerica b/jdk/make/data/tzdata/southamerica +index 4024e718..da2c6239 100644 +--- a/jdk/make/data/tzdata/southamerica ++++ b/jdk/make/data/tzdata/southamerica +@@ -1720,6 +1720,12 @@ Rule Para 2010 2012 - Apr Sun>=8 0:00 0 - + # From Carlos Raúl Perasso (2014-02-28): + # Decree 1264 can be found at: + # http://www.presidencia.gov.py/archivos/documentos/DECRETO1264_ey9r8zai.pdf ++# ++# From Paul Eggert (2023-07-26): ++# Transition dates are now set by Law No. 7115, not by presidential decree. ++# https://www.abc.com.py/politica/2023/07/12/promulgacion-el-cambio-de-hora-sera-por-ley/ ++# From Carlos Raúl Perasso (2023-07-27): ++# http://silpy.congreso.gov.py/descarga/ley-144138 + Rule Para 2013 max - Mar Sun>=22 0:00 0 - + + # Zone NAME STDOFF RULES FORMAT [UNTIL] +diff --git a/jdk/make/data/tzdata/zone.tab b/jdk/make/data/tzdata/zone.tab +index 3edb0d61..0a01e877 100644 +--- a/jdk/make/data/tzdata/zone.tab ++++ b/jdk/make/data/tzdata/zone.tab +@@ -71,7 +71,7 @@ AR -3124-06411 America/Argentina/Cordoba Argentina (most areas: CB, CC, CN, ER, + AR -2447-06525 America/Argentina/Salta Salta (SA, LP, NQ, RN) + AR -2411-06518 America/Argentina/Jujuy Jujuy (JY) + AR -2649-06513 America/Argentina/Tucuman Tucuman (TM) +-AR -2828-06547 America/Argentina/Catamarca Catamarca (CT); Chubut (CH) ++AR -2828-06547 America/Argentina/Catamarca Catamarca (CT), Chubut (CH) + AR -2926-06651 America/Argentina/La_Rioja La Rioja (LR) + AR -3132-06831 America/Argentina/San_Juan San Juan (SJ) + AR -3253-06849 America/Argentina/Mendoza Mendoza (MZ) +@@ -110,7 +110,7 @@ BN +0456+11455 Asia/Brunei + BO -1630-06809 America/La_Paz + BQ +120903-0681636 America/Kralendijk + BR -0351-03225 America/Noronha Atlantic islands +-BR -0127-04829 America/Belem Para (east); Amapa ++BR -0127-04829 America/Belem Para (east), Amapa + BR -0343-03830 America/Fortaleza Brazil (northeast: MA, PI, CE, RN, PB) + BR -0803-03454 America/Recife Pernambuco + BR -0712-04812 America/Araguaina Tocantins +@@ -130,21 +130,21 @@ BT +2728+08939 Asia/Thimphu + BW -2439+02555 Africa/Gaborone + BY +5354+02734 Europe/Minsk + BZ +1730-08812 America/Belize +-CA +4734-05243 America/St_Johns Newfoundland; Labrador (southeast) +-CA +4439-06336 America/Halifax Atlantic - NS (most areas); PE ++CA +4734-05243 America/St_Johns Newfoundland, Labrador (SE) ++CA +4439-06336 America/Halifax Atlantic - NS (most areas), PE + CA +4612-05957 America/Glace_Bay Atlantic - NS (Cape Breton) + CA +4606-06447 America/Moncton Atlantic - New Brunswick + 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 +4339-07923 America/Toronto Eastern - ON & QC (most areas) + 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 +484531-0913718 America/Atikokan EST - ON (Atikokan), NU (Coral H) ++CA +4953-09709 America/Winnipeg Central - ON (west), Manitoba + 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) + CA +5017-10750 America/Swift_Current CST - SK (midwest) +-CA +5333-11328 America/Edmonton Mountain - AB; BC (E); NT (E); SK (W) ++CA +5333-11328 America/Edmonton Mountain - AB, BC(E), NT(E), SK(W) + CA +690650-1050310 America/Cambridge_Bay Mountain - NU (west) + CA +682059-1334300 America/Inuvik Mountain - NT (west) + CA +4906-11631 America/Creston MST - BC (Creston) +@@ -230,8 +230,8 @@ HT +1832-07220 America/Port-au-Prince + HU +4730+01905 Europe/Budapest + ID -0610+10648 Asia/Jakarta Java, Sumatra + ID -0002+10920 Asia/Pontianak Borneo (west, central) +-ID -0507+11924 Asia/Makassar Borneo (east, south); Sulawesi/Celebes, Bali, Nusa Tengarra; Timor (west) +-ID -0232+14042 Asia/Jayapura New Guinea (West Papua / Irian Jaya); Malukus/Moluccas ++ID -0507+11924 Asia/Makassar Borneo (east, south), Sulawesi/Celebes, Bali, Nusa Tengarra, Timor (west) ++ID -0232+14042 Asia/Jayapura New Guinea (West Papua / Irian Jaya), Malukus/Moluccas + IE +5320-00615 Europe/Dublin + IL +314650+0351326 Asia/Jerusalem + IM +5409-00428 Europe/Isle_of_Man +@@ -378,7 +378,7 @@ RU +4310+13156 Asia/Vladivostok MSK+07 - Amur River + RU +643337+1431336 Asia/Ust-Nera MSK+07 - Oymyakonsky + RU +5934+15048 Asia/Magadan MSK+08 - Magadan + RU +4658+14242 Asia/Sakhalin MSK+08 - Sakhalin Island +-RU +6728+15343 Asia/Srednekolymsk MSK+08 - Sakha (E); N Kuril Is ++RU +6728+15343 Asia/Srednekolymsk MSK+08 - Sakha (E), N Kuril Is + RU +5301+15839 Asia/Kamchatka MSK+09 - Kamchatka + RU +6445+17729 Asia/Anadyr MSK+09 - Bering Sea + RW -0157+03004 Africa/Kigali +@@ -441,7 +441,7 @@ US +470659-1011757 America/North_Dakota/Center Central - ND (Oliver) + US +465042-1012439 America/North_Dakota/New_Salem Central - ND (Morton rural) + US +471551-1014640 America/North_Dakota/Beulah Central - ND (Mercer) + US +394421-1045903 America/Denver Mountain (most areas) +-US +433649-1161209 America/Boise Mountain - ID (south); OR (east) ++US +433649-1161209 America/Boise Mountain - ID (south), OR (east) + US +332654-1120424 America/Phoenix MST - AZ (except Navajo) + US +340308-1181434 America/Los_Angeles Pacific + US +611305-1495401 America/Anchorage Alaska (most areas) +diff --git a/jdk/test/java/util/TimeZone/TimeZoneData/VERSION b/jdk/test/java/util/TimeZone/TimeZoneData/VERSION +index c5483b48..f92096d4 100644 +--- a/jdk/test/java/util/TimeZone/TimeZoneData/VERSION ++++ b/jdk/test/java/util/TimeZone/TimeZoneData/VERSION +@@ -1 +1 @@ +-tzdata2023c ++tzdata2023d +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/VERSION b/jdk/test/sun/util/calendar/zi/tzdata/VERSION +index 66bd061e..560884d1 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/VERSION ++++ b/jdk/test/sun/util/calendar/zi/tzdata/VERSION +@@ -21,4 +21,4 @@ + # or visit www.oracle.com if you need additional information or have any + # questions. + # +-tzdata2023c ++tzdata2023d +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/africa b/jdk/test/sun/util/calendar/zi/tzdata/africa +index 3e9728c5..c9f48463 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/africa ++++ b/jdk/test/sun/util/calendar/zi/tzdata/africa +@@ -308,13 +308,6 @@ Rule Egypt 2007 only - Sep Thu>=1 24:00 0 - + # reproduced by other (more accessible) sites[, e.g.,]... + # http://elgornal.net/news/news.aspx?id=4699258 + +-# From Paul Eggert (2014-06-04): +-# Sarah El Deeb and Lee Keath of AP report that the Egyptian government says +-# the change is because of blackouts in Cairo, even though Ahram Online (cited +-# above) says DST had no affect on electricity consumption. There is +-# no information about when DST will end this fall. See: +-# http://abcnews.go.com/International/wireStory/el-sissi-pushes-egyptians-line-23614833 +- + # From Steffen Thorsen (2015-04-08): + # Egypt will start DST on midnight after Thursday, April 30, 2015. + # This is based on a law (no 35) from May 15, 2014 saying it starts the last +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/antarctica b/jdk/test/sun/util/calendar/zi/tzdata/antarctica +index 3de5e726..fc7176cd 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/antarctica ++++ b/jdk/test/sun/util/calendar/zi/tzdata/antarctica +@@ -103,6 +103,11 @@ + # - 2018 Oct 7 4:00 - 2019 Mar 17 3:00 - 2019 Oct 4 3:00 - 2020 Mar 8 3:00 + # and now - 2020 Oct 4 0:01 + ++# From Paul Eggert (2023-12-20): ++# Transitions from 2021 on are taken from: ++# https://www.timeanddate.com/time/zone/antarctica/casey ++# retrieved at various dates. ++ + # Zone NAME STDOFF RULES FORMAT [UNTIL] + Zone Antarctica/Casey 0 - -00 1969 + 8:00 - +08 2009 Oct 18 2:00 +@@ -116,7 +121,12 @@ Zone Antarctica/Casey 0 - -00 1969 + 8:00 - +08 2019 Oct 4 3:00 + 11:00 - +11 2020 Mar 8 3:00 + 8:00 - +08 2020 Oct 4 0:01 +- 11:00 - +11 ++ 11:00 - +11 2021 Mar 14 0:00 ++ 8:00 - +08 2021 Oct 3 0:01 ++ 11:00 - +11 2022 Mar 13 0:00 ++ 8:00 - +08 2022 Oct 2 0:01 ++ 11:00 - +11 2023 Mar 9 3:00 ++ 8:00 - +08 + Zone Antarctica/Davis 0 - -00 1957 Jan 13 + 7:00 - +07 1964 Nov + 0 - -00 1969 Feb +@@ -263,7 +273,50 @@ Zone Antarctica/Troll 0 - -00 2005 Feb 12 + # year-round from 1960/61 to 1992 + + # Vostok, since 1957-12-16, temporarily closed 1994-02/1994-11 +-# See Asia/Urumqi. ++# 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. ++# ++# From Zakhary V. Akulov (2023-12-17 22:00:48 +0700): ++# ... from December, 18, 2023 00:00 by my decision the local time of ++# the Antarctic research base Vostok will correspond to UTC+5. ++# (2023-12-19): We constantly interact with Progress base, with company who ++# builds new wintering station, with sledge convoys, with aviation - they all ++# use UTC+5. Besides, difference between Moscow time is just 2 hours now, not 4. ++# (2023-12-19, in response to the question "Has local time at Vostok ++# been UTC+6 ever since 1957, or has it changed before?"): No. At least ++# since my antarctic career start, 10 years ago, Vostok base has UTC+7. ++# (In response to a 2023-12-18 question "from 02:00 to 00:00 today"): This. ++# ++# From Paul Eggert (2023-12-18): ++# For lack of better info, guess Vostok was at +07 from founding through today, ++# except when closed. ++ ++# Zone NAME STDOFF RULES FORMAT [UNTIL] ++Zone Antarctica/Vostok 0 - -00 1957 Dec 16 ++ 7:00 - +07 1994 Feb ++ 0 - -00 1994 Nov ++ 7:00 - +07 2023 Dec 18 2:00 ++ 5:00 - +05 + + # S Africa - year-round bases + # Marion Island, -4653+03752 +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/asia b/jdk/test/sun/util/calendar/zi/tzdata/asia +index 48a348bf..67a2ef6e 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/asia ++++ b/jdk/test/sun/util/calendar/zi/tzdata/asia +@@ -678,7 +678,6 @@ Zone Asia/Shanghai 8:05:43 - LMT 1901 + 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 + +@@ -3450,6 +3449,9 @@ Zone Asia/Karachi 4:28:12 - LMT 1907 + # From Heba Hamad (2023-03-22): + # ... summer time will begin in Palestine from Saturday 04-29-2023, + # 02:00 AM by 60 minutes forward. ++# From Heba Hemad (2023-10-09): ++# ... winter time will begin in Palestine from Saturday 10-28-2023, ++# 02:00 AM by 60 minutes back. + # + # From Paul Eggert (2023-03-22): + # For now, guess that spring and fall transitions will normally +@@ -3571,13 +3573,13 @@ Rule Palestine 2070 only - Oct 4 2:00 0 - + Rule Palestine 2071 only - Sep 19 2:00 0 - + Rule Palestine 2072 only - Sep 10 2:00 0 - + Rule Palestine 2072 only - Oct 15 2:00 1:00 S ++Rule Palestine 2072 max - Oct Sat<=30 2:00 0 - + Rule Palestine 2073 only - Sep 2 2:00 0 - + Rule Palestine 2073 only - Oct 7 2:00 1:00 S + Rule Palestine 2074 only - Aug 18 2:00 0 - + Rule Palestine 2074 only - Sep 29 2:00 1:00 S + Rule Palestine 2075 only - Aug 10 2:00 0 - + Rule Palestine 2075 only - Sep 14 2:00 1:00 S +-Rule Palestine 2075 max - Oct Sat<=30 2:00 0 - + Rule Palestine 2076 only - Jul 25 2:00 0 - + Rule Palestine 2076 only - Sep 5 2:00 1:00 S + Rule Palestine 2077 only - Jul 17 2:00 0 - +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/australasia b/jdk/test/sun/util/calendar/zi/tzdata/australasia +index 893d7055..d273b06e 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/australasia ++++ b/jdk/test/sun/util/calendar/zi/tzdata/australasia +@@ -415,7 +415,13 @@ Zone Antarctica/Macquarie 0 - -00 1899 Nov + # in Fiji for 2022-2023.... + # https://www.facebook.com/FijianGovernment/posts/pfbid0mmWVTYmTibn66ybpFda75pDcf34SSpoSaskJW5gXwaKo5Sgc7273Q4fXWc6kQV6Hl + # +-# From Paul Eggert (2022-10-27): ++# From Almaz Mingaleev (2023-10-06): ++# Cabinet approved the suspension of Daylight Saving and appropriate ++# legislative changes will be considered including the repeal of the ++# Daylight Saving Act 1998 ++# https://www.fiji.gov.fj/Media-Centre/Speeches/English/CABINET-DECISIONS-3-OCTOBER-2023 ++# ++# From Paul Eggert (2023-10-06): + # For now, assume DST is suspended indefinitely. + + # Rule NAME FROM TO - IN ON AT SAVE LETTER/S +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/backward b/jdk/test/sun/util/calendar/zi/tzdata/backward +index c0746d6d..7ddc6cc3 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/backward ++++ b/jdk/test/sun/util/calendar/zi/tzdata/backward +@@ -228,7 +228,6 @@ 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 +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/europe b/jdk/test/sun/util/calendar/zi/tzdata/europe +index 5a0e516f..e5260489 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/europe ++++ b/jdk/test/sun/util/calendar/zi/tzdata/europe +@@ -1146,6 +1146,23 @@ Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Tórshavn + # 2. The shift *from* DST in 2023 happens as normal, but coincides with the + # shift to UTC-02 normaltime (people will not change their clocks here). + # 3. After this, DST is still observed, but as -02/-01 instead of -03/-02. ++# ++# From Múte Bourup Egede via Jógvan Svabo Samuelsen (2023-03-15): ++# Greenland will not switch to Daylight Saving Time this year, 2023, ++# because the standard time for Greenland will change from UTC -3 to UTC -2. ++# However, Greenland will change to Daylight Saving Time again in 2024 ++# and onwards. ++ ++# From a contributor who wishes to remain anonymous for now (2023-10-29): ++# https://www.dr.dk/nyheder/seneste/i-nat-skal-uret-stilles-en-time-tilbage-men-foerste-gang-sker-det-ikke-i-groenland ++# with a link to that page: ++# https://naalakkersuisut.gl/Nyheder/2023/10/2710_sommertid ++# ... Ittoqqortoormiit joins the time of Nuuk at March 2024. ++# What would mean that America/Scoresbysund would either be in -01 year round ++# or in -02/-01 like America/Nuuk, but no longer in -01/+00. ++# ++# From Paul Eggert (2023-10-29): ++# For now, assume it will be like America/Nuuk. + + # Rule NAME FROM TO - IN ON AT SAVE LETTER/S + Rule Thule 1991 1992 - Mar lastSun 2:00 1:00 D +@@ -1166,10 +1183,12 @@ Zone America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28 + Zone America/Scoresbysund -1:27:52 - LMT 1916 Jul 28 # Ittoqqortoormiit + -2:00 - -02 1980 Apr 6 2:00 + -2:00 C-Eur -02/-01 1981 Mar 29 +- -1:00 EU -01/+00 ++ -1:00 EU -01/+00 2024 Mar 31 ++ -2:00 EU -02/-01 + 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 2023 Oct 29 1:00u ++ -3:00 EU -03/-02 2023 Mar 26 1:00u ++ -2:00 - -02 2023 Oct 29 1:00u + -2:00 EU -02/-01 + Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik + -4:00 Thule A%sT +@@ -3734,11 +3753,7 @@ Zone Europe/Istanbul 1:55:52 - LMT 1880 + # and not at 3:00 as would have been under EU rules. + # This is why I have set the change to EU rules into May 1996, + # so that the change in March is stil covered by the Ukraine rule. +-# The next change in October 1996 happened under EU rules.... +-# TZ database holds three other zones for Ukraine.... I have not yet +-# worked out the consequences for these three zones, as we (me and my +-# US colleague David Cochrane) are still trying to get more +-# information upon these local deviations from Kiev rules. ++# The next change in October 1996 happened under EU rules. + # + # From Paul Eggert (2022-08-27): + # For now, assume that Ukraine's zones all followed the same rules, +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/iso3166.tab b/jdk/test/sun/util/calendar/zi/tzdata/iso3166.tab +index cea17732..7fa350ec 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/iso3166.tab ++++ b/jdk/test/sun/util/calendar/zi/tzdata/iso3166.tab +@@ -26,17 +26,22 @@ + # This file is in the public domain, so clarified as of + # 2009-05-17 by Arthur David Olson. + # +-# From Paul Eggert (2022-11-18): ++# From Paul Eggert (2023-09-06): + # 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 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. +-# This is not the same as the English name in the ISO 3166 tables. ++# ISO/TC 46 N1108 (2023-04-05). See: ISO/TC 46 Documents ++# https://www.iso.org/committee/48750.html?view=documents ++# 2. The usual English name for the coded region. This sometimes ++# departs from ISO-listed names, sometimes so that sorted subsets ++# of names are useful (e.g., "Samoa (American)" and "Samoa ++# (western)" rather than "American Samoa" and "Samoa"), ++# sometimes to avoid confusion among non-experts (e.g., ++# "Czech Republic" and "Turkey" rather than "Czechia" and "Türkiye"), ++# and sometimes to omit needless detail or churn (e.g., "Netherlands" ++# rather than "Netherlands (the)" or "Netherlands (Kingdom of the)"). + # + # The table is sorted by country code. + # +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/leapseconds b/jdk/test/sun/util/calendar/zi/tzdata/leapseconds +index 89ce8b89..ab2c1af4 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/leapseconds ++++ b/jdk/test/sun/util/calendar/zi/tzdata/leapseconds +@@ -95,11 +95,11 @@ Leap 2016 Dec 31 23:59:60 + S + # Any additional leap seconds will come after this. + # This Expires line is commented out for now, + # so that pre-2020a zic implementations do not reject this file. +-#Expires 2023 Dec 28 00:00:00 ++#Expires 2024 Jun 28 00:00:00 + + # POSIX timestamps for the data in this file: + #updated 1467936000 (2016-07-08 00:00:00 UTC) +-#expires 1703721600 (2023-12-28 00:00:00 UTC) ++#expires 1719532800 (2024-06-28 00:00:00 UTC) + +-# Updated through IERS Bulletin C65 +-# File expires on: 28 December 2023 ++# Updated through IERS Bulletin C66 ++# File expires on: 28 June 2024 +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/northamerica b/jdk/test/sun/util/calendar/zi/tzdata/northamerica +index dade2a1d..b96269a0 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/northamerica ++++ b/jdk/test/sun/util/calendar/zi/tzdata/northamerica +@@ -1476,7 +1476,7 @@ Rule StJohns 1989 2006 - Apr Sun>=1 0:01 1:00 D + Rule StJohns 2007 2011 - Mar Sun>=8 0:01 1:00 D + Rule StJohns 2007 2010 - Nov Sun>=1 0:01 0 S + # +-# St John's has an apostrophe, but Posix file names can't have apostrophes. ++# St John's has an apostrophe, but POSIX file names can't have apostrophes. + # Zone NAME STDOFF RULES FORMAT [UNTIL] + Zone America/St_Johns -3:30:52 - LMT 1884 + -3:30:52 StJohns N%sT 1918 +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/southamerica b/jdk/test/sun/util/calendar/zi/tzdata/southamerica +index 4024e718..da2c6239 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/southamerica ++++ b/jdk/test/sun/util/calendar/zi/tzdata/southamerica +@@ -1720,6 +1720,12 @@ Rule Para 2010 2012 - Apr Sun>=8 0:00 0 - + # From Carlos Raúl Perasso (2014-02-28): + # Decree 1264 can be found at: + # http://www.presidencia.gov.py/archivos/documentos/DECRETO1264_ey9r8zai.pdf ++# ++# From Paul Eggert (2023-07-26): ++# Transition dates are now set by Law No. 7115, not by presidential decree. ++# https://www.abc.com.py/politica/2023/07/12/promulgacion-el-cambio-de-hora-sera-por-ley/ ++# From Carlos Raúl Perasso (2023-07-27): ++# http://silpy.congreso.gov.py/descarga/ley-144138 + Rule Para 2013 max - Mar Sun>=22 0:00 0 - + + # Zone NAME STDOFF RULES FORMAT [UNTIL] +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/zone.tab b/jdk/test/sun/util/calendar/zi/tzdata/zone.tab +index 3edb0d61..0a01e877 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/zone.tab ++++ b/jdk/test/sun/util/calendar/zi/tzdata/zone.tab +@@ -71,7 +71,7 @@ AR -3124-06411 America/Argentina/Cordoba Argentina (most areas: CB, CC, CN, ER, + AR -2447-06525 America/Argentina/Salta Salta (SA, LP, NQ, RN) + AR -2411-06518 America/Argentina/Jujuy Jujuy (JY) + AR -2649-06513 America/Argentina/Tucuman Tucuman (TM) +-AR -2828-06547 America/Argentina/Catamarca Catamarca (CT); Chubut (CH) ++AR -2828-06547 America/Argentina/Catamarca Catamarca (CT), Chubut (CH) + AR -2926-06651 America/Argentina/La_Rioja La Rioja (LR) + AR -3132-06831 America/Argentina/San_Juan San Juan (SJ) + AR -3253-06849 America/Argentina/Mendoza Mendoza (MZ) +@@ -110,7 +110,7 @@ BN +0456+11455 Asia/Brunei + BO -1630-06809 America/La_Paz + BQ +120903-0681636 America/Kralendijk + BR -0351-03225 America/Noronha Atlantic islands +-BR -0127-04829 America/Belem Para (east); Amapa ++BR -0127-04829 America/Belem Para (east), Amapa + BR -0343-03830 America/Fortaleza Brazil (northeast: MA, PI, CE, RN, PB) + BR -0803-03454 America/Recife Pernambuco + BR -0712-04812 America/Araguaina Tocantins +@@ -130,21 +130,21 @@ BT +2728+08939 Asia/Thimphu + BW -2439+02555 Africa/Gaborone + BY +5354+02734 Europe/Minsk + BZ +1730-08812 America/Belize +-CA +4734-05243 America/St_Johns Newfoundland; Labrador (southeast) +-CA +4439-06336 America/Halifax Atlantic - NS (most areas); PE ++CA +4734-05243 America/St_Johns Newfoundland, Labrador (SE) ++CA +4439-06336 America/Halifax Atlantic - NS (most areas), PE + CA +4612-05957 America/Glace_Bay Atlantic - NS (Cape Breton) + CA +4606-06447 America/Moncton Atlantic - New Brunswick + 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 +4339-07923 America/Toronto Eastern - ON & QC (most areas) + 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 +484531-0913718 America/Atikokan EST - ON (Atikokan), NU (Coral H) ++CA +4953-09709 America/Winnipeg Central - ON (west), Manitoba + 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) + CA +5017-10750 America/Swift_Current CST - SK (midwest) +-CA +5333-11328 America/Edmonton Mountain - AB; BC (E); NT (E); SK (W) ++CA +5333-11328 America/Edmonton Mountain - AB, BC(E), NT(E), SK(W) + CA +690650-1050310 America/Cambridge_Bay Mountain - NU (west) + CA +682059-1334300 America/Inuvik Mountain - NT (west) + CA +4906-11631 America/Creston MST - BC (Creston) +@@ -230,8 +230,8 @@ HT +1832-07220 America/Port-au-Prince + HU +4730+01905 Europe/Budapest + ID -0610+10648 Asia/Jakarta Java, Sumatra + ID -0002+10920 Asia/Pontianak Borneo (west, central) +-ID -0507+11924 Asia/Makassar Borneo (east, south); Sulawesi/Celebes, Bali, Nusa Tengarra; Timor (west) +-ID -0232+14042 Asia/Jayapura New Guinea (West Papua / Irian Jaya); Malukus/Moluccas ++ID -0507+11924 Asia/Makassar Borneo (east, south), Sulawesi/Celebes, Bali, Nusa Tengarra, Timor (west) ++ID -0232+14042 Asia/Jayapura New Guinea (West Papua / Irian Jaya), Malukus/Moluccas + IE +5320-00615 Europe/Dublin + IL +314650+0351326 Asia/Jerusalem + IM +5409-00428 Europe/Isle_of_Man +@@ -378,7 +378,7 @@ RU +4310+13156 Asia/Vladivostok MSK+07 - Amur River + RU +643337+1431336 Asia/Ust-Nera MSK+07 - Oymyakonsky + RU +5934+15048 Asia/Magadan MSK+08 - Magadan + RU +4658+14242 Asia/Sakhalin MSK+08 - Sakhalin Island +-RU +6728+15343 Asia/Srednekolymsk MSK+08 - Sakha (E); N Kuril Is ++RU +6728+15343 Asia/Srednekolymsk MSK+08 - Sakha (E), N Kuril Is + RU +5301+15839 Asia/Kamchatka MSK+09 - Kamchatka + RU +6445+17729 Asia/Anadyr MSK+09 - Bering Sea + RW -0157+03004 Africa/Kigali +@@ -441,7 +441,7 @@ US +470659-1011757 America/North_Dakota/Center Central - ND (Oliver) + US +465042-1012439 America/North_Dakota/New_Salem Central - ND (Morton rural) + US +471551-1014640 America/North_Dakota/Beulah Central - ND (Mercer) + US +394421-1045903 America/Denver Mountain (most areas) +-US +433649-1161209 America/Boise Mountain - ID (south); OR (east) ++US +433649-1161209 America/Boise Mountain - ID (south), OR (east) + US +332654-1120424 America/Phoenix MST - AZ (except Navajo) + US +340308-1181434 America/Los_Angeles Pacific + US +611305-1495401 America/Anchorage Alaska (most areas) +-- +2.17.1 + diff --git a/8325150-tz-Update-Timezone-Data-to-2024a.patch b/8325150-tz-Update-Timezone-Data-to-2024a.patch new file mode 100644 index 0000000..99d10ac --- /dev/null +++ b/8325150-tz-Update-Timezone-Data-to-2024a.patch @@ -0,0 +1,1257 @@ +Date: Sat, 30 Mar 2024 07:10:27 +0000 +Subject: 8325150: (tz) Update Timezone Data to 2024a + +--- + jdk/make/data/tzdata/VERSION | 2 +- + jdk/make/data/tzdata/africa | 8 +- + jdk/make/data/tzdata/asia | 174 +++++++++++------- + jdk/make/data/tzdata/australasia | 14 +- + jdk/make/data/tzdata/etcetera | 2 +- + jdk/make/data/tzdata/europe | 29 ++- + jdk/make/data/tzdata/leapseconds | 19 +- + jdk/make/data/tzdata/northamerica | 29 ++- + jdk/make/data/tzdata/southamerica | 5 +- + .../java/util/TimeZone/TimeZoneData/VERSION | 2 +- + jdk/test/sun/util/calendar/zi/tzdata/VERSION | 2 +- + jdk/test/sun/util/calendar/zi/tzdata/africa | 8 +- + jdk/test/sun/util/calendar/zi/tzdata/asia | 174 +++++++++++------- + .../sun/util/calendar/zi/tzdata/australasia | 14 +- + jdk/test/sun/util/calendar/zi/tzdata/etcetera | 2 +- + jdk/test/sun/util/calendar/zi/tzdata/europe | 29 ++- + .../sun/util/calendar/zi/tzdata/leapseconds | 19 +- + .../sun/util/calendar/zi/tzdata/northamerica | 29 ++- + .../sun/util/calendar/zi/tzdata/southamerica | 5 +- + 19 files changed, 369 insertions(+), 197 deletions(-) + +diff --git a/jdk/make/data/tzdata/VERSION b/jdk/make/data/tzdata/VERSION +index 560884d1..b138ed7f 100644 +--- a/jdk/make/data/tzdata/VERSION ++++ b/jdk/make/data/tzdata/VERSION +@@ -21,4 +21,4 @@ + # or visit www.oracle.com if you need additional information or have any + # questions. + # +-tzdata2023d ++tzdata2024a +diff --git a/jdk/make/data/tzdata/africa b/jdk/make/data/tzdata/africa +index c9f48463..57098882 100644 +--- a/jdk/make/data/tzdata/africa ++++ b/jdk/make/data/tzdata/africa +@@ -53,6 +53,10 @@ + # Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94. + # https://www.jstor.org/stable/1774359 + # ++# For the 1911/1912 establishment of standard time in French possessions, see: ++# Société Française de Physique, Recueil de constantes physiques (1913), ++# page 752, 18b. ++# + # European-style abbreviations are commonly used along the Mediterranean. + # For sub-Saharan Africa abbreviations were less standardized. + # Previous editions of this database used WAT, CAT, SAT, and EAT +@@ -136,7 +140,7 @@ Zone Atlantic/Cape_Verde -1:34:04 - LMT 1912 Jan 01 2:00u # Praia + + # Chad + # Zone NAME STDOFF RULES FORMAT [UNTIL] +-Zone Africa/Ndjamena 1:00:12 - LMT 1912 # N'Djamena ++Zone Africa/Ndjamena 1:00:12 - LMT 1912 Jan 1 # N'Djamena + 1:00 - WAT 1979 Oct 14 + 1:00 1:00 WAST 1980 Mar 8 + 1:00 - WAT +@@ -162,7 +166,7 @@ Zone Africa/Ndjamena 1:00:12 - LMT 1912 # N'Djamena + # Inaccessible, Nightingale: uninhabited + + # Zone NAME STDOFF RULES FORMAT [UNTIL] +-Zone Africa/Abidjan -0:16:08 - LMT 1912 ++Zone Africa/Abidjan -0:16:08 - LMT 1912 Jan 1 + 0:00 - GMT + + ############################################################################### +diff --git a/jdk/make/data/tzdata/asia b/jdk/make/data/tzdata/asia +index 67a2ef6e..c51170c3 100644 +--- a/jdk/make/data/tzdata/asia ++++ b/jdk/make/data/tzdata/asia +@@ -2480,18 +2480,33 @@ Zone Asia/Amman 2:23:44 - LMT 1931 + # effective December 21st, 2018.... + # http://adilet.zan.kz/rus/docs/P1800000817 (russian language). + ++# From Zhanbolat Raimbekov (2024-01-19): ++# Kazakhstan (all parts) switching to UTC+5 on March 1, 2024 ++# https://www.gov.kz/memleket/entities/mti/press/news/details/688998?lang=ru ++# [in Russian] ++# (2024-01-20): https://primeminister.kz/ru/decisions/19012024-20 ++# ++# From Alexander Krivenyshev (2024-01-19): ++# According to a different news and the official web site for the Ministry of ++# Trade and Integration of the Republic of Kazakhstan: ++# https://en.inform.kz/news/kazakhstan-to-switch-to-single-hour-zone-mar-1-54ad0b/ ++ + # Zone NAME STDOFF RULES FORMAT [UNTIL] + # + # Almaty (formerly Alma-Ata), representing most locations in Kazakhstan +-# This includes KZ-AKM, KZ-ALA, KZ-ALM, KZ-AST, KZ-BAY, KZ-VOS, KZ-ZHA, +-# KZ-KAR, KZ-SEV, KZ-PAV, and KZ-YUZ. ++# This includes Abai/Abay (ISO 3166-2 code KZ-10), Aqmola/Akmola (KZ-11), ++# Almaty (KZ-19), Almaty city (KZ-75), Astana city (KZ-71), ++# East Kazkhstan (KZ-63), Jambyl/Zhambyl (KZ-31), Jetisu/Zhetysu (KZ-33), ++# Karaganda (KZ-35), North Kazakhstan (KZ-59), Pavlodar (KZ-55), ++# Shyumkent city (KZ-79), Turkistan (KZ-61), and Ulytau (KZ-62). + Zone Asia/Almaty 5:07:48 - LMT 1924 May 2 # or Alma-Ata + 5:00 - +05 1930 Jun 21 + 6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s + 5:00 RussiaAsia +05/+06 1992 Jan 19 2:00s + 6:00 RussiaAsia +06/+07 2004 Oct 31 2:00s +- 6:00 - +06 +-# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) (KZ-KZY) ++ 6:00 - +06 2024 Mar 1 0:00 ++ 5:00 - +05 ++# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) (KZ-43) + Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2 + 4:00 - +04 1930 Jun 21 + 5:00 - +05 1981 Apr 1 +@@ -2504,8 +2519,7 @@ Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2 + 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s + 6:00 - +06 2018 Dec 21 0:00 + 5:00 - +05 +-# +-# Qostanay (aka Kostanay, Kustanay) (KZ-KUS) ++# Qostanay (aka Kostanay, Kustanay) (KZ-39) + # The 1991/2 rules are unclear partly because of the 1997 Turgai + # reorganization. + Zone Asia/Qostanay 4:14:28 - LMT 1924 May 2 +@@ -2516,9 +2530,9 @@ Zone Asia/Qostanay 4:14:28 - LMT 1924 May 2 + 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s + 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s + 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s +- 6:00 - +06 +- +-# Aqtöbe (aka Aktobe, formerly Aktyubinsk) (KZ-AKT) ++ 6:00 - +06 2024 Mar 1 0:00 ++ 5:00 - +05 ++# Aqtöbe (aka Aktobe, formerly Aktyubinsk) (KZ-15) + Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2 + 4:00 - +04 1930 Jun 21 + 5:00 - +05 1981 Apr 1 +@@ -2528,7 +2542,7 @@ Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2 + 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s + 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s + 5:00 - +05 +-# Mangghystaū (KZ-MAN) ++# Mangghystaū (KZ-47) + # Aqtau was not founded until 1963, but it represents an inhabited region, + # so include timestamps before 1963. + Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2 +@@ -2540,7 +2554,7 @@ Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2 + 5:00 RussiaAsia +05/+06 1994 Sep 25 2:00s + 4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s + 5:00 - +05 +-# Atyraū (KZ-ATY) is like Mangghystaū except it switched from ++# Atyraū (KZ-23) is like Mangghystaū except it switched from + # +04/+05 to +05/+06 in spring 1999, not fall 1994. + Zone Asia/Atyrau 3:27:44 - LMT 1924 May 2 + 3:00 - +03 1930 Jun 21 +@@ -2551,7 +2565,7 @@ Zone Asia/Atyrau 3:27:44 - LMT 1924 May 2 + 5:00 RussiaAsia +05/+06 1999 Mar 28 2:00s + 4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s + 5:00 - +05 +-# West Kazakhstan (KZ-ZAP) ++# West Kazakhstan (KZ-27) + # From Paul Eggert (2016-03-18): + # The 1989 transition is from USSR act No. 227 (1989-03-14). + Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk +@@ -3453,19 +3467,26 @@ Zone Asia/Karachi 4:28:12 - LMT 1907 + # ... winter time will begin in Palestine from Saturday 10-28-2023, + # 02:00 AM by 60 minutes back. + # +-# From Paul Eggert (2023-03-22): ++# From Heba Hamad (2024-01-25): ++# the summer time for the years 2024,2025 will begin in Palestine ++# from Saturday at 02:00 AM by 60 minutes forward as shown below: ++# year date ++# 2024 2024-04-20 ++# 2025 2025-04-12 ++# ++# From Paul Eggert (2024-01-25): + # For now, guess that spring and fall transitions will normally + # continue to use 2022's rules, that during DST Palestine will switch + # to standard time at 02:00 the last Saturday before Ramadan and back +-# to DST at 02:00 the first Saturday after Ramadan, and that ++# to DST at 02:00 the second Saturday after Ramadan, and that + # if the normal spring-forward or fall-back transition occurs during + # Ramadan the former is delayed and the latter advanced. + # To implement this, I predicted Ramadan-oriented transition dates for +-# 2023 through 2086 by running the following program under GNU Emacs 28.2, ++# 2026 through 2086 by running the following program under GNU Emacs 29.2, + # with the results integrated by hand into the table below. + # Predictions after 2086 are approximated without Ramadan. + # +-# (let ((islamic-year 1444)) ++# (let ((islamic-year 1447)) + # (require 'cal-islam) + # (while (< islamic-year 1510) + # (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year))) +@@ -3474,6 +3495,7 @@ Zone Asia/Karachi 4:28:12 - LMT 1907 + # (while (/= saturday (mod (setq a (1- a)) 7))) + # (while (/= saturday (mod b 7)) + # (setq b (1+ b))) ++# (setq b (+ 7 b)) + # (setq a (calendar-gregorian-from-absolute a)) + # (setq b (calendar-gregorian-from-absolute b)) + # (insert +@@ -3524,84 +3546,84 @@ Rule Palestine 2021 only - Oct 29 1:00 0 - + Rule Palestine 2022 only - Mar 27 0:00 1:00 S + Rule Palestine 2022 2035 - Oct Sat<=30 2:00 0 - + Rule Palestine 2023 only - Apr 29 2:00 1:00 S +-Rule Palestine 2024 only - Apr 13 2:00 1:00 S +-Rule Palestine 2025 only - Apr 5 2:00 1:00 S ++Rule Palestine 2024 only - Apr 20 2:00 1:00 S ++Rule Palestine 2025 only - Apr 12 2:00 1:00 S + Rule Palestine 2026 2054 - Mar Sat<=30 2:00 1:00 S + Rule Palestine 2036 only - Oct 18 2:00 0 - + Rule Palestine 2037 only - Oct 10 2:00 0 - + Rule Palestine 2038 only - Sep 25 2:00 0 - + Rule Palestine 2039 only - Sep 17 2:00 0 - +-Rule Palestine 2039 only - Oct 22 2:00 1:00 S +-Rule Palestine 2039 2067 - Oct Sat<=30 2:00 0 - + Rule Palestine 2040 only - Sep 1 2:00 0 - +-Rule Palestine 2040 only - Oct 13 2:00 1:00 S ++Rule Palestine 2040 only - Oct 20 2:00 1:00 S ++Rule Palestine 2040 2067 - Oct Sat<=30 2:00 0 - + Rule Palestine 2041 only - Aug 24 2:00 0 - +-Rule Palestine 2041 only - Sep 28 2:00 1:00 S ++Rule Palestine 2041 only - Oct 5 2:00 1:00 S + Rule Palestine 2042 only - Aug 16 2:00 0 - +-Rule Palestine 2042 only - Sep 20 2:00 1:00 S ++Rule Palestine 2042 only - Sep 27 2:00 1:00 S + Rule Palestine 2043 only - Aug 1 2:00 0 - +-Rule Palestine 2043 only - Sep 12 2:00 1:00 S ++Rule Palestine 2043 only - Sep 19 2:00 1:00 S + Rule Palestine 2044 only - Jul 23 2:00 0 - +-Rule Palestine 2044 only - Aug 27 2:00 1:00 S ++Rule Palestine 2044 only - Sep 3 2:00 1:00 S + Rule Palestine 2045 only - Jul 15 2:00 0 - +-Rule Palestine 2045 only - Aug 19 2:00 1:00 S ++Rule Palestine 2045 only - Aug 26 2:00 1:00 S + Rule Palestine 2046 only - Jun 30 2:00 0 - +-Rule Palestine 2046 only - Aug 11 2:00 1:00 S ++Rule Palestine 2046 only - Aug 18 2:00 1:00 S + Rule Palestine 2047 only - Jun 22 2:00 0 - +-Rule Palestine 2047 only - Jul 27 2:00 1:00 S ++Rule Palestine 2047 only - Aug 3 2:00 1:00 S + Rule Palestine 2048 only - Jun 6 2:00 0 - +-Rule Palestine 2048 only - Jul 18 2:00 1:00 S ++Rule Palestine 2048 only - Jul 25 2:00 1:00 S + Rule Palestine 2049 only - May 29 2:00 0 - +-Rule Palestine 2049 only - Jul 3 2:00 1:00 S ++Rule Palestine 2049 only - Jul 10 2:00 1:00 S + Rule Palestine 2050 only - May 21 2:00 0 - +-Rule Palestine 2050 only - Jun 25 2:00 1:00 S ++Rule Palestine 2050 only - Jul 2 2:00 1:00 S + Rule Palestine 2051 only - May 6 2:00 0 - +-Rule Palestine 2051 only - Jun 17 2:00 1:00 S ++Rule Palestine 2051 only - Jun 24 2:00 1:00 S + Rule Palestine 2052 only - Apr 27 2:00 0 - +-Rule Palestine 2052 only - Jun 1 2:00 1:00 S ++Rule Palestine 2052 only - Jun 8 2:00 1:00 S + Rule Palestine 2053 only - Apr 12 2:00 0 - +-Rule Palestine 2053 only - May 24 2:00 1:00 S ++Rule Palestine 2053 only - May 31 2:00 1:00 S + Rule Palestine 2054 only - Apr 4 2:00 0 - +-Rule Palestine 2054 only - May 16 2:00 1:00 S +-Rule Palestine 2055 only - May 1 2:00 1:00 S +-Rule Palestine 2056 only - Apr 22 2:00 1:00 S +-Rule Palestine 2057 only - Apr 7 2:00 1:00 S +-Rule Palestine 2058 max - Mar Sat<=30 2:00 1:00 S ++Rule Palestine 2054 only - May 23 2:00 1:00 S ++Rule Palestine 2055 only - May 8 2:00 1:00 S ++Rule Palestine 2056 only - Apr 29 2:00 1:00 S ++Rule Palestine 2057 only - Apr 14 2:00 1:00 S ++Rule Palestine 2058 only - Apr 6 2:00 1:00 S ++Rule Palestine 2059 max - Mar Sat<=30 2:00 1:00 S + Rule Palestine 2068 only - Oct 20 2:00 0 - + Rule Palestine 2069 only - Oct 12 2:00 0 - + Rule Palestine 2070 only - Oct 4 2:00 0 - + Rule Palestine 2071 only - Sep 19 2:00 0 - + Rule Palestine 2072 only - Sep 10 2:00 0 - +-Rule Palestine 2072 only - Oct 15 2:00 1:00 S ++Rule Palestine 2072 only - Oct 22 2:00 1:00 S + Rule Palestine 2072 max - Oct Sat<=30 2:00 0 - + Rule Palestine 2073 only - Sep 2 2:00 0 - +-Rule Palestine 2073 only - Oct 7 2:00 1:00 S ++Rule Palestine 2073 only - Oct 14 2:00 1:00 S + Rule Palestine 2074 only - Aug 18 2:00 0 - +-Rule Palestine 2074 only - Sep 29 2:00 1:00 S ++Rule Palestine 2074 only - Oct 6 2:00 1:00 S + Rule Palestine 2075 only - Aug 10 2:00 0 - +-Rule Palestine 2075 only - Sep 14 2:00 1:00 S ++Rule Palestine 2075 only - Sep 21 2:00 1:00 S + Rule Palestine 2076 only - Jul 25 2:00 0 - +-Rule Palestine 2076 only - Sep 5 2:00 1:00 S ++Rule Palestine 2076 only - Sep 12 2:00 1:00 S + Rule Palestine 2077 only - Jul 17 2:00 0 - +-Rule Palestine 2077 only - Aug 28 2:00 1:00 S ++Rule Palestine 2077 only - Sep 4 2:00 1:00 S + Rule Palestine 2078 only - Jul 9 2:00 0 - +-Rule Palestine 2078 only - Aug 13 2:00 1:00 S ++Rule Palestine 2078 only - Aug 20 2:00 1:00 S + Rule Palestine 2079 only - Jun 24 2:00 0 - +-Rule Palestine 2079 only - Aug 5 2:00 1:00 S ++Rule Palestine 2079 only - Aug 12 2:00 1:00 S + Rule Palestine 2080 only - Jun 15 2:00 0 - +-Rule Palestine 2080 only - Jul 20 2:00 1:00 S ++Rule Palestine 2080 only - Jul 27 2:00 1:00 S + Rule Palestine 2081 only - Jun 7 2:00 0 - +-Rule Palestine 2081 only - Jul 12 2:00 1:00 S ++Rule Palestine 2081 only - Jul 19 2:00 1:00 S + Rule Palestine 2082 only - May 23 2:00 0 - +-Rule Palestine 2082 only - Jul 4 2:00 1:00 S ++Rule Palestine 2082 only - Jul 11 2:00 1:00 S + Rule Palestine 2083 only - May 15 2:00 0 - +-Rule Palestine 2083 only - Jun 19 2:00 1:00 S ++Rule Palestine 2083 only - Jun 26 2:00 1:00 S + Rule Palestine 2084 only - Apr 29 2:00 0 - +-Rule Palestine 2084 only - Jun 10 2:00 1:00 S ++Rule Palestine 2084 only - Jun 17 2:00 1:00 S + Rule Palestine 2085 only - Apr 21 2:00 0 - +-Rule Palestine 2085 only - Jun 2 2:00 1:00 S ++Rule Palestine 2085 only - Jun 9 2:00 1:00 S + Rule Palestine 2086 only - Apr 13 2:00 0 - +-Rule Palestine 2086 only - May 18 2:00 1:00 S ++Rule Palestine 2086 only - May 25 2:00 1:00 S + + # Zone NAME STDOFF RULES FORMAT [UNTIL] + Zone Asia/Gaza 2:17:52 - LMT 1900 Oct +@@ -3629,7 +3651,7 @@ Zone Asia/Hebron 2:20:23 - LMT 1900 Oct + + # Philippines + +-# From Paul Eggert (2018-11-18): ++# From Paul Eggert (2024-01-21): + # The Spanish initially used American (west-of-Greenwich) time. + # It is unknown what time Manila kept when the British occupied it from + # 1762-10-06 through 1764-04; for now assume it kept American time. +@@ -3637,7 +3659,7 @@ Zone Asia/Hebron 2:20:23 - LMT 1900 Oct + # Philippines, issued a proclamation announcing that 1844-12-30 was to + # be immediately followed by 1845-01-01; see R.H. van Gent's + # History of the International Date Line +-# https://www.staff.science.uu.nl/~gent0113/idl/idl_philippines.htm ++# https://webspace.science.uu.nl/~gent0113/idl/idl_philippines.htm + # The rest of the data entries are from Shanks & Pottenger. + + # From Jesper Nørgaard Welen (2006-04-26): +@@ -4064,7 +4086,8 @@ Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2 + # The English-language name of Vietnam's most populous city is "Ho Chi Minh + # City"; use Ho_Chi_Minh below to avoid a name of more than 14 characters. + +-# From Paul Eggert (2022-07-27) after a 2014 heads-up from Trần Ngọc Quân: ++# From Paul Eggert (2024-01-14) after a 2014 heads-up from Trần Ngọc Quân ++# and a 2024-01-14 heads-up from Đoàn Trần Công Danh: + # 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: +@@ -4094,14 +4117,35 @@ Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2 + # + # Trần cites the following sources; it's unclear which supplied the info above. + # +-# Hoàng Xuân Hãn: "Lịch và lịch Việt Nam". Tập san Khoa học Xã hội, +-# No. 9, Paris, February 1982. ++# Hoàng Xuân Hãn: "Lịch và lịch Việt Nam". Tập san Khoa học Xã hội, ++# No. 9, Paris, February 1982. ++# ++# Lê Thành Lân: "Lịch và niên biểu lịch sử hai mươi thế kỷ (0001-2010)", ++# NXB Thống kê, Hanoi, 2000. + # +-# Lê Thành Lân: "Lịch và niên biểu lịch sử hai mươi thế kỷ (0001-2010)", +-# NXB Thống kê, Hanoi, 2000. ++# Lê Thành Lân: "Lịch hai thế kỷ (1802-2010) và các lịch vĩnh cửu", ++# NXB Thuận Hoá, Huế, 1995. + # +-# Lê Thành Lân: "Lịch hai thế kỷ (1802-2010) và các lịch vĩnh cửu", +-# NXB Thuận Hoá, Huế, 1995. ++# Here is the decision for the September 1945 transition: ++# Võ Nguyên Giáp, Việt Nam Dân Quốc Công Báo, No. 1 (1945-09-29), page 13 ++# http://baochi.nlv.gov.vn/baochi/cgi-bin/baochi?a=d&d=JwvzO19450929.2.5&dliv=none ++# It says that on 1945-09-01 at 24:00, Vietnam moved back two hours, to +07. ++# It also mentions a 1945-03-29 decree (by a Japanese Goveror-General) ++# to set the time zone to +09, but does not say whether that decree ++# merely legalized an earlier change to +09. ++# ++# July 1955 transition: ++# Ngô Đình Diệm, Công Báo Việt Nam, No. 92 (1955-07-02), page 1780-1781 ++# Ordinance (Dụ) No. 46 (1955-06-25) ++# http://ddsnext.crl.edu/titles/32341#?c=0&m=29&s=0&cv=4&r=0&xywh=-89%2C342%2C1724%2C1216 ++# It says that on 1955-07-01 at 01:00, South Vietnam moved back 1 hour (to +07). ++# ++# December 1959 transition: ++# Ngô Đình Diệm, Công Báo Việt Nam Cộng Hòa, 1960 part 1 (1960-01-02), page 62 ++# Decree (Sắc lệnh) No. 362-TTP (1959-12-30) ++# http://ddsnext.crl.edu/titles/32341#?c=0&m=138&s=0&cv=793&r=0&xywh=-54%2C1504%2C1705%2C1202 ++# It says that on 1959-12-31 at 23:00, South Vietnam moved forward 1 hour (to +08). ++ + + # Zone NAME STDOFF RULES FORMAT [UNTIL] + #STDOFF 7:06:30.13 +@@ -4109,9 +4153,9 @@ 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 +- 9:00 - +09 1945 Sep 2 ++ 9:00 - +09 1945 Sep 1 24:00 + 7:00 - +07 1947 Apr 1 +- 8:00 - +08 1955 Jul 1 ++ 8:00 - +08 1955 Jul 1 01:00 + 7:00 - +07 1959 Dec 31 23:00 + 8:00 - +08 1975 Jun 13 + 7:00 - +07 +diff --git a/jdk/make/data/tzdata/australasia b/jdk/make/data/tzdata/australasia +index d273b06e..6f0abcb7 100644 +--- a/jdk/make/data/tzdata/australasia ++++ b/jdk/make/data/tzdata/australasia +@@ -443,11 +443,11 @@ Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva + + # French Polynesia + # Zone NAME STDOFF RULES FORMAT [UNTIL] +-Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct # Rikitea ++Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct 1 # Rikitea + -9:00 - -09 +-Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct ++Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct 1 + -9:30 - -0930 +-Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete ++Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct 1 # Papeete + -10:00 - -10 + # Clipperton (near North America) is administered from French Polynesia; + # it is uninhabited. +@@ -825,7 +825,7 @@ Zone Pacific/Apia 12:33:04 - LMT 1892 Jul 5 + # Solomon Is + # excludes Bougainville, for which see Papua New Guinea + # Zone NAME STDOFF RULES FORMAT [UNTIL] +-Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara ++Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct 1 # Honiara + 11:00 - +11 + + # Tokelau +@@ -986,6 +986,10 @@ Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila + # Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94. + # https://www.jstor.org/stable/1774359 + # ++# For the 1911/1912 establishment of standard time in French possessions, see: ++# Société Française de Physique, Recueil de constantes physiques (1913), ++# page 752, 18b. ++# + # A reliable and entertaining source about time zones is + # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997). + # +@@ -2062,7 +2066,7 @@ Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila + # ordaining - by a masterpiece of diplomatic flattery - that + # the Fourth of July should be celebrated twice in that year." + # This happened in 1892, according to the Evening News (Sydney) of 1892-07-20. +-# https://www.staff.science.uu.nl/~gent0113/idl/idl.htm ++# https://webspace.science.uu.nl/~gent0113/idl/idl_alaska_samoa.htm + + # Although Shanks & Pottenger says they both switched to UT -11:30 + # in 1911, and to -11 in 1950. many earlier sources give -11 +diff --git a/jdk/make/data/tzdata/etcetera b/jdk/make/data/tzdata/etcetera +index 8ae294f5..27147715 100644 +--- a/jdk/make/data/tzdata/etcetera ++++ b/jdk/make/data/tzdata/etcetera +@@ -28,7 +28,7 @@ + + # These entries are for uses not otherwise covered by the tz database. + # Their main practical use is for platforms like Android that lack +-# support for POSIX-style TZ strings. On such platforms these entries ++# support for POSIX.1-2017-style TZ strings. On such platforms these entries + # can be useful if the timezone database is wrong or if a ship or + # aircraft at sea is not in a timezone. + +diff --git a/jdk/make/data/tzdata/europe b/jdk/make/data/tzdata/europe +index e5260489..853df30e 100644 +--- a/jdk/make/data/tzdata/europe ++++ b/jdk/make/data/tzdata/europe +@@ -1013,9 +1013,34 @@ Zone Europe/Sofia 1:33:16 - LMT 1880 + # 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. ++# From Ivan Benovic (2024-01-30): ++# https://www.slov-lex.sk/pravne-predpisy/SK/ZZ/1946/54/ ++# (This is an official link to the Czechoslovak Summer Time Act of ++# March 8, 1946 that authorizes the Czechoslovak government to set the ++# exact dates of change to summer time and back to Central European Time. ++# The act also implicitly confirms Central European Time as the ++# official time zone of Czechoslovakia and currently remains in force ++# in both the Czech Republic and Slovakia.) ++# https://www.psp.cz/eknih/1945pns/tisky/t0216_00.htm ++# (This is a link to the original legislative proposal dating back to ++# February 22, 1946. The accompanying memorandum to the proposal says ++# that an advisory committee on European railroad transportation that ++# met in Brussels in October 1945 decided that the change of time ++# should be carried out in all participating countries in a strictly ++# coordinated manner....) ++# ++# From Paul Eggert (2024-01-30): ++# The source for Czech data is: Kdy začíná a končí letní čas. + # https://kalendar.beda.cz/kdy-zacina-a-konci-letni-cas ++# Its main text disagrees with its quoted sources only in 1918, ++# where the main text says spring and autumn transitions ++# occurred at 02:00 and 03:00 respectively (as usual), ++# whereas the 1918 source "Oznámení o zavedení letního času v roce 1918" ++# says transitions were at 01:00 and 02:00 respectively. ++# As the 1918 source appears to be a humorous piece, and it is ++# unlikely that Prague would have disagreed with its neighbors by an hour, ++# go with the main text for now. ++# + # We know of no English-language name for historical Czech winter time; + # abbreviate it as "GMT", as it happened to be GMT. + # +diff --git a/jdk/make/data/tzdata/leapseconds b/jdk/make/data/tzdata/leapseconds +index ab2c1af4..8e7df3de 100644 +--- a/jdk/make/data/tzdata/leapseconds ++++ b/jdk/make/data/tzdata/leapseconds +@@ -26,13 +26,10 @@ + # This file is in the public domain. + + # This file is generated automatically from the data in the public-domain +-# NIST format leap-seconds.list file, which can be copied from +-# +-# or . +-# The NIST file is used instead of its IERS upstream counterpart ++# NIST/IERS format leap-seconds.list file, which can be copied from + # +-# because under US law the NIST file is public domain +-# whereas the IERS file's copyright and license status is unclear. ++# or, in a variant with different comments, from ++# . + # For more about leap-seconds.list, please see + # The NTP Timescale and Leap Seconds + # . +@@ -95,11 +92,11 @@ Leap 2016 Dec 31 23:59:60 + S + # Any additional leap seconds will come after this. + # This Expires line is commented out for now, + # so that pre-2020a zic implementations do not reject this file. +-#Expires 2024 Jun 28 00:00:00 ++#Expires 2024 Dec 28 00:00:00 + + # POSIX timestamps for the data in this file: +-#updated 1467936000 (2016-07-08 00:00:00 UTC) +-#expires 1719532800 (2024-06-28 00:00:00 UTC) ++#updated 1704708379 (2024-01-08 10:06:19 UTC) ++#expires 1735344000 (2024-12-28 00:00:00 UTC) + +-# Updated through IERS Bulletin C66 +-# File expires on: 28 June 2024 ++# Updated through IERS Bulletin C (https://hpiers.obspm.fr/iers/bul/bulc/bulletinc.dat) ++# File expires on 28 December 2024 +diff --git a/jdk/make/data/tzdata/northamerica b/jdk/make/data/tzdata/northamerica +index b96269a0..a8b2ef3f 100644 +--- a/jdk/make/data/tzdata/northamerica ++++ b/jdk/make/data/tzdata/northamerica +@@ -1291,6 +1291,10 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00 + # + # [PDF] (1914-03) + # ++# For the 1911/1912 establishment of standard time in French possessions, see: ++# Société Française de Physique, Recueil de constantes physiques (1913), ++# page 752, 18b. ++# + # See the 'europe' file for Greenland. + + # Canada +@@ -1377,7 +1381,7 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00 + # From Paul Eggert (2014-10-18): + # H. David Matthews and Mary Vincent's map + # "It's about TIME", _Canadian Geographic_ (September-October 1998) +-# http://www.canadiangeographic.ca/Magazine/SO98/alacarte.asp ++# https://web.archive.org/web/19990827055050/https://canadiangeographic.ca/SO98/geomap.htm + # contains detailed boundaries for regions observing nonstandard + # time and daylight saving time arrangements in Canada circa 1998. + # +@@ -1665,6 +1669,15 @@ Zone America/Moncton -4:19:08 - LMT 1883 Dec 9 + # Some cities in the United States have pushed the deadline back + # three weeks and will change over from daylight saving in October. + ++# From Chris Walton (2024-01-09): ++# The [Toronto] changes in 1947, 1948, and 1949 took place at 2:00 a.m. local ++# time instead of midnight.... Toronto Daily Star - ... ++# April 2, 1947 - Page 39 ... April 7, 1948 - Page 13 ... ++# April 2, 1949 - Page 1 ... April 7, 1949 - Page 24 ... ++# November 25, 1949 - Page 52 ... April 21, 1950 - Page 14 ... ++# September 19, 1950 - Page 46 ... September 20, 1950 - Page 3 ... ++# November 24, 1950 - Page 21 ++ + # From Arthur David Olson (2010-07-17): + # + # "Standard Time and Time Zones in Canada" appeared in +@@ -1726,13 +1739,9 @@ Rule Toronto 1927 1937 - Sep Sun>=25 2:00 0 S + Rule Toronto 1928 1937 - Apr Sun>=25 2:00 1:00 D + Rule Toronto 1938 1940 - Apr lastSun 2:00 1:00 D + Rule Toronto 1938 1939 - Sep lastSun 2:00 0 S +-Rule Toronto 1945 1946 - Sep lastSun 2:00 0 S +-Rule Toronto 1946 only - Apr lastSun 2:00 1:00 D +-Rule Toronto 1947 1949 - Apr lastSun 0:00 1:00 D +-Rule Toronto 1947 1948 - Sep lastSun 0:00 0 S +-Rule Toronto 1949 only - Nov lastSun 0:00 0 S +-Rule Toronto 1950 1973 - Apr lastSun 2:00 1:00 D +-Rule Toronto 1950 only - Nov lastSun 2:00 0 S ++Rule Toronto 1945 1948 - Sep lastSun 2:00 0 S ++Rule Toronto 1946 1973 - Apr lastSun 2:00 1:00 D ++Rule Toronto 1949 1950 - Nov lastSun 2:00 0 S + Rule Toronto 1951 1956 - Sep lastSun 2:00 0 S + # Shanks & Pottenger say Toronto ended DST a week early in 1971, + # namely on 1971-10-24, but Mark Brader wrote (2003-05-31) that this +@@ -3455,7 +3464,7 @@ Zone America/Jamaica -5:07:10 - LMT 1890 # Kingston + # Martinique + # Zone NAME STDOFF RULES FORMAT [UNTIL] + Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France +- -4:04:20 - FFMT 1911 May # Fort-de-France MT ++ -4:04:20 - FFMT 1911 May 1 # Fort-de-France MT + -4:00 - AST 1980 Apr 6 + -4:00 1:00 ADT 1980 Sep 28 + -4:00 - AST +@@ -3562,7 +3571,7 @@ Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan + # St Pierre and Miquelon + # There are too many St Pierres elsewhere, so we'll use 'Miquelon'. + # Zone NAME STDOFF RULES FORMAT [UNTIL] +-Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre ++Zone America/Miquelon -3:44:40 - LMT 1911 Jun 15 # St Pierre + -4:00 - AST 1980 May + -3:00 - -03 1987 + -3:00 Canada -03/-02 +diff --git a/jdk/make/data/tzdata/southamerica b/jdk/make/data/tzdata/southamerica +index da2c6239..d77acc08 100644 +--- a/jdk/make/data/tzdata/southamerica ++++ b/jdk/make/data/tzdata/southamerica +@@ -1593,8 +1593,11 @@ Zone Atlantic/Stanley -3:51:24 - LMT 1890 + -3:00 - -03 + + # French Guiana ++# For the 1911/1912 establishment of standard time in French possessions, see: ++# Société Française de Physique, Recueil de constantes physiques (1913), ++# page 752, 18b. + # Zone NAME STDOFF RULES FORMAT [UNTIL] +-Zone America/Cayenne -3:29:20 - LMT 1911 Jul ++Zone America/Cayenne -3:29:20 - LMT 1911 Jul 1 + -4:00 - -04 1967 Oct + -3:00 - -03 + +diff --git a/jdk/test/java/util/TimeZone/TimeZoneData/VERSION b/jdk/test/java/util/TimeZone/TimeZoneData/VERSION +index f92096d4..bf027918 100644 +--- a/jdk/test/java/util/TimeZone/TimeZoneData/VERSION ++++ b/jdk/test/java/util/TimeZone/TimeZoneData/VERSION +@@ -1 +1 @@ +-tzdata2023d ++tzdata2024a +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/VERSION b/jdk/test/sun/util/calendar/zi/tzdata/VERSION +index 560884d1..b138ed7f 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/VERSION ++++ b/jdk/test/sun/util/calendar/zi/tzdata/VERSION +@@ -21,4 +21,4 @@ + # or visit www.oracle.com if you need additional information or have any + # questions. + # +-tzdata2023d ++tzdata2024a +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/africa b/jdk/test/sun/util/calendar/zi/tzdata/africa +index c9f48463..57098882 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/africa ++++ b/jdk/test/sun/util/calendar/zi/tzdata/africa +@@ -53,6 +53,10 @@ + # Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94. + # https://www.jstor.org/stable/1774359 + # ++# For the 1911/1912 establishment of standard time in French possessions, see: ++# Société Française de Physique, Recueil de constantes physiques (1913), ++# page 752, 18b. ++# + # European-style abbreviations are commonly used along the Mediterranean. + # For sub-Saharan Africa abbreviations were less standardized. + # Previous editions of this database used WAT, CAT, SAT, and EAT +@@ -136,7 +140,7 @@ Zone Atlantic/Cape_Verde -1:34:04 - LMT 1912 Jan 01 2:00u # Praia + + # Chad + # Zone NAME STDOFF RULES FORMAT [UNTIL] +-Zone Africa/Ndjamena 1:00:12 - LMT 1912 # N'Djamena ++Zone Africa/Ndjamena 1:00:12 - LMT 1912 Jan 1 # N'Djamena + 1:00 - WAT 1979 Oct 14 + 1:00 1:00 WAST 1980 Mar 8 + 1:00 - WAT +@@ -162,7 +166,7 @@ Zone Africa/Ndjamena 1:00:12 - LMT 1912 # N'Djamena + # Inaccessible, Nightingale: uninhabited + + # Zone NAME STDOFF RULES FORMAT [UNTIL] +-Zone Africa/Abidjan -0:16:08 - LMT 1912 ++Zone Africa/Abidjan -0:16:08 - LMT 1912 Jan 1 + 0:00 - GMT + + ############################################################################### +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/asia b/jdk/test/sun/util/calendar/zi/tzdata/asia +index 67a2ef6e..c51170c3 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/asia ++++ b/jdk/test/sun/util/calendar/zi/tzdata/asia +@@ -2480,18 +2480,33 @@ Zone Asia/Amman 2:23:44 - LMT 1931 + # effective December 21st, 2018.... + # http://adilet.zan.kz/rus/docs/P1800000817 (russian language). + ++# From Zhanbolat Raimbekov (2024-01-19): ++# Kazakhstan (all parts) switching to UTC+5 on March 1, 2024 ++# https://www.gov.kz/memleket/entities/mti/press/news/details/688998?lang=ru ++# [in Russian] ++# (2024-01-20): https://primeminister.kz/ru/decisions/19012024-20 ++# ++# From Alexander Krivenyshev (2024-01-19): ++# According to a different news and the official web site for the Ministry of ++# Trade and Integration of the Republic of Kazakhstan: ++# https://en.inform.kz/news/kazakhstan-to-switch-to-single-hour-zone-mar-1-54ad0b/ ++ + # Zone NAME STDOFF RULES FORMAT [UNTIL] + # + # Almaty (formerly Alma-Ata), representing most locations in Kazakhstan +-# This includes KZ-AKM, KZ-ALA, KZ-ALM, KZ-AST, KZ-BAY, KZ-VOS, KZ-ZHA, +-# KZ-KAR, KZ-SEV, KZ-PAV, and KZ-YUZ. ++# This includes Abai/Abay (ISO 3166-2 code KZ-10), Aqmola/Akmola (KZ-11), ++# Almaty (KZ-19), Almaty city (KZ-75), Astana city (KZ-71), ++# East Kazkhstan (KZ-63), Jambyl/Zhambyl (KZ-31), Jetisu/Zhetysu (KZ-33), ++# Karaganda (KZ-35), North Kazakhstan (KZ-59), Pavlodar (KZ-55), ++# Shyumkent city (KZ-79), Turkistan (KZ-61), and Ulytau (KZ-62). + Zone Asia/Almaty 5:07:48 - LMT 1924 May 2 # or Alma-Ata + 5:00 - +05 1930 Jun 21 + 6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s + 5:00 RussiaAsia +05/+06 1992 Jan 19 2:00s + 6:00 RussiaAsia +06/+07 2004 Oct 31 2:00s +- 6:00 - +06 +-# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) (KZ-KZY) ++ 6:00 - +06 2024 Mar 1 0:00 ++ 5:00 - +05 ++# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) (KZ-43) + Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2 + 4:00 - +04 1930 Jun 21 + 5:00 - +05 1981 Apr 1 +@@ -2504,8 +2519,7 @@ Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2 + 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s + 6:00 - +06 2018 Dec 21 0:00 + 5:00 - +05 +-# +-# Qostanay (aka Kostanay, Kustanay) (KZ-KUS) ++# Qostanay (aka Kostanay, Kustanay) (KZ-39) + # The 1991/2 rules are unclear partly because of the 1997 Turgai + # reorganization. + Zone Asia/Qostanay 4:14:28 - LMT 1924 May 2 +@@ -2516,9 +2530,9 @@ Zone Asia/Qostanay 4:14:28 - LMT 1924 May 2 + 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s + 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s + 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s +- 6:00 - +06 +- +-# Aqtöbe (aka Aktobe, formerly Aktyubinsk) (KZ-AKT) ++ 6:00 - +06 2024 Mar 1 0:00 ++ 5:00 - +05 ++# Aqtöbe (aka Aktobe, formerly Aktyubinsk) (KZ-15) + Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2 + 4:00 - +04 1930 Jun 21 + 5:00 - +05 1981 Apr 1 +@@ -2528,7 +2542,7 @@ Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2 + 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s + 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s + 5:00 - +05 +-# Mangghystaū (KZ-MAN) ++# Mangghystaū (KZ-47) + # Aqtau was not founded until 1963, but it represents an inhabited region, + # so include timestamps before 1963. + Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2 +@@ -2540,7 +2554,7 @@ Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2 + 5:00 RussiaAsia +05/+06 1994 Sep 25 2:00s + 4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s + 5:00 - +05 +-# Atyraū (KZ-ATY) is like Mangghystaū except it switched from ++# Atyraū (KZ-23) is like Mangghystaū except it switched from + # +04/+05 to +05/+06 in spring 1999, not fall 1994. + Zone Asia/Atyrau 3:27:44 - LMT 1924 May 2 + 3:00 - +03 1930 Jun 21 +@@ -2551,7 +2565,7 @@ Zone Asia/Atyrau 3:27:44 - LMT 1924 May 2 + 5:00 RussiaAsia +05/+06 1999 Mar 28 2:00s + 4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s + 5:00 - +05 +-# West Kazakhstan (KZ-ZAP) ++# West Kazakhstan (KZ-27) + # From Paul Eggert (2016-03-18): + # The 1989 transition is from USSR act No. 227 (1989-03-14). + Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk +@@ -3453,19 +3467,26 @@ Zone Asia/Karachi 4:28:12 - LMT 1907 + # ... winter time will begin in Palestine from Saturday 10-28-2023, + # 02:00 AM by 60 minutes back. + # +-# From Paul Eggert (2023-03-22): ++# From Heba Hamad (2024-01-25): ++# the summer time for the years 2024,2025 will begin in Palestine ++# from Saturday at 02:00 AM by 60 minutes forward as shown below: ++# year date ++# 2024 2024-04-20 ++# 2025 2025-04-12 ++# ++# From Paul Eggert (2024-01-25): + # For now, guess that spring and fall transitions will normally + # continue to use 2022's rules, that during DST Palestine will switch + # to standard time at 02:00 the last Saturday before Ramadan and back +-# to DST at 02:00 the first Saturday after Ramadan, and that ++# to DST at 02:00 the second Saturday after Ramadan, and that + # if the normal spring-forward or fall-back transition occurs during + # Ramadan the former is delayed and the latter advanced. + # To implement this, I predicted Ramadan-oriented transition dates for +-# 2023 through 2086 by running the following program under GNU Emacs 28.2, ++# 2026 through 2086 by running the following program under GNU Emacs 29.2, + # with the results integrated by hand into the table below. + # Predictions after 2086 are approximated without Ramadan. + # +-# (let ((islamic-year 1444)) ++# (let ((islamic-year 1447)) + # (require 'cal-islam) + # (while (< islamic-year 1510) + # (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year))) +@@ -3474,6 +3495,7 @@ Zone Asia/Karachi 4:28:12 - LMT 1907 + # (while (/= saturday (mod (setq a (1- a)) 7))) + # (while (/= saturday (mod b 7)) + # (setq b (1+ b))) ++# (setq b (+ 7 b)) + # (setq a (calendar-gregorian-from-absolute a)) + # (setq b (calendar-gregorian-from-absolute b)) + # (insert +@@ -3524,84 +3546,84 @@ Rule Palestine 2021 only - Oct 29 1:00 0 - + Rule Palestine 2022 only - Mar 27 0:00 1:00 S + Rule Palestine 2022 2035 - Oct Sat<=30 2:00 0 - + Rule Palestine 2023 only - Apr 29 2:00 1:00 S +-Rule Palestine 2024 only - Apr 13 2:00 1:00 S +-Rule Palestine 2025 only - Apr 5 2:00 1:00 S ++Rule Palestine 2024 only - Apr 20 2:00 1:00 S ++Rule Palestine 2025 only - Apr 12 2:00 1:00 S + Rule Palestine 2026 2054 - Mar Sat<=30 2:00 1:00 S + Rule Palestine 2036 only - Oct 18 2:00 0 - + Rule Palestine 2037 only - Oct 10 2:00 0 - + Rule Palestine 2038 only - Sep 25 2:00 0 - + Rule Palestine 2039 only - Sep 17 2:00 0 - +-Rule Palestine 2039 only - Oct 22 2:00 1:00 S +-Rule Palestine 2039 2067 - Oct Sat<=30 2:00 0 - + Rule Palestine 2040 only - Sep 1 2:00 0 - +-Rule Palestine 2040 only - Oct 13 2:00 1:00 S ++Rule Palestine 2040 only - Oct 20 2:00 1:00 S ++Rule Palestine 2040 2067 - Oct Sat<=30 2:00 0 - + Rule Palestine 2041 only - Aug 24 2:00 0 - +-Rule Palestine 2041 only - Sep 28 2:00 1:00 S ++Rule Palestine 2041 only - Oct 5 2:00 1:00 S + Rule Palestine 2042 only - Aug 16 2:00 0 - +-Rule Palestine 2042 only - Sep 20 2:00 1:00 S ++Rule Palestine 2042 only - Sep 27 2:00 1:00 S + Rule Palestine 2043 only - Aug 1 2:00 0 - +-Rule Palestine 2043 only - Sep 12 2:00 1:00 S ++Rule Palestine 2043 only - Sep 19 2:00 1:00 S + Rule Palestine 2044 only - Jul 23 2:00 0 - +-Rule Palestine 2044 only - Aug 27 2:00 1:00 S ++Rule Palestine 2044 only - Sep 3 2:00 1:00 S + Rule Palestine 2045 only - Jul 15 2:00 0 - +-Rule Palestine 2045 only - Aug 19 2:00 1:00 S ++Rule Palestine 2045 only - Aug 26 2:00 1:00 S + Rule Palestine 2046 only - Jun 30 2:00 0 - +-Rule Palestine 2046 only - Aug 11 2:00 1:00 S ++Rule Palestine 2046 only - Aug 18 2:00 1:00 S + Rule Palestine 2047 only - Jun 22 2:00 0 - +-Rule Palestine 2047 only - Jul 27 2:00 1:00 S ++Rule Palestine 2047 only - Aug 3 2:00 1:00 S + Rule Palestine 2048 only - Jun 6 2:00 0 - +-Rule Palestine 2048 only - Jul 18 2:00 1:00 S ++Rule Palestine 2048 only - Jul 25 2:00 1:00 S + Rule Palestine 2049 only - May 29 2:00 0 - +-Rule Palestine 2049 only - Jul 3 2:00 1:00 S ++Rule Palestine 2049 only - Jul 10 2:00 1:00 S + Rule Palestine 2050 only - May 21 2:00 0 - +-Rule Palestine 2050 only - Jun 25 2:00 1:00 S ++Rule Palestine 2050 only - Jul 2 2:00 1:00 S + Rule Palestine 2051 only - May 6 2:00 0 - +-Rule Palestine 2051 only - Jun 17 2:00 1:00 S ++Rule Palestine 2051 only - Jun 24 2:00 1:00 S + Rule Palestine 2052 only - Apr 27 2:00 0 - +-Rule Palestine 2052 only - Jun 1 2:00 1:00 S ++Rule Palestine 2052 only - Jun 8 2:00 1:00 S + Rule Palestine 2053 only - Apr 12 2:00 0 - +-Rule Palestine 2053 only - May 24 2:00 1:00 S ++Rule Palestine 2053 only - May 31 2:00 1:00 S + Rule Palestine 2054 only - Apr 4 2:00 0 - +-Rule Palestine 2054 only - May 16 2:00 1:00 S +-Rule Palestine 2055 only - May 1 2:00 1:00 S +-Rule Palestine 2056 only - Apr 22 2:00 1:00 S +-Rule Palestine 2057 only - Apr 7 2:00 1:00 S +-Rule Palestine 2058 max - Mar Sat<=30 2:00 1:00 S ++Rule Palestine 2054 only - May 23 2:00 1:00 S ++Rule Palestine 2055 only - May 8 2:00 1:00 S ++Rule Palestine 2056 only - Apr 29 2:00 1:00 S ++Rule Palestine 2057 only - Apr 14 2:00 1:00 S ++Rule Palestine 2058 only - Apr 6 2:00 1:00 S ++Rule Palestine 2059 max - Mar Sat<=30 2:00 1:00 S + Rule Palestine 2068 only - Oct 20 2:00 0 - + Rule Palestine 2069 only - Oct 12 2:00 0 - + Rule Palestine 2070 only - Oct 4 2:00 0 - + Rule Palestine 2071 only - Sep 19 2:00 0 - + Rule Palestine 2072 only - Sep 10 2:00 0 - +-Rule Palestine 2072 only - Oct 15 2:00 1:00 S ++Rule Palestine 2072 only - Oct 22 2:00 1:00 S + Rule Palestine 2072 max - Oct Sat<=30 2:00 0 - + Rule Palestine 2073 only - Sep 2 2:00 0 - +-Rule Palestine 2073 only - Oct 7 2:00 1:00 S ++Rule Palestine 2073 only - Oct 14 2:00 1:00 S + Rule Palestine 2074 only - Aug 18 2:00 0 - +-Rule Palestine 2074 only - Sep 29 2:00 1:00 S ++Rule Palestine 2074 only - Oct 6 2:00 1:00 S + Rule Palestine 2075 only - Aug 10 2:00 0 - +-Rule Palestine 2075 only - Sep 14 2:00 1:00 S ++Rule Palestine 2075 only - Sep 21 2:00 1:00 S + Rule Palestine 2076 only - Jul 25 2:00 0 - +-Rule Palestine 2076 only - Sep 5 2:00 1:00 S ++Rule Palestine 2076 only - Sep 12 2:00 1:00 S + Rule Palestine 2077 only - Jul 17 2:00 0 - +-Rule Palestine 2077 only - Aug 28 2:00 1:00 S ++Rule Palestine 2077 only - Sep 4 2:00 1:00 S + Rule Palestine 2078 only - Jul 9 2:00 0 - +-Rule Palestine 2078 only - Aug 13 2:00 1:00 S ++Rule Palestine 2078 only - Aug 20 2:00 1:00 S + Rule Palestine 2079 only - Jun 24 2:00 0 - +-Rule Palestine 2079 only - Aug 5 2:00 1:00 S ++Rule Palestine 2079 only - Aug 12 2:00 1:00 S + Rule Palestine 2080 only - Jun 15 2:00 0 - +-Rule Palestine 2080 only - Jul 20 2:00 1:00 S ++Rule Palestine 2080 only - Jul 27 2:00 1:00 S + Rule Palestine 2081 only - Jun 7 2:00 0 - +-Rule Palestine 2081 only - Jul 12 2:00 1:00 S ++Rule Palestine 2081 only - Jul 19 2:00 1:00 S + Rule Palestine 2082 only - May 23 2:00 0 - +-Rule Palestine 2082 only - Jul 4 2:00 1:00 S ++Rule Palestine 2082 only - Jul 11 2:00 1:00 S + Rule Palestine 2083 only - May 15 2:00 0 - +-Rule Palestine 2083 only - Jun 19 2:00 1:00 S ++Rule Palestine 2083 only - Jun 26 2:00 1:00 S + Rule Palestine 2084 only - Apr 29 2:00 0 - +-Rule Palestine 2084 only - Jun 10 2:00 1:00 S ++Rule Palestine 2084 only - Jun 17 2:00 1:00 S + Rule Palestine 2085 only - Apr 21 2:00 0 - +-Rule Palestine 2085 only - Jun 2 2:00 1:00 S ++Rule Palestine 2085 only - Jun 9 2:00 1:00 S + Rule Palestine 2086 only - Apr 13 2:00 0 - +-Rule Palestine 2086 only - May 18 2:00 1:00 S ++Rule Palestine 2086 only - May 25 2:00 1:00 S + + # Zone NAME STDOFF RULES FORMAT [UNTIL] + Zone Asia/Gaza 2:17:52 - LMT 1900 Oct +@@ -3629,7 +3651,7 @@ Zone Asia/Hebron 2:20:23 - LMT 1900 Oct + + # Philippines + +-# From Paul Eggert (2018-11-18): ++# From Paul Eggert (2024-01-21): + # The Spanish initially used American (west-of-Greenwich) time. + # It is unknown what time Manila kept when the British occupied it from + # 1762-10-06 through 1764-04; for now assume it kept American time. +@@ -3637,7 +3659,7 @@ Zone Asia/Hebron 2:20:23 - LMT 1900 Oct + # Philippines, issued a proclamation announcing that 1844-12-30 was to + # be immediately followed by 1845-01-01; see R.H. van Gent's + # History of the International Date Line +-# https://www.staff.science.uu.nl/~gent0113/idl/idl_philippines.htm ++# https://webspace.science.uu.nl/~gent0113/idl/idl_philippines.htm + # The rest of the data entries are from Shanks & Pottenger. + + # From Jesper Nørgaard Welen (2006-04-26): +@@ -4064,7 +4086,8 @@ Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2 + # The English-language name of Vietnam's most populous city is "Ho Chi Minh + # City"; use Ho_Chi_Minh below to avoid a name of more than 14 characters. + +-# From Paul Eggert (2022-07-27) after a 2014 heads-up from Trần Ngọc Quân: ++# From Paul Eggert (2024-01-14) after a 2014 heads-up from Trần Ngọc Quân ++# and a 2024-01-14 heads-up from Đoàn Trần Công Danh: + # 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: +@@ -4094,14 +4117,35 @@ Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2 + # + # Trần cites the following sources; it's unclear which supplied the info above. + # +-# Hoàng Xuân Hãn: "Lịch và lịch Việt Nam". Tập san Khoa học Xã hội, +-# No. 9, Paris, February 1982. ++# Hoàng Xuân Hãn: "Lịch và lịch Việt Nam". Tập san Khoa học Xã hội, ++# No. 9, Paris, February 1982. ++# ++# Lê Thành Lân: "Lịch và niên biểu lịch sử hai mươi thế kỷ (0001-2010)", ++# NXB Thống kê, Hanoi, 2000. + # +-# Lê Thành Lân: "Lịch và niên biểu lịch sử hai mươi thế kỷ (0001-2010)", +-# NXB Thống kê, Hanoi, 2000. ++# Lê Thành Lân: "Lịch hai thế kỷ (1802-2010) và các lịch vĩnh cửu", ++# NXB Thuận Hoá, Huế, 1995. + # +-# Lê Thành Lân: "Lịch hai thế kỷ (1802-2010) và các lịch vĩnh cửu", +-# NXB Thuận Hoá, Huế, 1995. ++# Here is the decision for the September 1945 transition: ++# Võ Nguyên Giáp, Việt Nam Dân Quốc Công Báo, No. 1 (1945-09-29), page 13 ++# http://baochi.nlv.gov.vn/baochi/cgi-bin/baochi?a=d&d=JwvzO19450929.2.5&dliv=none ++# It says that on 1945-09-01 at 24:00, Vietnam moved back two hours, to +07. ++# It also mentions a 1945-03-29 decree (by a Japanese Goveror-General) ++# to set the time zone to +09, but does not say whether that decree ++# merely legalized an earlier change to +09. ++# ++# July 1955 transition: ++# Ngô Đình Diệm, Công Báo Việt Nam, No. 92 (1955-07-02), page 1780-1781 ++# Ordinance (Dụ) No. 46 (1955-06-25) ++# http://ddsnext.crl.edu/titles/32341#?c=0&m=29&s=0&cv=4&r=0&xywh=-89%2C342%2C1724%2C1216 ++# It says that on 1955-07-01 at 01:00, South Vietnam moved back 1 hour (to +07). ++# ++# December 1959 transition: ++# Ngô Đình Diệm, Công Báo Việt Nam Cộng Hòa, 1960 part 1 (1960-01-02), page 62 ++# Decree (Sắc lệnh) No. 362-TTP (1959-12-30) ++# http://ddsnext.crl.edu/titles/32341#?c=0&m=138&s=0&cv=793&r=0&xywh=-54%2C1504%2C1705%2C1202 ++# It says that on 1959-12-31 at 23:00, South Vietnam moved forward 1 hour (to +08). ++ + + # Zone NAME STDOFF RULES FORMAT [UNTIL] + #STDOFF 7:06:30.13 +@@ -4109,9 +4153,9 @@ 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 +- 9:00 - +09 1945 Sep 2 ++ 9:00 - +09 1945 Sep 1 24:00 + 7:00 - +07 1947 Apr 1 +- 8:00 - +08 1955 Jul 1 ++ 8:00 - +08 1955 Jul 1 01:00 + 7:00 - +07 1959 Dec 31 23:00 + 8:00 - +08 1975 Jun 13 + 7:00 - +07 +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/australasia b/jdk/test/sun/util/calendar/zi/tzdata/australasia +index d273b06e..6f0abcb7 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/australasia ++++ b/jdk/test/sun/util/calendar/zi/tzdata/australasia +@@ -443,11 +443,11 @@ Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva + + # French Polynesia + # Zone NAME STDOFF RULES FORMAT [UNTIL] +-Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct # Rikitea ++Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct 1 # Rikitea + -9:00 - -09 +-Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct ++Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct 1 + -9:30 - -0930 +-Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete ++Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct 1 # Papeete + -10:00 - -10 + # Clipperton (near North America) is administered from French Polynesia; + # it is uninhabited. +@@ -825,7 +825,7 @@ Zone Pacific/Apia 12:33:04 - LMT 1892 Jul 5 + # Solomon Is + # excludes Bougainville, for which see Papua New Guinea + # Zone NAME STDOFF RULES FORMAT [UNTIL] +-Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara ++Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct 1 # Honiara + 11:00 - +11 + + # Tokelau +@@ -986,6 +986,10 @@ Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila + # Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94. + # https://www.jstor.org/stable/1774359 + # ++# For the 1911/1912 establishment of standard time in French possessions, see: ++# Société Française de Physique, Recueil de constantes physiques (1913), ++# page 752, 18b. ++# + # A reliable and entertaining source about time zones is + # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997). + # +@@ -2062,7 +2066,7 @@ Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila + # ordaining - by a masterpiece of diplomatic flattery - that + # the Fourth of July should be celebrated twice in that year." + # This happened in 1892, according to the Evening News (Sydney) of 1892-07-20. +-# https://www.staff.science.uu.nl/~gent0113/idl/idl.htm ++# https://webspace.science.uu.nl/~gent0113/idl/idl_alaska_samoa.htm + + # Although Shanks & Pottenger says they both switched to UT -11:30 + # in 1911, and to -11 in 1950. many earlier sources give -11 +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/etcetera b/jdk/test/sun/util/calendar/zi/tzdata/etcetera +index 8ae294f5..27147715 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/etcetera ++++ b/jdk/test/sun/util/calendar/zi/tzdata/etcetera +@@ -28,7 +28,7 @@ + + # These entries are for uses not otherwise covered by the tz database. + # Their main practical use is for platforms like Android that lack +-# support for POSIX-style TZ strings. On such platforms these entries ++# support for POSIX.1-2017-style TZ strings. On such platforms these entries + # can be useful if the timezone database is wrong or if a ship or + # aircraft at sea is not in a timezone. + +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/europe b/jdk/test/sun/util/calendar/zi/tzdata/europe +index e5260489..853df30e 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/europe ++++ b/jdk/test/sun/util/calendar/zi/tzdata/europe +@@ -1013,9 +1013,34 @@ Zone Europe/Sofia 1:33:16 - LMT 1880 + # 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. ++# From Ivan Benovic (2024-01-30): ++# https://www.slov-lex.sk/pravne-predpisy/SK/ZZ/1946/54/ ++# (This is an official link to the Czechoslovak Summer Time Act of ++# March 8, 1946 that authorizes the Czechoslovak government to set the ++# exact dates of change to summer time and back to Central European Time. ++# The act also implicitly confirms Central European Time as the ++# official time zone of Czechoslovakia and currently remains in force ++# in both the Czech Republic and Slovakia.) ++# https://www.psp.cz/eknih/1945pns/tisky/t0216_00.htm ++# (This is a link to the original legislative proposal dating back to ++# February 22, 1946. The accompanying memorandum to the proposal says ++# that an advisory committee on European railroad transportation that ++# met in Brussels in October 1945 decided that the change of time ++# should be carried out in all participating countries in a strictly ++# coordinated manner....) ++# ++# From Paul Eggert (2024-01-30): ++# The source for Czech data is: Kdy začíná a končí letní čas. + # https://kalendar.beda.cz/kdy-zacina-a-konci-letni-cas ++# Its main text disagrees with its quoted sources only in 1918, ++# where the main text says spring and autumn transitions ++# occurred at 02:00 and 03:00 respectively (as usual), ++# whereas the 1918 source "Oznámení o zavedení letního času v roce 1918" ++# says transitions were at 01:00 and 02:00 respectively. ++# As the 1918 source appears to be a humorous piece, and it is ++# unlikely that Prague would have disagreed with its neighbors by an hour, ++# go with the main text for now. ++# + # We know of no English-language name for historical Czech winter time; + # abbreviate it as "GMT", as it happened to be GMT. + # +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/leapseconds b/jdk/test/sun/util/calendar/zi/tzdata/leapseconds +index ab2c1af4..8e7df3de 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/leapseconds ++++ b/jdk/test/sun/util/calendar/zi/tzdata/leapseconds +@@ -26,13 +26,10 @@ + # This file is in the public domain. + + # This file is generated automatically from the data in the public-domain +-# NIST format leap-seconds.list file, which can be copied from +-# +-# or . +-# The NIST file is used instead of its IERS upstream counterpart ++# NIST/IERS format leap-seconds.list file, which can be copied from + # +-# because under US law the NIST file is public domain +-# whereas the IERS file's copyright and license status is unclear. ++# or, in a variant with different comments, from ++# . + # For more about leap-seconds.list, please see + # The NTP Timescale and Leap Seconds + # . +@@ -95,11 +92,11 @@ Leap 2016 Dec 31 23:59:60 + S + # Any additional leap seconds will come after this. + # This Expires line is commented out for now, + # so that pre-2020a zic implementations do not reject this file. +-#Expires 2024 Jun 28 00:00:00 ++#Expires 2024 Dec 28 00:00:00 + + # POSIX timestamps for the data in this file: +-#updated 1467936000 (2016-07-08 00:00:00 UTC) +-#expires 1719532800 (2024-06-28 00:00:00 UTC) ++#updated 1704708379 (2024-01-08 10:06:19 UTC) ++#expires 1735344000 (2024-12-28 00:00:00 UTC) + +-# Updated through IERS Bulletin C66 +-# File expires on: 28 June 2024 ++# Updated through IERS Bulletin C (https://hpiers.obspm.fr/iers/bul/bulc/bulletinc.dat) ++# File expires on 28 December 2024 +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/northamerica b/jdk/test/sun/util/calendar/zi/tzdata/northamerica +index b96269a0..a8b2ef3f 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/northamerica ++++ b/jdk/test/sun/util/calendar/zi/tzdata/northamerica +@@ -1291,6 +1291,10 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00 + # + # [PDF] (1914-03) + # ++# For the 1911/1912 establishment of standard time in French possessions, see: ++# Société Française de Physique, Recueil de constantes physiques (1913), ++# page 752, 18b. ++# + # See the 'europe' file for Greenland. + + # Canada +@@ -1377,7 +1381,7 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00 + # From Paul Eggert (2014-10-18): + # H. David Matthews and Mary Vincent's map + # "It's about TIME", _Canadian Geographic_ (September-October 1998) +-# http://www.canadiangeographic.ca/Magazine/SO98/alacarte.asp ++# https://web.archive.org/web/19990827055050/https://canadiangeographic.ca/SO98/geomap.htm + # contains detailed boundaries for regions observing nonstandard + # time and daylight saving time arrangements in Canada circa 1998. + # +@@ -1665,6 +1669,15 @@ Zone America/Moncton -4:19:08 - LMT 1883 Dec 9 + # Some cities in the United States have pushed the deadline back + # three weeks and will change over from daylight saving in October. + ++# From Chris Walton (2024-01-09): ++# The [Toronto] changes in 1947, 1948, and 1949 took place at 2:00 a.m. local ++# time instead of midnight.... Toronto Daily Star - ... ++# April 2, 1947 - Page 39 ... April 7, 1948 - Page 13 ... ++# April 2, 1949 - Page 1 ... April 7, 1949 - Page 24 ... ++# November 25, 1949 - Page 52 ... April 21, 1950 - Page 14 ... ++# September 19, 1950 - Page 46 ... September 20, 1950 - Page 3 ... ++# November 24, 1950 - Page 21 ++ + # From Arthur David Olson (2010-07-17): + # + # "Standard Time and Time Zones in Canada" appeared in +@@ -1726,13 +1739,9 @@ Rule Toronto 1927 1937 - Sep Sun>=25 2:00 0 S + Rule Toronto 1928 1937 - Apr Sun>=25 2:00 1:00 D + Rule Toronto 1938 1940 - Apr lastSun 2:00 1:00 D + Rule Toronto 1938 1939 - Sep lastSun 2:00 0 S +-Rule Toronto 1945 1946 - Sep lastSun 2:00 0 S +-Rule Toronto 1946 only - Apr lastSun 2:00 1:00 D +-Rule Toronto 1947 1949 - Apr lastSun 0:00 1:00 D +-Rule Toronto 1947 1948 - Sep lastSun 0:00 0 S +-Rule Toronto 1949 only - Nov lastSun 0:00 0 S +-Rule Toronto 1950 1973 - Apr lastSun 2:00 1:00 D +-Rule Toronto 1950 only - Nov lastSun 2:00 0 S ++Rule Toronto 1945 1948 - Sep lastSun 2:00 0 S ++Rule Toronto 1946 1973 - Apr lastSun 2:00 1:00 D ++Rule Toronto 1949 1950 - Nov lastSun 2:00 0 S + Rule Toronto 1951 1956 - Sep lastSun 2:00 0 S + # Shanks & Pottenger say Toronto ended DST a week early in 1971, + # namely on 1971-10-24, but Mark Brader wrote (2003-05-31) that this +@@ -3455,7 +3464,7 @@ Zone America/Jamaica -5:07:10 - LMT 1890 # Kingston + # Martinique + # Zone NAME STDOFF RULES FORMAT [UNTIL] + Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France +- -4:04:20 - FFMT 1911 May # Fort-de-France MT ++ -4:04:20 - FFMT 1911 May 1 # Fort-de-France MT + -4:00 - AST 1980 Apr 6 + -4:00 1:00 ADT 1980 Sep 28 + -4:00 - AST +@@ -3562,7 +3571,7 @@ Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan + # St Pierre and Miquelon + # There are too many St Pierres elsewhere, so we'll use 'Miquelon'. + # Zone NAME STDOFF RULES FORMAT [UNTIL] +-Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre ++Zone America/Miquelon -3:44:40 - LMT 1911 Jun 15 # St Pierre + -4:00 - AST 1980 May + -3:00 - -03 1987 + -3:00 Canada -03/-02 +diff --git a/jdk/test/sun/util/calendar/zi/tzdata/southamerica b/jdk/test/sun/util/calendar/zi/tzdata/southamerica +index da2c6239..d77acc08 100644 +--- a/jdk/test/sun/util/calendar/zi/tzdata/southamerica ++++ b/jdk/test/sun/util/calendar/zi/tzdata/southamerica +@@ -1593,8 +1593,11 @@ Zone Atlantic/Stanley -3:51:24 - LMT 1890 + -3:00 - -03 + + # French Guiana ++# For the 1911/1912 establishment of standard time in French possessions, see: ++# Société Française de Physique, Recueil de constantes physiques (1913), ++# page 752, 18b. + # Zone NAME STDOFF RULES FORMAT [UNTIL] +-Zone America/Cayenne -3:29:20 - LMT 1911 Jul ++Zone America/Cayenne -3:29:20 - LMT 1911 Jul 1 + -4:00 - -04 1967 Oct + -3:00 - -03 + +-- +2.17.1 + diff --git a/GCC-12-reports-some-compiler-warnings.patch b/GCC-12-reports-some-compiler-warnings.patch new file mode 100644 index 0000000..ef232ea --- /dev/null +++ b/GCC-12-reports-some-compiler-warnings.patch @@ -0,0 +1,41 @@ +Subject: fix GCC 12 fails to compile AArch64 due to -Wstringop-overflow + +--- + hotspot/make/linux/makefiles/gcc.make | 2 +- + hotspot/src/share/vm/opto/type.cpp | 7 +++++-- + 2 files changed, 6 insertions(+), 3 deletions(-) + +diff --git a/hotspot/make/linux/makefiles/gcc.make b/hotspot/make/linux/makefiles/gcc.make +index 7dde7f096..d122f0eae 100644 +--- a/hotspot/make/linux/makefiles/gcc.make ++++ b/hotspot/make/linux/makefiles/gcc.make +@@ -212,7 +212,7 @@ ifeq ($(USE_CLANG), true) + WARNINGS_ARE_ERRORS += -Wno-return-type -Wno-empty-body + endif + +-WARNING_FLAGS = -Wpointer-arith -Wsign-compare -Wundef -Wunused-function -Wunused-value -Wformat=2 -Wreturn-type ++WARNING_FLAGS = -Wpointer-arith -Wsign-compare -Wundef -Wunused-function -Wunused-value -Wformat=2 -Wreturn-type -Wno-stringop-overflow + + ifeq ($(USE_CLANG),) + # Since GCC 4.3, -Wconversion has changed its meanings to warn these implicit +diff --git a/hotspot/src/share/vm/opto/type.cpp b/hotspot/src/share/vm/opto/type.cpp +index 58572f137..92d4e6b70 100644 +--- a/hotspot/src/share/vm/opto/type.cpp ++++ b/hotspot/src/share/vm/opto/type.cpp +@@ -2553,8 +2553,11 @@ TypeOopPtr::TypeOopPtr(TYPES t, PTR ptr, ciKlass* k, bool xk, ciObject* o, int o + _offset >= InstanceMirrorKlass::offset_of_static_fields()) { + // Static fields + assert(o != NULL, "must be constant"); +- ciInstanceKlass* k = o->as_instance()->java_lang_Class_klass()->as_instance_klass(); +- ciField* field = k->get_field_by_offset(_offset, true); ++ ciField* field = NULL; ++ if (o != NULL) { ++ ciInstanceKlass* k = o->as_instance()->java_lang_Class_klass()->as_instance_klass(); ++ field = k->get_field_by_offset(_offset, true); ++ } + assert(field != NULL, "missing field"); + BasicType basic_elem_type = field->layout_type(); + _is_ptr_to_narrowoop = UseCompressedOops && (basic_elem_type == T_OBJECT || +-- +2.22.0 + diff --git a/openjdk-1.8.0.spec b/openjdk-1.8.0.spec index 592a1d5..e3e190a 100644 --- a/openjdk-1.8.0.spec +++ b/openjdk-1.8.0.spec @@ -936,7 +936,7 @@ Provides: java-%{javaver}-%{origin}-accessibility%{?1} = %{epoch}:%{version}-%{r Name: java-%{javaver}-%{origin} Version: %{javaver}.%{updatever}.%{buildver} -Release: 3 +Release: 4 # java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons # and this change was brought into RHEL-4. java-1.5.0-ibm packages # also included the epoch in their virtual provides. This created a @@ -1309,6 +1309,15 @@ Patch416: 8260923-Add-more-tests-for-SSLSocket-input-output-sh.patch Patch417: 8057967-CallSite-dependency-tracking-scales-devastat.patch Patch418: 8079205-CallSite-dependency-tracking-is-broken-after.patch +#402 +Patch419: 8322725-tz-Update-Timezone-Data-to-2023d.patch +Patch420: 8325150-tz-Update-Timezone-Data-to-2024a.patch +Patch421: 8220175-serviceability-dcmd-framework-VMVersionTest..patch +Patch422: 8149343-assert-rp-num_q-no_of_gc_workers-failed-sani.patch +Patch423: 8139595-MethodHandles-remove_dependent_nmethod-is-no.patch +Patch424: 8143408-Crash-during-InstanceKlass-unloading-when-cl.patch +Patch425: GCC-12-reports-some-compiler-warnings.patch + ############################################# # # Upstreamable patches @@ -1943,6 +1952,13 @@ pushd %{top_level_dir_name} %patch416 -p1 %patch417 -p1 %patch418 -p1 +%patch419 -p1 +%patch420 -p1 +%patch421 -p1 +%patch422 -p1 +%patch423 -p1 +%patch424 -p1 +%patch425 -p1 %endif %ifarch loongarch64 @@ -2601,6 +2617,15 @@ cjc.mainProgram(arg) %endif %changelog +* Sat Mar 30 2024 Benshuai5D - 1:1.8.0.402-b06.4 +- add 8322725-tz-Update-Timezone-Data-to-2023d.patch +- add 8325150-tz-Update-Timezone-Data-to-2024a.patch +- add 8220175-serviceability-dcmd-framework-VMVersionTest..patch +- add 8149343-assert-rp-num_q-no_of_gc_workers-failed-sani.patch +- add 8139595-MethodHandles-remove_dependent_nmethod-is-no.patch +- add 8143408-Crash-during-InstanceKlass-unloading-when-cl.patch +- add GCC-12-reports-some-compiler-warnings.patch + * Tue Mar 12 2024 jiahua.yu - 1:1.8.0.402-b06.3 - Init support for arch ppc64le