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 internal RUSTC_INTERNAL_FORCE_PANIC_ABORT env var for libpanic_abort #66311

Closed
wants to merge 1 commit into from

Commits on Nov 11, 2019

  1. Add internal RUSTC_INTERNAL_FORCE_PANIC_ABORT env var for `libpanic…

    …_abort`
    
    Currently, we require `libpanic_abort` to always be build with the
    `abort` panic strategy, regardless of what panic strategy would
    normally be passed to `rustc` (e.g. `unwind` when building `libstd`).
    
    This ensures that when downstream crates build against `libpanic_abort`,
    it is properly detected as the panic runtime for the `abort` strategy.
    
    Previously, this was done by special-casing `libpanic_abort` in
    bootstrap. This meant that building `libpanic_abort` without using
    `x.py` (e.g by using `xargo`) would result in the wrong panic strategy
    being applied, leading to an error when trying to build against it:
    
    ```
    error: the crate `panic_abort` does not have the panic strategy `abort`
    ```
    
    This is a problem for tools like Miri, which require a custom-build
    libstd, and cannot use `x.py`.
    
    To fix this, we add a special environment variable
    `RUSTC_INTERNAL_FORCE_PANIC_ABORT`. This is set in the `build.rs`
    for `libpanic_abort`, and checked by the compiler when determining the
    panic strategy of the current crate. While this is still a hack, it's a
    much better one - the special case is now represented in the
    `libpanic_abort` crate itself, rather than in `bootstrap`.
    
    Ideally, this would be an internal attribute (e.g.
    `#[rustc_panic_abort]`) that we apply to `libpanic_abort`.
    
    Unfortunately, `emscripten` targets require that we be able to determine
    the panic strategy very early on, before we've even started parsing the
    crate:
    
    https://github.com/rust-lang/rust/blob/3fc30d884ae0c988d98452a06737705cfe34806a/src/librustc_codegen_llvm/llvm_util.rs#L77
    
    To avoid invasive changes to emscripten and/or the codewgen backend
    infrastructure, I chose to add a new environment variable.
    
    Note that the hack in bootstrap needs to remain until this changes makes
    its way into the bootstrap compiler, to ensure that we can still build a
    correct `libpanic_abort` with a bootstrap compiler that doesn't know
    about this special environment variable.
    Aaron1011 committed Nov 11, 2019
    Configuration menu
    Copy the full SHA
    5a826c7 View commit details
    Browse the repository at this point in the history