summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Barber <smbarber@chromium.org>2018-11-05 16:02:26 -0800
committerStephen Barber <smbarber@chromium.org>2018-11-06 16:51:20 -0800
commit60ab3041a1ba8079ed27c767728a18c003eee375 (patch)
treeff4fe0915a4f87246a6d03457f11c348983c5778
parent9c5e70ae306463a23ec02179ac2c9fe05c3fb44e (diff)
downloadrust-libc-60ab3041a1ba8079ed27c767728a18c003eee375.tar.gz
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.
-rw-r--r--libc-test/build.rs8
-rw-r--r--src/fuchsia/mod.rs7
-rw-r--r--src/unix/notbsd/android/mod.rs14
-rw-r--r--src/unix/notbsd/emscripten.rs7
-rw-r--r--src/unix/notbsd/linux/mod.rs7
-rw-r--r--src/unix/uclibc/mod.rs7
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 {