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

[release/6.0-vs4mac] Fix the MacOS remote unwinder for VS4Mac #63758

Merged
merged 2 commits into from
Jan 13, 2022

Commits on Jan 13, 2022

  1. Fix the MacOS remote unwinder for VS4Mac

    The wrong module was being passed to the remote unwinder because the load bias for shared modules
    was being calculated incorrectly.
    
    Issue: #63309
    mikem8361 authored and github-actions committed Jan 13, 2022
    Configuration menu
    Copy the full SHA
    9422c42 View commit details
    Browse the repository at this point in the history
  2. Fix native frame unwind in syscall on arm64 for VS4Mac crash report

    From PR in main: #63598
    
    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, #16]
       36638:       fd 7b 02 a9     stp     x29, x30, [sp, #32]
       3663c:       fd 83 00 91     add     x29, sp, #32
    ...
       367ac:       e9 01 80 52     mov     w9, #15
       367b0:       7f 3e 02 71     cmp     w19, #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, #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 authored and github-actions committed Jan 13, 2022
    Configuration menu
    Copy the full SHA
    c81e00d View commit details
    Browse the repository at this point in the history