Replace sys_common::util::report_overflow with rterr!

This commit is contained in:
Christiaan Dirkx 2021-04-29 16:05:10 +02:00
parent b987f74f05
commit 236705f3c3
3 changed files with 10 additions and 14 deletions

View file

@ -42,6 +42,7 @@ mod imp {
use crate::io;
use crate::mem;
use crate::ptr;
use crate::thread;
use libc::MAP_FAILED;
use libc::{mmap, munmap};
@ -95,15 +96,16 @@ mod imp {
info: *mut libc::siginfo_t,
_data: *mut libc::c_void,
) {
use crate::sys_common::util::report_overflow;
let guard = thread_info::stack_guard().unwrap_or(0..0);
let addr = siginfo_si_addr(info);
// If the faulting address is within the guard page, then we print a
// message saying so and abort.
if guard.start <= addr && addr < guard.end {
report_overflow();
rterr!(
"\nthread '{}' has overflowed its stack\n",
thread::current().name().unwrap_or("<unknown>")
);
rtabort!("stack overflow");
} else {
// Unregister ourselves by reverting back to the default behavior.

View file

@ -1,7 +1,7 @@
#![cfg_attr(test, allow(dead_code))]
use crate::sys::c;
use crate::sys_common::util::report_overflow;
use crate::thread;
pub struct Handler;
@ -24,7 +24,10 @@ extern "system" fn vectored_handler(ExceptionInfo: *mut c::EXCEPTION_POINTERS) -
let code = rec.ExceptionCode;
if code == c::EXCEPTION_STACK_OVERFLOW {
report_overflow();
rterr!(
"\nthread '{}' has overflowed its stack\n",
thread::current().name().unwrap_or("<unknown>")
);
}
c::EXCEPTION_CONTINUE_SEARCH
}

View file

@ -1,18 +1,9 @@
use crate::fmt;
use crate::io::prelude::*;
use crate::sys::stdio::panic_output;
use crate::thread;
pub fn dumb_print(args: fmt::Arguments<'_>) {
if let Some(mut out) = panic_output() {
let _ = out.write_fmt(args);
}
}
#[allow(dead_code)] // stack overflow detection not enabled on all platforms
pub unsafe fn report_overflow() {
dumb_print(format_args!(
"\nthread '{}' has overflowed its stack\n",
thread::current().name().unwrap_or("<unknown>")
));
}