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

View File

@ -1,7 +1,7 @@
#![cfg_attr(test, allow(dead_code))] #![cfg_attr(test, allow(dead_code))]
use crate::sys::c; use crate::sys::c;
use crate::sys_common::util::report_overflow; use crate::thread;
pub struct Handler; pub struct Handler;
@ -24,7 +24,10 @@ extern "system" fn vectored_handler(ExceptionInfo: *mut c::EXCEPTION_POINTERS) -
let code = rec.ExceptionCode; let code = rec.ExceptionCode;
if code == c::EXCEPTION_STACK_OVERFLOW { 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 c::EXCEPTION_CONTINUE_SEARCH
} }

View File

@ -1,18 +1,9 @@
use crate::fmt; use crate::fmt;
use crate::io::prelude::*; use crate::io::prelude::*;
use crate::sys::stdio::panic_output; use crate::sys::stdio::panic_output;
use crate::thread;
pub fn dumb_print(args: fmt::Arguments<'_>) { pub fn dumb_print(args: fmt::Arguments<'_>) {
if let Some(mut out) = panic_output() { if let Some(mut out) = panic_output() {
let _ = out.write_fmt(args); 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>")
));
}