Gate FrameType::isRawPointer on ENCODED_MASK and HotSpot#667
Merged
Conversation
A raw, unencoded ASGCT BCI can coincidentally have bit 30 set on non-HotSpot VMs; isRawPointer() must require ENCODED_MASK before trusting bit 30, not just the HotSpot check.
jbachorik
added a commit
that referenced
this pull request
Jul 16, 2026
This production behavior change is unrelated to the chaos antagonist and harness work here; it's now tracked as its own PR so reviewers can scrutinize the frame-packing logic on its own.
Contributor
CI Test ResultsRun: #29513986366 | Commit:
Status Overview
Legend: ✅ passed | ❌ failed | ⚪ skipped | 🚫 cancelled Summary: Total: 32 | Passed: 32 | Failed: 0 Updated: 2026-07-16 16:22:43 UTC |
Contributor
Benchmark Results (commit 192c8cb)Pipeline: https://gitlab.ddbuild.io/DataDog/apm-reliability/benchmarking-platform/-/pipelines/125023590 Commit:
|
| Benchmark | JDK | Latest | Dev | Δ (dev vs latest) | Issues L/D |
|---|---|---|---|---|---|
| akka-uct | 21 | ✅ 10291 ms (21 iters) | ✅ 10221 ms (21 iters) | ≈ -0.7% (±10.9%) | — / — |
| akka-uct | 25 | ✅ 8807 ms (24 iters) | ✅ 8819 ms (24 iters) | ≈ +0.1% (±9.7%) | — / — |
| finagle-chirper | 21 | ✅ 5957 ms (33 iters) | ✅ 6005 ms (33 iters) | ≈ +0.8% (±25.2%) | |
| finagle-chirper | 25 | ✅ 5459 ms (36 iters) | ✅ 5486 ms (36 iters) | ≈ +0.5% (±25.1%) | |
| fj-kmeans | 21 | ✅ 2723 ms (68 iters) | ✅ 2758 ms (68 iters) | ≈ +1.3% (±2.7%) | — / — |
| fj-kmeans | 25 | ✅ 2830 ms (66 iters) | ✅ 2826 ms (66 iters) | ≈ -0.1% (±2.5%) | — / — |
| future-genetic | 21 | ✅ 2059 ms (90 iters) | ✅ 2121 ms (88 iters) | 🔴 +3% | — / — |
| future-genetic | 25 | ✅ 2012 ms (92 iters) | ✅ 2074 ms (89 iters) | 🔴 +3.1% | — / — |
| naive-bayes | 21 | ✅ 1245 ms (137 iters) | ✅ 1310 ms (132 iters) | ≈ +5.2% (±33.1%) | — / — |
| naive-bayes | 25 | ✅ 1016 ms (168 iters) | ✅ 1022 ms (168 iters) | ≈ +0.6% (±31.8%) | — / — |
| reactors | 21 | ✅ 16088 ms (15 iters) | ✅ 15935 ms (15 iters) | ≈ -1% (±8.1%) | — / — |
| reactors | 25 | ✅ 18415 ms (15 iters) | ✅ 18405 ms (15 iters) | ≈ -0.1% (±4.8%) | — / — |
Internal counter details (ddprof)
ddprof internal counters, latest / dev (✅ = 0, · = unavailable):
| Benchmark | JDK | Dropped rec | Dropped jvmti | Dropped trace | Skipped WC | AGCT fail | Unwind fail |
|---|---|---|---|---|---|---|---|
| akka-uct | 21 | ✅ / ✅ | ✅ / ✅ | 2 / 5 | 2031 / 1958 | ✅ / ✅ | ✅ / ✅ |
| akka-uct | 25 | ✅ / ✅ | ✅ / ✅ | ✅ / 2 | 1996 / 2270 | ✅ / ✅ | ✅ / ✅ |
| finagle-chirper | 21 | ✅ / ✅ | ✅ / ✅ | 9 / 3 | 8886 / 8396 | ✅ / ✅ | ✅ / ✅ |
| finagle-chirper | 25 | ✅ / ✅ | ✅ / ✅ | 1 / 1 | 8390 / 8089 | ✅ / ✅ | ✅ / ✅ |
| fj-kmeans | 21 | ✅ / ✅ | ✅ / ✅ | ✅ / ✅ | ✅ / ✅ | ✅ / ✅ | ✅ / ✅ |
| fj-kmeans | 25 | ✅ / ✅ | ✅ / ✅ | 3 / 1 | 1292 / 1301 | ✅ / ✅ | ✅ / ✅ |
| future-genetic | 21 | ✅ / ✅ | ✅ / ✅ | 1 / ✅ | 2996 / 2904 | ✅ / ✅ | ✅ / ✅ |
| future-genetic | 25 | ✅ / ✅ | ✅ / ✅ | 2 / 4 | 2894 / 2875 | ✅ / ✅ | ✅ / ✅ |
| naive-bayes | 21 | ✅ / ✅ | ✅ / ✅ | 8 / 4 | 3465 / 3560 | ✅ / ✅ | ✅ / ✅ |
| naive-bayes | 25 | ✅ / ✅ | ✅ / ✅ | 6 / 5 | 3482 / 3504 | ✅ / ✅ | ✅ / ✅ |
| reactors | 21 | ✅ / ✅ | ✅ / ✅ | 1 / 3 | 1564 / 1624 | ✅ / ✅ | ✅ / ✅ |
| reactors | 25 | ✅ / ✅ | ✅ / ✅ | 3 / 1 | 1903 / 1839 | ✅ / ✅ | ✅ / ✅ |
|
Contributor
Reliability & Chaos Results❌ 1 failure(s) detected Pipeline: https://gitlab.ddbuild.io/DataDog/java-profiler/-/pipelines/125023490 ❌ chaos: profiler jemalloc amd64 21 0 3 temXchaos |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do?:
Requires
ENCODED_MASK(bit 20) in addition to the HotSpot check beforeFrameType::isRawPointer()trustsRAW_POINTER_MASK(bit 30).Motivation:
RAW_POINTER_MASKis only ever set byencode(..., rawPointer=true), whichunconditionally also sets
ENCODED_MASK. Without theENCODED_MASKcheck, araw, unencoded ASGCT BCI that incidentally has bit 30 set (observed on
non-HotSpot VMs such as J9) could false-positive as a raw pointer even
though it never went through
encode(). This was split out of PR #644 perreview feedback, since it's an independent, unrelated production fix.
Additional Notes:
Split out of #644 (chaos-tooling debugging surfaced this bug incidentally;
the fix has nothing to do with that PR's antagonist/harness work).
How to test the change?:
./gradlew :ddprof-lib:gtestDebug_frame_ut- new/updatedFrameTyperegression tests (
FalseWhenBit30IsSetOnNonHotspot,FalseForRawAsgctBciWithBit30SetButNoEncodedMarker) cover the false-positivethis closes.
For Datadog employees:
credentials of any kind, I've requested a security review (run the
dd:platform-security-reviewskill, or file a request via the PSEC review form).
bewairealso runs automatically on every PR.Unsure? Have a question? Request a review!
🤖 Generated with Claude Code