diff --git a/src/header/sys_epoll/cbindgen.toml b/src/header/sys_epoll/cbindgen.toml
index 45aac6c16e7792574f92ce1e4ccf3f9d5cb95a1b..af85975df7fb00a5ab754827b360d4aa897311de 100644
--- a/src/header/sys_epoll/cbindgen.toml
+++ b/src/header/sys_epoll/cbindgen.toml
@@ -8,6 +8,7 @@ cpp_compat = true
 [defines]
 "target_os=linux" = "__linux__"
 "target_os=redox" = "__redox__"
+"target_pointer_width=64" = "__LP64__"
 
 [enum]
 prefix_with_name = true
diff --git a/src/header/sys_epoll/mod.rs b/src/header/sys_epoll/mod.rs
index 3cae6cfa684d1469de30fe6e2befcc4610cfd67f..831d6dca03addf51b194c1134e721b9a289c783e 100644
--- a/src/header/sys_epoll/mod.rs
+++ b/src/header/sys_epoll/mod.rs
@@ -35,6 +35,7 @@ impl Default for epoll_data {
     }
 }
 
+#[cfg(all(target_os = "redox", target_pointer_width = "64"))]
 #[repr(C)]
 #[derive(Clone, Copy, Default)]
 // This will match in size with syscall::Event (24 bytes on 64-bit
@@ -45,10 +46,17 @@ pub struct epoll_event {
     // 4 automatic alignment bytes
     pub data: epoll_data, // 8 bytes
 
-    #[cfg(target_os = "redox")]
     pub _pad: u64, // 8 bytes
 }
 
+#[cfg(not(all(target_os = "redox", target_pointer_width = "64")))]
+#[repr(C)]
+#[derive(Clone, Copy, Default)]
+pub struct epoll_event {
+    pub events: u32,
+    pub data: epoll_data,
+}
+
 #[no_mangle]
 pub extern "C" fn epoll_create(_size: c_int) -> c_int {
     epoll_create1(0)