From 225583230f1d73982092048e2dd8686a4bd2cb74 Mon Sep 17 00:00:00 2001 From: Xavier L'Heureux Date: Sun, 11 Aug 2019 18:08:11 -0400 Subject: [PATCH] Test --- a.out | Bin 0 -> 16896 bytes src/header/signal/mod.rs | 19 ++++++++++++------- src/platform/linux/signal.rs | 1 + src/platform/redox/signal.rs | 8 +++++++- tests/expected/signal.stderr | 0 tests/expected/signal.stdout | 3 +++ tests/signal.c | 6 +++++- 7 files changed, 28 insertions(+), 9 deletions(-) create mode 100755 a.out create mode 100644 tests/expected/signal.stderr create mode 100644 tests/expected/signal.stdout diff --git a/a.out b/a.out new file mode 100755 index 0000000000000000000000000000000000000000..adf85459c012415c6c41c9a396dc7059afc6598f GIT binary patch literal 16896 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, pub sa_mask: sigset_t, + pub sa_flags: c_ulong, + pub sa_restorer: Option, } #[repr(C)] @@ -93,7 +93,11 @@ pub unsafe extern "C" fn sigaction( } else { None }; - Sys::sigaction(sig, act_opt.map_or(ptr::null_mut(), |x| &x), oact) + println!("sig => {:?}", act_opt); + println!("osig => {:?}", (*oact)); + let out = Sys::sigaction(sig, act_opt.map_or(ptr::null_mut(), |x| &x), oact); + println!("aosig => {:?}", (*oact).sa_handler); + out } #[no_mangle] @@ -194,11 +198,12 @@ extern "C" { } #[no_mangle] -pub extern "C" fn signal(sig: c_int, func: extern "C" fn(c_int)) -> extern "C" fn(c_int) { +pub extern "C" fn signal(sig: c_int, func: Option) -> Option { + println!("{:?}", func); let sa = sigaction { sa_handler: func, sa_flags: SA_RESTART as c_ulong, - sa_restorer: __restore_rt, + sa_restorer: Some(__restore_rt), sa_mask: sigset_t::default(), }; let mut old_sa = unsafe { mem::uninitialized() }; diff --git a/src/platform/linux/signal.rs b/src/platform/linux/signal.rs index 6980dedcc0..469b881d66 100644 --- a/src/platform/linux/signal.rs +++ b/src/platform/linux/signal.rs @@ -36,6 +36,7 @@ impl PalSignal for Sys { } unsafe fn sigaction(sig: c_int, act: *const sigaction, oact: *mut sigaction) -> c_int { + println!("in: {:?}", (*act)); e(syscall!( RT_SIGACTION, sig, diff --git a/src/platform/redox/signal.rs b/src/platform/redox/signal.rs index 8a275af3b8..893f38c45d 100644 --- a/src/platform/redox/signal.rs +++ b/src/platform/redox/signal.rs @@ -110,8 +110,10 @@ impl PalSignal for Sys { None } else { let m = (*act).sa_mask; + let sa_handler = mem::transmute((*act).sa_handler); + println!("signal called with {:x}", unsafe { mem::transmute::<_, usize>(sa_handler) }); Some(syscall::SigAction { - sa_handler: mem::transmute((*act).sa_handler), + sa_handler, sa_mask: [m as u64, 0], sa_flags: syscall::SigActionFlags::from_bits((*act).sa_flags as usize) .expect("sigaction: invalid bit pattern"), @@ -122,17 +124,21 @@ impl PalSignal for Sys { } else { Some(syscall::SigAction::default()) }; + println!("before : {:?}", new_opt); + println!("before old : {:?}", old_opt); let ret = e(syscall::sigaction( sig as usize, new_opt.as_ref(), old_opt.as_mut(), )) as c_int; + println!("after : {:?}", old_opt); if let Some(old) = old_opt { (*oact).sa_handler = mem::transmute(old.sa_handler); let m = old.sa_mask; (*oact).sa_mask = m[0] as c_ulong; (*oact).sa_flags = old.sa_flags.bits() as c_ulong; } + println!("after : {:?}", oact); ret } diff --git a/tests/expected/signal.stderr b/tests/expected/signal.stderr new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/expected/signal.stdout b/tests/expected/signal.stdout new file mode 100644 index 0000000000..7d184e34c8 --- /dev/null +++ b/tests/expected/signal.stdout @@ -0,0 +1,3 @@ +Raising... +Signal handler called! +Raised. diff --git a/tests/signal.c b/tests/signal.c index b192ad397d..1176679e23 100644 --- a/tests/signal.c +++ b/tests/signal.c @@ -11,8 +11,12 @@ void handler(int sig) { } int main(void) { - void (*signal_status)(int) = signal(SIGUSR1, &handler); + printf("handler: %x\n", handler); + void (*signal_status)(int) = signal(SIGUSR1, handler); ERROR_IF(signal, signal_status, == SIG_ERR); + signal_status = signal(SIGUSR1, handler); + ERROR_IF(signal, signal_status, == SIG_ERR); + printf("out: %x\n", signal_status); puts("Raising...");