Skip to content

Commit fb8938e

Browse files
[GR-68381] Merge in jdk-25+34 (25.0)
PullRequest: labsjdk-ce/196
2 parents c7b1f27 + edf3080 commit fb8938e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+290
-197
lines changed

src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,8 @@ void ShenandoahBarrierSetAssembler::load_reference_barrier(MacroAssembler* masm,
292292
} else {
293293
assert(is_phantom, "only remaining strength");
294294
assert(!is_narrow, "phantom access cannot be narrow");
295-
__ mov(lr, CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_phantom));
295+
// AOT saved adapters need relocation for this call.
296+
__ lea(lr, RuntimeAddress(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_phantom)));
296297
}
297298
__ blr(lr);
298299
__ mov(rscratch1, r0);

src/hotspot/cpu/x86/stubDeclarations_x86.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
do_arch_blob, \
3131
do_arch_entry, \
3232
do_arch_entry_init) \
33-
do_arch_blob(initial, 20000 WINDOWS_ONLY(+1000)) \
33+
do_arch_blob(initial, PRODUCT_ONLY(20000) NOT_PRODUCT(21000) WINDOWS_ONLY(+1000)) \
3434
do_stub(initial, verify_mxcsr) \
3535
do_arch_entry(x86, initial, verify_mxcsr, verify_mxcsr_entry, \
3636
verify_mxcsr_entry) \

src/hotspot/share/jfr/instrumentation/jfrClassTransformer.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,14 +132,14 @@ InstanceKlass* JfrClassTransformer::create_new_instance_klass(InstanceKlass* ik,
132132
}
133133

134134
// Redefining / retransforming?
135-
const Klass* JfrClassTransformer::find_existing_klass(const InstanceKlass* ik, JavaThread* thread) {
135+
const InstanceKlass* JfrClassTransformer::find_existing_klass(const InstanceKlass* ik, JavaThread* thread) {
136136
assert(ik != nullptr, "invariant");
137137
assert(thread != nullptr, "invariant");
138138
JvmtiThreadState* const state = thread->jvmti_thread_state();
139139
return state != nullptr ? klass_being_redefined(ik, state) : nullptr;
140140
}
141141

142-
const Klass* JfrClassTransformer::klass_being_redefined(const InstanceKlass* ik, JvmtiThreadState* state) {
142+
const InstanceKlass* JfrClassTransformer::klass_being_redefined(const InstanceKlass* ik, JvmtiThreadState* state) {
143143
assert(ik != nullptr, "invariant");
144144
assert(state != nullptr, "invariant");
145145
const GrowableArray<Klass*>* const redef_klasses = state->get_classes_being_redefined();
@@ -149,9 +149,10 @@ const Klass* JfrClassTransformer::klass_being_redefined(const InstanceKlass* ik,
149149
for (int i = 0; i < redef_klasses->length(); ++i) {
150150
const Klass* const existing_klass = redef_klasses->at(i);
151151
assert(existing_klass != nullptr, "invariant");
152+
assert(existing_klass->is_instance_klass(), "invariant");
152153
if (ik->name() == existing_klass->name() && ik->class_loader_data() == existing_klass->class_loader_data()) {
153154
// 'ik' is a scratch klass. Return the klass being redefined.
154-
return existing_klass;
155+
return InstanceKlass::cast(existing_klass);
155156
}
156157
}
157158
return nullptr;

src/hotspot/share/jfr/instrumentation/jfrClassTransformer.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ class InstanceKlass;
3838
class JfrClassTransformer : AllStatic {
3939
private:
4040
static InstanceKlass* create_new_instance_klass(InstanceKlass* ik, ClassFileStream* stream, TRAPS);
41-
static const Klass* klass_being_redefined(const InstanceKlass* ik, JvmtiThreadState* state);
41+
static const InstanceKlass* klass_being_redefined(const InstanceKlass* ik, JvmtiThreadState* state);
4242

4343
public:
44-
static const Klass* find_existing_klass(const InstanceKlass* ik, JavaThread* thread);
44+
static const InstanceKlass* find_existing_klass(const InstanceKlass* ik, JavaThread* thread);
4545
static InstanceKlass* create_instance_klass(InstanceKlass*& ik, ClassFileStream* stream, bool is_initial_load, JavaThread* thread);
4646
static void copy_traceid(const InstanceKlass* ik, const InstanceKlass* new_ik);
4747
static void transfer_cached_class_file_data(InstanceKlass* ik, InstanceKlass* new_ik, const ClassFileParser& parser, JavaThread* thread);

src/hotspot/share/jfr/jfr.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include "jfr/support/jfrResolution.hpp"
3737
#include "jfr/support/jfrThreadLocal.hpp"
3838
#include "jfr/support/methodtracer/jfrMethodTracer.hpp"
39+
#include "jfr/support/methodtracer/jfrTraceTagging.hpp"
3940
#include "oops/instanceKlass.hpp"
4041
#include "oops/instanceKlass.inline.hpp"
4142
#include "oops/klass.hpp"
@@ -88,12 +89,10 @@ void Jfr::on_klass_creation(InstanceKlass*& ik, ClassFileParser& parser, TRAPS)
8889
}
8990
}
9091

91-
void Jfr::on_klass_redefinition(const InstanceKlass* ik, Thread* thread) {
92-
assert(JfrMethodTracer::in_use(), "invariant");
93-
JfrMethodTracer::on_klass_redefinition(ik, thread);
92+
void Jfr::on_klass_redefinition(const InstanceKlass* ik, const InstanceKlass* scratch_klass) {
93+
JfrTraceTagging::on_klass_redefinition(ik, scratch_klass);
9494
}
9595

96-
9796
bool Jfr::is_excluded(Thread* t) {
9897
return JfrJavaSupport::is_excluded(t);
9998
}

src/hotspot/share/jfr/jfr.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class Jfr : AllStatic {
6161
static void include_thread(Thread* thread);
6262
static void exclude_thread(Thread* thread);
6363
static void on_klass_creation(InstanceKlass*& ik, ClassFileParser& parser, TRAPS);
64-
static void on_klass_redefinition(const InstanceKlass* ik, Thread* thread);
64+
static void on_klass_redefinition(const InstanceKlass* ik, const InstanceKlass* scratch_klass);
6565
static void on_thread_start(Thread* thread);
6666
static void on_thread_exit(Thread* thread);
6767
static void on_resolution(const CallInfo& info, TRAPS);

src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeSet.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -533,8 +533,9 @@ static void clear_method_tracer_klasses() {
533533
static void do_unloading_klass(Klass* klass) {
534534
assert(klass != nullptr, "invariant");
535535
assert(_subsystem_callback != nullptr, "invariant");
536-
if (klass->is_instance_klass() && InstanceKlass::cast(klass)->is_scratch_class()) {
537-
return;
536+
if (!used(klass) && klass->is_instance_klass() && InstanceKlass::cast(klass)->is_scratch_class()) {
537+
SET_TRANSIENT(klass);
538+
assert(used(klass), "invariant");
538539
}
539540
if (JfrKlassUnloading::on_unload(klass)) {
540541
if (JfrTraceId::has_sticky_bit(klass)) {

src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeSetUtils.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ class MethodUsedPredicate {
152152
if (!klass->is_instance_klass()) {
153153
return false;
154154
}
155-
return _current_epoch ? METHOD_USED_THIS_EPOCH(klass) : METHOD_USED_PREVIOUS_EPOCH(klass);
155+
return _current_epoch ? USED_THIS_EPOCH(klass) : USED_PREVIOUS_EPOCH(klass);
156156
}
157157
};
158158

src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceId.hpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include "memory/allStatic.hpp"
3131

3232
class ClassLoaderData;
33+
class InstanceKlass;
3334
class Klass;
3435
class Method;
3536
class ModuleEntry;
@@ -86,7 +87,6 @@ class JfrTraceId : public AllStatic {
8687

8788
// through load barrier
8889
static traceid load(const Klass* klass);
89-
static traceid load_previous_epoch(const Klass* klass);
9090
static traceid load(jclass jc, bool raw = false);
9191
static traceid load(const Method* method);
9292
static traceid load(const Klass* klass, const Method* method);
@@ -146,10 +146,8 @@ class JfrTraceId : public AllStatic {
146146
static void set_sticky_bit(const Method* method);
147147
static void clear_sticky_bit(const Klass* k);
148148
static void clear_sticky_bit(const Method* method);
149-
static bool has_timing_bit(const Klass* k);
150-
static void set_timing_bit(const Klass* k);
151-
static void clear_timing_bit(const Klass* k);
152-
149+
static bool has_timing_bit(const InstanceKlass* scratch_klass);
150+
static void set_timing_bit(const InstanceKlass* scratch_klass);
153151
};
154152

155153
#endif // SHARE_JFR_RECORDER_CHECKPOINT_TYPES_TRACEID_JFRTRACEID_HPP

src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceId.inline.hpp

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include "jfr/recorder/checkpoint/types/traceid/jfrTraceIdEpoch.hpp"
3333
#include "jfr/recorder/checkpoint/types/traceid/jfrTraceIdMacros.hpp"
3434
#include "jfr/support/jfrKlassExtension.hpp"
35+
#include "oops/instanceKlass.hpp"
3536
#include "oops/klass.hpp"
3637
#include "runtime/javaThread.inline.hpp"
3738
#include "runtime/mutexLocker.hpp"
@@ -81,10 +82,6 @@ inline traceid JfrTraceId::load_leakp_previous_epoch(const Klass* klass, const M
8182
return JfrTraceIdLoadBarrier::load_leakp_previous_epoch(klass, method);
8283
}
8384

84-
inline traceid JfrTraceId::load_previous_epoch(const Klass* klass) {
85-
return JfrTraceIdLoadBarrier::load_previous_epoch(klass);
86-
}
87-
8885
template <typename T>
8986
inline traceid raw_load(const T* t) {
9087
assert(t != nullptr, "invariant");
@@ -198,37 +195,30 @@ inline void JfrTraceId::set_sticky_bit(const Method* method) {
198195
assert(method != nullptr, "invariant");
199196
assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
200197
assert(!has_sticky_bit(method), "invariant");
198+
assert(!method->is_old(), "invariant");
201199
SET_METHOD_STICKY_BIT(method);
202200
assert(has_sticky_bit(method), "invariant");
203201
}
204202

205203
inline void JfrTraceId::clear_sticky_bit(const Method* method) {
206204
assert(method != nullptr, "invarriant");
207205
assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
206+
assert(!method->is_old(), "invariant");
208207
assert(JfrTraceId::has_sticky_bit(method), "invariant");
209208
CLEAR_STICKY_BIT_METHOD(method);
210209
assert(!JfrTraceId::has_sticky_bit(method), "invariant");
211210
}
212211

213-
inline bool JfrTraceId::has_timing_bit(const Klass* k) {
214-
assert(k != nullptr, "invariant");
215-
return HAS_TIMING_BIT(k);
212+
inline bool JfrTraceId::has_timing_bit(const InstanceKlass* scratch_klass) {
213+
assert(scratch_klass != nullptr, "invariant");
214+
return HAS_TIMING_BIT(scratch_klass);
216215
}
217216

218-
inline void JfrTraceId::set_timing_bit(const Klass* k) {
219-
assert(k != nullptr, "invariant");
220-
assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
221-
assert(!has_timing_bit(k), "invariant");
222-
SET_TIMING_BIT(k);
223-
assert(has_timing_bit(k), "invariant");
224-
}
225-
226-
inline void JfrTraceId::clear_timing_bit(const Klass* k) {
227-
assert(k != nullptr, "invarriant");
228-
assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
229-
assert(JfrTraceId::has_timing_bit(k), "invariant");
230-
CLEAR_TIMING_BIT(k);
231-
assert(!JfrTraceId::has_timing_bit(k), "invariant");
217+
inline void JfrTraceId::set_timing_bit(const InstanceKlass* scratch_klass) {
218+
assert(scratch_klass != nullptr, "invariant");
219+
assert(!has_timing_bit(scratch_klass), "invariant");
220+
SET_TIMING_BIT(scratch_klass);
221+
assert(has_timing_bit(scratch_klass), "invariant");
232222
}
233223

234224
#endif // SHARE_JFR_RECORDER_CHECKPOINT_TYPES_TRACEID_JFRTRACEID_INLINE_HPP

0 commit comments

Comments
 (0)