Skip to content

Conversation

@adamperlin
Copy link
Contributor

@adamperlin adamperlin commented Jan 5, 2026

This PR implements support for a data section in crossgen emitted wasm r2r output files.
As part of this goal, the WasmObjectWriter class has been adapted to better conform to the base ObjectWriter interface, so that the base class's method can be used to process DependencyNodes.

Each separate data-like is represented as a single data segment, and the segments are then merged into a single data section as is required by the Wasm format.

@adamperlin adamperlin marked this pull request as ready for review January 9, 2026 22:04
Copilot AI review requested due to automatic review settings January 9, 2026 22:04
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR implements support for writing R2R metadata into WebAssembly data sections by extending the WasmObjectWriter class. The changes enable crossgen2 to emit Wasm object files with proper data section support, which is critical for R2R compilation targeting WebAssembly.

Key changes:

  • Introduced a CodeDataLayoutMode enum to distinguish between platforms that require unified vs. separate code/data address spaces (Wasm32 requires separate)
  • Refactored WasmObjectWriter to use the base ObjectWriter class's methods for processing DependencyNodes instead of fully overriding EmitObject
  • Implemented WebAssembly data segment support, where each data section is represented as a segment that gets merged into a single data section per Wasm format requirements

Reviewed changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated 16 comments.

Show a summary per file
File Description
ILCompiler.ReadyToRun.csproj Added reference to CodeDataLayoutMode.cs for R2R compiler
ILCompiler.Compiler.csproj Added reference to CodeDataLayoutMode.cs for AOT compiler
CodeDataLayoutMode.cs New file defining the CodeDataLayout enum (Unified/Separate) for platform-specific code/data layout requirements
WasmObjectWriter.cs Major refactor to support data sections: added RecordMethod, EmitSymbolTable, EmitRelocations, EmitObjectFile overrides; implemented WasmDataSection and WasmDataSegment classes for proper Wasm binary format encoding
WasmNative.cs Added WasmConstExpr and WasmExprKind for encoding constant expressions in data segments (used for memory offset calculations)
SectionWriter.cs Exposed Buffer property to allow direct access to underlying buffer writer for Wasm encoding
ObjectWriter.cs Added CodeDataLayout support, made _insPaddingByte nullable for Wasm, added RecordMethod virtual method, updated EmitRelocations and EmitObjectFile signatures to include Logger parameter
PEObjectWriter.cs Updated method signatures to match base class changes (Logger parameter)
MachObjectWriter.cs Updated method signatures to match base class changes (Logger parameter)
ElfObjectWriter.cs Updated method signatures to match base class changes (Logger parameter)
CoffObjectWriter.cs Updated method signatures to match base class changes (Logger parameter)
ObjectNodeSection.cs Added NeedsAlignment property and new constructor; added Wasm-specific section definitions (WasmCodeSection, WasmDataSection, etc.)

adamperlin and others added 7 commits January 9, 2026 14:35
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…r.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…r.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…erlin/runtime into adamperlin/wasm-object-writer-v0.2
@am11 am11 added the arch-wasm WebAssembly architecture label Jan 20, 2026
@dotnet-policy-service
Copy link
Contributor

Tagging subscribers to 'arch-wasm': @lewing, @pavelsavara
See info in area-owners.md if you want to be subscribed.

@kg
Copy link
Member

kg commented Jan 20, 2026

LGTM overall, thanks for working on this!

@adamperlin
Copy link
Contributor Author

LGTM overall, thanks for working on this!

@kg Thanks for the detailed feedback! Whenever you are able, please feel free to take another look!

@adamperlin adamperlin merged commit 4f83dbc into dotnet:main Jan 22, 2026
100 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

arch-wasm WebAssembly architecture area-crossgen2-coreclr

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants