about summary refs log tree commit diff
path: root/compiler/rustc_codegen_llvm/src/consts.rs
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2025-09-29 01:32:14 +0000
committerbors <bors@rust-lang.org>2025-09-29 01:32:14 +0000
commit772f380092b30680313b70a622cafc17f03e6bff (patch)
treee194bbeaa6f1338828018edeb7b3961d5629d988 /compiler/rustc_codegen_llvm/src/consts.rs
parentf957826bff7a68b267ce75b1ea56352aed0cca0a (diff)
parent660a3486fc6da2c3599a167d73d849178f98bc17 (diff)
downloadrust-772f380092b30680313b70a622cafc17f03e6bff.tar.gz
rust-772f380092b30680313b70a622cafc17f03e6bff.zip
Auto merge of #147090 - Noratrieb:immediate-abort-stack-overflow, r=joboet
Skip stack overflow handler for panic=immediate-abort

std installs guard pages and a signal handler to ensure that stackoverflows 1) terminate abruptly and 2) print an nice message. Even for panic=immediate-abort, 1) is desirable, we don't want silent data corruption there. But 2) is completely unnecessary, as users deliberately *don't* want nice messages, they want minimum binary size.

Therefore, skip the entire guard signal handler setup, which saves a lot of bytes.

I tested this with a hello world binary using fat LTO, build-std, panic=immediate-abort, opt-level=s, strip=debuginfo.

`size` reports significant savings:

```
   text	   data	    bss	    dec	    hex	filename
  15252	   1032	    104	  16388	   4004	tiny-before
   6881	    964	     48	   7893	   1ed5	tiny-after2
```

`nm -U` goes from 71 to 56, getting rid of a bunch of stack overflow related symbols. The disk size goes from `31k` to `24k`.

The impact on the error message is minimal, as the message was already
missing.

before:
```
fish: Job 1, './tiny-so-before' terminated by signal SIGABRT (Abort)
```

after:
```
fish: Job 1, './tiny-so-after' terminated by signal SIGSEGV (Address boundary error)
```

I didn't test the Windows part, but it likely also has savings.
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/consts.rs')
0 files changed, 0 insertions, 0 deletions