diff --git a/include/features.h b/include/features.h
new file mode 100644
index 0000000000000000000000000000000000000000..7fbdd2dcdffd08146cea346911bde37286f601d7
--- /dev/null
+++ b/include/features.h
@@ -0,0 +1,28 @@
+/*
+ * MIT License
+ * Copyright (c) 2020 Rich Felker musl-libc
+ */
+
+#ifndef _FEATURES_H
+#define _FEATURES_H
+
+#if __STDC_VERSION__ >= 199901L
+#define __restrict restrict
+#elif !defined(__GNUC__)
+#define __restrict
+#endif
+
+#if __STDC_VERSION__ >= 199901L || defined(__cplusplus)
+#define __inline inline
+#elif !defined(__GNUC__)
+#define __inline
+#endif
+
+#if __STDC_VERSION__ >= 201112L
+#elif defined(__GNUC__)
+#define _Noreturn __attribute__((__noreturn__))
+#else
+#define _Noreturn
+#endif
+
+#endif
diff --git a/include/stddef.h b/include/stddef.h
index d9fbabd93293b25eb60d64d454974bfbf6b2a6ea..1ee56ff6f312302930489d2e6d07e653cf97727c 100644
--- a/include/stddef.h
+++ b/include/stddef.h
@@ -4,12 +4,20 @@
 
 #define NULL 0
 
-typedef signed long long ptrdiff_t;
+#ifndef __PTRDIFF_TYPE__
+#define __PTRDIFF_TYPE__ long int
+#endif
+typedef __PTRDIFF_TYPE__ ptrdiff_t;
 
+#ifndef __cplusplus
 typedef int32_t wchar_t;
+#endif /* #ifndef __cplusplus */
 typedef int32_t wint_t;
 
-typedef unsigned long long size_t;
+
+typedef long unsigned int size_t;
+
+typedef struct { long long __ll; long double __ld; } max_align_t;
 
 #define offsetof(type, member) __builtin_offsetof(type, member)