diff --git a/src/dox.rs b/src/dox.rs
new file mode 100644
index 0000000..92e3eda
--- /dev/null
+++ b/src/dox.rs
@@ -0,0 +1,105 @@
+pub use self::imp::*;
+
+#[cfg(not(dox))]
+mod imp {
+    pub use std::option::Option;
+    pub use std::clone::Clone;
+    pub use std::marker::Copy;
+}
+
+#[cfg(dox)]
+mod imp {
+    pub enum Option<T> {
+        Some(T),
+        None,
+    }
+
+    pub trait Clone {
+        fn clone(&self) -> Self;
+    }
+
+    #[lang = "copy"]
+    pub trait Copy {}
+
+    #[lang = "sized"]
+    pub trait Sized {}
+
+    macro_rules! each_int {
+        ($mac:ident) => (
+            $mac!(u8);
+            $mac!(u16);
+            $mac!(u32);
+            $mac!(u64);
+            $mac!(usize);
+            $mac!(i8);
+            $mac!(i16);
+            $mac!(i32);
+            $mac!(i64);
+            $mac!(isize);
+        )
+    }
+
+    #[lang = "shl"]
+    pub trait Shl<RHS> {
+        type Output;
+        fn shl(self, rhs: RHS) -> Self::Output;
+    }
+
+    macro_rules! impl_shl {
+        ($($i:ident)*) => ($(
+            impl Shl<$i> for $i {
+                type Output = $i;
+                fn shl(self, rhs: $i) -> $i { self << rhs }
+            }
+        )*)
+    }
+    each_int!(impl_shl);
+
+    #[lang = "mul"]
+    pub trait Mul<RHS=Self> {
+        type Output;
+        fn mul(self, rhs: RHS) -> Self::Output;
+    }
+
+    macro_rules! impl_mul {
+        ($($i:ident)*) => ($(
+            impl Mul for $i {
+                type Output = $i;
+                fn mul(self, rhs: $i) -> $i { self * rhs }
+            }
+        )*)
+    }
+    each_int!(impl_mul);
+
+    #[lang = "sub"]
+    pub trait Sub<RHS=Self> {
+        type Output;
+        fn sub(self, rhs: RHS) -> Self::Output;
+    }
+
+    macro_rules! impl_sub {
+        ($($i:ident)*) => ($(
+            impl Sub for $i {
+                type Output = $i;
+                fn sub(self, rhs: $i) -> $i { self - rhs }
+            }
+        )*)
+    }
+    each_int!(impl_sub);
+
+    #[lang = "bitor"]
+    pub trait Bitor<RHS=Self> {
+        type Output;
+        fn bitor(self, rhs: RHS) -> Self::Output;
+    }
+
+    macro_rules! impl_bitor {
+        ($($i:ident)*) => ($(
+            impl Bitor for $i {
+                type Output = $i;
+                fn bitor(self, rhs: $i) -> $i { self | rhs }
+            }
+        )*)
+    }
+    each_int!(impl_bitor);
+}
diff --git a/src/lib.rs b/src/lib.rs
index ded1683..cf2ba52 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -9,8 +9,16 @@
 // except according to those terms.
 
 #![allow(bad_style, raw_pointer_derive)]
+#![cfg_attr(dox, feature(no_core, lang_items))]
+#![cfg_attr(dox, no_core)]
+#![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
+       html_favicon_url = "https://doc.rust-lang.org/favicon.ico")]
+
+#![cfg_attr(all(target_os = "linux", target_arch = "x86_64"),
+            doc(html_root_url = "http://alexcrichton.com/libc/x86_64-unknown-linux-gnu"))]
 
 #[macro_use] mod macros;
+mod dox;
 
 #[repr(u8)]
 pub enum c_void {
diff --git a/src/macros.rs b/src/macros.rs
index 0c58de5..bb5d9ee 100644
--- a/src/macros.rs
+++ b/src/macros.rs
@@ -40,8 +40,8 @@
             #[repr(C)]
             pub struct $i { $($field)* }
         }
-        impl Copy for $i {}
-        impl Clone for $i {
+        impl ::dox::Copy for $i {}
+        impl ::dox::Clone for $i {
             fn clone(&self) -> $i { *self }
         }
     )*)
diff --git a/src/unix/mod.rs b/src/unix/mod.rs
index a96361a..f05e633 100644
--- a/src/unix/mod.rs
+++ b/src/unix/mod.rs
@@ -316,8 +316,8 @@
     pub fn freeifaddrs(ifa: *mut ifaddrs);
     pub fn glob(pattern: *const c_char,
                 flags: c_int,
-                errfunc: Option<extern "C" fn(epath: *const c_char,
-                                                  errno: c_int) -> c_int>,
+                errfunc: ::dox::Option<extern "C" fn(epath: *const c_char,
+                                                     errno: c_int) -> c_int>,
                 pglob: *mut glob_t);
     pub fn globfree(pglob: *mut glob_t);
 
