1
0
Fork 0
mirror of https://github.com/VSadov/Satori.git synced 2025-06-08 11:37:04 +09:00
Satori/docs/design/coreclr/botr
Jakob Botsch Nielsen 8ca9916b0d
Add arm64 support for EnC (#69679)
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.
2022-05-24 00:14:18 +02:00
..
images Add docs around NativeAOT workflows (#62837) 2021-12-16 10:35:54 +09:00
botr-faq.md Fix typo (#52694) 2021-05-13 06:26:32 -07:00
clr-abi.md Add arm64 support for EnC (#69679) 2022-05-24 00:14:18 +02:00
corelib.md Make QCalls respect the EntryPoint property (#60992) 2021-11-02 16:37:18 -07:00
dac-notes.md Generate the DAC table on Windows with MSVC linker directives instead of resource injection (#68065) 2022-05-12 14:53:12 -07:00
exceptions.md Rename mention to master branch to main (#48824) 2021-03-01 10:09:31 +01:00
garbage-collection.md Add link to my deep .NET GC Internals series (#51551) 2021-04-20 13:09:55 -07:00
guide-for-porting.md Fixed Broken Links in Documentation (#50653) 2021-05-10 10:09:08 +02:00
ilc-architecture.md Switch to objwriter from the dotnet/llvm-project repo (#63177) 2021-12-31 13:34:33 +09:00
intro-to-clr.md Minor corrections to BotR intro chapter (#53746) 2021-06-04 18:05:45 -07:00
managed-type-system.md Fix typos (#69011) 2022-05-07 11:55:53 -07:00
method-descriptor.md Rename mention to master branch to main (#48824) 2021-03-01 10:09:31 +01:00
mixed-mode.md Update URLs in BOTR (#1441) 2020-01-08 08:20:19 -08:00
profilability.md Rename mention to master branch to main (#48824) 2021-03-01 10:09:31 +01:00
profiling.md Consolidate docs (#251) 2019-11-25 23:52:43 +01:00
r2r-perfmap-format.md Enhance CrossGen2 to emit PerfMap debug directory entry (#58552) 2021-09-10 13:19:34 -07:00
README.md Update the mscorlib.md document. (#36225) 2020-05-11 12:29:42 -07:00
readytorun-format.md Fix link in readytorun-format.md (#64878) 2022-02-06 10:39:55 -08:00
readytorun-overview.md Fix typos (#69537) 2022-05-23 10:14:58 -07:00
shared-generics.md Rename mention to master branch to main (#48824) 2021-03-01 10:09:31 +01:00
stackwalking.md Rename mention to master branch to main (#48824) 2021-03-01 10:09:31 +01:00
threading.md Find&Replace coreclr/src -> coreclr (#45761) 2020-12-08 10:40:17 -08:00
type-loader.md Syntax highlighted type-loader.md (#54497) 2021-06-21 13:06:29 -04:00
type-system.md Fix trailing whitespaces (#40891) 2020-08-19 17:29:01 -07:00
vectors-and-intrinsics.md Fix miscellaneous typos (#62062) 2021-11-26 16:32:13 -08:00
virtual-stub-dispatch.md Rename mention to master branch to main (#48824) 2021-03-01 10:09:31 +01:00
xplat-minidump-generation.md Fix typos (#69537) 2022-05-23 10:14:58 -07:00

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.

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: