diff options
| author | yukang <moorekang@gmail.com> | 2023-03-09 22:05:57 +0800 |
|---|---|---|
| committer | yukang <moorekang@gmail.com> | 2023-05-17 17:56:26 +0800 |
| commit | c3394b3eaa0f6fa135ddca67c3cabb3e9cd41a04 (patch) | |
| tree | e47317ba9e7ef5b3196c62a12a97c7adc66f4d5f /library/std/src/sys_common/backtrace.rs | |
| parent | c2ccc855e74aec03e434405eca3c247ee2432e53 (diff) | |
| download | rust-c3394b3eaa0f6fa135ddca67c3cabb3e9cd41a04.tar.gz rust-c3394b3eaa0f6fa135ddca67c3cabb3e9cd41a04.zip | |
Fix #107910, Shorten backtraces in ICEs
Diffstat (limited to 'library/std/src/sys_common/backtrace.rs')
| -rw-r--r-- | library/std/src/sys_common/backtrace.rs | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/library/std/src/sys_common/backtrace.rs b/library/std/src/sys_common/backtrace.rs index 8752f46ff81..6f020940df1 100644 --- a/library/std/src/sys_common/backtrace.rs +++ b/library/std/src/sys_common/backtrace.rs @@ -68,13 +68,17 @@ unsafe fn _print_fmt(fmt: &mut fmt::Formatter<'_>, print_fmt: PrintFmt) -> fmt:: } let mut hit = false; - let mut stop = false; backtrace_rs::resolve_frame_unsynchronized(frame, |symbol| { hit = true; + + // Any frames between `__rust_begin_short_backtrace` and `__rust_end_short_backtrace` + // are omitted from the backtrace in short mode, `__rust_end_short_backtrace` will be + // called before the panic hook, so we won't ignore any frames if there is no + // invoke of `__rust_begin_short_backtrace`. if print_fmt == PrintFmt::Short { if let Some(sym) = symbol.name().and_then(|s| s.as_str()) { if start && sym.contains("__rust_begin_short_backtrace") { - stop = true; + start = false; return; } if sym.contains("__rust_end_short_backtrace") { @@ -88,9 +92,6 @@ unsafe fn _print_fmt(fmt: &mut fmt::Formatter<'_>, print_fmt: PrintFmt) -> fmt:: res = bt_fmt.frame().symbol(frame, symbol); } }); - if stop { - return false; - } #[cfg(target_os = "nto")] if libc::__my_thread_exit as *mut libc::c_void == frame.ip() { if !hit && start { |
