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

Change stack walking to stop at a precise fp #9420

Merged
merged 2 commits into from
Oct 9, 2024

Commits on Oct 9, 2024

  1. Change stack walking to stop at a precise fp

    Prior to this commit entry trampolines into wasm would record their
    stack pointer at the time of the function call to wasm and then this
    stack pointer was used to halt the stack walking process. The problem
    with this though is that due to the `tail` ABI it's possible that the
    callee will update the caller's stack pointer temporarily. This means
    that the recorded stack pointer at the time the trampoline called wasm
    may differ from the callee's idea of what the stack pointer is when a
    backtrace happens.
    
    To handle this condition when stack walking the frame pointer instead of
    the stack pointer is now recorded when wasm is invoked. This frame
    pointer is a trusted value as it's managed by Cranelift itself. This
    additionally enables the stop condition for frame walking to be a
    precise "it must be this value" condition.
    
    Put together this commit fixes an issue where when `return_call` is used
    it's possible for the initial few frames of the stack to get lost in
    stack traces. After this the frame pointer chain should always be
    precisely walked in its entirety, even in the face of different numbers
    of arguments and parameters as `return_call` instructions are executed.
    alexcrichton committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    e16a6b4 View commit details
    Browse the repository at this point in the history
  2. Add tail-calls, params, and results to stacks fuzzer

    This commit extends the preexisting `stacks` fuzzer with a few new
    features:
    
    * `return_call` instructions are now generated
    * functions may have both params/results to exercise logic around stack
      adjustments and how that might affect a stack trace
    alexcrichton committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    92fa04f View commit details
    Browse the repository at this point in the history