diff --git a/libc/include/pthread.h b/libc/include/pthread.h
index dbdee70..c5380be 100644
--- a/libc/include/pthread.h
+++ b/libc/include/pthread.h
@@ -25,6 +25,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  */
+
 #ifndef _PTHREAD_H_
 #define _PTHREAD_H_
 
@@ -34,12 +35,8 @@
 #include <limits.h>
 #include <sys/types.h>
 
-/*
- * Types
- */
-typedef struct
-{
-    int volatile value;
+typedef struct {
+  int volatile value;
 } pthread_mutex_t;
 
 #define  __PTHREAD_MUTEX_INIT_VALUE            0
@@ -61,241 +58,167 @@
     PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL
 };
 
-
-
-typedef struct
-{
-    int volatile value;
+typedef struct {
+  int volatile value;
 } pthread_cond_t;
 
-typedef struct
-{
-    uint32_t flags;
-    void * stack_base;
-    size_t stack_size;
-    size_t guard_size;
-    int32_t sched_policy;
-    int32_t sched_priority;
+#define PTHREAD_COND_INITIALIZER  {0}
+
+typedef struct {
+  uint32_t flags;
+  void* stack_base;
+  size_t stack_size;
+  size_t guard_size;
+  int32_t sched_policy;
+  int32_t sched_priority;
 } pthread_attr_t;
 
 typedef long pthread_mutexattr_t;
 typedef long pthread_condattr_t;
 
+typedef int pthread_rwlockattr_t;
+
+typedef struct {
+  pthread_mutex_t  lock;
+  pthread_cond_t   cond;
+  int              numLocks;
+  int              writerThreadId;
+  int              pendingReaders;
+  int              pendingWriters;
+  void*            reserved[4];  /* for future extensibility */
+} pthread_rwlock_t;
+
+#define PTHREAD_RWLOCK_INITIALIZER  { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0, 0, 0, { NULL, NULL, NULL, NULL } }
+
 typedef int pthread_key_t;
 typedef long pthread_t;
 
-typedef volatile int  pthread_once_t;
+typedef volatile int pthread_once_t;
 
-/*
- * Defines
- */
-#define PTHREAD_COND_INITIALIZER  {0}
+#define PTHREAD_ONCE_INIT    0
 
 #define PTHREAD_STACK_MIN (2 * PAGE_SIZE)
 
 #define PTHREAD_CREATE_DETACHED  0x00000001
 #define PTHREAD_CREATE_JOINABLE  0x00000000
 
-#define PTHREAD_ONCE_INIT    0
-
 #define PTHREAD_PROCESS_PRIVATE  0
 #define PTHREAD_PROCESS_SHARED   1
 
 #define PTHREAD_SCOPE_SYSTEM     0
 #define PTHREAD_SCOPE_PROCESS    1
 
-/*
- * Prototypes
- */
-#ifdef __cplusplus
-extern "C" {
-#endif
+__BEGIN_DECLS
 
-int pthread_attr_init(pthread_attr_t * attr);
-int pthread_attr_destroy(pthread_attr_t * attr);
+int pthread_atfork(void (*)(void), void (*)(void), void(*)(void));
 
-int pthread_attr_setdetachstate(pthread_attr_t * attr, int state);
-int pthread_attr_getdetachstate(pthread_attr_t const * attr, int * state);
+int pthread_attr_destroy(pthread_attr_t*) __nonnull((1));
+int pthread_attr_getdetachstate(const pthread_attr_t*, int*) __nonnull((1, 2));
+int pthread_attr_getguardsize(const pthread_attr_t*, size_t*) __nonnull((1, 2));
+int pthread_attr_getschedparam(const pthread_attr_t*, struct sched_param*) __nonnull((1, 2));
+int pthread_attr_getschedpolicy(const pthread_attr_t*, int*) __nonnull((1, 2));
+int pthread_attr_getscope(const pthread_attr_t*, int*) __nonnull((1, 2));
+int pthread_attr_getstack(const pthread_attr_t*, void**, size_t*) __nonnull((1, 2, 3));
+int pthread_attr_getstacksize(const pthread_attr_t*, size_t*) __nonnull((1, 2));
+int pthread_attr_init(pthread_attr_t*) __nonnull((1));
+int pthread_attr_setdetachstate(pthread_attr_t*, int) __nonnull((1));
+int pthread_attr_setguardsize(pthread_attr_t*, size_t) __nonnull((1));
+int pthread_attr_setschedparam(pthread_attr_t*, const struct sched_param*) __nonnull((1, 2));
+int pthread_attr_setschedpolicy(pthread_attr_t*, int) __nonnull((1));
+int pthread_attr_setscope(pthread_attr_t*, int) __nonnull((1));
+int pthread_attr_setstack(pthread_attr_t*, void*, size_t) __nonnull((1));
+int pthread_attr_setstacksize(pthread_attr_t * attr, size_t stack_size) __nonnull((1));
 
-int pthread_attr_setschedpolicy(pthread_attr_t * attr, int policy);
-int pthread_attr_getschedpolicy(pthread_attr_t const * attr, int * policy);
+int pthread_condattr_destroy(pthread_condattr_t*) __nonnull((1));
+int pthread_condattr_getpshared(const pthread_condattr_t*, int*) __nonnull((1, 2));
+int pthread_condattr_init(pthread_condattr_t*) __nonnull((1));
+int pthread_condattr_setpshared(pthread_condattr_t*, int) __nonnull((1));
 
-int pthread_attr_setschedparam(pthread_attr_t * attr, struct sched_param const * param);
-int pthread_attr_getschedparam(pthread_attr_t const * attr, struct sched_param * param);
+int pthread_cond_broadcast(pthread_cond_t*) __nonnull((1));
+int pthread_cond_destroy(pthread_cond_t*) __nonnull((1));
+int pthread_cond_init(pthread_cond_t*, const pthread_condattr_t*) __nonnull((1));
+int pthread_cond_signal(pthread_cond_t*) __nonnull((1));
+int pthread_cond_timedwait(pthread_cond_t*, pthread_mutex_t*, const struct timespec*) __nonnull((1, 2, 3));
+int pthread_cond_wait(pthread_cond_t*, pthread_mutex_t*) __nonnull((1, 2));
 
-int pthread_attr_setstacksize(pthread_attr_t * attr, size_t stack_size);
-int pthread_attr_getstacksize(pthread_attr_t const * attr, size_t * stack_size);
+int pthread_create(pthread_t*, pthread_attr_t const*, void *(*)(void*), void*) __nonnull((1, 3));
+int pthread_detach(pthread_t);
+void pthread_exit(void*) __noreturn;
 
-int pthread_attr_setstackaddr(pthread_attr_t * attr, void * stackaddr);
-int pthread_attr_getstackaddr(pthread_attr_t const * attr, void ** stackaddr);
+int pthread_equal(pthread_t, pthread_t);
 
-int pthread_attr_setstack(pthread_attr_t * attr, void * stackaddr, size_t stack_size);
-int pthread_attr_getstack(pthread_attr_t const * attr, void ** stackaddr, size_t * stack_size);
+int pthread_getattr_np(pthread_t, pthread_attr_t*) __nonnull((2));
 
-int pthread_attr_setguardsize(pthread_attr_t * attr, size_t guard_size);
-int pthread_attr_getguardsize(pthread_attr_t const * attr, size_t * guard_size);
+int pthread_getcpuclockid(pthread_t, clockid_t*) __nonnull((2));
 
-int pthread_attr_setscope(pthread_attr_t *attr, int  scope);
-int pthread_attr_getscope(pthread_attr_t const *attr);
+int pthread_getschedparam(pthread_t, int*, struct sched_param*) __nonnull((2, 3));
 
-int pthread_getattr_np(pthread_t thid, pthread_attr_t * attr);
+void* pthread_getspecific(pthread_key_t);
 
-int pthread_create(pthread_t *thread, pthread_attr_t const * attr,
-                   void *(*start_routine)(void *), void * arg);
-void pthread_exit(void * retval);
-int pthread_join(pthread_t thid, void ** ret_val);
-int pthread_detach(pthread_t  thid);
+int pthread_join(pthread_t, void**);
+
+int pthread_key_create(pthread_key_t*, void (*)(void*)) __nonnull((1));
+int pthread_key_delete(pthread_key_t);
+
+int pthread_kill(pthread_t, int);
+
+int pthread_mutexattr_destroy(pthread_mutexattr_t*) __nonnull((1));
+int pthread_mutexattr_getpshared(const pthread_mutexattr_t*, int*) __nonnull((1, 2));
+int pthread_mutexattr_gettype(const pthread_mutexattr_t*, int*) __nonnull((1, 2));
+int pthread_mutexattr_init(pthread_mutexattr_t*) __nonnull((1));
+int pthread_mutexattr_setpshared(pthread_mutexattr_t*, int) __nonnull((1));
+int pthread_mutexattr_settype(pthread_mutexattr_t*, int) __nonnull((1));
+
+int pthread_mutex_destroy(pthread_mutex_t*) __nonnull((1));
+int pthread_mutex_init(pthread_mutex_t*, const pthread_mutexattr_t*) __nonnull((1));
+int pthread_mutex_lock(pthread_mutex_t*) __nonnull((1));
+int pthread_mutex_timedlock(pthread_mutex_t*, struct timespec*) __nonnull((1, 2));
+int pthread_mutex_trylock(pthread_mutex_t*) __nonnull((1));
+int pthread_mutex_unlock(pthread_mutex_t*) __nonnull((1));
+
+int pthread_once(pthread_once_t*, void (*)(void)) __nonnull((1, 2));
+
+int pthread_rwlockattr_destroy(pthread_rwlockattr_t*) __nonnull((1));
+int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t*, int*) __nonnull((1, 2));
+int pthread_rwlockattr_init(pthread_rwlockattr_t*) __nonnull((1));
+int pthread_rwlockattr_setpshared(pthread_rwlockattr_t*, int) __nonnull((1));
+
+int pthread_rwlock_destroy(pthread_rwlock_t*) __nonnull((1));
+int pthread_rwlock_init(pthread_rwlock_t*, const pthread_rwlockattr_t*) __nonnull((1));
+int pthread_rwlock_rdlock(pthread_rwlock_t*) __nonnull((1));
+int pthread_rwlock_timedrdlock(pthread_rwlock_t*, const struct timespec*) __nonnull((1, 2));
+int pthread_rwlock_timedwrlock(pthread_rwlock_t*, const struct timespec*) __nonnull((1, 2));
+int pthread_rwlock_tryrdlock(pthread_rwlock_t*) __nonnull((1));
+int pthread_rwlock_trywrlock(pthread_rwlock_t*) __nonnull((1));
+int pthread_rwlock_unlock(pthread_rwlock_t *rwlock) __nonnull((1));
+int pthread_rwlock_wrlock(pthread_rwlock_t*) __nonnull((1));
 
 pthread_t pthread_self(void);
-int pthread_equal(pthread_t one, pthread_t two);
 
-int pthread_getschedparam(pthread_t thid, int * policy,
-                          struct sched_param * param);
-int pthread_setschedparam(pthread_t thid, int policy,
-                          struct sched_param const * param);
+int pthread_setname_np(pthread_t, const char*) __nonnull((2));
 
-int pthread_mutexattr_init(pthread_mutexattr_t *attr);
-int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);
-int pthread_mutexattr_gettype(const pthread_mutexattr_t *attr, int *type);
-int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type);
-int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int  pshared);
-int pthread_mutexattr_getpshared(pthread_mutexattr_t *attr, int *pshared);
+int pthread_setschedparam(pthread_t, int, const struct sched_param*) __nonnull((3));
 
-int pthread_mutex_init(pthread_mutex_t *mutex,
-                       const pthread_mutexattr_t *attr);
-int pthread_mutex_destroy(pthread_mutex_t *mutex);
-int pthread_mutex_lock(pthread_mutex_t *mutex);
-int pthread_mutex_unlock(pthread_mutex_t *mutex);
-int pthread_mutex_trylock(pthread_mutex_t *mutex);
-int pthread_mutex_timedlock(pthread_mutex_t *mutex, struct timespec*  ts);
+int pthread_setspecific(pthread_key_t, const void*);
 
-int pthread_condattr_init(pthread_condattr_t *attr);
-int pthread_condattr_getpshared(pthread_condattr_t *attr, int *pshared);
-int pthread_condattr_setpshared(pthread_condattr_t* attr, int pshared);
-int pthread_condattr_destroy(pthread_condattr_t *attr);
+int pthread_sigmask(int, const sigset_t*, sigset_t*);
 
-int pthread_cond_init(pthread_cond_t *cond,
-                      const pthread_condattr_t *attr);
-int pthread_cond_destroy(pthread_cond_t *cond);
-int pthread_cond_broadcast(pthread_cond_t *cond);
-int pthread_cond_signal(pthread_cond_t *cond);
-int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
-int pthread_cond_timedwait(pthread_cond_t *cond,
-                           pthread_mutex_t * mutex,
-                           const struct timespec *abstime);
-
-/* BIONIC: same as pthread_cond_timedwait, except the 'abstime' given refers
- *         to the CLOCK_MONOTONIC clock instead, to avoid any problems when
- *         the wall-clock time is changed brutally
- */
-int pthread_cond_timedwait_monotonic_np(pthread_cond_t         *cond,
-                                        pthread_mutex_t        *mutex,
-                                        const struct timespec  *abstime);
-
-/* BIONIC: DEPRECATED. same as pthread_cond_timedwait_monotonic_np()
- * unfortunately pthread_cond_timedwait_monotonic has shipped already
- */
-int pthread_cond_timedwait_monotonic(pthread_cond_t         *cond,
-                                     pthread_mutex_t        *mutex,
-                                     const struct timespec  *abstime);
-
-#define HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC 1
-
-/* BIONIC: same as pthread_cond_timedwait, except the 'reltime' given refers
- *         is relative to the current time.
- */
-int pthread_cond_timedwait_relative_np(pthread_cond_t         *cond,
-                                     pthread_mutex_t        *mutex,
-                                     const struct timespec  *reltime);
-
-#define HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE 1
-
-
-
-int pthread_cond_timeout_np(pthread_cond_t *cond,
-                            pthread_mutex_t * mutex,
-                            unsigned msecs);
-
-/* same as pthread_mutex_lock(), but will wait up to 'msecs' milli-seconds
- * before returning. same return values than pthread_mutex_trylock though, i.e.
- * returns EBUSY if the lock could not be acquired after the timeout
- * expired.
- */
-int pthread_mutex_lock_timeout_np(pthread_mutex_t *mutex, unsigned msecs);
-
-/* read-write lock support */
-
-typedef int pthread_rwlockattr_t;
-
-typedef struct {
-    pthread_mutex_t  lock;
-    pthread_cond_t   cond;
-    int              numLocks;
-    int              writerThreadId;
-    int              pendingReaders;
-    int              pendingWriters;
-    void*            reserved[4];  /* for future extensibility */
-} pthread_rwlock_t;
-
-#define PTHREAD_RWLOCK_INITIALIZER  { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0, 0, 0, { NULL, NULL, NULL, NULL } }
-
-int pthread_rwlockattr_init(pthread_rwlockattr_t *attr);
-int pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr);
-int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *attr, int  pshared);
-int pthread_rwlockattr_getpshared(pthread_rwlockattr_t *attr, int *pshared);
-
-int pthread_rwlock_init(pthread_rwlock_t *rwlock, const pthread_rwlockattr_t *attr);
-int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
-
-int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
-int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
-int pthread_rwlock_timedrdlock(pthread_rwlock_t *rwlock, const struct timespec *abs_timeout);
-
-int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
-int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);
-int pthread_rwlock_timedwrlock(pthread_rwlock_t *rwlock, const struct timespec *abs_timeout);
-
-int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
-
-
-int pthread_key_create(pthread_key_t *key, void (*destructor_function)(void *));
-int pthread_key_delete (pthread_key_t);
-int pthread_setspecific(pthread_key_t key, const void *value);
-void *pthread_getspecific(pthread_key_t key);
-
-int pthread_kill(pthread_t tid, int sig);
-int pthread_sigmask(int how, const sigset_t *set, sigset_t *oset);
-
-int pthread_getcpuclockid(pthread_t  tid, clockid_t  *clockid);
-
-int pthread_once(pthread_once_t  *once_control, void (*init_routine)(void));
-
-int pthread_setname_np(pthread_t thid, const char *thname);
-
-int pthread_atfork(void (*prepare)(void), void (*parent)(void), void(*child)(void));
-
-typedef void  (*__pthread_cleanup_func_t)(void*);
+typedef void (*__pthread_cleanup_func_t)(void*);
 
 typedef struct __pthread_cleanup_t {
-    struct __pthread_cleanup_t*   __cleanup_prev;
-    __pthread_cleanup_func_t      __cleanup_routine;
-    void*                         __cleanup_arg;
+  struct __pthread_cleanup_t*   __cleanup_prev;
+  __pthread_cleanup_func_t      __cleanup_routine;
+  void*                         __cleanup_arg;
 } __pthread_cleanup_t;
 
-extern void  __pthread_cleanup_push(__pthread_cleanup_t*      c,
-                                    __pthread_cleanup_func_t  routine,
-                                    void*                     arg);
-
-extern void  __pthread_cleanup_pop(__pthread_cleanup_t*  c,
-                                   int                   execute);
+extern void __pthread_cleanup_push(__pthread_cleanup_t* c, __pthread_cleanup_func_t, void*);
+extern void __pthread_cleanup_pop(__pthread_cleanup_t*, int);
 
 /* Believe or not, the definitions of pthread_cleanup_push and
  * pthread_cleanup_pop below are correct. Posix states that these
  * can be implemented as macros that might introduce opening and
  * closing braces, and that using setjmp/longjmp/return/break/continue
- * between them results in undefined behaviour.
- *
- * And indeed, GLibc and other C libraries use a similar definition
+ * between them results in undefined behavior.
  */
 #define  pthread_cleanup_push(routine, arg)                      \
     do {                                                         \
@@ -304,10 +227,40 @@
 
 #define  pthread_cleanup_pop(execute)                  \
         __pthread_cleanup_pop( &__cleanup, (execute)); \
-    } while (0);
+    } while (0);                                       \
 
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
+
+#if !defined(__LP64__)
+
+/* Deprecated by POSIX. TODO: support for LP64 but add deprecated attribute instead? */
+int pthread_attr_getstackaddr(const pthread_attr_t*, void**) __nonnull((1, 2)); /* deprecated */
+int pthread_attr_setstackaddr(pthread_attr_t*, void*) __nonnull((1)); /* deprecated */
+
+/* Bionic additions that are deprecated even in the 32-bit ABI. */
+int pthread_cond_timedwait_monotonic_np(pthread_cond_t*, pthread_mutex_t*, const struct timespec*);
+int pthread_cond_timedwait_monotonic(pthread_cond_t*, pthread_mutex_t*, const struct timespec*);
+#define HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC 1
+
+/*
+ * Like pthread_cond_timedwait except 'reltime' is relative to the current time.
+ * TODO: not like glibc; include in LP64?
+ */
+int pthread_cond_timedwait_relative_np(pthread_cond_t*, pthread_mutex_t*, const struct timespec*);
+#define HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE 1
+
+/* TODO: not like glibc; include in LP64? */
+int pthread_cond_timeout_np(pthread_cond_t*, pthread_mutex_t*, unsigned);
+
+/* Like pthread_mutex_lock(), but will wait up to 'msecs' milli-seconds
+ * before returning. Same return values as pthread_mutex_trylock though, i.e.
+ * returns EBUSY if the lock could not be acquired after the timeout expired.
+ *
+ * TODO: replace with pthread_mutex_timedlock_np for LP64.
+ */
+int pthread_mutex_lock_timeout_np(pthread_mutex_t*, unsigned);
+
+#endif /* !defined(__LP64__) */
+
+__END_DECLS
 
 #endif /* _PTHREAD_H_ */
