-
Notifications
You must be signed in to change notification settings - Fork 13.8k
Commit 772f380
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.File tree
2 files changed
+13
-2
lines changed- library/std/src/sys/pal
- unix
- windows
2 files changed
+13
-2
lines changedOriginal file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
148 | 148 |
| |
149 | 149 |
| |
150 | 150 |
| |
151 | + | ||
152 | + | ||
153 | + | ||
154 | + | ||
155 | + | ||
156 | + | ||
157 | + | ||
151 | 158 |
| |
152 | 159 |
| |
153 | 160 |
| |
| |||
179 | 186 |
| |
180 | 187 |
| |
181 | 188 |
| |
189 | + | ||
190 | + | ||
191 | + | ||
182 | 192 |
| |
183 | 193 |
| |
184 | 194 |
| |
| |||
230 | 240 |
| |
231 | 241 |
| |
232 | 242 |
| |
233 | - | ||
243 | + | ||
234 | 244 |
| |
235 | 245 |
| |
236 | 246 |
| |
|
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
22 | 22 |
| |
23 | 23 |
| |
24 | 24 |
| |
25 | - | ||
25 | + | ||
26 | + | ||
26 | 27 |
| |
27 | 28 |
| |
28 | 29 |
| |
|
0 commit comments