mirror of
https://github.com/VSadov/Satori.git
synced 2025-06-08 11:37:04 +09:00
![]() This adds support for EnC on arm64. A couple of notes on the implementation compared to x64: - On x64 we get the fixed stack size from unwind info. However, for the frames we set up on arm64 for EnC it is not possible to extract the frame size from there because their prologs generally look like stp fp, lr, [sp,#-16]! mov fp, sp sub sp, sp, #144 with unwind codes like the following: set_fp; mov fp, sp save_fplr_x #1 (0x01); tp fp, lr, [sp, #-16]! As can be seen, it is not possible to get the fixed stack size from unwind info in this case. Instead we pass it through the GC info that already has a section for EnC data. - On arm64 the JIT is required to place the PSPSym at the same offset from caller-SP for both the main function and for funclets. Due to this we try to allocate the PSPSym as early as possible in the main function and we must take some care in funclets. However, this conflicts with the EnC frame header that the JIT uses to place values that must be preserved on EnC transitions. This is currently callee-saved registers and the MonitorAcquired boolean. Before this change we were allocating PSPSym above (before) the monitor acquired boolean, but we now have to allocate MonitorAcquired first, particularly because the size of the preserved header cannot change on EnC transitions, while the PSPSym can disappear or appear. This changes frame allocation slightly for synchronized functions. |
||
---|---|---|
.. | ||
images | ||
botr-faq.md | ||
clr-abi.md | ||
corelib.md | ||
dac-notes.md | ||
exceptions.md | ||
garbage-collection.md | ||
guide-for-porting.md | ||
ilc-architecture.md | ||
intro-to-clr.md | ||
managed-type-system.md | ||
method-descriptor.md | ||
mixed-mode.md | ||
profilability.md | ||
profiling.md | ||
r2r-perfmap-format.md | ||
README.md | ||
readytorun-format.md | ||
readytorun-overview.md | ||
shared-generics.md | ||
stackwalking.md | ||
threading.md | ||
type-loader.md | ||
type-system.md | ||
vectors-and-intrinsics.md | ||
virtual-stub-dispatch.md | ||
xplat-minidump-generation.md |
The Book of the Runtime
Welcome to the Book of the Runtime (BOTR) for the .NET Runtime. This contains a collection of articles about the non-trivial internals of the .NET Runtime. Its intended audience are people actually modifying the code or simply wishing to have a deep understanding of the runtime.
Below is a table of contents.
- Book of the Runtime FAQ
- Introduction to the Common Language Runtime
- Garbage Collection Design
- Threading
- RyuJIT Overview
- Type System
- Type Loader
- Method Descriptor
- Virtual Stub Dispatch
- Stack Walking
System.Private.CoreLib
and calling into the runtime- Data Access Component (DAC) Notes
- Profiling
- Implementing Profilability
- What Every Dev needs to Know About Exceptions in the Runtime
- ReadyToRun Overview
- CLR ABI
- Cross-platform Minidumps
- Mixed Mode Assemblies
- Guide For Porting
- Vectors and Intrinsics
It may be possible that this table is not complete. You can get a complete list by looking at the directory where all the chapters are stored: