Skip to content

Trace Unsafe field offsets in native-image agent - #14205

Open
rotilho wants to merge 1 commit into
oracle:masterfrom
rotilho:fix/native-image-agent-field-metadata
Open

Trace Unsafe field offsets in native-image agent#14205
rotilho wants to merge 1 commit into
oracle:masterfrom
rotilho:fix/native-image-agent-field-metadata

Conversation

@rotilho

@rotilho rotilho commented Aug 8, 2026

Copy link
Copy Markdown

Trace jdk.internal.misc.Unsafe.objectFieldOffset(Field), which atomic field updaters use, while suppressing the duplicate event produced when sun.misc.Unsafe delegates to it.

Add real-agent metadata and raw-event coverage for reflection, atomic updaters, and the public Unsafe wrapper.

Summary

On GraalVM 25, atomic field updater construction can resolve a field through jdk.internal.misc.Unsafe.objectFieldOffset(Field) without executing the ordinary reflective field-access hooks. The tracing agent therefore omits the target field from reachability metadata, and a native image built with that metadata can fail with MissingReflectionRegistrationError.

This change traces the JDK-internal objectFieldOffset(Field) path while preserving the existing by-name Unsafe handling.

When public sun.misc.Unsafe.objectFieldOffset(Field) delegates to the internal method, the internal event is suppressed precisely for that wrapper call. The existing public event remains responsible for recording the field, preventing duplicate events while preserving the application caller and origin.

Ordinary reflective field-access tracing is unchanged.

Related Issues

Testing

The following checks passed:

  • Built SVM_AGENT and com.oracle.svm.configure.test.
  • Built SVM_TESTS.
  • mx gate --tags condconfig
  • mx checkstyle
  • git diff --check
  • Focused real-agent metadata and raw-trace verifier.

The regression coverage verifies:

  • merely looking up a field does not register it as accessed;
  • ordinary reflective field access remains traced;
  • reference, integer, and long atomic field updaters register their target fields;
  • direct internal Unsafe field-offset resolution is traced;
  • public sun.misc.Unsafe.objectFieldOffset(Field) records the target field;
  • the public-to-internal delegation produces exactly one raw field-access event;
  • the event remains attributed to the application caller.

Documentation

No documentation updates are needed. This corrects internal tracing-agent coverage and does not introduce or change a public option, API, or metadata format.

Contributor Checklist

  • I have read the contribution guide.
  • I have the right to contribute the submitted material under the project terms.
  • I have updated tests and documentation where appropriate.
  • If I used a coding assistant, I remain responsible for the entire contribution and have reviewed it accordingly.

Trace jdk.internal.misc.Unsafe.objectFieldOffset(Field), which atomic field updaters use, while suppressing the duplicate event produced when sun.misc.Unsafe delegates to it.

Add real-agent metadata and raw-event coverage for reflection, atomic updaters, and the public Unsafe wrapper.
@oracle-contributor-agreement

Copy link
Copy Markdown

Thank you for your pull request and welcome to our community! To contribute, please sign the Oracle Contributor Agreement (OCA).
The following contributors of this PR have not signed the OCA:

To sign the OCA, please create an Oracle account and sign the OCA in Oracle's Contributor Agreement Application.

When signing the OCA, please provide your GitHub username. After signing the OCA and getting an OCA approval from Oracle, this PR will be automatically updated.

If you are an Oracle employee, please make sure that you are a member of the main Oracle GitHub organization, and your membership in this organization is public.

@oracle-contributor-agreement oracle-contributor-agreement Bot added the OCA Required At least one contributor does not have an approved Oracle Contributor Agreement. label Aug 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

OCA Required At least one contributor does not have an approved Oracle Contributor Agreement.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[GR-77669][Native Image][Tracing Agent] AtomicReferenceFieldUpdater field metadata omitted on GraalVM 25

1 participant