Skip to content
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

Add arm64 support for EnC #69679

Merged
merged 4 commits into from
May 23, 2022
Merged

Add arm64 support for EnC #69679

merged 4 commits into from
May 23, 2022

Commits on May 23, 2022

  1. Add arm64 support for EnC

    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, dotnet#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.
    jakobbotsch committed May 23, 2022
    Configuration menu
    Copy the full SHA
    fda6258 View commit details
    Browse the repository at this point in the history
  2. Run jit-format

    jakobbotsch committed May 23, 2022
    Configuration menu
    Copy the full SHA
    501531f View commit details
    Browse the repository at this point in the history
  3. Feedback

    jakobbotsch committed May 23, 2022
    Configuration menu
    Copy the full SHA
    eaf7c69 View commit details
    Browse the repository at this point in the history
  4. Fix funclets for OSR methods with monitor-acquired bool

    OSR methods reuse the bool created by the tier 0 frame so we should not
    allocate space for it.
    jakobbotsch committed May 23, 2022
    Configuration menu
    Copy the full SHA
    fc628b5 View commit details
    Browse the repository at this point in the history