diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-03-22 11:37:02 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-22 11:37:02 +0100 |
| commit | b317cda7ea1ced6f5a6da42dbcd2c508255d6612 (patch) | |
| tree | b67cd8ba82a5bf83fdf6f2b815246c259d2a102d /compiler/rustc_driver_impl/src | |
| parent | 7481c0eab5240efd7ac05bd6e2812de1df3510dd (diff) | |
| parent | 542533865aa2d828665d96047ed575267eed7ac6 (diff) | |
| download | rust-b317cda7ea1ced6f5a6da42dbcd2c508255d6612.tar.gz rust-b317cda7ea1ced6f5a6da42dbcd2c508255d6612.zip | |
Rollup merge of #122847 - workingjubilee:suggest-rust-min-stack-workaround-on-overflow, r=TaKO8Ki
Suggest `RUST_MIN_STACK` workaround on overflow For some Rust crates, like p384, we can't do a whole lot about it even if the stack overflow is reported like in rust-lang/rust#122357 because the problem may be inside LLVM or another codegen backend. We can, however, suggest people set a new `RUST_MIN_STACK` value while handling the SIGSEGV, as that stack-setting will carry forward into the dylib. As a bonus, this also leads to cleaning up the stack-setting code a bit.
Diffstat (limited to 'compiler/rustc_driver_impl/src')
| -rw-r--r-- | compiler/rustc_driver_impl/src/signal_handler.rs | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/compiler/rustc_driver_impl/src/signal_handler.rs b/compiler/rustc_driver_impl/src/signal_handler.rs index deca1082221..441219eec90 100644 --- a/compiler/rustc_driver_impl/src/signal_handler.rs +++ b/compiler/rustc_driver_impl/src/signal_handler.rs @@ -1,6 +1,7 @@ //! Signal handler for rustc //! Primarily used to extract a backtrace from stack overflow +use rustc_interface::util::{DEFAULT_STACK_SIZE, STACK_SIZE}; use std::alloc::{alloc, Layout}; use std::{fmt, mem, ptr}; @@ -100,7 +101,10 @@ extern "C" fn print_stack_trace(_: libc::c_int) { written += 1; } raw_errln!("note: we would appreciate a report at https://github.com/rust-lang/rust"); - written += 1; + // get the current stack size WITHOUT blocking and double it + let new_size = STACK_SIZE.get().copied().unwrap_or(DEFAULT_STACK_SIZE) * 2; + raw_errln!("help: you can increase rustc's stack size by setting RUST_MIN_STACK={new_size}"); + written += 2; if written > 24 { // We probably just scrolled the earlier "we got SIGSEGV" message off the terminal raw_errln!("note: backtrace dumped due to SIGSEGV! resuming signal"); |
