-
Notifications
You must be signed in to change notification settings - Fork 4.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Mono] Initial metadata update support #45612
Conversation
Tagging subscribers to this area: @CoffeeFlux Issue DetailsFirst part of support for metadata updates. Contributes to #44806 The feature is off by default. To enable, build with
|
08b642f
to
e1087a5
Compare
0a18357
to
3c00733
Compare
Co-Authored-By: Bernhard Urban-Forster <lewurm@gmail.com>
Both samples depend on the roslynildiff tool which should be specified with a RoslynILDiffFullPath property in the .csproj files for the projects.
In the runtime defines cmake ENABLE_METADATA_UPDATE option and sets a preprocessor flag. In System.Private.CoreLib, defines FEATURE_METADATA_UPDATE and uses it to throw a NotSupportedException from LoadMetadataUpdate
Also move execution engine initialization into the main update function and use a MonoError to signal failures (such as if interp inlining is not turned off) instead of asserting at startup.
Use the WasmApp.targets
Log all the unsupported edits, then cancel the update
Keep track of inserted/modified rows for each table in each delta. This will help to use a simpler algorithm to locate effective table rows by keeping track of the logical number of rows in the appended tables
We're going to need to walk backwards from the latest published delta
src/mono/netcore/System.Private.CoreLib/src/ILLink/ILLink.Descriptors.xml
Show resolved
Hide resolved
Give metadata updates a peek at the interp frames since the LMF so that it can copy the InterpMethods that are currently executing This only works with hybrid and full coop suspend. Preemptive suspend will need another mechanism.
Add a busy thread to demonstrate that interp frames since the last managed frame are visible to the metadata update mechanism and the active method bodies are copied before being invalidated.
First part of support for metadata updates.
Contributes to #44806
The feature is off by default. To enable, build with
/p:MonoMetadataUpdate=true
(e.g../build.sh --os browser /p:MonoMetadataUpdate=true
). There are samples insrc/mono/netcore/sample/mbr
(see the README - the samples aren't completely standalone and need some external tooling to build) for console (only tested on Mac and Linux) and wasm.There's a demo at https://lambdageek.dev/dl0/