- Add missing forwarders for IsVirtual and IsNewSlot to generic method specializations
- Extend workaround for infinite recursion in virtual method resolution
- Fill implementation of several runtime helpers
Get static string literal loads to work
Allocate reloc fixup pointers in the image for the JIT indirection to work.
Emit strings as compressed int lengths and characters in the data section.
Use Windows APIs to convert these UTF8 encoded strings to UTF16.
Patch the pointers at runtime initialization with GCHandles to static strings and set it in the fixup locations.
Dependency analysis allows tracing what output components depend on other components from a root set instead of simply working with a list of already loaded things.
This patch adds a framework for performing this computation, but no rules that are specific to compiling ILToNative. That will be follow on work.
Included in this change
- DependencyAnalyzerBase
- Api surface for use of analyzer.
- DependencyAnalyzer
- Object that should actually be constructed to perform analysis. Not intended for most use, so as to allow dynamic switching between various particular specializations.
- Specialized over a mark strategy. (The mark strategy specialization allows log customization)
- DependencyNodeCore/DependencyNode
- Base type of dependency node in depedency graph. Provides a set of facilities to describe dependents.
- IDependencyAnalysisMarkStrategy
- Interface underlying mark logging customization.
- Provided mark strategies
- NoLogStrategy, no support for logging.
- Marks, but doesn't log anything. Most memory/performance efficient approach. Expected to be used in retail builds by default for best performance.
- FirstMarkLogStrategy, the first edge to mark a node is logged
- More memory efficient logging at mark points. In particular, only logs mark's that newly mark a node.
- FullGraphLogStrategy
- Used when the ability to generate a complete log of the graph is important. Fairly memory intensive due to the presence of a great many allocated hash tables
- DgmlWriter
- Interfaces with DependencyAnalyzer and various mark strategies to generate a DGML graph of the dependencies. DGML graphs can be viewed in Visual Studio
- Tests
- Basic unit test framework in place
- All types of dependency are tested to minimal standards
- DGML logging is tested.
We were previously allocating the GC static region statically in the
image, but for Ready to Run, we will require GC static regions to be
allocated on the GC heap.
In earlier code review comments, a minor fix was missed.
- Fix incorrect handling of MethodSpecifications for MethodImpl overrides
- Update comment to be more correct
- Add sln file for type system to ease test development
- Add test for generic method impl case