Skip to content

Add internal RUSTC_INTERNAL_FORCE_PANIC_ABORT env var for libpanic_abort#66311

Closed
Aaron1011 wants to merge 1 commit intorust-lang:masterfrom
Aaron1011:panic-abort-hack
Closed

Add internal RUSTC_INTERNAL_FORCE_PANIC_ABORT env var for libpanic_abort#66311
Aaron1011 wants to merge 1 commit intorust-lang:masterfrom
Aaron1011:panic-abort-hack

Conversation

@Aaron1011
Copy link
Copy Markdown
Contributor

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:

sess.panic_strategy() == PanicStrategy::Unwind {

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.

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-review Status: Awaiting review from the assignee but also interested parties.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants