Auto merge of #2837 - LegNeato:sigrtmin, r=saethlin

Add shim for SIGRTMIN

Fixes https://github.com/rust-lang/miri/issues/2832.
This commit is contained in:
bors 2023-04-11 14:30:30 +00:00
commit 93a05753cb
3 changed files with 33 additions and 2 deletions

View File

@ -32,8 +32,14 @@ use crate::{
*,
};
/// The number of the available real-time signal with the lowest priority.
/// Dummy constant related to epoll, must be between 32 and 64.
/// First real-time signal.
/// `signal(7)` says this must be between 32 and 64 and specifies 34 or 35
/// as typical values.
pub const SIGRTMIN: i32 = 34;
/// Last real-time signal.
/// `signal(7)` says it must be between 32 and 64 and specifies
/// `SIGRTMAX` - `SIGRTMIN` >= 8 (which is the value of `_POSIX_RTSIG_MAX`)
pub const SIGRTMAX: i32 = 42;
/// Extra data stored with each stack frame

View File

@ -2,6 +2,7 @@ use rustc_span::Symbol;
use rustc_target::spec::abi::Abi;
use crate::machine::SIGRTMAX;
use crate::machine::SIGRTMIN;
use crate::*;
use shims::foreign_items::EmulateByNameResult;
use shims::unix::fs::EvalContextExt as _;
@ -74,6 +75,11 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> {
let result = this.socketpair(domain, type_, protocol, sv)?;
this.write_scalar(result, dest)?;
}
"__libc_current_sigrtmin" => {
let [] = this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?;
this.write_scalar(Scalar::from_i32(SIGRTMIN), dest)?;
}
"__libc_current_sigrtmax" => {
let [] = this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?;

View File

@ -302,6 +302,24 @@ fn test_posix_mkstemp() {
}
}
#[cfg(target_os = "linux")]
fn test_sigrt() {
let min = libc::SIGRTMIN();
let max = libc::SIGRTMAX();
// "The Linux kernel supports a range of 33 different real-time
// signals, numbered 32 to 64"
assert!(min >= 32);
assert!(max >= 32);
assert!(min <= 64);
assert!(max <= 64);
// "POSIX.1-2001 requires that an implementation support at least
// _POSIX_RTSIG_MAX (8) real-time signals."
assert!(min < max);
assert!(max - min >= 8)
}
fn main() {
test_posix_gettimeofday();
test_posix_mkstemp();
@ -319,5 +337,6 @@ fn main() {
{
test_posix_fadvise();
test_sync_file_range();
test_sigrt();
}
}