From 17f418155e0bdb84c89b1c28eb6c86503d4cbefd Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Sat, 18 Sep 2021 14:47:57 +0200 Subject: [PATCH 1/4] Use rtabort! instead of rtprintpanic! + abort_internal --- library/std/src/rt.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/library/std/src/rt.rs b/library/std/src/rt.rs index 4d72aff011684..88ee6f9b12910 100644 --- a/library/std/src/rt.rs +++ b/library/std/src/rt.rs @@ -128,8 +128,7 @@ fn lang_start_internal( let ret_code = panic::catch_unwind(move || panic::catch_unwind(main).unwrap_or(101) as isize) .map_err(move |e| { mem::forget(e); - rtprintpanic!("drop of the panic payload panicked"); - sys::abort_internal() + rtabort!("drop of the panic payload panicked"); }); panic::catch_unwind(cleanup).map_err(rt_abort)?; ret_code From bf9e6e5598fb714a2b2ba971f8a7404a877d7568 Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Sat, 18 Sep 2021 14:48:32 +0200 Subject: [PATCH 2/4] Re-export io::stdio::cleanup instead of wrap it --- library/std/src/io/mod.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/library/std/src/io/mod.rs b/library/std/src/io/mod.rs index f8ebbe1cba721..399445b121fcc 100644 --- a/library/std/src/io/mod.rs +++ b/library/std/src/io/mod.rs @@ -299,9 +299,7 @@ mod util; const DEFAULT_BUF_SIZE: usize = crate::sys_common::io::DEFAULT_BUF_SIZE; -pub(crate) fn cleanup() { - stdio::cleanup() -} +pub(crate) use stdio::cleanup; struct Guard<'a> { buf: &'a mut Vec, From d2c83774d333a94bde537e049d05a98c954857ee Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Fri, 8 Oct 2021 13:29:03 +0200 Subject: [PATCH 3/4] Let stack_overflow::imp::cleanup call drop_handler directly instead of through the Drop impl for Handler --- library/std/src/sys/unix/stack_overflow.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/library/std/src/sys/unix/stack_overflow.rs b/library/std/src/sys/unix/stack_overflow.rs index e8747e39bcbf4..fa3791566b72c 100644 --- a/library/std/src/sys/unix/stack_overflow.rs +++ b/library/std/src/sys/unix/stack_overflow.rs @@ -6,7 +6,7 @@ pub use self::imp::cleanup; pub use self::imp::init; pub struct Handler { - _data: *mut libc::c_void, + data: *mut libc::c_void, } impl Handler { @@ -15,14 +15,14 @@ impl Handler { } fn null() -> Handler { - Handler { _data: crate::ptr::null_mut() } + Handler { data: crate::ptr::null_mut() } } } impl Drop for Handler { fn drop(&mut self) { unsafe { - drop_handler(self); + drop_handler(self.data); } } } @@ -134,12 +134,12 @@ mod imp { } let handler = make_handler(); - MAIN_ALTSTACK.store(handler._data, Ordering::Relaxed); + MAIN_ALTSTACK.store(handler.data, Ordering::Relaxed); mem::forget(handler); } pub unsafe fn cleanup() { - Handler { _data: MAIN_ALTSTACK.load(Ordering::Relaxed) }; + drop_handler(MAIN_ALTSTACK.load(Ordering::Relaxed)); } unsafe fn get_stackp() -> *mut libc::c_void { @@ -175,14 +175,14 @@ mod imp { if stack.ss_flags & SS_DISABLE != 0 { stack = get_stack(); sigaltstack(&stack, ptr::null_mut()); - Handler { _data: stack.ss_sp as *mut libc::c_void } + Handler { data: stack.ss_sp as *mut libc::c_void } } else { Handler::null() } } - pub unsafe fn drop_handler(handler: &mut Handler) { - if !handler._data.is_null() { + pub unsafe fn drop_handler(data: *mut libc::c_void) { + if !data.is_null() { let stack = libc::stack_t { ss_sp: ptr::null_mut(), ss_flags: SS_DISABLE, @@ -195,7 +195,7 @@ mod imp { sigaltstack(&stack, ptr::null_mut()); // We know from `get_stackp` that the alternate stack we installed is part of a mapping // that started one page earlier, so walk back a page and unmap from there. - munmap(handler._data.sub(page_size()), SIGSTKSZ + page_size()); + munmap(data.sub(page_size()), SIGSTKSZ + page_size()); } } } @@ -219,5 +219,5 @@ mod imp { super::Handler::null() } - pub unsafe fn drop_handler(_handler: &mut super::Handler) {} + pub unsafe fn drop_handler(_data: *mut libc::c_void) {} } From 0cc4cce057c0272e1997fc1d684c0b5d417eac4d Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Fri, 8 Oct 2021 13:56:47 +0200 Subject: [PATCH 4/4] Update test expectation --- src/test/ui/rt-explody-panic-payloads.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/ui/rt-explody-panic-payloads.rs b/src/test/ui/rt-explody-panic-payloads.rs index 1d3a2ff82845e..dc193582c6a50 100644 --- a/src/test/ui/rt-explody-panic-payloads.rs +++ b/src/test/ui/rt-explody-panic-payloads.rs @@ -25,6 +25,6 @@ fn main() { println!("{:#?}", output); let stderr = std::str::from_utf8(&output.stderr); assert!(stderr.map(|v| { - v.ends_with("drop of the panic payload panicked") + v.ends_with("fatal runtime error: drop of the panic payload panicked\n") }).unwrap_or(false)); }