Display error details when a mmap call fails

This commit is contained in:
Yuki Okushi 2021-03-17 11:33:07 +09:00
parent f5d8117c33
commit f414c33e5e
2 changed files with 6 additions and 4 deletions

View File

@ -39,6 +39,7 @@ impl Drop for Handler {
))] ))]
mod imp { mod imp {
use super::Handler; use super::Handler;
use crate::io;
use crate::mem; use crate::mem;
use crate::ptr; use crate::ptr;
@ -149,11 +150,11 @@ mod imp {
0, 0,
); );
if stackp == MAP_FAILED { if stackp == MAP_FAILED {
panic!("failed to allocate an alternative stack"); panic!("failed to allocate an alternative stack: {}", io::Error::last_os_error());
} }
let guard_result = libc::mprotect(stackp, page_size(), PROT_NONE); let guard_result = libc::mprotect(stackp, page_size(), PROT_NONE);
if guard_result != 0 { if guard_result != 0 {
panic!("failed to set up alternative stack guard page"); panic!("failed to set up alternative stack guard page: {}", io::Error::last_os_error());
} }
stackp.add(page_size()) stackp.add(page_size())
} }

View File

@ -231,6 +231,7 @@ pub mod guard {
use libc::{mmap, mprotect}; use libc::{mmap, mprotect};
use libc::{MAP_ANON, MAP_FAILED, MAP_FIXED, MAP_PRIVATE, PROT_NONE, PROT_READ, PROT_WRITE}; use libc::{MAP_ANON, MAP_FAILED, MAP_FIXED, MAP_PRIVATE, PROT_NONE, PROT_READ, PROT_WRITE};
use crate::io;
use crate::ops::Range; use crate::ops::Range;
use crate::sync::atomic::{AtomicUsize, Ordering}; use crate::sync::atomic::{AtomicUsize, Ordering};
use crate::sys::os; use crate::sys::os;
@ -361,12 +362,12 @@ pub mod guard {
0, 0,
); );
if result != stackaddr || result == MAP_FAILED { if result != stackaddr || result == MAP_FAILED {
panic!("failed to allocate a guard page"); panic!("failed to allocate a guard page: {}", io::Error::last_os_error());
} }
let result = mprotect(stackaddr, page_size, PROT_NONE); let result = mprotect(stackaddr, page_size, PROT_NONE);
if result != 0 { if result != 0 {
panic!("failed to protect the guard page"); panic!("failed to protect the guard page: {}", io::Error::last_os_error());
} }
let guardaddr = stackaddr as usize; let guardaddr = stackaddr as usize;