Skip to content

Commit 626ff70

Browse files
committed
8310427: [Lilliput/JDK17] Protect from running broken JFR and JVMTI code with compact headers
Reviewed-by: rkennke
1 parent 3007185 commit 626ff70

File tree

4 files changed

+84
-4
lines changed

4 files changed

+84
-4
lines changed

src/hotspot/share/jfr/leakprofiler/leakProfiler.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ bool LeakProfiler::start(int sample_count) {
4343
return true;
4444
}
4545

46+
if (UseCompactObjectHeaders) {
47+
// Leak profiler is broken with Lilliput, forcefully disable it.
48+
// See JDK-8275415 for more details.
49+
log_warning(jfr)("Leak profiler does not work with compact object headers, disabling.");
50+
return false;
51+
}
52+
4653
// Allows user to disable leak profiler on command line by setting queue size to zero.
4754
if (sample_count == 0) {
4855
return false;

src/hotspot/share/jfr/leakprofiler/sampling/objectSampler.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ ObjectSampler::~ObjectSampler() {
108108
bool ObjectSampler::create(size_t size) {
109109
assert(SafepointSynchronize::is_at_safepoint(), "invariant");
110110
assert(_oop_storage != NULL, "should be already created");
111+
assert(!UseCompactObjectHeaders, "should not be here: broken with compact object headers");
111112
ObjectSampleCheckpoint::clear();
112113
assert(_instance == NULL, "invariant");
113114
_instance = new ObjectSampler(size);

src/hotspot/share/prims/jvmtiTagMap.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1411,6 +1411,7 @@ bool ObjectMarker::_needs_reset = true; // need to reset mark bits by default
14111411
void ObjectMarker::init() {
14121412
assert(Thread::current()->is_VM_thread(), "must be VMThread");
14131413
assert(SafepointSynchronize::is_at_safepoint(), "must be at a safepoint");
1414+
assert(!UseCompactObjectHeaders, "should not be here: broken with compact object headers");
14141415

14151416
// prepare heap for iteration
14161417
Universe::heap()->ensure_parsability(false); // no need to retire TLABs
@@ -2955,6 +2956,12 @@ bool VM_HeapWalkOperation::visit(oop o) {
29552956
}
29562957

29572958
void VM_HeapWalkOperation::doit() {
2959+
if (UseCompactObjectHeaders) {
2960+
// Cannot perform a heap walk safely. See JDK-8283710 and related issues.
2961+
log_warning(jvmti)("Requested a JVMTI heap walk with compact object headers enabled. This is not supported yet.");
2962+
return;
2963+
}
2964+
29582965
ResourceMark rm;
29592966
ObjectMarkerController marker;
29602967
ClassFieldMapCacheMark cm;

test/hotspot/jtreg/ProblemList-lilliput.txt

Lines changed: 69 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,78 @@
2727
# for the known and innocuous implementation reasons.
2828
#
2929

30+
3031
#
31-
# Lilliput forces specific UseCompressedClassPointers mode
32+
# Tests require specific UseCompressedClassPointers mode
3233
#
3334
gc/arguments/TestCompressedClassFlags.java 1234567 generic-all
3435

36+
37+
#
38+
# Tests require specific UseBiasedLocking mode
39+
#
40+
runtime/logging/BiasedLockingTest.java 8256425 generic-all
41+
compiler/rtm/cli/TestUseRTMLockingOptionWithBiasedLocking.java 8256425 generic-x64,generic-i586
42+
jdk/jfr/event/runtime/TestBiasedLockRevocationEvents.java 8256425 generic-all
43+
44+
45+
#
46+
# JFR heap iteration is unsafe, disabled and prints warnings
47+
#
48+
jdk/jfr/event/oldobject/TestAllocationTime.java 8308296 generic-all
49+
jdk/jfr/event/oldobject/TestArrayInformation.java 8308296 generic-all
50+
jdk/jfr/event/oldobject/TestCircularReference.java 8308296 generic-all
51+
jdk/jfr/event/oldobject/TestClassLoaderLeak.java 8308296 generic-all
52+
jdk/jfr/event/oldobject/TestFieldInformation.java 8308296 generic-all
53+
jdk/jfr/event/oldobject/TestG1.java 8308296 generic-all
54+
jdk/jfr/event/oldobject/TestObjectDescription.java 8308296 generic-all
55+
jdk/jfr/event/oldobject/TestHeapDeep.java 8308296 generic-all
56+
jdk/jfr/event/oldobject/TestHeapShallow.java 8308296 generic-all
57+
jdk/jfr/event/oldobject/TestLastKnownHeapUsage.java 8308296 generic-all
58+
jdk/jfr/event/oldobject/TestListenerLeak.java 8308296 generic-all
59+
jdk/jfr/event/oldobject/TestLargeRootSet.java 8308296 generic-all
60+
jdk/jfr/event/oldobject/TestMetadataRetention.java 8308296 generic-all
61+
jdk/jfr/event/oldobject/TestParallel.java 8308296 generic-all
62+
jdk/jfr/event/oldobject/TestReferenceChainLimit.java 8308296 generic-all
63+
jdk/jfr/event/oldobject/TestSanityDefault.java 8308296 generic-all
64+
jdk/jfr/event/oldobject/TestSerial.java 8308296 generic-all
65+
jdk/jfr/event/oldobject/TestShenandoah.java 8308296 generic-all
66+
jdk/jfr/event/oldobject/TestThreadLocalLeak.java 8308296 generic-all
67+
jdk/jfr/event/oldobject/TestZ.java 8308296 generic-all
68+
jdk/jfr/event/gc/objectcount/TestObjectCountAfterGCEventWithG1ConcurrentMark.java 8308296 generic-all
69+
jdk/jfr/event/gc/objectcount/TestObjectCountAfterGCEventWithG1FullCollection.java 8308296 generic-all
70+
jdk/jfr/event/gc/objectcount/TestObjectCountAfterGCEventWithSerial.java 8308296 generic-all
71+
jdk/jfr/event/gc/objectcount/TestObjectCountEvent.java 8308296 generic-all
72+
jdk/jfr/event/gc/objectcount/TestObjectCountAfterGCEventWithParallelOld.java 8308296 generic-all
73+
jdk/jfr/jcmd/TestJcmdDump.java 8308296 generic-all
74+
jdk/jfr/jcmd/TestJcmdDumpPathToGCRoots.java 8308296 generic-all
75+
jdk/jfr/startupargs/TestOldObjectQueueSize.java 8308296 generic-all
76+
jdk/jfr/startupargs/TestStartupMessage.java 8308296 generic-all
77+
78+
3579
#
36-
# Lilliput forces specific UseBiasedLocking mode
80+
# JVMTI heap iteration is unsafe, disabled and prints warnings
3781
#
38-
runtime/logging/BiasedLockingTest.java 1234567 generic-all
39-
compiler/rtm/cli/TestUseRTMLockingOptionWithBiasedLocking.java 1234567 generic-x64,generic-i586
82+
serviceability/jvmti/Heap/IterateHeapWithEscapeAnalysisEnabled.java 8308411 generic-all
83+
vmTestbase/nsk/jvmti/IterateOverObjectsReachableFromObject/iterobjreachobj001/TestDescription.java 8308411 generic-all
84+
vmTestbase/nsk/jvmti/IterateOverObjectsReachableFromObject/iterobjreachobj002/TestDescription.java 8308411 generic-all
85+
vmTestbase/nsk/jvmti/IterateOverObjectsReachableFromObject/iterobjreachobj003/TestDescription.java 8308411 generic-all
86+
vmTestbase/nsk/jvmti/IterateOverObjectsReachableFromObject/iterobjreachobj004/TestDescription.java 8308411 generic-all
87+
vmTestbase/nsk/jvmti/IterateOverObjectsReachableFromObject/iterobjreachobj005/TestDescription.java 8308411 generic-all
88+
vmTestbase/nsk/jvmti/IterateOverReachableObjects/iterreachobj001/TestDescription.java 8308411 generic-all
89+
vmTestbase/nsk/jvmti/IterateOverReachableObjects/iterreachobj002/TestDescription.java 8308411 generic-all
90+
vmTestbase/nsk/jvmti/IterateOverReachableObjects/iterreachobj003/TestDescription.java 8308411 generic-all
91+
vmTestbase/nsk/jvmti/IterateOverReachableObjects/iterreachobj004/TestDescription.java 8308411 generic-all
92+
vmTestbase/nsk/jvmti/IterateOverReachableObjects/iterreachobj005/TestDescription.java 8308411 generic-all
93+
vmTestbase/nsk/jvmti/scenarios/allocation/AP01/ap01t001/TestDescription.java 8308411 generic-all
94+
vmTestbase/nsk/jvmti/scenarios/allocation/AP02/ap02t001/TestDescription.java 8308411 generic-all
95+
vmTestbase/nsk/jvmti/scenarios/allocation/AP03/ap03t001/TestDescription.java 8308411 generic-all
96+
vmTestbase/nsk/jvmti/scenarios/allocation/AP04/ap04t003/TestDescription.java 8308411 generic-all
97+
vmTestbase/nsk/jvmti/scenarios/allocation/AP05/ap05t001/TestDescription.java 8308411 generic-all
98+
vmTestbase/nsk/jvmti/scenarios/allocation/AP05/ap05t002/TestDescription.java 8308411 generic-all
99+
vmTestbase/nsk/jvmti/scenarios/allocation/AP06/ap06t001/TestDescription.java 8308411 generic-all
100+
vmTestbase/nsk/jvmti/scenarios/allocation/AP09/ap09t001/TestDescription.java 8308411 generic-all
101+
vmTestbase/nsk/jvmti/unit/FollowReferences/followref001/TestDescription.java 8308411 generic-all
102+
vmTestbase/nsk/jvmti/unit/FollowReferences/followref002/TestDescription.java 8308411 generic-all
103+
vmTestbase/nsk/jvmti/unit/FollowReferences/followref003/TestDescription.java 8308411 generic-all
104+
vmTestbase/nsk/jvmti/unit/heap/HeapWalkTests/TestDescription.java 8308411 generic-all

0 commit comments

Comments
 (0)