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

[Backtracing][Linux] Add Linux support to swift-backtrace. #66337

Merged
merged 12 commits into from Jun 7, 2023

Commits on Jun 6, 2023

  1. [Backtracing][IRGen] Add a semantic attribute to force frame pointer.

    The Swift backtracer's frame pointer unwinder cannot work on Linux
    without this change, because the compiler omits the frame pointer from
    the function in libSwift_Backtracing that actually captures the stack.
    
    rdar://110260855
    al45tair committed Jun 6, 2023
    Copy the full SHA
    e0d9649 View commit details
    Browse the repository at this point in the history
  2. [Backtracing][Linux] Reorganise modules for _Backtracing.

    Using `SwiftShims` is undesirable - it creates all kinds of build issues,
    and means shipping the `_SwiftBacktracing.h` header in the SDK, which is
    not necessary.
    
    While we're doing this, add the necessary definitions for reading ELF
    and DWARF information.
    
    rdar://110261712
    al45tair committed Jun 6, 2023
    Copy the full SHA
    43ed01f View commit details
    Browse the repository at this point in the history
  3. [Backtracing][Linux] Add Linux support to the _Backtracing module.

    Use the new module structure rather the old SwiftShims header.  This
    is much cleaner and lets us include operating system headers to get
    the relevant definitions where possible.
    
    Add code to support ELF and DWARF, including decompression using
    zlib, zstd and liblzma if those turn out to be required and available.
    
    rdar://110261712
    al45tair committed Jun 6, 2023
    Copy the full SHA
    438ab7f View commit details
    Browse the repository at this point in the history
  4. [Backtracing][Linux] Temporarily add a default addressWidth.

    This is for compatibility, so that I can split up the PRs.
    We'll remove it in the next PR.
    
    rdar://110261712
    al45tair committed Jun 6, 2023
    Copy the full SHA
    6ad9720 View commit details
    Browse the repository at this point in the history
  5. [Backtracing][Linux] Work correctly in the presence of partial reads.

    There's a chance that pipes might perform a partial read; we should
    handle that case.
    
    rdar://110261712
    al45tair committed Jun 6, 2023
    Copy the full SHA
    8d91384 View commit details
    Browse the repository at this point in the history

Commits on Jun 7, 2023

  1. [Backtracing][Linux] Remove status argument.

    The `status` argument to the `_swift_backtrace_demangle()` function
    isn't especially useful, won't match behaviour on Windows, and we
    actually don't use it in the Swift code that calls this SPI.
    
    Remove it.
    
    rdar://110261712
    al45tair committed Jun 7, 2023
    Copy the full SHA
    582946b View commit details
    Browse the repository at this point in the history
  2. [Backtracing][Linux] Add a comment about __cxa_demangle.

    `__cxa_demangle()` is a rather unusual API; one of its "features" is that
    the pointer you pass in must either be `nullptr`, in which case it
    will call `malloc()` itself, _or_ it has to be a pointer to a block
    of memory allocated with `malloc()`, because `__cxa_demangle()` may
    `realloc()` it for you.
    
    This seems to me to be something of a non-obvious footgun, so we never
    pass the caller's pointer through to `__cxa_demangle()`, which lets them
    decide how they want to allocate space.
    
    rdar://110261712
    al45tair committed Jun 7, 2023
    Copy the full SHA
    1262518 View commit details
    Browse the repository at this point in the history
  3. [Backtracing][Linux] Also remove the status argument from Runtime mod…

    …ule.
    
    There's a separate declaration here because we can't include the `Backtrace.h`
    header from inside `modules/Runtime/Runtime.h`.
    
    rdar://110261712
    al45tair committed Jun 7, 2023
    Copy the full SHA
    d4b8828 View commit details
    Browse the repository at this point in the history
  4. [Backtracing][Linux][Tests] Fix verify_all_overlays test.

    The `_Backtracing` module has a number of private implementation only
    imports that aren't used outside of the module and that don't require
    any additional libraries (hence they aren't relevant to the outside
    world).  `verify_all_overlays.py` needs to know about these when it
    does its test, because it loadas the module as the main module, which
    results in implementation only imports being required instead of
    ignored.
    
    rdar://110261712
    al45tair committed Jun 7, 2023
    Copy the full SHA
    a890ec2 View commit details
    Browse the repository at this point in the history
  5. [Backtracing][Linux] Add Linux support to swift-backtrace.

    We need a Linux specific `Target` implementation, and a couple of minor
    tweaks to make things build everywhere.
    
    rdar://110262673
    al45tair committed Jun 7, 2023
    Copy the full SHA
    a9ce1cd View commit details
    Browse the repository at this point in the history
  6. Copy the full SHA
    8cf570c View commit details
    Browse the repository at this point in the history
  7. [Backtracing][Linux] Remove some stray "public" annotations.

    We don't need these here.  They were a leftover from previous code.
    
    rdar://110262673
    al45tair committed Jun 7, 2023
    Copy the full SHA
    df8e698 View commit details
    Browse the repository at this point in the history