mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2025-12-19 07:49:41 +01:00
JBR-5183 - ref openjdk/8292818 - special access flags removed JBR-5183 - add new DeoptimizationScope from openjdk JBR-5183 clean DCEVM code separation in standard jdk code + typo fix JBR-5464 Fix native method registration JBR-5183 - fix compilation on win - using size_t JBR-5183 - fix error: invalid use of incomplete type 'struct Atomic::StoreImpl JBR-5183 - fix windows build JBR-5183 - nullptr in VM_EnhancedRedefineClasses JBR-5183 - fix compilation locking JBR-5183 fix G1GC forward pointer check JBR-5183 fix problem with _first_dead in serial GC JBR-5183 fix bug from dcevm21 merge resolving JBR-5183 use sorted static fields in class comparison JBR-5183 do not use EnhancedRedefineClasses_lock JBR-5183 fix assert in make_jmethod_id JBR-5183 remove VM_ThreadsSuspendJVMTI JBR-5183 fix dcevm21 issues after merge dcevm17 updates JBR-5183 dcevm17 squashed commits JBR-3111 Update class in all dictionaries where it was already defined This patch keeps compatibility with std redefinition, that does not create a new Klass, but modifies it, then it is modified in all dictionaries containing this class. Add ClassLoaderDataGraph_lock to define new class in enhanced redefiniton ClassLoaderDataGraph locking for introduced in redefinition in java.version>11 JBR-3140 - support for modularized HotswapAgent Add -XX:HotswapAgent=[disabled,fatjar.core] Support for redefinition of Well Known classses (java.*,jdk.*, sun.*) Fix fastdebug compilation issues - cast_to_oop JBR-3458: Skip dynamic proxy classes based on com.sun.proxy JBR-3459: Fix race condition in ClassLoaderDataGraph::classes_do InstanceKlass in ClassLoaderData can be uninitialized when ClassLoaderDataGraph::classes_do is called. Using ClassLoaderDataGraph::dictionary_classes_do is safe but problem is still persisting with anonymous classes. Fix compilation problems Fix dcevm issues related to refactorization of Thread to JavaThread Fix init_method_MemberName after Thread to JavaThread refactorization Fix "implicit conversion of NULL constant to 'bool'" Fix, pass SystemDictionary::resolve_from_stream cl_info param Search for affected classes in all initialized classes in cld Fix also case when lambda interface is redefined. Lambda class is missing in cld dictionary since it is hidden since j17 Fix compilation issue Remove duplicated lambdaFormInvokers.cpp JBR-3867 - update keys of jvmti TAG map after redefinition jdwp keeps relation class_ptr->class_ref in jvmti tag. class_ptr is used as a tag key, tag value is refnode. There are new class_ptrs after redefinition, therefore jdwp redefinition method update all affected keys in the tag map. JBR-3867 - fix msvc compilation issue with non const array on stack Attempt to fix JBR-3887 JBR-3937 Fix crashes in C1/C2 compilers There is a race condition in enhanced redefinition with C1/C2. Therefore the patch stops C1/C2 compilation before redefinition and release after redefinition finishing. There is no performance impact since dcevm flushes all code cache. Fix line ending CRLF->LF G1 fixes, code cleanup JBR-3867 - fix dcevm redefinition stops due the not updated weak oops Dcevm must update also oops in weak storage using WeakProcessor. Oops storage is new concept in java17. JBR-4018 - fix zero variant compilation issues JBR-3997 - fix _invokehandle and _invokedynamic race conditions Old clear mechanism of CpCacheEntry has cleared partially _flags and the entire _f1, but both values could be later used in interpreter for invocation. It ended up with various types of crashes. To prevent dcevm crashes, we keep the old _f1 and _flags values until they are resolved again. We need a new flag 'is_f1_null_dcevm_shift' indicating that _f1 is NULL (while f1 keeps old value). JBR-4053 - Fix fastdebug compilation issue JBR-4125 - fix wrong addition of java.lang.Object as superclass JBR-4110 - disable UseEmptySlotsInSupers dcevm instance transformation expects increasing field's offset when fields of class are iterated. This ordering is no more valid if UseEmptySlotsInSupers=true. JBR-4148 - removed meaningless copying of data to itself JBR-4312 - fix crash call ResolvedMethodTable from ServiceThread adjust_metod_entries_dcevm incorrectly changed the hashes of resolved method oops stored in ResolvedMethodTable. Now all oops of old methods are first removed, then updated and then added to table again JBR-4352 - fix AARCH64 compilation issues - use correct INCLUDE_JFR condition for jfr code - exclude jvmtiEnhancedRedefineClasses.cpp if INCLUDE_JVMTI=0 Remove version-numbers left over from the merge of dcevm17 JBR-4392 - use only loaded classes when collecting affected classes JBR-4386 - disable AllowEnhancedClassRedefinition in jfr JBR-5183 fix dcevm21 compilation issues JBR-5183 pre-dcevm17 squashed commits dcevm11 fixes 1. We need to set classRedefinitionCount on new class, not old class. 2.Fix crashes in MetadataOnStackMark::~MetadataOnSta MetadataOnStackMark should not remove dcevm stuff. It was added accidentaly in dcevm9 and never was part of doit() in previous versions. 3. Fix problem with nested members Reported at : https://stackoverflow.com/questions/53370380/hotswapagent-incompatibleclasschangeerror-type-headerpanel1-is-not-a-nest-mem 4. Use init_mark_raw() method changed since j8 - it used init_mark() 5. Fix methodHandles and fieldHandles 6. Code cleanup 7. Fix force_forward in dead space 8. Fix check_class 9. increment_class_counter() using orig dcevm code Probably it is cause of SISEGV on: _ VM_EnhancedRedefineClasses::redefine_single_class->java_mirror() 10 Fix 11.0.7 compilation issues 11. Refactor ClearCpoolCacheAndUnpatch 12. not nullable oop_store_not_null() method+handle NULL in mem_name in dmh 13. Use INCLUDE_CDS condition on "UseSharedSpaces" block from master 14. Add codecache flush optimization, but just flush all cache. 15. Cleanup 16. Use original code for adjust_method_entries in standard redefinition 17. iterate old method version only in dcevm 18. Revert code for !AllowEnhancedClassRedefinition 19. Code cleanup 20. Activate cpCache definition asserts for !dcevm 21. Skip GC runs for redefinitions without instance size change 22. This is the 2nd commit message: 23. dcevm15 - Cleanup code related to removed CMS Fix class cast exception on redefinition of class A, that is superclass of B that has anonymous class C Support for Lambda class redefinition Fix "no original bytecode found" error if method with bkp is missing Sometimes IDE can deploy class with erroneous method, such method has n bytecode, but breakpoint position can still exist. Replace deleted method with Universe::throw_no_such_method_error + Change log level in advanced redefinition - Change log level for "Comparing different class ver.." to debug - Fix adjust_method_entries_dcevm logging levels and severity Support for G1 gc AllowEnhancedClassRedefinition is false (disabled) by default Set HOTSPOT_VM_DISTRO=Dynamic Code Evolution Clear dcevm code separation Fix LoadedClassesClosure - fixes problems with remote debugging dcevm15 - fix java15 compilation issues dcevm15 - add ClassLoaderDataGraph_lock on ClassLoaderDataGraph::classes_do ClassLoaderDataGraph::classes_do and need safepoint or lock, find_sorted_affected_classes is not in safepoint therefore it must be locked ClassLoaderDataGraph::rollback_redefinition need safepoint too dcevm15 - fix Universe::root_oops_do Removed ClassLoaderDataGraph::cld_do was cause of crashes due multiple oop patching. ClassLoaderDataGraph::cld_do replaced in dcevm15 previously used and removed SystemDictionary:oops_do dcevm15 - check if has_nestmate_access_to has newest host class dcevm15 - mark_as_scavengable only alive methods dcevm15 - fix hidded classes dcevm15 - DON'T clear F2 in CP cache after indy unevolving It's not clear why it was cleared in dcevm7-11 Cleanup and review comments Disable AllowEnhancedClassRedefinition in flight recorder dcevm17 - fix compilation issues Fix crash on GrowableArray allocation in C_HEAP Rename confusing method name old_if_redefined to old_if_redefining Check InstanceKlass::has_nestmate_access_to with active classes Dcevm can leave old host in nested class if nested class is not redefined together with host class
80 lines
2.5 KiB
C++
80 lines
2.5 KiB
C++
/*
|
|
* Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* 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_PRIMS_RESOLVEDMETHODTABLE_HPP
|
|
#define SHARE_PRIMS_RESOLVEDMETHODTABLE_HPP
|
|
|
|
#include "memory/allStatic.hpp"
|
|
#include "oops/symbol.hpp"
|
|
#include "oops/weakHandle.hpp"
|
|
|
|
class ResolvedMethodTable;
|
|
class ResolvedMethodTableConfig;
|
|
|
|
class ResolvedMethodTable : public AllStatic {
|
|
friend class ResolvedMethodTableConfig;
|
|
|
|
static volatile bool _has_work;
|
|
static OopStorage* _oop_storage;
|
|
|
|
// Callback for GC to notify of changes that might require cleaning or resize.
|
|
static void gc_notification(size_t num_dead);
|
|
static void trigger_concurrent_work();
|
|
|
|
static double get_load_factor();
|
|
static double get_dead_factor(size_t num_dead);
|
|
|
|
static void grow(JavaThread* jt);
|
|
static void clean_dead_entries(JavaThread* jt);
|
|
|
|
public:
|
|
// Initialization
|
|
static void create_table();
|
|
|
|
static size_t table_size();
|
|
|
|
// Lookup and inserts
|
|
static oop find_method(const Method* method);
|
|
static oop add_method(const Method* method, Handle rmethod_name);
|
|
|
|
// Callbacks
|
|
static void item_added();
|
|
static void item_removed();
|
|
|
|
// Cleaning
|
|
static bool has_work();
|
|
static void do_concurrent_work(JavaThread* jt);
|
|
|
|
|
|
// JVMTI Support - It is called at safepoint only for RedefineClasses
|
|
JVMTI_ONLY(static void adjust_method_entries(bool * trace_name_printed);)
|
|
JVMTI_ONLY(static void adjust_method_entries_dcevm(bool * trace_name_printed);)
|
|
|
|
// Debugging
|
|
static size_t items_count();
|
|
static void verify();
|
|
};
|
|
|
|
#endif // SHARE_PRIMS_RESOLVEDMETHODTABLE_HPP
|