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

Fix native frame unwind in syscall on arm64 for VS4Mac crash report. #63598

Merged
merged 3 commits into from
Jan 13, 2022

Commits on Jan 10, 2022

  1. Fix native frame unwind in syscall on arm64 for VS4Mac crash report.

    Add arm64 version of StepWithCompactNoEncoding for syscall leaf node wrappers that have compact encoding of 0.
    
    Fix ReadCompactEncodingRegister so it actually decrements the addr.
    
    Change StepWithCompactEncodingArm64 to match what MacOS libunwind does for framed and frameless stepping.
    
    arm64 can have frames with the same SP (but different IPs). Increment SP for this condition so createdump's unwind
    loop doesn't break out on the "SP not increasing" check and the frames are added to the thread frame list in the
    correct order.
    
    Add getting the unwind info for tail called functions like this:
    
    __ZL14PROCEndProcessPvji:
       36630:       f6 57 bd a9     stp     x22, x21, [sp, #-48]!
       36634:       f4 4f 01 a9     stp     x20, x19, [sp, dotnet#16]
       36638:       fd 7b 02 a9     stp     x29, x30, [sp, dotnet#32]
       3663c:       fd 83 00 91     add     x29, sp, dotnet#32
    ...
       367ac:       e9 01 80 52     mov     w9, dotnet#15
       367b0:       7f 3e 02 71     cmp     w19, dotnet#143
       367b4:       20 01 88 1a     csel    w0, w9, w8, eq
       367b8:       2e 00 00 94     bl      _PROCAbort
    _TerminateProcess:
    -> 367bc:       22 00 80 52     mov     w2, dotnet#1
       367c0:       9c ff ff 17     b       __ZL14PROCEndProcessPvji
    
    The IP (367bc) returns the (incorrect) frameless encoding with nothing on the stack (uses an incorrect LR to unwind). To fix this
    get the unwind info for PC -1 which points to PROCEndProcess with the correct unwind info. This matches how lldb unwinds this frame.
    
    Always address module segment to IP lookup list instead of checking the module regions.
    
    Strip pointer authentication bits on PC/LR.
    mikem8361 committed Jan 10, 2022
    Configuration menu
    Copy the full SHA
    96ddb31 View commit details
    Browse the repository at this point in the history

Commits on Jan 11, 2022

  1. Code review feedback

    mikem8361 committed Jan 11, 2022
    Configuration menu
    Copy the full SHA
    b7a8bd4 View commit details
    Browse the repository at this point in the history

Commits on Jan 12, 2022

  1. Code review feedback

    mikem8361 committed Jan 12, 2022
    Configuration menu
    Copy the full SHA
    f1f1b4f View commit details
    Browse the repository at this point in the history