diff -Nurp a/libphobos/libdruntime/core/stdc/fenv.d b/libphobos/libdruntime/core/stdc/fenv.d
--- a/libphobos/libdruntime/core/stdc/fenv.d	2019-10-28 06:37:30.000000000 +0900
+++ b/libphobos/libdruntime/core/stdc/fenv.d	2019-10-28 08:08:09.000000000 +0900
@@ -375,7 +375,44 @@ else version (Solaris)
 }
 else version (CRuntime_Musl)
 {
-    version (X86_64)
+    version (AArch64)
+    {
+        struct fenv_t
+        {
+            uint __fpcr;
+            uint __fpsr;
+        }
+        alias uint fexcept_t;
+    }
+    else version (ARM)
+    {
+        import core.stdc.config : c_ulong;
+
+        struct fenv_t
+        {
+            c_ulong __cw;
+        }
+        alias c_ulong fexcept_t;
+    }
+    else version (IBMZ_Any)
+    {
+        alias uint fenv_t;
+        alias uint fexcept_t;
+    }
+    else version (MIPS_Any)
+    {
+        struct fenv_t
+        {
+            uint __cw;
+        }
+        alias ushort fexcept_t;
+    }
+    else version (PPC_Any)
+    {
+        alias double fenv_t;
+        alias uint fexcept_t;
+    }
+    else version (X86_Any)
     {
         struct fenv_t
         {
@@ -391,7 +428,8 @@ else version (CRuntime_Musl)
             uint   __data_offset;
             ushort __data_selector;
             ushort __unused5;
-            uint   __mxcsr;
+            version (X86_64)
+                uint __mxcsr;
         }
         alias ushort fexcept_t;
     }
diff -Nurp a/libphobos/libdruntime/core/sys/posix/dirent.d b/libphobos/libdruntime/core/sys/posix/dirent.d
--- a/libphobos/libdruntime/core/sys/posix/dirent.d	2019-10-28 06:37:30.000000000 +0900
+++ b/libphobos/libdruntime/core/sys/posix/dirent.d	2019-10-28 08:08:09.000000000 +0900
@@ -506,7 +506,7 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
-
+    int readdir_r(DIR*, dirent*, dirent**);
 }
 else version (CRuntime_UClibc)
 {
@@ -591,6 +591,8 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
+    void   seekdir(DIR*, c_long);
+    c_long telldir(DIR*);
 }
 else version (CRuntime_UClibc)
 {
diff -Nurp a/libphobos/libdruntime/core/sys/posix/pthread.d b/libphobos/libdruntime/core/sys/posix/pthread.d
--- a/libphobos/libdruntime/core/sys/posix/pthread.d	2019-10-28 06:37:30.000000000 +0900
+++ b/libphobos/libdruntime/core/sys/posix/pthread.d	2019-10-28 08:08:09.000000000 +0900
@@ -854,7 +854,15 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
+    enum PTHREAD_BARRIER_SERIAL_THREAD = -1;

+    int pthread_barrier_destroy(pthread_barrier_t*);
+    int pthread_barrier_init(pthread_barrier_t*, in pthread_barrierattr_t*, uint);
+    int pthread_barrier_wait(pthread_barrier_t*);
+    int pthread_barrierattr_destroy(pthread_barrierattr_t*);
+    int pthread_barrierattr_getpshared(in pthread_barrierattr_t*, int*);
+    int pthread_barrierattr_init(pthread_barrierattr_t*);
+    int pthread_barrierattr_setpshared(pthread_barrierattr_t*, int);
 }
 else version (CRuntime_UClibc)
 {
@@ -880,6 +888,55 @@ else
 int pthread_condattr_getclock(in pthread_condattr_t*, clockid_t*);
 int pthread_condattr_setclock(pthread_condattr_t*, clockid_t);
 */
+version (CRuntime_Glibc)
+{
+    int pthread_condattr_getclock(in pthread_condattr_t*, clockid_t*);
+    int pthread_condattr_setclock(pthread_condattr_t*, clockid_t);
+}
+else version (FreeBSD)
+{
+    int pthread_condattr_getclock(in pthread_condattr_t*, clockid_t*);
+    int pthread_condattr_setclock(pthread_condattr_t*, clockid_t);
+}
+else version (DragonFlyBSD)
+{
+    int pthread_condattr_getclock(in pthread_condattr_t*, clockid_t*);
+    int pthread_condattr_setclock(pthread_condattr_t*, clockid_t);
+}
+else version (NetBSD)
+{
+    int pthread_condattr_setclock(pthread_condattr_t*, clockid_t);
+}
+else version (OpenBSD)
+{
+    int pthread_condattr_getclock(in pthread_condattr_t*, clockid_t*);
+    int pthread_condattr_setclock(pthread_condattr_t*, clockid_t);
+}
+else version (Darwin)
+{
+}
+else version (Solaris)
+{
+    int pthread_condattr_getclock(in pthread_condattr_t*, clockid_t*);
+    int pthread_condattr_setclock(pthread_condattr_t*, clockid_t);
+}
+else version (CRuntime_Bionic)
+{
+}
+else version (CRuntime_Musl)
+{
+    int pthread_condattr_getclock(in pthread_condattr_t*, clockid_t*);
+    int pthread_condattr_setclock(pthread_condattr_t*, clockid_t);
+}
+else version (CRuntime_UClibc)
+{
+    int pthread_condattr_getclock(in pthread_condattr_t*, clockid_t*);
+    int pthread_condattr_setclock(pthread_condattr_t*, clockid_t);
+}
+else
+{
+    static assert(false, "Unsupported platform");
+}

 //
 // Spinlock (SPI)
@@ -948,7 +1005,11 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
-
+    int pthread_spin_destroy(pthread_spinlock_t*);
+    int pthread_spin_init(pthread_spinlock_t*, int);
+    int pthread_spin_lock(pthread_spinlock_t*);
+    int pthread_spin_trylock(pthread_spinlock_t*);
+    int pthread_spin_unlock(pthread_spinlock_t*);
 }
 else version (CRuntime_UClibc)
 {
@@ -1187,7 +1248,7 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
-
+    int pthread_getcpuclockid(pthread_t, clockid_t*);
 }
 else version (CRuntime_UClibc)
 {
@@ -1256,7 +1317,9 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
-
+    int pthread_mutex_timedlock(pthread_mutex_t*, in timespec*);
+    int pthread_rwlock_timedrdlock(pthread_rwlock_t*, in timespec*);
+    int pthread_rwlock_timedwrlock(pthread_rwlock_t*, in timespec*);
 }
 else version (CRuntime_UClibc)
 {
@@ -1693,7 +1756,12 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
-
+    int pthread_condattr_getpshared(pthread_condattr_t*, int*);
+    int pthread_condattr_setpshared(pthread_condattr_t*, int);
+    int pthread_mutexattr_getpshared(pthread_mutexattr_t*, int*);
+    int pthread_mutexattr_setpshared(pthread_mutexattr_t*, int);
+    int pthread_rwlockattr_getpshared(pthread_rwlockattr_t*, int*);
+    int pthread_rwlockattr_setpshared(pthread_rwlockattr_t*, int);
 }
 else version (CRuntime_UClibc)
 {
diff -Nurp a/libphobos/libdruntime/core/sys/posix/pwd.d b/libphobos/libdruntime/core/sys/posix/pwd.d
--- a/libphobos/libdruntime/core/sys/posix/pwd.d	2019-10-28 06:37:30.000000000 +0900
+++ b/libphobos/libdruntime/core/sys/posix/pwd.d	2019-10-28 08:08:09.000000000 +0900
@@ -172,7 +172,8 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
-    struct passwd {
+    struct passwd
+    {
         char *pw_name;
         char *pw_passwd;
         uid_t pw_uid;
@@ -257,6 +258,8 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
+    int getpwnam_r(in char*, passwd*, char*, size_t, passwd**);
+    int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**);
 }
 else version (CRuntime_UClibc)
 {
@@ -325,8 +328,9 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
-    int getpwnam_r(in char*, passwd*, char*, size_t, passwd**);
-    int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**);
+    void    endpwent();
+    passwd* getpwent();
+    void    setpwent();
 }
 else version (CRuntime_UClibc)
 {
diff -Nurp a/libphobos/libdruntime/core/sys/posix/signal.d b/libphobos/libdruntime/core/sys/posix/signal.d
--- a/libphobos/libdruntime/core/sys/posix/signal.d	2019-10-28 07:12:22.000000000 +0900
+++ b/libphobos/libdruntime/core/sys/posix/signal.d	2019-10-28 08:08:09.000000000 +0900
@@ -1136,55 +1136,57 @@ else version (NetBSD)
     enum SIG_UNBLOCK = 2;
     enum SIG_SETMASK = 3;

-    union sigval_t {
-        int     sival_int;
-        void    *sival_ptr;
-    };
-    struct _rt{
-        pid_t   _pid;
-        uid_t   _uid;
-        sigval_t        _value;
-    };
-    struct _child{
-        pid_t   _pid;
-        uid_t   _uid;
-        int     _status;
-        clock_t _utime;
-        clock_t _stime;
-    };
-   struct _fault{
-        void   *_addr;
-        int     _trap;
-        int     _trap2;
-        int     _trap3;
-    };
-    struct _poll{
-        long    _band;
-        int     _fd;
-    };
-    union _reason{
-        _rt rt;
-        _child child;
-        _fault fault;
-        _poll poll;
-    };
-    struct _ksiginfo {
+    union sigval_t
+    {
+        int   sival_int;
+        void* sival_ptr;
+    }
+
+    struct _ksiginfo
+    {
         int     _signo;
         int     _code;
         int     _errno;
-/+#ifdef _LP64
-        /* In _LP64 the union starts on an 8-byte boundary. */
-        int     _pad;
-#endif+/
-        _reason reason;
-    };
+        version (D_LP64)
+            int _pad;

+        union reason_t
+        {
+            struct rt_t
+            {
+                pid_t    _pid;
+                uid_t    _uid;
+                sigval_t _value;
+            } rt_t _rt;
+            struct child_t
+            {
+                pid_t   _pid;
+                uid_t   _uid;
+                int     _status;
+                clock_t _utime;
+                clock_t _stime;
+            } child_t _child;
+            struct fault_t
+            {
+                void* _addr;
+                int   _trap;
+                int   _trap2;
+                int   _trap3;
+            } fault_t fault;
+            struct poll_t
+            {
+                c_long _band;
+                int  _fd;
+            } poll_t _poll;
+        }
+        reason_t _reason;
+    }

     union siginfo_t
     {
-        ubyte[128] si_pad;/* Total size; for future expansion */
+        ubyte[128] si_pad;
         _ksiginfo _info;
-        @property ref c_long si_band() return { return _info.reason.poll._band; }
+        @property ref c_long si_band() return { return _info._reason._poll._band; }
     }

     enum SI_USER    = 0;
@@ -1589,27 +1591,53 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
-    struct sigset_t {
-        ulong[128/long.sizeof] __bits;
+    struct sigset_t
+    {
+        c_ulong[128/c_long.sizeof] __bits;
     }

-    enum SIG_BLOCK      = 0;
-    enum SIG_UNBLOCK    = 1;
-    enum SIG_SETMASK    = 2;
+    version (MIPS_Any)
+    {
+        enum SIG_BLOCK      = 1;
+        enum SIG_UNBLOCK    = 2;
+        enum SIG_SETMASK    = 3;
+    }
+    else
+    {
+        enum SIG_BLOCK      = 0;
+        enum SIG_UNBLOCK    = 1;
+        enum SIG_SETMASK    = 2;
+    }

-    struct siginfo_t {
-        int si_signo, si_errno, si_code;
-        union __si_fields_t {
-            char[128 - 2*int.sizeof - long.sizeof] __pad = 0;
-            struct __si_common_t {
-                union __first_t {
-                    struct __piduid_t {
+    struct siginfo_t
+    {
+        int si_signo;
+        version (MIPS_Any)  // __SI_SWAP_ERRNO_CODE
+        {
+            int si_code;
+            int si_errno;
+        }
+        else
+        {
+            int si_errno;
+            int si_code;
+        }
+        union __si_fields_t
+        {
+            char[128 - 2*int.sizeof - c_long.sizeof] __pad = 0;
+            struct __si_common_t
+            {
+                union __first_t
+                {
+                    struct __piduid_t
+                    {
                         pid_t si_pid;
                         uid_t si_uid;
                     }
                     __piduid_t __piduid;

-                    struct __timer_t {
+                    struct __timer_t
+                    {
                         int si_timerid;
                         int si_overrun;
                     }
@@ -1617,11 +1645,14 @@ else version (CRuntime_Musl)
                 }
                 __first_t __first;

-                union __second_t {
+                union __second_t
+                {
                     sigval si_value;
-                    struct __sigchld_t {
+                    struct __sigchld_t
+                    {
                         int si_status;
-                        clock_t si_utime, si_stime;
+                        clock_t si_utime;
+                        clock_t si_stime;
                     }
                     __sigchld_t __sigchld;
                 }
@@ -1629,11 +1660,14 @@ else version (CRuntime_Musl)
             }
             __si_common_t __si_common;

-            struct __sigfault_t {
+            struct __sigfault_t
+            {
                 void *si_addr;
                 short si_addr_lsb;
-                union __first_t {
-                    struct __addr_bnd_t {
+                union __first_t
+                {
+                    struct __addr_bnd_t
+                    {
                         void *si_lower;
                         void *si_upper;
                     }
@@ -1644,13 +1678,15 @@ else version (CRuntime_Musl)
             }
             __sigfault_t __sigfault;

-            struct __sigpoll_t {
-                long si_band;
+            struct __sigpoll_t
+            {
+                c_long si_band;
                 int si_fd;
             }
             __sigpoll_t __sigpoll;

-            struct __sigsys_t {
+            struct __sigsys_t
+            {
                 void *si_call_addr;
                 int si_syscall;
                 uint si_arch;
@@ -3030,7 +3066,177 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
-    enum SA_RESTART     = 0x10000000;
+    version (MIPS_Any)
+    {
+        enum SIGPOLL   = 22;
+        enum SIGPROF   = 29;
+        enum SIGSYS    = 12;
+        enum SIGTRAP   = 5;
+        enum SIGVTALRM = 28;
+        enum SIGXCPU   = 30;
+        enum SIGXFSZ   = 31;
+
+        enum SA_ONSTACK   = 0x08000000;
+        enum SA_RESETHAND = 0x80000000;
+        enum SA_RESTART   = 0x10000000;
+        enum SA_SIGINFO   = 8;
+        enum SA_NOCLDWAIT = 0x10000;
+        enum SA_NODEFER   = 0x40000000;
+    }
+    else
+    {
+        enum SIGPOLL   = 29;
+        enum SIGPROF   = 27;
+        enum SIGSYS    = 31;
+        enum SIGTRAP   = 5;
+        enum SIGVTALRM = 26;
+        enum SIGXCPU   = 24;
+        enum SIGXFSZ   = 25;
+
+        enum SA_ONSTACK   = 0x08000000;
+        enum SA_RESETHAND = 0x80000000;
+        enum SA_RESTART   = 0x10000000;
+        enum SA_SIGINFO   = 4;
+        enum SA_NOCLDWAIT = 2;
+        enum SA_NODEFER   = 0x40000000;
+    }
+
+    enum SS_ONSTACK = 1;
+    enum SS_DISABLE = 2;
+
+    version (ARM)
+    {
+        enum MINSIGSTKSZ = 2048;
+        enum SIGSTKSZ    = 8192;
+    }
+    else version (AArch64)
+    {
+        enum MINSIGSTKSZ = 6144;
+        enum SIGSTKSZ    = 12288;
+    }
+    else version (IBMZ_Any)
+    {
+        enum MINSIGSTKSZ = 4096;
+        enum SIGSTKSZ    = 10240;
+    }
+    else version (MIPS_Any)
+    {
+        enum MINSIGSTKSZ = 2048;
+        enum SIGSTKSZ    = 8192;
+    }
+    else version (PPC_Any)
+    {
+        enum MINSIGSTKSZ = 4096;
+        enum SIGSTKSZ    = 10240;
+    }
+    else version (X86_Any)
+    {
+        enum MINSIGSTKSZ = 2048;
+        enum SIGSTKSZ    = 8192;
+    }
+    else
+        static assert(0, "unimplemented");
+
+    //ucontext_t (defined in core.sys.posix.ucontext)
+    //mcontext_t (defined in core.sys.posix.ucontext)
+
+    version (MIPS_Any)
+    {
+        struct stack_t
+        {
+            void*  ss_sp;
+            size_t ss_size;
+            int    ss_flags;
+        }
+    }
+    else
+    {
+        struct stack_t
+        {
+            void*  ss_sp;
+            int    ss_flags;
+            size_t ss_size;
+        }
+    }
+
+    enum
+    {
+        ILL_ILLOPC = 1,
+        ILL_ILLOPN,
+        ILL_ILLADR,
+        ILL_ILLTRP,
+        ILL_PRVOPC,
+        ILL_PRVREG,
+        ILL_COPROC,
+        ILL_BADSTK
+    }
+
+    enum
+    {
+        FPE_INTDIV = 1,
+        FPE_INTOVF,
+        FPE_FLTDIV,
+        FPE_FLTOVF,
+        FPE_FLTUND,
+        FPE_FLTRES,
+        FPE_FLTINV,
+        FPE_FLTSUB
+    }
+
+    enum
+    {
+        SEGV_MAPERR = 1,
+        SEGV_ACCERR
+    }
+
+    enum
+    {
+        BUS_ADRALN = 1,
+        BUS_ADRERR,
+        BUS_OBJERR
+    }
+
+    enum
+    {
+        TRAP_BRKPT = 1,
+        TRAP_TRACE
+    }
+
+    enum
+    {
+        CLD_EXITED = 1,
+        CLD_KILLED,
+        CLD_DUMPED,
+        CLD_TRAPPED,
+        CLD_STOPPED,
+        CLD_CONTINUED
+    }
+
+    enum
+    {
+        POLL_IN = 1,
+        POLL_OUT,
+        POLL_MSG,
+        POLL_ERR,
+        POLL_PRI,
+        POLL_HUP
+    }
+
+    sigfn_t bsd_signal(int sig, sigfn_t func);
+    sigfn_t sigset(int sig, sigfn_t func);
+
+  nothrow:
+  @nogc:
+    sigfn_t2 bsd_signal(int sig, sigfn_t2 func);
+    sigfn_t2 sigset(int sig, sigfn_t2 func);
+
+    int killpg(pid_t, int);
+    int sigaltstack(const scope stack_t*, stack_t*);
+    int sighold(int);
+    int sigignore(int);
+    int siginterrupt(int, int);
+    int sigpause(int);
+    int sigrelse(int);
 }
 else version (CRuntime_UClibc)
 {
@@ -3483,7 +3689,7 @@ else version (CRuntime_Musl)
         int sigev_notify;
         void function(sigval) sigev_notify_function;
         pthread_attr_t *sigev_notify_attributes;
-        char[56 - 3 * long.sizeof] __pad = void;
+        char[56 - 3 * c_long.sizeof] __pad = void;
     }
 }
 else version (CRuntime_UClibc)
diff -Nurp a/libphobos/libdruntime/core/sys/posix/sys/mman.d b/libphobos/libdruntime/core/sys/posix/sys/mman.d
--- a/libphobos/libdruntime/core/sys/posix/sys/mman.d	2019-10-28 07:12:22.000000000 +0900
+++ b/libphobos/libdruntime/core/sys/posix/sys/mman.d	2019-10-28 08:08:09.000000000 +0900
@@ -128,6 +128,15 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
+    enum
+    {
+        POSIX_MADV_NORMAL = 0,
+        POSIX_MADV_RANDOM = 1,
+        POSIX_MADV_SEQUENTIAL = 2,
+        POSIX_MADV_WILLNEED = 3,
+        POSIX_MADV_DONTNEED = 4,
+    }
+    int posix_madvise(void *, size_t, int);
 }
 else version (CRuntime_UClibc)
 {
@@ -611,6 +620,14 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
+    enum
+    {
+        MCL_CURRENT = 1,
+        MCL_FUTURE = 2,
+    }
+
+    int mlockall(int);
+    int munlockall();
 }
 else version (CRuntime_UClibc)
 {
@@ -674,6 +691,8 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
+    int mlock(in void*, size_t);
+    int munlock(in void*, size_t);
 }
 else version (CRuntime_UClibc)
 {
@@ -776,6 +795,8 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
+    int shm_open(in char*, int, mode_t);
+    int shm_unlink(in char*);
 }
 else version (CRuntime_UClibc)
 {
diff -Nurp a/libphobos/libdruntime/core/sys/posix/sys/socket.d b/libphobos/libdruntime/core/sys/posix/sys/socket.d
--- a/libphobos/libdruntime/core/sys/posix/sys/socket.d	2019-10-28 07:12:22.000000000 +0900
+++ b/libphobos/libdruntime/core/sys/posix/sys/socket.d	2019-10-28 08:08:09.000000000 +0900
@@ -1755,10 +1755,10 @@ else version (CRuntime_Musl)
         c_ulong     __ss_align;
     }

-    enum {
+    enum
+    {
         SOCK_STREAM = 1,
         SOCK_DGRAM = 2,
-        SOCK_RAW = 3,
         SOCK_RDM = 4,
         SOCK_SEQPACKET = 5,
         SOCK_DCCP = 6,
@@ -2187,6 +2187,10 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
+    enum
+    {
+        SOCK_RAW    = 3
+    }
 }
 else version (CRuntime_UClibc)
 {
diff -Nurp a/libphobos/libdruntime/core/sys/posix/sys/types.d b/libphobos/libdruntime/core/sys/posix/sys/types.d
--- a/libphobos/libdruntime/core/sys/posix/sys/types.d	2019-10-28 07:12:22.000000000 +0900
+++ b/libphobos/libdruntime/core/sys/posix/sys/types.d	2019-10-28 08:07:51.000000000 +0900
@@ -112,20 +112,25 @@ version (CRuntime_Glibc)
 }
 else version (CRuntime_Musl)
 {
-    alias long      blksize_t;
-    alias ulong     nlink_t;
-    alias long      dev_t;
-    alias long      blkcnt_t;
-    alias ulong     ino_t;
-    alias long      off_t;
-    alias long      _Addr;
-    alias int       pid_t;
-    alias uint      uid_t;
-    alias uint      gid_t;
-    alias long      time_t;
-    alias long      clock_t;
-    alias ulong     pthread_t;
-    alias _Addr     ssize_t;
+    alias c_long     blksize_t;
+    alias c_ulong    nlink_t;
+    alias long       dev_t;
+    alias long       blkcnt_t;
+    alias ulong      ino_t;
+    alias long       off_t;
+    alias int        pid_t;
+    alias uint       uid_t;
+    alias uint       gid_t;
+    version (D_X32)
+        alias long   time_t;
+    else
+        alias c_long time_t;
+    alias c_long     clock_t;
+    alias c_ulong    pthread_t;
+    version (D_LP64)
+        alias c_long ssize_t;
+    else
+        alias int    ssize_t;
 }
 else version (Darwin)
 {
@@ -420,7 +425,10 @@ else version (CRuntime_Musl)
   }
     alias uint mode_t;
     alias uint id_t;
-    alias long suseconds_t;
+    version (D_X32)
+        alias long susseconds_t;
+    else
+        alias c_long suseconds_t;
 }
 else version (CRuntime_UClibc)
 {
@@ -723,40 +746,77 @@ version (CRuntime_Glibc)
 }
 else version (CRuntime_Musl)
 {
-    version (X86_64) {
+    version (D_LP64)
+    {
         union pthread_attr_t
         {
             int[14] __i;
             ulong[7] __s;
         }
+
         union pthread_cond_t
         {
             int[12] __i;
             void*[6] __p;
         }
+
         union pthread_mutex_t
         {
             int[10] __i;
             void*[5] __p;
         }
+
         union pthread_rwlock_t
         {
             int[14] __i;
             void*[7] __p;
         }
-        struct pthread_rwlockattr_t
+    }
+    else
+    {
+        union pthread_attr_t
+        {
+            int[9] __i;
+            uint[9] __s;
+        }
+
+        union pthread_cond_t
+        {
+            int[12] __i;
+            void*[12] __p;
+        }
+
+        union pthread_mutex_t
         {
-            uint[2] __attr;
+            int[6] __i;
+            void*[6] __p;
+        }
+
+        union pthread_rwlock_t
+        {
+            int[8] __i;
+            void*[8] __p;
         }
-        alias uint pthread_key_t;
-        alias uint pthread_condattr_t;
-        alias uint pthread_mutexattr_t;
-        alias int pthread_once_t;
     }
-    else
+
+    struct pthread_rwlockattr_t
     {
-        static assert (false, "Architecture unsupported");
+        uint[2] __attr;
     }
+
+    alias uint pthread_key_t;
+
+    struct pthread_condattr_t
+    {
+        uint __attr;
+    }
+
+    struct pthread_mutexattr_t
+    {
+        uint __attr;
+    }
+
+    alias int pthread_once_t;
 }
 else version (Darwin)
 {
@@ -1300,6 +1360,27 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
+    version (D_LP64)
+    {
+        union pthread_barrier_t
+        {
+            int[8] __i;
+            void*[4] __p;
+        }
+    }
+    else
+    {
+        union pthread_barrier_t
+        {
+            int[5] __i;
+            void*[5] __p;
+        }
+    }
+
+    struct pthread_barrierattr_t
+    {
+        uint __attr;
+    }
 }
 else version (CRuntime_UClibc)
 {
@@ -1351,6 +1432,10 @@ else version (CRuntime_UClibc)
 {
     alias int pthread_spinlock_t; // volatile
 }
+else version (CRuntime_Musl)
+{
+    alias int pthread_spinlock_t;
+}

 //
 // Timer (TMR)
diff -Nurp a/libphobos/libdruntime/core/sys/posix/sys/wait.d b/libphobos/libdruntime/core/sys/posix/sys/wait.d
--- a/libphobos/libdruntime/core/sys/posix/sys/wait.d	2019-10-28 07:12:22.000000000 +0900
+++ b/libphobos/libdruntime/core/sys/posix/sys/wait.d	2019-10-28 08:08:09.000000000 +0900
@@ -362,6 +362,19 @@ else version (CRuntime_Bionic)
 }
 else version (CRuntime_Musl)
 {
+    enum WEXITED    = 4;
+    enum WSTOPPED   = 2;
+    enum WCONTINUED = 8;
+    enum WNOWAIT    = 0x01000000;
+
+    enum idtype_t
+    {
+        P_ALL,
+        P_PID,
+        P_PGID
+    }
+
+    int waitid(idtype_t, id_t, siginfo_t*, int);
 }
 else version (CRuntime_UClibc)
 {
diff -Nurp a/libphobos/libdruntime/core/sys/posix/ucontext.d b/libphobos/libdruntime/core/sys/posix/ucontext.d
--- a/libphobos/libdruntime/core/sys/posix/ucontext.d	2019-10-28 07:12:22.000000000 +0900
+++ b/libphobos/libdruntime/core/sys/posix/ucontext.d	2019-10-28 08:08:09.000000000 +0900
@@ -23,6 +23,10 @@ extern (C):
 nothrow:
 @nogc:

+version (MIPS32)  version = MIPS_Any;
+version (MIPS64)  version = MIPS_Any;
+version (PPC)     version = PPC_Any;
+version (PPC64)   version = PPC_Any;
 version (RISCV32) version = RISCV_Any;
 version (RISCV64) version = RISCV_Any;
 version (S390)    version = IBMZ_Any;
@@ -770,6 +774,139 @@ version (CRuntime_Glibc)
     else
         static assert(0, "unimplemented");
 }
+else version (CRuntime_Musl)
+{
+    version (AArch64)
+    {
+        struct mcontext_t
+        {
+            real[18+256] __regs;
+        }
+
+        struct ucontext_t
+        {
+            c_ulong     uc_flags;
+            ucontext_t* uc_link;
+            stack_t     uc_stack;
+            sigset_t    uc_sigmask;
+            mcontext_t  uc_mcontext;
+        }
+    }
+    else version (ARM)
+    {
+        struct mcontext_t
+        {
+            c_ulong[21] __regs;
+        }
+
+        struct ucontext_t
+        {
+            c_ulong     uc_flags;
+            ucontext_t* uc_link;
+            stack_t     uc_stack;
+            mcontext_t  uc_mcontext;
+            sigset_t    uc_sigmask;
+            ulong[64]   uc_regspace;
+        }
+    }
+    else version (IBMZ_Any)
+    {
+        struct mcontext_t
+        {
+            c_ulong[18] __regs1;
+            uint[18]    __regs2;
+            double[16]  __regs3;
+        }
+
+        struct ucontext_t
+        {
+            c_ulong     uc_flags;
+            ucontext_t* uc_link;
+            stack_t     uc_stack;
+            mcontext_t  uc_mcontext;
+            sigset_t    uc_sigmask;
+        }
+    }
+    else version (MIPS_Any)
+    {
+        version (MIPS_N32)
+        {
+            struct mcontext_t
+            {
+                ulong[32]  __mc1;
+                double[32] __mc2;
+                ulong[9]   __mc3;
+                uint[4]    __mc4;
+            }
+        }
+        else version (MIPS64)
+        {
+            struct mcontext_t
+            {
+                ulong[32]  __mc1;
+                double[32] __mc2;
+                ulong[9]   __mc3;
+                uint[4]    __mc4;
+            }
+        }
+        else
+        {
+            struct mcontext_t
+            {
+                uint[2]    __mc1;
+                ulong[65]  __mc2;
+                uint[5]    __mc3;
+                ulong[2]   __mc4;
+                uint[6]    __mc5;
+            }
+        }
+
+        struct ucontext_t
+        {
+            c_ulong     uc_flags;
+            ucontext_t* uc_link;
+            stack_t     uc_stack;
+            mcontext_t  uc_mcontext;
+            sigset_t    uc_sigmask;
+        }
+    }
+    else version (X86)
+    {
+        struct mcontext_t
+        {
+            uint[22] __space;
+        }
+
+        struct ucontext_t
+        {
+            c_ulong     uc_flags;
+            ucontext_t* uc_link;
+            stack_t     uc_stack;
+            mcontext_t  uc_mcontext;
+            sigset_t    uc_sigmask;
+            c_ulong[28] __fpregs_mem;
+        }
+    }
+    else version (X86_64)
+    {
+        struct mcontext_t
+        {
+            ulong[32] __space;
+        }
+
+        struct ucontext_t
+        {
+            c_ulong     uc_flags;
+            ucontext_t* uc_link;
+            stack_t     uc_stack;
+            mcontext_t  uc_mcontext;
+            sigset_t    uc_sigmask;
+            ulong[64]   __fpregs_mem;
+        }
+    }
+    else
+        static assert(0, "unimplemented");
+}
 else version (FreeBSD)
 {
     // <machine/ucontext.h>
diff -Nurp a/libphobos/src/std/experimental/allocator/building_blocks/region.d b/libphobos/src/std/experimental/allocator/building_blocks/region.d
--- a/libphobos/src/std/experimental/allocator/building_blocks/region.d	2019-10-28 07:23:27.000000000 +0900
+++ b/libphobos/src/std/experimental/allocator/building_blocks/region.d	2019-10-28 08:08:09.000000000 +0900
@@ -580,6 +580,12 @@ struct InSituRegion(size_t size, size_t
     assert(a.length == 2001);
 }

+version(CRuntime_Musl)
+{
+    // sbrk and brk are disabled in Musl:
+    // https://git.musl-libc.org/cgit/musl/commit/?id=7a995fe706e519a4f55399776ef0df9596101f93
+    // https://git.musl-libc.org/cgit/musl/commit/?id=863d628d93ea341b6a32661a1654320ce69f6a07
+} else:
 private extern(C) void* sbrk(long);
 private extern(C) int brk(shared void*);

diff -Nurp a/libphobos/src/std/socket.d b/libphobos/src/std/socket.d
--- a/libphobos/src/std/socket.d	2019-10-28 07:23:27.000000000 +0900
+++ b/libphobos/src/std/socket.d	2019-10-28 08:08:09.000000000 +0900
@@ -163,47 +163,7 @@ string formatSocketError(int err) @trust
         {
             cs = strerror_r(err, buf.ptr, buf.length);
         }
-        else version (OSX)
-        {
-            auto errs = strerror_r(err, buf.ptr, buf.length);
-            if (errs == 0)
-                cs = buf.ptr;
-            else
-                return "Socket error " ~ to!string(err);
-        }
-        else version (FreeBSD)
-        {
-            auto errs = strerror_r(err, buf.ptr, buf.length);
-            if (errs == 0)
-                cs = buf.ptr;
-            else
-                return "Socket error " ~ to!string(err);
-        }
-        else version (NetBSD)
-        {
-            auto errs = strerror_r(err, buf.ptr, buf.length);
-            if (errs == 0)
-                cs = buf.ptr;
-            else
-                return "Socket error " ~ to!string(err);
-        }
-        else version (DragonFlyBSD)
-        {
-            auto errs = strerror_r(err, buf.ptr, buf.length);
-            if (errs == 0)
-                cs = buf.ptr;
-            else
-                return "Socket error " ~ to!string(err);
-        }
-        else version (Solaris)
-        {
-            auto errs = strerror_r(err, buf.ptr, buf.length);
-            if (errs == 0)
-                cs = buf.ptr;
-            else
-                return "Socket error " ~ to!string(err);
-        }
-        else version (CRuntime_Bionic)
+        else
         {
             auto errs = strerror_r(err, buf.ptr, buf.length);
             if (errs == 0)
@@ -211,8 +171,6 @@ string formatSocketError(int err) @trust
             else
                 return "Socket error " ~ to!string(err);
         }
-        else
-            static assert(0);

         auto len = strlen(cs);

diff -Nurp a/libphobos/src/std/stdio.d b/libphobos/src/std/stdio.d
--- a/libphobos/src/std/stdio.d	2019-10-28 07:23:27.000000000 +0900
+++ b/libphobos/src/std/stdio.d	2019-10-28 08:08:09.000000000 +0900
@@ -44,38 +44,38 @@ version (CRuntime_Glibc)
     version = GCC_IO;
     version = HAS_GETDELIM;
 }
-
-version (OSX)
+else version (CRuntime_Bionic)
 {
     version = GENERIC_IO;
     version = HAS_GETDELIM;
 }
-
-version (FreeBSD)
+else version (CRuntime_Musl)
 {
     version = GENERIC_IO;
     version = HAS_GETDELIM;
 }

-version (NetBSD)
+version (OSX)
 {
     version = GENERIC_IO;
     version = HAS_GETDELIM;
 }
-
-version (DragonFlyBSD)
+else version (FreeBSD)
 {
     version = GENERIC_IO;
     version = HAS_GETDELIM;
 }
-
-version (Solaris)
+else version (NetBSD)
 {
     version = GENERIC_IO;
-    version = NO_GETDELIM;
+    version = HAS_GETDELIM;
 }
-
-version (CRuntime_Bionic)
+else version (DragonFlyBSD)
+{
+    version = GENERIC_IO;
+    version = HAS_GETDELIM;
+}
+else version (Solaris)
 {
     version = GENERIC_IO;
     version = NO_GETDELIM;
