Replace sys_common::util::report_overflow
with rterr!
This commit is contained in:
parent
b987f74f05
commit
236705f3c3
@ -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.
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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>")
|
||||
));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user