Commit f69f55c807

Andrew Kelley <andrew@ziglang.org>
2021-12-09 09:35:25
stage2: upgrade musl libc stub file
This is the result of the work on tools/gen_stubs.zig. It now uses the preprocessor to emit different symbols and sizes depending on the architecture. The data is collected directly from multiple libc.so files on disk built with upstream musl. Closes #8178 Addresses #8896 for musl There is still room for further improvement to this, which is to put `.ds` directives after symbols that are not followed by aliases, to avoid the potential problem of a linker believing that all symbols are aliases of each other.
1 parent da9542c
Changed files (2)
lib
libc
musl
src
lib/libc/musl/libc.s → lib/libc/musl/libc.S
@@ -1,3 +1,25 @@
+#ifdef PTR64
+#define WEAK64 .weak
+#define PTR_SIZE_BYTES 8
+#define PTR2_SIZE_BYTES 16
+#else
+#define WEAK64 .globl
+#define PTR_SIZE_BYTES 4
+#define PTR2_SIZE_BYTES 8
+#endif
+.rodata
+.globl in6addr_any
+.type in6addr_any, %object;
+.size in6addr_any, 16
+in6addr_any:
+.globl in6addr_loopback
+.type in6addr_loopback, %object;
+.size in6addr_loopback, 16
+in6addr_loopback:
+.globl _ns_flagdata
+.type _ns_flagdata, %object;
+.size _ns_flagdata, 128
+_ns_flagdata:
 .text
 .weak aio_read64
 .type aio_read64, %function;
@@ -5,30 +27,30 @@ aio_read64:
 .globl aio_read
 .type aio_read, %function;
 aio_read:
-.weak aio_write64
-.type aio_write64, %function;
-aio_write64:
 .globl aio_write
 .type aio_write, %function;
 aio_write:
-.weak aio_fsync64
-.type aio_fsync64, %function;
-aio_fsync64:
+.weak aio_write64
+.type aio_write64, %function;
+aio_write64:
 .globl aio_fsync
 .type aio_fsync, %function;
 aio_fsync:
+.weak aio_fsync64
+.type aio_fsync64, %function;
+aio_fsync64:
 .weak aio_return64
 .type aio_return64, %function;
 aio_return64:
 .globl aio_return
 .type aio_return, %function;
 aio_return:
-.weak aio_error64
-.type aio_error64, %function;
-aio_error64:
 .globl aio_error
 .type aio_error, %function;
 aio_error:
+.weak aio_error64
+.type aio_error64, %function;
+aio_error64:
 .globl aio_cancel
 .type aio_cancel, %function;
 aio_cancel:
@@ -41,12 +63,12 @@ aio_suspend:
 .weak aio_suspend64
 .type aio_suspend64, %function;
 aio_suspend64:
-.weak lio_listio64
-.type lio_listio64, %function;
-lio_listio64:
 .globl lio_listio
 .type lio_listio, %function;
 lio_listio:
+.weak lio_listio64
+.type lio_listio64, %function;
+lio_listio64:
 .globl cabs
 .type cabs, %function;
 cabs:
@@ -305,12 +327,12 @@ isalnum_l:
 .globl isalpha
 .type isalpha, %function;
 isalpha:
-.globl __isalpha_l
-.type __isalpha_l, %function;
-__isalpha_l:
 .weak isalpha_l
 .type isalpha_l, %function;
 isalpha_l:
+.globl __isalpha_l
+.type __isalpha_l, %function;
+__isalpha_l:
 .globl isascii
 .type isascii, %function;
 isascii:
@@ -326,21 +348,21 @@ isblank_l:
 .globl iscntrl
 .type iscntrl, %function;
 iscntrl:
-.globl __iscntrl_l
-.type __iscntrl_l, %function;
-__iscntrl_l:
 .weak iscntrl_l
 .type iscntrl_l, %function;
 iscntrl_l:
+.globl __iscntrl_l
+.type __iscntrl_l, %function;
+__iscntrl_l:
 .globl isdigit
 .type isdigit, %function;
 isdigit:
-.globl __isdigit_l
-.type __isdigit_l, %function;
-__isdigit_l:
 .weak isdigit_l
 .type isdigit_l, %function;
 isdigit_l:
+.globl __isdigit_l
+.type __isdigit_l, %function;
+__isdigit_l:
 .globl isgraph
 .type isgraph, %function;
 isgraph:
@@ -362,21 +384,21 @@ __islower_l:
 .globl isprint
 .type isprint, %function;
 isprint:
-.globl __isprint_l
-.type __isprint_l, %function;
-__isprint_l:
 .weak isprint_l
 .type isprint_l, %function;
 isprint_l:
+.globl __isprint_l
+.type __isprint_l, %function;
+__isprint_l:
 .globl ispunct
 .type ispunct, %function;
 ispunct:
-.globl __ispunct_l
-.type __ispunct_l, %function;
-__ispunct_l:
 .weak ispunct_l
 .type ispunct_l, %function;
 ispunct_l:
+.globl __ispunct_l
+.type __ispunct_l, %function;
+__ispunct_l:
 .globl isspace
 .type isspace, %function;
 isspace:
@@ -389,21 +411,21 @@ __isspace_l:
 .globl isupper
 .type isupper, %function;
 isupper:
-.globl __isupper_l
-.type __isupper_l, %function;
-__isupper_l:
 .weak isupper_l
 .type isupper_l, %function;
 isupper_l:
+.globl __isupper_l
+.type __isupper_l, %function;
+__isupper_l:
 .globl iswalnum
 .type iswalnum, %function;
 iswalnum:
-.weak iswalnum_l
-.type iswalnum_l, %function;
-iswalnum_l:
 .globl __iswalnum_l
 .type __iswalnum_l, %function;
 __iswalnum_l:
+.weak iswalnum_l
+.type iswalnum_l, %function;
+iswalnum_l:
 .globl iswalpha
 .type iswalpha, %function;
 iswalpha:
@@ -416,33 +438,33 @@ iswalpha_l:
 .globl iswblank
 .type iswblank, %function;
 iswblank:
-.weak iswblank_l
-.type iswblank_l, %function;
-iswblank_l:
 .globl __iswblank_l
 .type __iswblank_l, %function;
 __iswblank_l:
+.weak iswblank_l
+.type iswblank_l, %function;
+iswblank_l:
 .globl iswcntrl
 .type iswcntrl, %function;
 iswcntrl:
-.weak iswcntrl_l
-.type iswcntrl_l, %function;
-iswcntrl_l:
 .globl __iswcntrl_l
 .type __iswcntrl_l, %function;
 __iswcntrl_l:
+.weak iswcntrl_l
+.type iswcntrl_l, %function;
+iswcntrl_l:
 .globl iswctype
 .type iswctype, %function;
 iswctype:
 .globl wctype
 .type wctype, %function;
 wctype:
-.weak iswctype_l
-.type iswctype_l, %function;
-iswctype_l:
 .globl __iswctype_l
 .type __iswctype_l, %function;
 __iswctype_l:
+.weak iswctype_l
+.type iswctype_l, %function;
+iswctype_l:
 .globl __wctype_l
 .type __wctype_l, %function;
 __wctype_l:
@@ -479,57 +501,57 @@ __iswlower_l:
 .globl iswprint
 .type iswprint, %function;
 iswprint:
-.weak iswprint_l
-.type iswprint_l, %function;
-iswprint_l:
 .globl __iswprint_l
 .type __iswprint_l, %function;
 __iswprint_l:
+.weak iswprint_l
+.type iswprint_l, %function;
+iswprint_l:
 .globl iswpunct
 .type iswpunct, %function;
 iswpunct:
-.weak iswpunct_l
-.type iswpunct_l, %function;
-iswpunct_l:
 .globl __iswpunct_l
 .type __iswpunct_l, %function;
 __iswpunct_l:
+.weak iswpunct_l
+.type iswpunct_l, %function;
+iswpunct_l:
 .globl iswspace
 .type iswspace, %function;
 iswspace:
-.weak iswspace_l
-.type iswspace_l, %function;
-iswspace_l:
 .globl __iswspace_l
 .type __iswspace_l, %function;
 __iswspace_l:
+.weak iswspace_l
+.type iswspace_l, %function;
+iswspace_l:
 .globl iswupper
 .type iswupper, %function;
 iswupper:
-.weak iswupper_l
-.type iswupper_l, %function;
-iswupper_l:
 .globl __iswupper_l
 .type __iswupper_l, %function;
 __iswupper_l:
+.weak iswupper_l
+.type iswupper_l, %function;
+iswupper_l:
 .globl iswxdigit
 .type iswxdigit, %function;
 iswxdigit:
-.weak iswxdigit_l
-.type iswxdigit_l, %function;
-iswxdigit_l:
 .globl __iswxdigit_l
 .type __iswxdigit_l, %function;
 __iswxdigit_l:
+.weak iswxdigit_l
+.type iswxdigit_l, %function;
+iswxdigit_l:
 .globl isxdigit
 .type isxdigit, %function;
 isxdigit:
-.weak isxdigit_l
-.type isxdigit_l, %function;
-isxdigit_l:
 .globl __isxdigit_l
 .type __isxdigit_l, %function;
 __isxdigit_l:
+.weak isxdigit_l
+.type isxdigit_l, %function;
+isxdigit_l:
 .globl toascii
 .type toascii, %function;
 toascii:
@@ -545,30 +567,30 @@ tolower_l:
 .globl toupper
 .type toupper, %function;
 toupper:
-.globl __toupper_l
-.type __toupper_l, %function;
-__toupper_l:
 .weak toupper_l
 .type toupper_l, %function;
 toupper_l:
+.globl __toupper_l
+.type __toupper_l, %function;
+__toupper_l:
 .globl towlower
 .type towlower, %function;
 towlower:
 .globl towupper
 .type towupper, %function;
 towupper:
-.weak towupper_l
-.type towupper_l, %function;
-towupper_l:
 .globl __towupper_l
 .type __towupper_l, %function;
 __towupper_l:
-.weak towlower_l
-.type towlower_l, %function;
-towlower_l:
+.weak towupper_l
+.type towupper_l, %function;
+towupper_l:
 .globl __towlower_l
 .type __towlower_l, %function;
 __towlower_l:
+.weak towlower_l
+.type towlower_l, %function;
+towlower_l:
 .globl wcswidth
 .type wcswidth, %function;
 wcswidth:
@@ -593,12 +615,12 @@ __towctrans_l:
 .globl wcwidth
 .type wcwidth, %function;
 wcwidth:
-.weak alphasort64
-.type alphasort64, %function;
-alphasort64:
 .globl alphasort
 .type alphasort, %function;
 alphasort:
+.weak alphasort64
+.type alphasort64, %function;
+alphasort64:
 .globl closedir
 .type closedir, %function;
 closedir:
@@ -617,12 +639,12 @@ readdir:
 .weak readdir64
 .type readdir64, %function;
 readdir64:
-.globl readdir_r
-.type readdir_r, %function;
-readdir_r:
 .weak readdir64_r
 .type readdir64_r, %function;
 readdir64_r:
+.globl readdir_r
+.type readdir_r, %function;
+readdir_r:
 .globl rewinddir
 .type rewinddir, %function;
 rewinddir:
@@ -638,12 +660,12 @@ seekdir:
 .globl telldir
 .type telldir, %function;
 telldir:
-.weak versionsort64
-.type versionsort64, %function;
-versionsort64:
 .globl versionsort
 .type versionsort, %function;
 versionsort:
+.weak versionsort64
+.type versionsort64, %function;
+versionsort64:
 .weak _init
 .type _init, %function;
 _init:
@@ -722,18 +744,18 @@ creat64:
 .globl fcntl
 .type fcntl, %function;
 fcntl:
-.globl open
-.type open, %function;
-open:
 .weak open64
 .type open64, %function;
 open64:
-.globl openat
-.type openat, %function;
-openat:
+.globl open
+.type open, %function;
+open:
 .weak openat64
 .type openat64, %function;
 openat64:
+.globl openat
+.type openat, %function;
+openat:
 .weak posix_fadvise64
 .type posix_fadvise64, %function;
 posix_fadvise64:
@@ -764,6 +786,24 @@ fesetround:
 .globl feupdateenv
 .type feupdateenv, %function;
 feupdateenv:
+.globl feclearexcept
+.type feclearexcept, %function;
+feclearexcept:
+.globl feraiseexcept
+.type feraiseexcept, %function;
+feraiseexcept:
+.globl fetestexcept
+.type fetestexcept, %function;
+fetestexcept:
+.globl fegetround
+.type fegetround, %function;
+fegetround:
+.globl fegetenv
+.type fegetenv, %function;
+fegetenv:
+.globl fesetenv
+.type fesetenv, %function;
+fesetenv:
 .globl ftok
 .type ftok, %function;
 ftok:
@@ -812,6 +852,9 @@ dlerror:
 .globl dlinfo
 .type dlinfo, %function;
 dlinfo:
+.globl dlsym
+.type dlsym, %function;
+dlsym:
 .globl cuserid
 .type cuserid, %function;
 cuserid:
@@ -848,12 +891,12 @@ euidaccess:
 .weak eaccess
 .type eaccess, %function;
 eaccess:
-.globl ftw
-.type ftw, %function;
-ftw:
 .weak ftw64
 .type ftw64, %function;
 ftw64:
+.globl ftw
+.type ftw, %function;
+ftw:
 .globl futimes
 .type futimes, %function;
 futimes:
@@ -893,48 +936,48 @@ endutent:
 .globl endutxent
 .type endutxent, %function;
 endutxent:
-.globl setutxent
-.type setutxent, %function;
-setutxent:
 .weak setutent
 .type setutent, %function;
 setutent:
+.globl setutxent
+.type setutxent, %function;
+setutxent:
 .globl getutxent
 .type getutxent, %function;
 getutxent:
 .weak getutent
 .type getutent, %function;
 getutent:
-.globl getutxid
-.type getutxid, %function;
-getutxid:
 .weak getutid
 .type getutid, %function;
 getutid:
+.globl getutxid
+.type getutxid, %function;
+getutxid:
 .weak getutline
 .type getutline, %function;
 getutline:
 .globl getutxline
 .type getutxline, %function;
 getutxline:
-.globl pututxline
-.type pututxline, %function;
-pututxline:
 .weak pututline
 .type pututline, %function;
 pututline:
-.globl updwtmpx
-.type updwtmpx, %function;
-updwtmpx:
+.globl pututxline
+.type pututxline, %function;
+pututxline:
 .weak updwtmp
 .type updwtmp, %function;
 updwtmp:
-.weak utmpname
-.type utmpname, %function;
-utmpname:
+.globl updwtmpx
+.type updwtmpx, %function;
+updwtmpx:
 .weak utmpxname
 .type utmpxname, %function;
 utmpxname:
+.weak utmpname
+.type utmpname, %function;
+utmpname:
 .globl valloc
 .type valloc, %function;
 valloc:
@@ -944,12 +987,19 @@ adjtime:
 .globl adjtimex
 .type adjtimex, %function;
 adjtimex:
-.globl arch_prctl
-.type arch_prctl, %function;
-arch_prctl:
 .globl brk
 .type brk, %function;
 brk:
+#if !defined(ARCH_mips) && !defined(ARCH_i386) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64)
+.weak riscv_flush_icache
+.type riscv_flush_icache, %function;
+riscv_flush_icache:
+#endif
+#if !defined(ARCH_mips) && !defined(ARCH_i386) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64)
+.globl __riscv_flush_icache
+.type __riscv_flush_icache, %function;
+__riscv_flush_icache:
+#endif
 .globl capset
 .type capset, %function;
 capset:
@@ -968,12 +1018,12 @@ clone:
 .globl copy_file_range
 .type copy_file_range, %function;
 copy_file_range:
-.globl epoll_create1
-.type epoll_create1, %function;
-epoll_create1:
 .globl epoll_create
 .type epoll_create, %function;
 epoll_create:
+.globl epoll_create1
+.type epoll_create1, %function;
+epoll_create1:
 .globl epoll_ctl
 .type epoll_ctl, %function;
 epoll_ctl:
@@ -1007,36 +1057,30 @@ fanotify_mark:
 .globl flock
 .type flock, %function;
 flock:
-.weak getdents64
-.type getdents64, %function;
-getdents64:
 .globl getdents
 .type getdents, %function;
 getdents:
+.weak getdents64
+.type getdents64, %function;
+getdents64:
 .globl getrandom
 .type getrandom, %function;
 getrandom:
 .globl gettid
 .type gettid, %function;
 gettid:
-.globl inotify_init1
-.type inotify_init1, %function;
-inotify_init1:
 .globl inotify_init
 .type inotify_init, %function;
 inotify_init:
+.globl inotify_init1
+.type inotify_init1, %function;
+inotify_init1:
 .globl inotify_add_watch
 .type inotify_add_watch, %function;
 inotify_add_watch:
 .globl inotify_rm_watch
 .type inotify_rm_watch, %function;
 inotify_rm_watch:
-.globl ioperm
-.type ioperm, %function;
-ioperm:
-.globl iopl
-.type iopl, %function;
-iopl:
 .globl klogctl
 .type klogctl, %function;
 klogctl:
@@ -1253,18 +1297,18 @@ dngettext:
 .globl dgettext
 .type dgettext, %function;
 dgettext:
-.globl __duplocale
-.type __duplocale, %function;
-__duplocale:
 .weak duplocale
 .type duplocale, %function;
 duplocale:
-.globl freelocale
-.type freelocale, %function;
-freelocale:
+.globl __duplocale
+.type __duplocale, %function;
+__duplocale:
 .weak __freelocale
 .type __freelocale, %function;
 __freelocale:
+.globl freelocale
+.type freelocale, %function;
+freelocale:
 .globl iconv_open
 .type iconv_open, %function;
 iconv_open:
@@ -1274,12 +1318,12 @@ iconv:
 .globl iconv_close
 .type iconv_close, %function;
 iconv_close:
-.globl __nl_langinfo_l
-.type __nl_langinfo_l, %function;
-__nl_langinfo_l:
 .weak nl_langinfo_l
 .type nl_langinfo_l, %function;
 nl_langinfo_l:
+.globl __nl_langinfo_l
+.type __nl_langinfo_l, %function;
+__nl_langinfo_l:
 .globl __nl_langinfo
 .type __nl_langinfo, %function;
 __nl_langinfo:
@@ -1415,6 +1459,9 @@ acoshf:
 .globl acoshl
 .type acoshl, %function;
 acoshl:
+.globl acosl
+.type acosl, %function;
+acosl:
 .globl asin
 .type asin, %function;
 asin:
@@ -1430,6 +1477,9 @@ asinhf:
 .globl asinhl
 .type asinhl, %function;
 asinhl:
+.globl asinl
+.type asinl, %function;
+asinl:
 .globl atan
 .type atan, %function;
 atan:
@@ -1439,6 +1489,9 @@ atan2:
 .globl atan2f
 .type atan2f, %function;
 atan2f:
+.globl atan2l
+.type atan2l, %function;
+atan2l:
 .globl atanf
 .type atanf, %function;
 atanf:
@@ -1451,6 +1504,9 @@ atanhf:
 .globl atanhl
 .type atanhl, %function;
 atanhl:
+.globl atanl
+.type atanl, %function;
+atanl:
 .globl cbrt
 .type cbrt, %function;
 cbrt:
@@ -1466,12 +1522,9 @@ ceil:
 .globl ceilf
 .type ceilf, %function;
 ceilf:
-.globl copysign
-.type copysign, %function;
-copysign:
-.globl copysignf
-.type copysignf, %function;
-copysignf:
+.globl ceill
+.type ceill, %function;
+ceill:
 .globl copysignl
 .type copysignl, %function;
 copysignl:
@@ -1520,33 +1573,45 @@ pow10:
 .globl exp10
 .type exp10, %function;
 exp10:
-.globl exp10f
-.type exp10f, %function;
-exp10f:
 .weak pow10f
 .type pow10f, %function;
 pow10f:
-.globl exp10l
-.type exp10l, %function;
-exp10l:
+.globl exp10f
+.type exp10f, %function;
+exp10f:
 .weak pow10l
 .type pow10l, %function;
 pow10l:
+.globl exp10l
+.type exp10l, %function;
+exp10l:
 .globl exp2
 .type exp2, %function;
 exp2:
 .globl exp2f
 .type exp2f, %function;
 exp2f:
+.globl exp2l
+.type exp2l, %function;
+exp2l:
 .globl expf
 .type expf, %function;
 expf:
+.globl expl
+.type expl, %function;
+expl:
 .globl expm1
 .type expm1, %function;
 expm1:
 .globl expm1f
 .type expm1f, %function;
 expm1f:
+.globl expm1l
+.type expm1l, %function;
+expm1l:
+.globl fabsl
+.type fabsl, %function;
+fabsl:
 .globl fdim
 .type fdim, %function;
 fdim:
@@ -1568,24 +1633,15 @@ floor:
 .globl floorf
 .type floorf, %function;
 floorf:
+.globl floorl
+.type floorl, %function;
+floorl:
 .globl fmal
 .type fmal, %function;
 fmal:
-.globl fmax
-.type fmax, %function;
-fmax:
-.globl fmaxf
-.type fmaxf, %function;
-fmaxf:
 .globl fmaxl
 .type fmaxl, %function;
 fmaxl:
-.globl fmin
-.type fmin, %function;
-fmin:
-.globl fminf
-.type fminf, %function;
-fminf:
 .globl fminl
 .type fminl, %function;
 fminl:
@@ -1595,6 +1651,9 @@ fmod:
 .globl fmodf
 .type fmodf, %function;
 fmodf:
+.globl fmodl
+.type fmodl, %function;
+fmodl:
 .globl frexp
 .type frexp, %function;
 frexp:
@@ -1679,15 +1738,24 @@ lgammaf:
 .weak lgammaf_r
 .type lgammaf_r, %function;
 lgammaf_r:
-.globl __lgammal_r
-.type __lgammal_r, %function;
-__lgammal_r:
 .weak lgammal_r
 .type lgammal_r, %function;
 lgammal_r:
+.globl __lgammal_r
+.type __lgammal_r, %function;
+__lgammal_r:
 .globl lgammal
 .type lgammal, %function;
 lgammal:
+.globl llrint
+.type llrint, %function;
+llrint:
+.globl llrintf
+.type llrintf, %function;
+llrintf:
+.globl llrintl
+.type llrintl, %function;
+llrintl:
 .globl llround
 .type llround, %function;
 llround:
@@ -1706,18 +1774,27 @@ log10:
 .globl log10f
 .type log10f, %function;
 log10f:
+.globl log10l
+.type log10l, %function;
+log10l:
 .globl log1p
 .type log1p, %function;
 log1p:
 .globl log1pf
 .type log1pf, %function;
 log1pf:
+.globl log1pl
+.type log1pl, %function;
+log1pl:
 .globl log2
 .type log2, %function;
 log2:
 .globl log2f
 .type log2f, %function;
 log2f:
+.globl log2l
+.type log2l, %function;
+log2l:
 .globl logb
 .type logb, %function;
 logb:
@@ -1730,6 +1807,18 @@ logbl:
 .globl logf
 .type logf, %function;
 logf:
+.globl logl
+.type logl, %function;
+logl:
+.globl lrint
+.type lrint, %function;
+lrint:
+.globl lrintf
+.type lrintf, %function;
+lrintf:
+.globl lrintl
+.type lrintl, %function;
+lrintl:
 .globl lround
 .type lround, %function;
 lround:
@@ -1799,24 +1888,69 @@ remainder:
 .weak drem
 .type drem, %function;
 drem:
-.globl remainderf
-.type remainderf, %function;
-remainderf:
 .weak dremf
 .type dremf, %function;
 dremf:
+.globl remainderf
+.type remainderf, %function;
+remainderf:
+.globl remainderl
+.type remainderl, %function;
+remainderl:
 .globl remquo
 .type remquo, %function;
 remquo:
 .globl remquof
 .type remquof, %function;
 remquof:
+.globl remquol
+.type remquol, %function;
+remquol:
 .globl rint
 .type rint, %function;
 rint:
 .globl rintf
 .type rintf, %function;
 rintf:
+.globl rintl
+.type rintl, %function;
+rintl:
+.globl copysign
+.type copysign, %function;
+copysign:
+.globl copysignf
+.type copysignf, %function;
+copysignf:
+.globl fabs
+.type fabs, %function;
+fabs:
+.globl fabsf
+.type fabsf, %function;
+fabsf:
+.globl fma
+.type fma, %function;
+fma:
+.globl fmaf
+.type fmaf, %function;
+fmaf:
+.globl fmax
+.type fmax, %function;
+fmax:
+.globl fmaxf
+.type fmaxf, %function;
+fmaxf:
+.globl fmin
+.type fmin, %function;
+fmin:
+.globl fminf
+.type fminf, %function;
+fminf:
+.globl sqrt
+.type sqrt, %function;
+sqrt:
+.globl sqrtf
+.type sqrtf, %function;
+sqrtf:
 .globl round
 .type round, %function;
 round:
@@ -1883,6 +2017,9 @@ sinhl:
 .globl sinl
 .type sinl, %function;
 sinl:
+.globl sqrtl
+.type sqrtl, %function;
+sqrtl:
 .globl tan
 .type tan, %function;
 tan:
@@ -1916,72 +2053,21 @@ trunc:
 .globl truncf
 .type truncf, %function;
 truncf:
-.globl fabs
-.type fabs, %function;
-fabs:
-.globl fabsf
-.type fabsf, %function;
-fabsf:
-.globl fabsl
-.type fabsl, %function;
-fabsl:
-.globl fma
-.type fma, %function;
-fma:
-.globl fmaf
-.type fmaf, %function;
-fmaf:
-.globl fmodl
-.type fmodl, %function;
-fmodl:
-.globl llrint
-.type llrint, %function;
-llrint:
-.globl llrintf
-.type llrintf, %function;
-llrintf:
-.globl llrintl
-.type llrintl, %function;
-llrintl:
-.globl lrint
-.type lrint, %function;
-lrint:
-.globl lrintf
-.type lrintf, %function;
-lrintf:
-.globl lrintl
-.type lrintl, %function;
-lrintl:
-.globl remainderl
-.type remainderl, %function;
-remainderl:
-.globl remquol
-.type remquol, %function;
-remquol:
-.globl rintl
-.type rintl, %function;
-rintl:
-.globl sqrt
-.type sqrt, %function;
-sqrt:
-.globl sqrtf
-.type sqrtf, %function;
-sqrtf:
-.globl sqrtl
-.type sqrtl, %function;
-sqrtl:
+.globl truncl
+.type truncl, %function;
+truncl:
 .globl a64l
 .type a64l, %function;
 a64l:
 .globl l64a
 .type l64a, %function;
 l64a:
-.globl basename
-.type basename, %function;
-basename:
 .weak __xpg_basename
 .type __xpg_basename, %function;
 __xpg_basename:
+.globl basename
+.type basename, %function;
+basename:
 .globl dirname
 .type dirname, %function;
 dirname:
@@ -2057,12 +2143,12 @@ ioctl:
 .globl issetugid
 .type issetugid, %function;
 issetugid:
-.globl lockf
-.type lockf, %function;
-lockf:
 .weak lockf64
 .type lockf64, %function;
 lockf64:
+.globl lockf
+.type lockf, %function;
+lockf:
 .globl login_tty
 .type login_tty, %function;
 login_tty:
@@ -2084,12 +2170,12 @@ addmntent:
 .globl hasmntopt
 .type hasmntopt, %function;
 hasmntopt:
-.globl nftw
-.type nftw, %function;
-nftw:
 .weak nftw64
 .type nftw64, %function;
 nftw64:
+.globl nftw
+.type nftw, %function;
+nftw:
 .globl openpty
 .type openpty, %function;
 openpty:
@@ -2135,21 +2221,21 @@ closelog:
 .globl openlog
 .type openlog, %function;
 openlog:
-.weak vsyslog
-.type vsyslog, %function;
-vsyslog:
 .globl syslog
 .type syslog, %function;
 syslog:
+.weak vsyslog
+.type vsyslog, %function;
+vsyslog:
 .globl uname
-.type uname, %function;
-uname:
-.globl wordfree
-.type wordfree, %function;
-wordfree:
+.type uname, %function;
+uname:
 .globl wordexp
 .type wordexp, %function;
 wordexp:
+.globl wordfree
+.type wordfree, %function;
+wordfree:
 .weak madvise
 .type madvise, %function;
 madvise:
@@ -2162,12 +2248,12 @@ mlock:
 .globl mlockall
 .type mlockall, %function;
 mlockall:
-.weak mmap64
-.type mmap64, %function;
-mmap64:
 .weak mmap
 .type mmap, %function;
 mmap:
+.weak mmap64
+.type mmap64, %function;
+mmap64:
 .weak mprotect
 .type mprotect, %function;
 mprotect:
@@ -2474,18 +2560,18 @@ ns_put16:
 .globl ns_put32
 .type ns_put32, %function;
 ns_put32:
-.globl ns_skiprr
-.type ns_skiprr, %function;
-ns_skiprr:
 .globl ns_initparse
 .type ns_initparse, %function;
 ns_initparse:
-.globl ns_name_uncompress
-.type ns_name_uncompress, %function;
-ns_name_uncompress:
+.globl ns_skiprr
+.type ns_skiprr, %function;
+ns_skiprr:
 .globl ns_parserr
 .type ns_parserr, %function;
 ns_parserr:
+.globl ns_name_uncompress
+.type ns_name_uncompress, %function;
+ns_name_uncompress:
 .globl ntohl
 .type ntohl, %function;
 ntohl:
@@ -2525,12 +2611,12 @@ res_init:
 .weak res_mkquery
 .type res_mkquery, %function;
 res_mkquery:
-.weak res_search
-.type res_search, %function;
-res_search:
 .globl res_query
 .type res_query, %function;
 res_query:
+.weak res_search
+.type res_search, %function;
+res_search:
 .globl res_querydomain
 .type res_querydomain, %function;
 res_querydomain:
@@ -2615,12 +2701,12 @@ getpwnam_r:
 .globl getpwuid_r
 .type getpwuid_r, %function;
 getpwuid_r:
-.globl setpwent
-.type setpwent, %function;
-setpwent:
 .weak endpwent
 .type endpwent, %function;
 endpwent:
+.globl setpwent
+.type setpwent, %function;
+setpwent:
 .globl getpwent
 .type getpwent, %function;
 getpwent:
@@ -2810,6 +2896,9 @@ posix_spawnp:
 .globl system
 .type system, %function;
 system:
+.globl vfork
+.type vfork, %function;
+vfork:
 .globl wait
 .type wait, %function;
 wait:
@@ -2822,24 +2911,24 @@ waitpid:
 .globl fnmatch
 .type fnmatch, %function;
 fnmatch:
-.weak glob64
-.type glob64, %function;
-glob64:
 .globl glob
 .type glob, %function;
 glob:
-.weak globfree64
-.type globfree64, %function;
-globfree64:
+.weak glob64
+.type glob64, %function;
+glob64:
 .globl globfree
 .type globfree, %function;
 globfree:
-.globl regfree
-.type regfree, %function;
-regfree:
+.weak globfree64
+.type globfree64, %function;
+globfree64:
 .globl regcomp
 .type regcomp, %function;
 regcomp:
+.globl regfree
+.type regfree, %function;
+regfree:
 .globl regerror
 .type regerror, %function;
 regerror:
@@ -2888,24 +2977,24 @@ sched_setscheduler:
 .globl sched_yield
 .type sched_yield, %function;
 sched_yield:
-.weak hcreate_r
-.type hcreate_r, %function;
-hcreate_r:
 .globl hcreate
 .type hcreate, %function;
 hcreate:
-.weak hdestroy_r
-.type hdestroy_r, %function;
-hdestroy_r:
+.weak hcreate_r
+.type hcreate_r, %function;
+hcreate_r:
 .globl hdestroy
 .type hdestroy, %function;
 hdestroy:
-.weak hsearch_r
-.type hsearch_r, %function;
-hsearch_r:
+.weak hdestroy_r
+.type hdestroy_r, %function;
+hdestroy_r:
 .globl hsearch
 .type hsearch, %function;
 hsearch:
+.weak hsearch_r
+.type hsearch_r, %function;
+hsearch_r:
 .globl insque
 .type insque, %function;
 insque:
@@ -2942,6 +3031,26 @@ pselect:
 .globl select
 .type select, %function;
 select:
+.globl _longjmp
+.type _longjmp, %function;
+_longjmp:
+#if !defined(ARCH_mips) && !defined(ARCH_i386) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64)
+.globl __longjmp
+.type __longjmp, %function;
+__longjmp:
+#endif
+.globl longjmp
+.type longjmp, %function;
+longjmp:
+.globl _setjmp
+.type _setjmp, %function;
+_setjmp:
+.globl setjmp
+.type setjmp, %function;
+setjmp:
+.globl __setjmp
+.type __setjmp, %function;
+__setjmp:
 .globl getitimer
 .type getitimer, %function;
 getitimer:
@@ -2960,6 +3069,12 @@ psignal:
 .globl raise
 .type raise, %function;
 raise:
+.globl __sigsetjmp
+.type __sigsetjmp, %function;
+__sigsetjmp:
+.globl sigsetjmp
+.type sigsetjmp, %function;
+sigsetjmp:
 .globl setitimer
 .type setitimer, %function;
 setitimer:
@@ -3002,15 +3117,15 @@ sigismember:
 .globl siglongjmp
 .type siglongjmp, %function;
 siglongjmp:
+.globl signal
+.type signal, %function;
+signal:
 .weak __sysv_signal
 .type __sysv_signal, %function;
 __sysv_signal:
 .weak bsd_signal
 .type bsd_signal, %function;
 bsd_signal:
-.globl signal
-.type signal, %function;
-signal:
 .globl sigorset
 .type sigorset, %function;
 sigorset:
@@ -3050,28 +3165,36 @@ sigwait:
 .globl sigwaitinfo
 .type sigwaitinfo, %function;
 sigwaitinfo:
-.weak __fxstat64
+WEAK64 __fxstat64
 .type __fxstat64, %function;
 __fxstat64:
+#if !defined(ARCH_mips) && !defined(ARCH_i386) && !defined(ARCH_powerpc)
 .globl __fxstat
 .type __fxstat, %function;
 __fxstat:
+#endif
+#if !defined(ARCH_mips) && !defined(ARCH_i386) && !defined(ARCH_powerpc)
 .globl __fxstatat
 .type __fxstatat, %function;
 __fxstatat:
-.weak __fxstatat64
+#endif
+WEAK64 __fxstatat64
 .type __fxstatat64, %function;
 __fxstatat64:
-.weak __lxstat64
+WEAK64 __lxstat64
 .type __lxstat64, %function;
 __lxstat64:
+#if !defined(ARCH_mips) && !defined(ARCH_i386) && !defined(ARCH_powerpc)
 .globl __lxstat
 .type __lxstat, %function;
 __lxstat:
+#endif
+#if !defined(ARCH_mips) && !defined(ARCH_i386) && !defined(ARCH_powerpc)
 .globl __xstat
 .type __xstat, %function;
 __xstat:
-.weak __xstat64
+#endif
+WEAK64 __xstat64
 .type __xstat64, %function;
 __xstat64:
 .globl __xmknod
@@ -3104,18 +3227,18 @@ fstatat64:
 .globl futimens
 .type futimens, %function;
 futimens:
-.weak futimesat
+WEAK64 futimesat
 .type futimesat, %function;
 futimesat:
 .globl lchmod
 .type lchmod, %function;
 lchmod:
-.globl lstat
-.type lstat, %function;
-lstat:
 .weak lstat64
 .type lstat64, %function;
 lstat64:
+.globl lstat
+.type lstat, %function;
+lstat:
 .globl mkdir
 .type mkdir, %function;
 mkdir:
@@ -3134,36 +3257,36 @@ mknod:
 .globl mknodat
 .type mknodat, %function;
 mknodat:
-.weak stat64
-.type stat64, %function;
-stat64:
 .globl stat
 .type stat, %function;
 stat:
-.weak statfs64
-.type statfs64, %function;
-statfs64:
+.weak stat64
+.type stat64, %function;
+stat64:
 .weak statfs
 .type statfs, %function;
 statfs:
+.weak statfs64
+.type statfs64, %function;
+statfs64:
 .weak fstatfs
 .type fstatfs, %function;
 fstatfs:
 .weak fstatfs64
 .type fstatfs64, %function;
 fstatfs64:
-.globl statvfs
-.type statvfs, %function;
-statvfs:
 .weak statvfs64
 .type statvfs64, %function;
 statvfs64:
-.globl fstatvfs
-.type fstatvfs, %function;
-fstatvfs:
+.globl statvfs
+.type statvfs, %function;
+statvfs:
 .weak fstatvfs64
 .type fstatvfs64, %function;
 fstatvfs64:
+.globl fstatvfs
+.type fstatvfs, %function;
+fstatvfs:
 .globl umask
 .type umask, %function;
 umask:
@@ -3184,12 +3307,12 @@ __uflow:
 .globl asprintf
 .type asprintf, %function;
 asprintf:
-.globl clearerr
-.type clearerr, %function;
-clearerr:
 .weak clearerr_unlocked
 .type clearerr_unlocked, %function;
 clearerr_unlocked:
+.globl clearerr
+.type clearerr, %function;
+clearerr:
 .globl dprintf
 .type dprintf, %function;
 dprintf:
@@ -3241,66 +3364,66 @@ __fseterr:
 .globl fclose
 .type fclose, %function;
 fclose:
-.weak feof_unlocked
-.type feof_unlocked, %function;
-feof_unlocked:
-.globl feof
-.type feof, %function;
-feof:
 .weak _IO_feof_unlocked
 .type _IO_feof_unlocked, %function;
 _IO_feof_unlocked:
-.weak _IO_ferror_unlocked
-.type _IO_ferror_unlocked, %function;
-_IO_ferror_unlocked:
-.weak ferror_unlocked
-.type ferror_unlocked, %function;
-ferror_unlocked:
+.globl feof
+.type feof, %function;
+feof:
+.weak feof_unlocked
+.type feof_unlocked, %function;
+feof_unlocked:
 .globl ferror
 .type ferror, %function;
 ferror:
-.globl fflush
-.type fflush, %function;
-fflush:
+.weak ferror_unlocked
+.type ferror_unlocked, %function;
+ferror_unlocked:
+.weak _IO_ferror_unlocked
+.type _IO_ferror_unlocked, %function;
+_IO_ferror_unlocked:
 .weak fflush_unlocked
 .type fflush_unlocked, %function;
 fflush_unlocked:
+.globl fflush
+.type fflush, %function;
+fflush:
 .globl fgetc
 .type fgetc, %function;
 fgetc:
 .globl fgetln
 .type fgetln, %function;
 fgetln:
-.weak fgetpos64
-.type fgetpos64, %function;
-fgetpos64:
 .globl fgetpos
 .type fgetpos, %function;
 fgetpos:
-.globl fgets
-.type fgets, %function;
-fgets:
+.weak fgetpos64
+.type fgetpos64, %function;
+fgetpos64:
 .weak fgets_unlocked
 .type fgets_unlocked, %function;
 fgets_unlocked:
+.globl fgets
+.type fgets, %function;
+fgets:
 .weak getwc_unlocked
 .type getwc_unlocked, %function;
 getwc_unlocked:
-.globl __fgetwc_unlocked
-.type __fgetwc_unlocked, %function;
-__fgetwc_unlocked:
 .weak fgetwc_unlocked
 .type fgetwc_unlocked, %function;
 fgetwc_unlocked:
+.globl __fgetwc_unlocked
+.type __fgetwc_unlocked, %function;
+__fgetwc_unlocked:
 .globl fgetwc
 .type fgetwc, %function;
 fgetwc:
-.globl fgetws
-.type fgetws, %function;
-fgetws:
 .weak fgetws_unlocked
 .type fgetws_unlocked, %function;
 fgetws_unlocked:
+.globl fgetws
+.type fgetws, %function;
+fgetws:
 .weak fileno_unlocked
 .type fileno_unlocked, %function;
 fileno_unlocked:
@@ -3313,12 +3436,12 @@ flockfile:
 .globl fmemopen
 .type fmemopen, %function;
 fmemopen:
-.globl fopen
-.type fopen, %function;
-fopen:
 .weak fopen64
 .type fopen64, %function;
 fopen64:
+.globl fopen
+.type fopen, %function;
+fopen:
 .globl fopencookie
 .type fopencookie, %function;
 fopencookie:
@@ -3337,12 +3460,12 @@ fputs:
 .weak putwc_unlocked
 .type putwc_unlocked, %function;
 putwc_unlocked:
-.globl __fputwc_unlocked
-.type __fputwc_unlocked, %function;
-__fputwc_unlocked:
 .weak fputwc_unlocked
 .type fputwc_unlocked, %function;
 fputwc_unlocked:
+.globl __fputwc_unlocked
+.type __fputwc_unlocked, %function;
+__fputwc_unlocked:
 .globl fputwc
 .type fputwc, %function;
 fputwc:
@@ -3352,12 +3475,12 @@ fputws:
 .weak fputws_unlocked
 .type fputws_unlocked, %function;
 fputws_unlocked:
-.weak fread_unlocked
-.type fread_unlocked, %function;
-fread_unlocked:
 .globl fread
 .type fread, %function;
 fread:
+.weak fread_unlocked
+.type fread_unlocked, %function;
+fread_unlocked:
 .weak freopen64
 .type freopen64, %function;
 freopen64:
@@ -3370,12 +3493,12 @@ __isoc99_fscanf:
 .globl fscanf
 .type fscanf, %function;
 fscanf:
-.weak fseeko64
-.type fseeko64, %function;
-fseeko64:
 .weak fseeko
 .type fseeko, %function;
 fseeko:
+.weak fseeko64
+.type fseeko64, %function;
+fseeko64:
 .globl fseek
 .type fseek, %function;
 fseek:
@@ -3385,12 +3508,12 @@ fsetpos:
 .weak fsetpos64
 .type fsetpos64, %function;
 fsetpos64:
-.weak ftello64
-.type ftello64, %function;
-ftello64:
 .weak ftello
 .type ftello, %function;
 ftello:
+.weak ftello64
+.type ftello64, %function;
+ftello64:
 .globl ftell
 .type ftell, %function;
 ftell:
@@ -3412,24 +3535,24 @@ fwrite_unlocked:
 .globl fwrite
 .type fwrite, %function;
 fwrite:
-.weak __isoc99_fwscanf
-.type __isoc99_fwscanf, %function;
-__isoc99_fwscanf:
 .globl fwscanf
 .type fwscanf, %function;
 fwscanf:
+.weak __isoc99_fwscanf
+.type __isoc99_fwscanf, %function;
+__isoc99_fwscanf:
 .globl getc
 .type getc, %function;
 getc:
 .weak _IO_getc
 .type _IO_getc, %function;
 _IO_getc:
-.globl getc_unlocked
-.type getc_unlocked, %function;
-getc_unlocked:
 .weak _IO_getc_unlocked
 .type _IO_getc_unlocked, %function;
 _IO_getc_unlocked:
+.globl getc_unlocked
+.type getc_unlocked, %function;
+getc_unlocked:
 .weak fgetc_unlocked
 .type fgetc_unlocked, %function;
 fgetc_unlocked:
@@ -3457,12 +3580,12 @@ getw:
 .globl getwc
 .type getwc, %function;
 getwc:
-.weak getwchar_unlocked
-.type getwchar_unlocked, %function;
-getwchar_unlocked:
 .globl getwchar
 .type getwchar, %function;
 getwchar:
+.weak getwchar_unlocked
+.type getwchar_unlocked, %function;
+getwchar_unlocked:
 .globl open_memstream
 .type open_memstream, %function;
 open_memstream:
@@ -3487,12 +3610,12 @@ putc:
 .weak _IO_putc
 .type _IO_putc, %function;
 _IO_putc:
-.globl putc_unlocked
-.type putc_unlocked, %function;
-putc_unlocked:
 .weak _IO_putc_unlocked
 .type _IO_putc_unlocked, %function;
 _IO_putc_unlocked:
+.globl putc_unlocked
+.type putc_unlocked, %function;
+putc_unlocked:
 .weak fputc_unlocked
 .type fputc_unlocked, %function;
 fputc_unlocked:
@@ -3511,12 +3634,12 @@ putw:
 .globl putwc
 .type putwc, %function;
 putwc:
-.weak putwchar_unlocked
-.type putwchar_unlocked, %function;
-putwchar_unlocked:
 .globl putwchar
 .type putwchar, %function;
 putwchar:
+.weak putwchar_unlocked
+.type putwchar_unlocked, %function;
+putwchar_unlocked:
 .globl remove
 .type remove, %function;
 remove:
@@ -3550,21 +3673,21 @@ snprintf:
 .globl sprintf
 .type sprintf, %function;
 sprintf:
-.globl sscanf
-.type sscanf, %function;
-sscanf:
 .weak __isoc99_sscanf
 .type __isoc99_sscanf, %function;
 __isoc99_sscanf:
+.globl sscanf
+.type sscanf, %function;
+sscanf:
 .globl swprintf
 .type swprintf, %function;
 swprintf:
-.weak __isoc99_swscanf
-.type __isoc99_swscanf, %function;
-__isoc99_swscanf:
 .globl swscanf
 .type swscanf, %function;
 swscanf:
+.weak __isoc99_swscanf
+.type __isoc99_swscanf, %function;
+__isoc99_swscanf:
 .globl tempnam
 .type tempnam, %function;
 tempnam:
@@ -3592,42 +3715,42 @@ vdprintf:
 .globl vfprintf
 .type vfprintf, %function;
 vfprintf:
-.globl vfscanf
-.type vfscanf, %function;
-vfscanf:
 .weak __isoc99_vfscanf
 .type __isoc99_vfscanf, %function;
 __isoc99_vfscanf:
+.globl vfscanf
+.type vfscanf, %function;
+vfscanf:
 .globl vfwprintf
 .type vfwprintf, %function;
 vfwprintf:
-.weak __isoc99_vfwscanf
-.type __isoc99_vfwscanf, %function;
-__isoc99_vfwscanf:
 .globl vfwscanf
 .type vfwscanf, %function;
 vfwscanf:
+.weak __isoc99_vfwscanf
+.type __isoc99_vfwscanf, %function;
+__isoc99_vfwscanf:
 .globl vprintf
-.type vprintf, %function;
-vprintf:
-.globl vscanf
-.type vscanf, %function;
-vscanf:
+.type vprintf, %function;
+vprintf:
 .weak __isoc99_vscanf
 .type __isoc99_vscanf, %function;
 __isoc99_vscanf:
+.globl vscanf
+.type vscanf, %function;
+vscanf:
 .globl vsnprintf
 .type vsnprintf, %function;
 vsnprintf:
 .globl vsprintf
 .type vsprintf, %function;
 vsprintf:
-.weak __isoc99_vsscanf
-.type __isoc99_vsscanf, %function;
-__isoc99_vsscanf:
 .globl vsscanf
 .type vsscanf, %function;
 vsscanf:
+.weak __isoc99_vsscanf
+.type __isoc99_vsscanf, %function;
+__isoc99_vsscanf:
 .globl vswprintf
 .type vswprintf, %function;
 vswprintf:
@@ -3640,21 +3763,21 @@ vswscanf:
 .globl vwprintf
 .type vwprintf, %function;
 vwprintf:
-.weak __isoc99_vwscanf
-.type __isoc99_vwscanf, %function;
-__isoc99_vwscanf:
 .globl vwscanf
 .type vwscanf, %function;
 vwscanf:
+.weak __isoc99_vwscanf
+.type __isoc99_vwscanf, %function;
+__isoc99_vwscanf:
 .globl wprintf
 .type wprintf, %function;
 wprintf:
-.globl wscanf
-.type wscanf, %function;
-wscanf:
 .weak __isoc99_wscanf
 .type __isoc99_wscanf, %function;
 __isoc99_wscanf:
+.globl wscanf
+.type wscanf, %function;
+wscanf:
 .globl abs
 .type abs, %function;
 abs:
@@ -3715,60 +3838,60 @@ strtof_l:
 .globl strtof
 .type strtof, %function;
 strtof:
-.weak strtod_l
-.type strtod_l, %function;
-strtod_l:
 .globl strtod
 .type strtod, %function;
 strtod:
 .weak __strtod_l
 .type __strtod_l, %function;
 __strtod_l:
-.weak __strtold_l
-.type __strtold_l, %function;
-__strtold_l:
-.globl strtold
-.type strtold, %function;
-strtold:
+.weak strtod_l
+.type strtod_l, %function;
+strtod_l:
 .weak strtold_l
 .type strtold_l, %function;
 strtold_l:
-.weak __strtoull_internal
-.type __strtoull_internal, %function;
-__strtoull_internal:
+.globl strtold
+.type strtold, %function;
+strtold:
+.weak __strtold_l
+.type __strtold_l, %function;
+__strtold_l:
 .globl strtoull
 .type strtoull, %function;
 strtoull:
+.weak __strtoull_internal
+.type __strtoull_internal, %function;
+__strtoull_internal:
 .globl strtoll
 .type strtoll, %function;
 strtoll:
 .weak __strtoll_internal
 .type __strtoll_internal, %function;
 __strtoll_internal:
-.weak __strtoul_internal
-.type __strtoul_internal, %function;
-__strtoul_internal:
 .globl strtoul
 .type strtoul, %function;
 strtoul:
-.globl strtol
-.type strtol, %function;
-strtol:
+.weak __strtoul_internal
+.type __strtoul_internal, %function;
+__strtoul_internal:
 .weak __strtol_internal
 .type __strtol_internal, %function;
 __strtol_internal:
+.globl strtol
+.type strtol, %function;
+strtol:
 .globl strtoimax
 .type strtoimax, %function;
 strtoimax:
 .weak __strtoimax_internal
 .type __strtoimax_internal, %function;
 __strtoimax_internal:
-.weak __strtoumax_internal
-.type __strtoumax_internal, %function;
-__strtoumax_internal:
 .globl strtoumax
 .type strtoumax, %function;
 strtoumax:
+.weak __strtoumax_internal
+.type __strtoumax_internal, %function;
+__strtoumax_internal:
 .globl wcstof
 .type wcstof, %function;
 wcstof:
@@ -3778,18 +3901,18 @@ wcstod:
 .globl wcstold
 .type wcstold, %function;
 wcstold:
-.globl wcstoul
-.type wcstoul, %function;
-wcstoul:
 .globl wcstoull
 .type wcstoull, %function;
 wcstoull:
-.globl wcstol
-.type wcstol, %function;
-wcstol:
 .globl wcstoll
 .type wcstoll, %function;
 wcstoll:
+.globl wcstoul
+.type wcstoul, %function;
+wcstoul:
+.globl wcstol
+.type wcstol, %function;
+wcstol:
 .globl wcstoimax
 .type wcstoimax, %function;
 wcstoimax:
@@ -3820,15 +3943,24 @@ memchr:
 .globl memcmp
 .type memcmp, %function;
 memcmp:
+.globl memcpy
+.type memcpy, %function;
+memcpy:
 .globl memmem
 .type memmem, %function;
 memmem:
+.globl memmove
+.type memmove, %function;
+memmove:
 .globl mempcpy
 .type mempcpy, %function;
 mempcpy:
 .weak memrchr
 .type memrchr, %function;
 memrchr:
+.globl memset
+.type memset, %function;
+memset:
 .globl rindex
 .type rindex, %function;
 rindex:
@@ -4033,12 +4165,12 @@ mkostemp:
 .weak mkostemp64
 .type mkostemp64, %function;
 mkostemp64:
-.weak mkostemps64
-.type mkostemps64, %function;
-mkostemps64:
 .weak mkostemps
 .type mkostemps, %function;
 mkostemps:
+.weak mkostemps64
+.type mkostemps64, %function;
+mkostemps64:
 .globl mkstemp
 .type mkstemp, %function;
 mkstemp:
@@ -4261,7 +4393,7 @@ pthread_cond_init:
 .globl pthread_cond_signal
 .type pthread_cond_signal, %function;
 pthread_cond_signal:
-.weak pthread_cond_timedwait
+WEAK64 pthread_cond_timedwait
 .type pthread_cond_timedwait, %function;
 pthread_cond_timedwait:
 .globl pthread_cond_wait
@@ -4285,18 +4417,18 @@ pthread_exit:
 .weak pthread_create
 .type pthread_create, %function;
 pthread_create:
-.weak thrd_detach
-.type thrd_detach, %function;
-thrd_detach:
 .weak pthread_detach
 .type pthread_detach, %function;
 pthread_detach:
-.weak thrd_equal
-.type thrd_equal, %function;
-thrd_equal:
+.weak thrd_detach
+.type thrd_detach, %function;
+thrd_detach:
 .weak pthread_equal
 .type pthread_equal, %function;
 pthread_equal:
+.weak thrd_equal
+.type thrd_equal, %function;
+thrd_equal:
 .globl pthread_getattr_np
 .type pthread_getattr_np, %function;
 pthread_getattr_np:
@@ -4315,12 +4447,12 @@ tss_get:
 .weak pthread_getspecific
 .type pthread_getspecific, %function;
 pthread_getspecific:
-.weak pthread_timedjoin_np
-.type pthread_timedjoin_np, %function;
-pthread_timedjoin_np:
 .weak pthread_join
 .type pthread_join, %function;
 pthread_join:
+WEAK64 pthread_timedjoin_np
+.type pthread_timedjoin_np, %function;
+pthread_timedjoin_np:
 .weak pthread_tryjoin_np
 .type pthread_tryjoin_np, %function;
 pthread_tryjoin_np:
@@ -4351,7 +4483,7 @@ pthread_mutex_lock:
 .globl pthread_mutex_setprioceiling
 .type pthread_mutex_setprioceiling, %function;
 pthread_mutex_setprioceiling:
-.weak pthread_mutex_timedlock
+WEAK64 pthread_mutex_timedlock
 .type pthread_mutex_timedlock, %function;
 pthread_mutex_timedlock:
 .weak pthread_mutex_trylock
@@ -4390,10 +4522,10 @@ pthread_rwlock_init:
 .weak pthread_rwlock_rdlock
 .type pthread_rwlock_rdlock, %function;
 pthread_rwlock_rdlock:
-.weak pthread_rwlock_timedrdlock
+WEAK64 pthread_rwlock_timedrdlock
 .type pthread_rwlock_timedrdlock, %function;
 pthread_rwlock_timedrdlock:
-.weak pthread_rwlock_timedwrlock
+WEAK64 pthread_rwlock_timedwrlock
 .type pthread_rwlock_timedwrlock, %function;
 pthread_rwlock_timedwrlock:
 .weak pthread_rwlock_tryrdlock
@@ -4417,12 +4549,12 @@ pthread_rwlockattr_init:
 .globl pthread_rwlockattr_setpshared
 .type pthread_rwlockattr_setpshared, %function;
 pthread_rwlockattr_setpshared:
-.weak thrd_current
-.type thrd_current, %function;
-thrd_current:
 .weak pthread_self
 .type pthread_self, %function;
 pthread_self:
+.weak thrd_current
+.type thrd_current, %function;
+thrd_current:
 .globl pthread_setattr_default_np
 .type pthread_setattr_default_np, %function;
 pthread_setattr_default_np:
@@ -4543,10 +4675,10 @@ clock_getcpuclockid:
 .globl clock_getres
 .type clock_getres, %function;
 clock_getres:
-.weak clock_gettime
+WEAK64 clock_gettime
 .type clock_gettime, %function;
 clock_gettime:
-.weak clock_nanosleep
+WEAK64 clock_nanosleep
 .type clock_nanosleep, %function;
 clock_nanosleep:
 .globl clock_settime
@@ -4573,13 +4705,13 @@ gettimeofday:
 .globl gmtime
 .type gmtime, %function;
 gmtime:
-.weak gmtime_r
+WEAK64 gmtime_r
 .type gmtime_r, %function;
 gmtime_r:
 .globl localtime
 .type localtime, %function;
 localtime:
-.weak localtime_r
+WEAK64 localtime_r
 .type localtime_r, %function;
 localtime_r:
 .globl mktime
@@ -4687,12 +4819,12 @@ fdatasync:
 .globl fsync
 .type fsync, %function;
 fsync:
-.globl ftruncate
-.type ftruncate, %function;
-ftruncate:
 .weak ftruncate64
 .type ftruncate64, %function;
 ftruncate64:
+.globl ftruncate
+.type ftruncate, %function;
+ftruncate:
 .globl getcwd
 .type getcwd, %function;
 getcwd:
@@ -4747,12 +4879,12 @@ link:
 .globl linkat
 .type linkat, %function;
 linkat:
-.weak lseek64
-.type lseek64, %function;
-lseek64:
 .weak lseek
 .type lseek, %function;
 lseek:
+.weak lseek64
+.type lseek64, %function;
+lseek64:
 .globl nice
 .type nice, %function;
 nice:
@@ -4768,30 +4900,30 @@ pipe2:
 .globl posix_close
 .type posix_close, %function;
 posix_close:
-.globl pread
-.type pread, %function;
-pread:
 .weak pread64
 .type pread64, %function;
 pread64:
-.weak preadv64
-.type preadv64, %function;
-preadv64:
+.globl pread
+.type pread, %function;
+pread:
 .globl preadv
 .type preadv, %function;
 preadv:
+.weak preadv64
+.type preadv64, %function;
+preadv64:
 .globl pwrite
 .type pwrite, %function;
 pwrite:
 .weak pwrite64
 .type pwrite64, %function;
 pwrite64:
-.globl pwritev
-.type pwritev, %function;
-pwritev:
 .weak pwritev64
 .type pwritev64, %function;
 pwritev64:
+.globl pwritev
+.type pwritev, %function;
+pwritev:
 .globl read
 .type read, %function;
 read:
@@ -4861,12 +4993,12 @@ tcgetpgrp:
 .globl tcsetpgrp
 .type tcsetpgrp, %function;
 tcsetpgrp:
-.globl truncate
-.type truncate, %function;
-truncate:
 .weak truncate64
 .type truncate64, %function;
 truncate64:
+.globl truncate
+.type truncate, %function;
+truncate:
 .globl ttyname
 .type ttyname, %function;
 ttyname:
@@ -4891,6 +5023,9 @@ write:
 .globl writev
 .type writev, %function;
 writev:
+.globl _dlstart
+.type _dlstart, %function;
+_dlstart:
 .weak _dl_debug_state
 .type _dl_debug_state, %function;
 _dl_debug_state:
@@ -4909,110 +5044,77 @@ dladdr:
 .globl dl_iterate_phdr
 .type dl_iterate_phdr, %function;
 dl_iterate_phdr:
-.rodata
-.globl _ns_flagdata
-.type _ns_flagdata, %object;
-.size _ns_flagdata, 128
-_ns_flagdata:
-.globl in6addr_any
-.type in6addr_any, %object;
-.size in6addr_any, 16
-in6addr_any:
-.globl in6addr_loopback
-.type in6addr_loopback, %object;
-.size in6addr_loopback, 16
-in6addr_loopback:
 .data.rel.ro
 .globl stderr
 .type stderr, %object;
-.size stderr, 8
+.size stderr, PTR_SIZE_BYTES
 stderr:
 .globl stdin
 .type stdin, %object;
-.size stdin, 8
+.size stdin, PTR_SIZE_BYTES
 stdin:
 .globl stdout
 .type stdout, %object;
-.size stdout, 8
+.size stdout, PTR_SIZE_BYTES
 stdout:
 .data
-.globl _dl_debug_addr
-.type _dl_debug_addr, %object;
-.size _dl_debug_addr, 8
-_dl_debug_addr:
-.globl opterr
-.type opterr, %object;
-.size opterr, 4
-opterr:
 .globl optind
 .type optind, %object;
 .size optind, 4
 optind:
+.globl opterr
+.type opterr, %object;
+.size opterr, 4
+opterr:
+.globl _dl_debug_addr
+.type _dl_debug_addr, %object;
+.size _dl_debug_addr, PTR_SIZE_BYTES
+_dl_debug_addr:
 .bss
-.weak tzname
-.type tzname, %object;
-.size tzname, 16
-tzname:
-.globl __tzname
-.type __tzname, %object;
-.size __tzname, 16
-__tzname:
-.weak daylight
-.type daylight, %object;
-.size daylight, 4
-daylight:
-.globl __daylight
-.type __daylight, %object;
-.size __daylight, 4
-__daylight:
-.weak timezone
-.type timezone, %object;
-.size timezone, 8
-timezone:
-.globl __timezone
-.type __timezone, %object;
-.size __timezone, 8
-__timezone:
-.globl __environ
-.type __environ, %object;
-.size __environ, 8
-__environ:
 .weak ___environ
 .type ___environ, %object;
-.size ___environ, 8
+.size ___environ, PTR_SIZE_BYTES
 ___environ:
 .weak _environ
 .type _environ, %object;
-.size _environ, 8
+.size _environ, PTR_SIZE_BYTES
 _environ:
+.globl __environ
+.type __environ, %object;
+.size __environ, PTR_SIZE_BYTES
+__environ:
 .weak environ
 .type environ, %object;
-.size environ, 8
+.size environ, PTR_SIZE_BYTES
 environ:
-.weak program_invocation_name
-.type program_invocation_name, %object;
-.size program_invocation_name, 8
-program_invocation_name:
-.globl __progname_full
-.type __progname_full, %object;
-.size __progname_full, 8
-__progname_full:
+.globl __stack_chk_guard
+.type __stack_chk_guard, %object;
+.size __stack_chk_guard, PTR_SIZE_BYTES
+__stack_chk_guard:
 .weak program_invocation_short_name
 .type program_invocation_short_name, %object;
-.size program_invocation_short_name, 8
+.size program_invocation_short_name, PTR_SIZE_BYTES
 program_invocation_short_name:
 .globl __progname
 .type __progname, %object;
-.size __progname, 8
+.size __progname, PTR_SIZE_BYTES
 __progname:
-.weak signgam
-.type signgam, %object;
-.size signgam, 4
-signgam:
+.weak program_invocation_name
+.type program_invocation_name, %object;
+.size program_invocation_name, PTR_SIZE_BYTES
+program_invocation_name:
+.globl __progname_full
+.type __progname_full, %object;
+.size __progname_full, PTR_SIZE_BYTES
+__progname_full:
 .globl __signgam
 .type __signgam, %object;
 .size __signgam, 4
 __signgam:
+.weak signgam
+.type signgam, %object;
+.size signgam, 4
+signgam:
 .globl __optreset
 .type __optreset, %object;
 .size __optreset, 4
@@ -5021,18 +5123,14 @@ __optreset:
 .type optreset, %object;
 .size optreset, 4
 optreset:
-.globl __stack_chk_guard
-.type __stack_chk_guard, %object;
-.size __stack_chk_guard, 8
-__stack_chk_guard:
-.globl optarg
-.type optarg, %object;
-.size optarg, 8
-optarg:
 .globl __optpos
 .type __optpos, %object;
 .size __optpos, 4
 __optpos:
+.globl optarg
+.type optarg, %object;
+.size optarg, PTR_SIZE_BYTES
+optarg:
 .globl optopt
 .type optopt, %object;
 .size optopt, 4
@@ -5041,7 +5139,267 @@ optopt:
 .type h_errno, %object;
 .size h_errno, 4
 h_errno:
+.globl __timezone
+.type __timezone, %object;
+.size __timezone, PTR_SIZE_BYTES
+__timezone:
+.weak timezone
+.type timezone, %object;
+.size timezone, PTR_SIZE_BYTES
+timezone:
+.globl __daylight
+.type __daylight, %object;
+.size __daylight, 4
+__daylight:
+.weak daylight
+.type daylight, %object;
+.size daylight, 4
+daylight:
+.globl __tzname
+.type __tzname, %object;
+.size __tzname, PTR2_SIZE_BYTES
+__tzname:
+.weak tzname
+.type tzname, %object;
+.size tzname, PTR2_SIZE_BYTES
+tzname:
 .globl getdate_err
 .type getdate_err, %object;
 .size getdate_err, 4
 getdate_err:
+.text
+#ifdef PTR32
+.globl __aio_suspend_time64
+.type __aio_suspend_time64, %function;
+__aio_suspend_time64:
+.globl __semtimedop_time64
+.type __semtimedop_time64, %function;
+__semtimedop_time64:
+.globl __dlsym_time64
+.type __dlsym_time64, %function;
+__dlsym_time64:
+.globl __futimes_time64
+.type __futimes_time64, %function;
+__futimes_time64:
+.globl __lutimes_time64
+.type __lutimes_time64, %function;
+__lutimes_time64:
+.globl __adjtime64
+.type __adjtime64, %function;
+__adjtime64:
+.globl __adjtimex_time64
+.type __adjtimex_time64, %function;
+__adjtimex_time64:
+#endif
+#if !defined(ARCH_riscv64) && !defined(ARCH_i386) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64)
+.globl _flush_cache
+.type _flush_cache, %function;
+_flush_cache:
+#endif
+#if !defined(ARCH_riscv64) && !defined(ARCH_i386) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64)
+.weak cacheflush
+.type cacheflush, %function;
+cacheflush:
+#endif
+#if !defined(ARCH_riscv64) && !defined(ARCH_i386) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64)
+.globl __cachectl
+.type __cachectl, %function;
+__cachectl:
+#endif
+#if !defined(ARCH_riscv64) && !defined(ARCH_i386) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64)
+.weak cachectl
+.type cachectl, %function;
+cachectl:
+#endif
+#ifdef PTR32
+.globl __clock_adjtime64
+.type __clock_adjtime64, %function;
+__clock_adjtime64:
+#endif
+#if !defined(ARCH_riscv64) && !defined(ARCH_aarch64)
+.globl ioperm
+.type ioperm, %function;
+ioperm:
+#endif
+#if !defined(ARCH_riscv64) && !defined(ARCH_aarch64)
+.globl iopl
+.type iopl, %function;
+iopl:
+#endif
+#ifdef PTR32
+.globl __ppoll_time64
+.type __ppoll_time64, %function;
+__ppoll_time64:
+.globl __settimeofday_time64
+.type __settimeofday_time64, %function;
+__settimeofday_time64:
+.globl __stime64
+.type __stime64, %function;
+__stime64:
+.globl __timerfd_settime64
+.type __timerfd_settime64, %function;
+__timerfd_settime64:
+.globl __timerfd_gettime64
+.type __timerfd_gettime64, %function;
+__timerfd_gettime64:
+.globl __utimes_time64
+.type __utimes_time64, %function;
+__utimes_time64:
+.globl __wait3_time64
+.type __wait3_time64, %function;
+__wait3_time64:
+.globl __wait4_time64
+.type __wait4_time64, %function;
+__wait4_time64:
+.globl __getrusage_time64
+.type __getrusage_time64, %function;
+__getrusage_time64:
+.globl __mq_timedreceive_time64
+.type __mq_timedreceive_time64, %function;
+__mq_timedreceive_time64:
+.globl __mq_timedsend_time64
+.type __mq_timedsend_time64, %function;
+__mq_timedsend_time64:
+.globl __recvmmsg_time64
+.type __recvmmsg_time64, %function;
+__recvmmsg_time64:
+.globl __sched_rr_get_interval_time64
+.type __sched_rr_get_interval_time64, %function;
+__sched_rr_get_interval_time64:
+.globl __pselect_time64
+.type __pselect_time64, %function;
+__pselect_time64:
+.globl __select_time64
+.type __select_time64, %function;
+__select_time64:
+.globl __getitimer_time64
+.type __getitimer_time64, %function;
+__getitimer_time64:
+.globl __setitimer_time64
+.type __setitimer_time64, %function;
+__setitimer_time64:
+.globl __sigtimedwait_time64
+.type __sigtimedwait_time64, %function;
+__sigtimedwait_time64:
+.globl __fstat_time64
+.type __fstat_time64, %function;
+__fstat_time64:
+.globl __fstatat_time64
+.type __fstatat_time64, %function;
+__fstatat_time64:
+.globl __futimens_time64
+.type __futimens_time64, %function;
+__futimens_time64:
+.weak __futimesat_time64
+.type __futimesat_time64, %function;
+__futimesat_time64:
+.globl __lstat_time64
+.type __lstat_time64, %function;
+__lstat_time64:
+.globl __stat_time64
+.type __stat_time64, %function;
+__stat_time64:
+.globl __utimensat_time64
+.type __utimensat_time64, %function;
+__utimensat_time64:
+.globl __cnd_timedwait_time64
+.type __cnd_timedwait_time64, %function;
+__cnd_timedwait_time64:
+.globl __mtx_timedlock_time64
+.type __mtx_timedlock_time64, %function;
+__mtx_timedlock_time64:
+.weak __pthread_cond_timedwait_time64
+.type __pthread_cond_timedwait_time64, %function;
+__pthread_cond_timedwait_time64:
+.weak __pthread_timedjoin_np_time64
+.type __pthread_timedjoin_np_time64, %function;
+__pthread_timedjoin_np_time64:
+.weak __pthread_mutex_timedlock_time64
+.type __pthread_mutex_timedlock_time64, %function;
+__pthread_mutex_timedlock_time64:
+.weak __pthread_rwlock_timedrdlock_time64
+.type __pthread_rwlock_timedrdlock_time64, %function;
+__pthread_rwlock_timedrdlock_time64:
+.weak __pthread_rwlock_timedwrlock_time64
+.type __pthread_rwlock_timedwrlock_time64, %function;
+__pthread_rwlock_timedwrlock_time64:
+.globl __sem_timedwait_time64
+.type __sem_timedwait_time64, %function;
+__sem_timedwait_time64:
+.globl __thrd_sleep_time64
+.type __thrd_sleep_time64, %function;
+__thrd_sleep_time64:
+.globl __clock_getres_time64
+.type __clock_getres_time64, %function;
+__clock_getres_time64:
+.weak __clock_gettime64
+.type __clock_gettime64, %function;
+__clock_gettime64:
+.weak __clock_nanosleep_time64
+.type __clock_nanosleep_time64, %function;
+__clock_nanosleep_time64:
+.globl __clock_settime64
+.type __clock_settime64, %function;
+__clock_settime64:
+.globl __ctime64
+.type __ctime64, %function;
+__ctime64:
+.globl __ctime64_r
+.type __ctime64_r, %function;
+__ctime64_r:
+.globl __difftime64
+.type __difftime64, %function;
+__difftime64:
+.globl __ftime64
+.type __ftime64, %function;
+__ftime64:
+.globl __gettimeofday_time64
+.type __gettimeofday_time64, %function;
+__gettimeofday_time64:
+.globl __gmtime64
+.type __gmtime64, %function;
+__gmtime64:
+.weak __gmtime64_r
+.type __gmtime64_r, %function;
+__gmtime64_r:
+.globl __localtime64
+.type __localtime64, %function;
+__localtime64:
+.weak __localtime64_r
+.type __localtime64_r, %function;
+__localtime64_r:
+.globl __mktime64
+.type __mktime64, %function;
+__mktime64:
+.globl __nanosleep_time64
+.type __nanosleep_time64, %function;
+__nanosleep_time64:
+.globl __time64
+.type __time64, %function;
+__time64:
+.globl __timegm_time64
+.type __timegm_time64, %function;
+__timegm_time64:
+.globl __timer_gettime64
+.type __timer_gettime64, %function;
+__timer_gettime64:
+.globl __timer_settime64
+.type __timer_settime64, %function;
+__timer_settime64:
+.globl __timespec_get_time64
+.type __timespec_get_time64, %function;
+__timespec_get_time64:
+.globl __utime64
+.type __utime64, %function;
+__utime64:
+#endif
+#if !defined(ARCH_riscv64) && !defined(ARCH_mips) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64)
+.globl arch_prctl
+.type arch_prctl, %function;
+arch_prctl:
+#endif
+#if !defined(ARCH_riscv64) && !defined(ARCH_mips) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64)
+.globl ___tls_get_addr
+.type ___tls_get_addr, %function;
+___tls_get_addr:
+#endif
src/musl.zig
@@ -191,11 +191,20 @@ pub fn buildCRTFile(comp: *Compilation, crt_file: CRTFile) !void {
             return comp.build_crt_file("c", .Lib, c_source_files.items);
         },
         .libc_so => {
+            const target = comp.getTarget();
+            const arch_define = try std.fmt.allocPrint(arena, "-DARCH_{s}", .{
+                @tagName(target.cpu.arch),
+            });
+            const clang_argv: []const []const u8 = if (target.cpu.arch.ptrBitWidth() == 64)
+                &[_][]const u8{ "-DPTR64", arch_define }
+            else
+                &[_][]const u8{arch_define};
+
             const sub_compilation = try Compilation.create(comp.gpa, .{
                 .local_cache_directory = comp.global_cache_directory,
                 .global_cache_directory = comp.global_cache_directory,
                 .zig_lib_directory = comp.zig_lib_directory,
-                .target = comp.getTarget(),
+                .target = target,
                 .root_name = "c",
                 .main_pkg = null,
                 .output_mode = .Lib,
@@ -223,8 +232,9 @@ pub fn buildCRTFile(comp: *Compilation, crt_file: CRTFile) !void {
                 .verbose_llvm_cpu_features = comp.verbose_llvm_cpu_features,
                 .clang_passthrough_mode = comp.clang_passthrough_mode,
                 .c_source_files = &[_]Compilation.CSourceFile{
-                    .{ .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{ "libc", "musl", "libc.s" }) },
+                    .{ .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{ "libc", "musl", "libc.S" }) },
                 },
+                .clang_argv = clang_argv,
                 .skip_linker_dependencies = true,
                 .soname = "libc.so",
             });