From 60ab3041a1ba8079ed27c767728a18c003eee375 Mon Sep 17 00:00:00 2001 From: Stephen Barber Date: Mon, 5 Nov 2018 16:02:26 -0800 Subject: Add support for SIGSYS in signalfd Linux 4.18 added support for SIGSYS info in signalfd. Add the new fields to signalfd_siginfo. While the kernel has support for these new fields now, no libc has shipped a release with the new signalfd fields. --- libc-test/build.rs | 8 +++++++- src/fuchsia/mod.rs | 7 ++++++- src/unix/notbsd/android/mod.rs | 14 +++++++++----- src/unix/notbsd/emscripten.rs | 7 ++++++- src/unix/notbsd/linux/mod.rs | 7 ++++++- src/unix/uclibc/mod.rs | 7 ++++++- 6 files changed, 40 insertions(+), 10 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index be148b83fb..6723b2723a 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -841,7 +841,13 @@ fn main() { // musl seems to define this as an *anonymous* bitfield (musl && struct_ == "statvfs" && field == "__f_unused") || // sigev_notify_thread_id is actually part of a sigev_un union - (struct_ == "sigevent" && field == "sigev_notify_thread_id") + (struct_ == "sigevent" && field == "sigev_notify_thread_id") || + // signalfd had SIGSYS fields added in Linux 4.18, but no libc release has them yet. + (struct_ == "signalfd_siginfo" && (field == "ssi_addr_lsb" || + field == "_pad2" || + field == "ssi_syscall" || + field == "ssi_call_addr" || + field == "ssi_arch")) }); cfg.fn_cname(move |name, cname| { diff --git a/src/fuchsia/mod.rs b/src/fuchsia/mod.rs index 0b93d84af3..7c1d1a4976 100644 --- a/src/fuchsia/mod.rs +++ b/src/fuchsia/mod.rs @@ -685,7 +685,12 @@ s! { pub ssi_utime: ::uint64_t, pub ssi_stime: ::uint64_t, pub ssi_addr: ::uint64_t, - _pad: [::uint8_t; 48], + pub ssi_addr_lsb: ::uint16_t, + _pad2: ::uint16_t, + pub ssi_syscall: ::int32_t, + pub ssi_call_addr: ::uint64_t, + pub ssi_arch: ::uint32_t, + _pad: [::uint8_t; 28], } pub struct itimerspec { diff --git a/src/unix/notbsd/android/mod.rs b/src/unix/notbsd/android/mod.rs index 5b750b2b11..6cd4e5c952 100644 --- a/src/unix/notbsd/android/mod.rs +++ b/src/unix/notbsd/android/mod.rs @@ -172,12 +172,16 @@ s! { pub ssi_trapno: ::uint32_t, pub ssi_status: ::int32_t, pub ssi_int: ::int32_t, - pub ssi_ptr: ::c_ulonglong, - pub ssi_utime: ::c_ulonglong, - pub ssi_stime: ::c_ulonglong, - pub ssi_addr: ::c_ulonglong, + pub ssi_ptr: ::uint64_t, + pub ssi_utime: ::uint64_t, + pub ssi_stime: ::uint64_t, + pub ssi_addr: ::uint64_t, pub ssi_addr_lsb: ::uint16_t, - _pad: [::uint8_t; 46], + _pad2: ::uint16_t, + pub ssi_syscall: ::int32_t, + pub ssi_call_addr: ::uint64_t, + pub ssi_arch: ::uint32_t, + _pad: [::uint8_t; 28], } pub struct ucred { diff --git a/src/unix/notbsd/emscripten.rs b/src/unix/notbsd/emscripten.rs index b30fee3232..e680032cc7 100644 --- a/src/unix/notbsd/emscripten.rs +++ b/src/unix/notbsd/emscripten.rs @@ -184,7 +184,12 @@ s! { pub ssi_utime: ::uint64_t, pub ssi_stime: ::uint64_t, pub ssi_addr: ::uint64_t, - _pad: [::uint8_t; 48], + pub ssi_addr_lsb: ::uint16_t, + _pad2: ::uint16_t, + pub ssi_syscall: ::int32_t, + pub ssi_call_addr: ::uint64_t, + pub ssi_arch: ::uint32_t, + _pad: [::uint8_t; 28], } pub struct fsid_t { diff --git a/src/unix/notbsd/linux/mod.rs b/src/unix/notbsd/linux/mod.rs index 1e1a66709c..a47e809c24 100644 --- a/src/unix/notbsd/linux/mod.rs +++ b/src/unix/notbsd/linux/mod.rs @@ -270,7 +270,12 @@ s! { pub ssi_utime: ::uint64_t, pub ssi_stime: ::uint64_t, pub ssi_addr: ::uint64_t, - _pad: [::uint8_t; 48], + pub ssi_addr_lsb: ::uint16_t, + _pad2: ::uint16_t, + pub ssi_syscall: ::int32_t, + pub ssi_call_addr: ::uint64_t, + pub ssi_arch: ::uint32_t, + _pad: [::uint8_t; 28], } pub struct itimerspec { diff --git a/src/unix/uclibc/mod.rs b/src/unix/uclibc/mod.rs index 5a947fddd6..03a8594f4f 100644 --- a/src/unix/uclibc/mod.rs +++ b/src/unix/uclibc/mod.rs @@ -391,7 +391,12 @@ s! { pub ssi_utime: ::uint64_t, pub ssi_stime: ::uint64_t, pub ssi_addr: ::uint64_t, - _pad: [::uint8_t; 48], + pub ssi_addr_lsb: ::uint16_t, + _pad2: ::uint16_t, + pub ssi_syscall: ::int32_t, + pub ssi_call_addr: ::uint64_t, + pub ssi_arch: ::uint32_t, + _pad: [::uint8_t; 28], } pub struct fsid_t { -- cgit v1.2.1