1
Fork 0

Rollup merge of #89068 - bjorn3:restructure_rt2, r=joshtriplett

Restructure std::rt (part 2)

A couple more cleanups on top of https://github.com/rust-lang/rust/pull/89011

Blocked on #89011
This commit is contained in:
Matthias Krüger 2021-10-31 13:20:04 +01:00 committed by GitHub
commit 6c5aa765fb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 13 additions and 16 deletions

View file

@ -299,9 +299,7 @@ mod util;
const DEFAULT_BUF_SIZE: usize = crate::sys_common::io::DEFAULT_BUF_SIZE; const DEFAULT_BUF_SIZE: usize = crate::sys_common::io::DEFAULT_BUF_SIZE;
pub(crate) fn cleanup() { pub(crate) use stdio::cleanup;
stdio::cleanup()
}
struct Guard<'a> { struct Guard<'a> {
buf: &'a mut Vec<u8>, buf: &'a mut Vec<u8>,

View file

@ -128,8 +128,7 @@ fn lang_start_internal(
let ret_code = panic::catch_unwind(move || panic::catch_unwind(main).unwrap_or(101) as isize) let ret_code = panic::catch_unwind(move || panic::catch_unwind(main).unwrap_or(101) as isize)
.map_err(move |e| { .map_err(move |e| {
mem::forget(e); mem::forget(e);
rtprintpanic!("drop of the panic payload panicked"); rtabort!("drop of the panic payload panicked");
sys::abort_internal()
}); });
panic::catch_unwind(cleanup).map_err(rt_abort)?; panic::catch_unwind(cleanup).map_err(rt_abort)?;
ret_code ret_code

View file

@ -6,7 +6,7 @@ pub use self::imp::cleanup;
pub use self::imp::init; pub use self::imp::init;
pub struct Handler { pub struct Handler {
_data: *mut libc::c_void, data: *mut libc::c_void,
} }
impl Handler { impl Handler {
@ -15,14 +15,14 @@ impl Handler {
} }
fn null() -> Handler { fn null() -> Handler {
Handler { _data: crate::ptr::null_mut() } Handler { data: crate::ptr::null_mut() }
} }
} }
impl Drop for Handler { impl Drop for Handler {
fn drop(&mut self) { fn drop(&mut self) {
unsafe { unsafe {
drop_handler(self); drop_handler(self.data);
} }
} }
} }
@ -134,12 +134,12 @@ mod imp {
} }
let handler = make_handler(); let handler = make_handler();
MAIN_ALTSTACK.store(handler._data, Ordering::Relaxed); MAIN_ALTSTACK.store(handler.data, Ordering::Relaxed);
mem::forget(handler); mem::forget(handler);
} }
pub unsafe fn cleanup() { 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 { unsafe fn get_stackp() -> *mut libc::c_void {
@ -176,14 +176,14 @@ mod imp {
if stack.ss_flags & SS_DISABLE != 0 { if stack.ss_flags & SS_DISABLE != 0 {
stack = get_stack(); stack = get_stack();
sigaltstack(&stack, ptr::null_mut()); 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 { } else {
Handler::null() Handler::null()
} }
} }
pub unsafe fn drop_handler(handler: &mut Handler) { pub unsafe fn drop_handler(data: *mut libc::c_void) {
if !handler._data.is_null() { if !data.is_null() {
let stack = libc::stack_t { let stack = libc::stack_t {
ss_sp: ptr::null_mut(), ss_sp: ptr::null_mut(),
ss_flags: SS_DISABLE, ss_flags: SS_DISABLE,
@ -196,7 +196,7 @@ mod imp {
sigaltstack(&stack, ptr::null_mut()); sigaltstack(&stack, ptr::null_mut());
// We know from `get_stackp` that the alternate stack we installed is part of a mapping // 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. // 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());
} }
} }
} }
@ -220,5 +220,5 @@ mod imp {
super::Handler::null() super::Handler::null()
} }
pub unsafe fn drop_handler(_handler: &mut super::Handler) {} pub unsafe fn drop_handler(_data: *mut libc::c_void) {}
} }

View file

@ -25,6 +25,6 @@ fn main() {
println!("{:#?}", output); println!("{:#?}", output);
let stderr = std::str::from_utf8(&output.stderr); let stderr = std::str::from_utf8(&output.stderr);
assert!(stderr.map(|v| { 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)); }).unwrap_or(false));
} }