Fix link order in cosmopolitan.a

It turned out that the linker was doing the wrong with the amalgamation
library concerning weak stubs. A regression test has been added and new
binaries have been uploaded to https://justine.lol/cosmopolitan/

Ideally this should be fixed by building a tool that turns multiple .a
files into a single .a file with deduplication. As a workaround for now
the cosmopolitan.a build is restructured to not include LIBC_STUBS which
meant technical debt needed to be paid off where non-stub interfaces
were moved to LIBC_INTRIN and LIBC_NEXGEN32E.

Thank @PerfectProductions in #31 for the report!
This commit is contained in:
Justine Tunney 2021-01-16 12:05:41 -08:00
parent 04f1d89f84
commit 9f68d6eee9
121 changed files with 302 additions and 381 deletions

View file

@ -16,7 +16,6 @@ LIBC_ALG_A_SRCS = \
$(LIBC_ALG_A_SRCS_C)
LIBC_ALG_A_OBJS = \
$(LIBC_ALG_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_ALG_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_ALG_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -29,6 +28,7 @@ LIBC_ALG_A_DIRECTDEPS = \
LIBC_NEXGEN32E \
LIBC_RUNTIME \
LIBC_STR \
LIBC_INTRIN \
LIBC_STUBS \
LIBC_SYSV

View file

@ -16,7 +16,6 @@ LIBC_BITS_A_SRCS = \
$(LIBC_BITS_A_SRCS_C)
LIBC_BITS_A_OBJS = \
$(LIBC_BITS_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_BITS_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_BITS_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -26,6 +25,7 @@ LIBC_BITS_A_CHECKS = \
LIBC_BITS_A_DIRECTDEPS = \
LIBC_STUBS \
LIBC_INTRIN \
LIBC_NEXGEN32E
LIBC_BITS_A_DEPS := \

View file

@ -29,7 +29,6 @@ LIBC_CALLS_A_SRCS = \
$(LIBC_CALLS_A_SRCS_C)
LIBC_CALLS_A_OBJS = \
$(LIBC_CALLS_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_CALLS_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_CALLS_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -39,6 +38,7 @@ LIBC_CALLS_A_CHECKS = \
LIBC_CALLS_A_DIRECTDEPS = \
LIBC_FMT \
LIBC_INTRIN \
LIBC_NEXGEN32E \
LIBC_NT_ADVAPI32 \
LIBC_NT_KERNEL32 \

View file

@ -26,7 +26,6 @@ LIBC_CALLS_HEFTY_A_SRCS = \
$(LIBC_CALLS_HEFTY_A_SRCS_C)
LIBC_CALLS_HEFTY_A_OBJS = \
$(LIBC_CALLS_HEFTY_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_CALLS_HEFTY_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_CALLS_HEFTY_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -38,6 +37,7 @@ LIBC_CALLS_HEFTY_A_DIRECTDEPS = \
LIBC_ALG \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
LIBC_MEM \
LIBC_NEXGEN32E \
LIBC_NT_KERNEL32 \

View file

@ -23,7 +23,7 @@ CRT_ARTIFACTS += CRT
CRT = o/$(MODE)/libc/crt/crt.o
CRT_FILES = libc/crt/crt.S
CRT_SRCS = libc/crt/crt.S
CRT_OBJS = o/$(MODE)/libc/crt/crt.o o/$(MODE)/libc/crt/crt.S.zip.o
CRT_OBJS = o/$(MODE)/libc/crt/crt.o
$(CRT_OBJS): $(BUILD_FILES) libc/crt/crt.mk
.PHONY: o/$(MODE)/libc/crt

View file

@ -18,7 +18,6 @@ LIBC_CRYPTO_A_SRCS = \
$(LIBC_CRYPTO_A_SRCS_C)
LIBC_CRYPTO_A_OBJS = \
$(LIBC_CRYPTO_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_CRYPTO_A_SRCS_A:%.s=o/$(MODE)/%.o) \
$(LIBC_CRYPTO_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_CRYPTO_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -28,6 +27,7 @@ LIBC_CRYPTO_A_CHECKS = \
$(LIBC_CRYPTO_A_HDRS:%=o/$(MODE)/%.ok)
LIBC_CRYPTO_A_DIRECTDEPS = \
LIBC_INTRIN \
LIBC_STUBS \
LIBC_NEXGEN32E

View file

@ -16,7 +16,6 @@ LIBC_DNS_A_SRCS = \
$(LIBC_DNS_A_SRCS_C)
LIBC_DNS_A_OBJS = \
$(LIBC_DNS_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_DNS_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_DNS_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -34,6 +33,7 @@ LIBC_DNS_A_DIRECTDEPS = \
LIBC_RUNTIME \
LIBC_SOCK \
LIBC_STDIO \
LIBC_INTRIN \
LIBC_STUBS \
LIBC_STR \
LIBC_SYSV \

View file

@ -16,7 +16,6 @@ LIBC_ELF_A_SRCS = \
$(LIBC_ELF_A_SRCS_C)
LIBC_ELF_A_OBJS = \
$(LIBC_ELF_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_ELF_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_ELF_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -25,6 +24,7 @@ LIBC_ELF_A_CHECKS = \
$(LIBC_ELF_A_HDRS:%=o/$(MODE)/%.ok)
LIBC_ELF_A_DIRECTDEPS = \
LIBC_INTRIN \
LIBC_NEXGEN32E \
LIBC_STR \
LIBC_STUBS

View file

@ -25,7 +25,6 @@ LIBC_FMT_A_SRCS = \
$(LIBC_FMT_A_SRCS_C)
LIBC_FMT_A_OBJS = \
$(LIBC_FMT_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_FMT_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_FMT_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -37,6 +36,7 @@ LIBC_FMT_A_DIRECTDEPS = \
LIBC_NEXGEN32E \
LIBC_NT_KERNEL32 \
LIBC_STR \
LIBC_INTRIN \
LIBC_STUBS \
LIBC_SYSV \
LIBC_TINYMATH \

View file

@ -16,7 +16,6 @@ LIBC_INTRIN_A_FILES := \
$(wildcard libc/intrin/*)
LIBC_INTRIN_A_OBJS = \
$(LIBC_INTRIN_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_INTRIN_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_INTRIN_A_SRCS_C:%.c=o/$(MODE)/%.o)

View file

@ -18,7 +18,6 @@ LIBC_LOG_A_SRCS = \
$(LIBC_LOG_A_SRCS_S)
LIBC_LOG_A_OBJS = \
$(LIBC_LOG_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_LOG_A_SRCS_C:%.c=o/$(MODE)/%.o) \
$(LIBC_LOG_A_SRCS_S:%.S=o/$(MODE)/%.o)
@ -32,6 +31,7 @@ LIBC_LOG_A_DIRECTDEPS = \
LIBC_CALLS_HEFTY \
LIBC_ELF \
LIBC_FMT \
LIBC_INTRIN \
LIBC_MEM \
LIBC_NEXGEN32E \
LIBC_NT_KERNEL32 \

View file

@ -17,7 +17,6 @@ LIBC_MATH_A_SRCS = \
$(LIBC_MATH_A_SRCS_C)
LIBC_MATH_A_OBJS = \
$(LIBC_MATH_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_MATH_A_SRCS_A:%.s=o/$(MODE)/%.o) \
$(LIBC_MATH_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_MATH_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -25,8 +24,9 @@ LIBC_MATH_A_OBJS = \
LIBC_MATH_A_CHECKS = $(LIBC_MATH_A).pkg
LIBC_MATH_A_DIRECTDEPS = \
LIBC_STUBS \
LIBC_NEXGEN32E
LIBC_INTRIN \
LIBC_NEXGEN32E \
LIBC_STUBS
LIBC_MATH_A_DEPS := \
$(call uniq,$(foreach x,$(LIBC_MATH_A_DIRECTDEPS),$($(x))))

View file

@ -20,7 +20,6 @@ LIBC_MEM_A_SRCS = \
$(LIBC_MEM_A_SRCS_C)
LIBC_MEM_A_OBJS = \
$(LIBC_MEM_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_MEM_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_MEM_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -31,6 +30,7 @@ LIBC_MEM_A_CHECKS = \
LIBC_MEM_A_DIRECTDEPS = \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
LIBC_NEXGEN32E \
LIBC_RAND \
LIBC_RUNTIME \

View file

@ -18,7 +18,6 @@ LIBC_NEXGEN32E_A_SRCS = \
$(LIBC_NEXGEN32E_A_SRCS_C)
LIBC_NEXGEN32E_A_OBJS = \
$(LIBC_NEXGEN32E_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_NEXGEN32E_A_SRCS_A:%.s=o/$(MODE)/%.o) \
$(LIBC_NEXGEN32E_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_NEXGEN32E_A_SRCS_C:%.c=o/$(MODE)/%.o)

View file

@ -32,10 +32,9 @@ LIBC_NT_A_CHECKS = $(patsubst %,o/$(MODE)/%.ok,$(filter %.h,$(LIBC_NT_A_HDRS)))
LIBC_NT_ARTIFACTS += LIBC_NT_KERNEL32_A
LIBC_NT_KERNEL32 = $(LIBC_NT_KERNEL32_A_DEPS) $(LIBC_NT_KERNEL32_A)
LIBC_NT_KERNEL32_A = o/$(MODE)/libc/nt/kernel32.a
LIBC_NT_KERNEL32_A_SRCS := $(wildcard libc/nt/kernel32/*.s)
LIBC_NT_KERNEL32_A_SRCS := $(wildcard libc/nt/kernel32/*.s) libc/nt/sysv2nt.s
LIBC_NT_KERNEL32_A_OBJS = $(LIBC_NT_KERNEL32_A_SRCS:%.s=o/$(MODE)/%.o)
LIBC_NT_KERNEL32_A_CHECKS = $(LIBC_NT_KERNEL32_A).pkg
LIBC_NT_KERNEL32_A_DIRECTDEPS = LIBC_STUBS
LIBC_NT_KERNEL32_A_DEPS := \
$(call uniq,$(foreach x,$(LIBC_NT_KERNEL32_A_DIRECTDEPS),$($(x))))
@ -56,7 +55,7 @@ LIBC_NT_ADVAPI32_A = o/$(MODE)/libc/nt/advapi32.a
LIBC_NT_ADVAPI32_A_SRCS := $(wildcard libc/nt/advapi32/*.s)
LIBC_NT_ADVAPI32_A_OBJS = $(LIBC_NT_ADVAPI32_A_SRCS:%.s=o/$(MODE)/%.o)
LIBC_NT_ADVAPI32_A_CHECKS = $(LIBC_NT_ADVAPI32_A).pkg
LIBC_NT_ADVAPI32_A_DIRECTDEPS = LIBC_STUBS
LIBC_NT_ADVAPI32_A_DIRECTDEPS = LIBC_NT_KERNEL32
LIBC_NT_ADVAPI32_A_DEPS := \
$(call uniq,$(foreach x,$(LIBC_NT_ADVAPI32_A_DIRECTDEPS),$($(x))))
@ -77,7 +76,7 @@ LIBC_NT_COMDLG32_A = o/$(MODE)/libc/nt/comdlg32.a
LIBC_NT_COMDLG32_A_SRCS := $(wildcard libc/nt/comdlg32/*.s)
LIBC_NT_COMDLG32_A_OBJS = $(LIBC_NT_COMDLG32_A_SRCS:%.s=o/$(MODE)/%.o)
LIBC_NT_COMDLG32_A_CHECKS = $(LIBC_NT_COMDLG32_A).pkg
LIBC_NT_COMDLG32_A_DIRECTDEPS = LIBC_STUBS
LIBC_NT_COMDLG32_A_DIRECTDEPS = LIBC_NT_KERNEL32
LIBC_NT_COMDLG32_A_DEPS := \
$(call uniq,$(foreach x,$(LIBC_NT_COMDLG32_A_DIRECTDEPS),$($(x))))
@ -98,7 +97,7 @@ LIBC_NT_GDI32_A = o/$(MODE)/libc/nt/gdi32.a
LIBC_NT_GDI32_A_SRCS := $(wildcard libc/nt/gdi32/*.s)
LIBC_NT_GDI32_A_OBJS = $(LIBC_NT_GDI32_A_SRCS:%.s=o/$(MODE)/%.o)
LIBC_NT_GDI32_A_CHECKS = $(LIBC_NT_GDI32_A).pkg
LIBC_NT_GDI32_A_DIRECTDEPS = LIBC_STUBS
LIBC_NT_GDI32_A_DIRECTDEPS = LIBC_NT_KERNEL32
LIBC_NT_GDI32_A_DEPS := \
$(call uniq,$(foreach x,$(LIBC_NT_GDI32_A_DIRECTDEPS),$($(x))))
@ -119,7 +118,7 @@ LIBC_NT_KERNELBASE_A = o/$(MODE)/libc/nt/KernelBase.a
LIBC_NT_KERNELBASE_A_SRCS := $(wildcard libc/nt/KernelBase/*.s)
LIBC_NT_KERNELBASE_A_OBJS = $(LIBC_NT_KERNELBASE_A_SRCS:%.s=o/$(MODE)/%.o)
LIBC_NT_KERNELBASE_A_CHECKS = $(LIBC_NT_KERNELBASE_A).pkg
LIBC_NT_KERNELBASE_A_DIRECTDEPS = LIBC_STUBS
LIBC_NT_KERNELBASE_A_DIRECTDEPS = LIBC_NT_KERNEL32
LIBC_NT_KERNELBASE_A_DEPS := \
$(call uniq,$(foreach x,$(LIBC_NT_KERNELBASE_A_DIRECTDEPS),$($(x))))
@ -144,7 +143,7 @@ LIBC_NT_NTDLL_A_OBJS = \
$(LIBC_NT_NTDLL_A_SRCS_A:%.s=o/$(MODE)/%.o) \
$(LIBC_NT_NTDLL_A_SRCS_S:%.S=o/$(MODE)/%.o)
LIBC_NT_NTDLL_A_CHECKS = $(LIBC_NT_NTDLL_A).pkg
LIBC_NT_NTDLL_A_DIRECTDEPS = LIBC_STUBS LIBC_NT_KERNEL32
LIBC_NT_NTDLL_A_DIRECTDEPS = LIBC_NT_KERNEL32
LIBC_NT_NTDLL_A_DEPS := \
$(call uniq,$(foreach x,$(LIBC_NT_NTDLL_A_DIRECTDEPS),$($(x))))
@ -177,7 +176,7 @@ LIBC_NT_NETAPI32_A = o/$(MODE)/libc/nt/netapi32.a
LIBC_NT_NETAPI32_A_SRCS := $(wildcard libc/nt/netapi32/*.s)
LIBC_NT_NETAPI32_A_OBJS = $(LIBC_NT_NETAPI32_A_SRCS:%.s=o/$(MODE)/%.o)
LIBC_NT_NETAPI32_A_CHECKS = $(LIBC_NT_NETAPI32_A).pkg
LIBC_NT_NETAPI32_A_DIRECTDEPS = LIBC_STUBS
LIBC_NT_NETAPI32_A_DIRECTDEPS = LIBC_NT_KERNEL32
LIBC_NT_NETAPI32_A_DEPS := \
$(call uniq,$(foreach x,$(LIBC_NT_NETAPI32_A_DIRECTDEPS),$($(x))))
@ -198,7 +197,7 @@ LIBC_NT_URL_A = o/$(MODE)/libc/nt/url.a
LIBC_NT_URL_A_SRCS := $(wildcard libc/nt/url/*.s)
LIBC_NT_URL_A_OBJS = $(LIBC_NT_URL_A_SRCS:%.s=o/$(MODE)/%.o)
LIBC_NT_URL_A_CHECKS = $(LIBC_NT_URL_A).pkg
LIBC_NT_URL_A_DIRECTDEPS = LIBC_STUBS
LIBC_NT_URL_A_DIRECTDEPS = LIBC_NT_KERNEL32
LIBC_NT_URL_A_DEPS := \
$(call uniq,$(foreach x,$(LIBC_NT_URL_A_DIRECTDEPS),$($(x))))
@ -219,7 +218,7 @@ LIBC_NT_USER32_A = o/$(MODE)/libc/nt/user32.a
LIBC_NT_USER32_A_SRCS := $(wildcard libc/nt/user32/*.s)
LIBC_NT_USER32_A_OBJS = $(LIBC_NT_USER32_A_SRCS:%.s=o/$(MODE)/%.o)
LIBC_NT_USER32_A_CHECKS = $(LIBC_NT_USER32_A).pkg
LIBC_NT_USER32_A_DIRECTDEPS = LIBC_STUBS
LIBC_NT_USER32_A_DIRECTDEPS = LIBC_NT_KERNEL32
LIBC_NT_USER32_A_DEPS := \
$(call uniq,$(foreach x,$(LIBC_NT_USER32_A_DIRECTDEPS),$($(x))))
@ -240,7 +239,7 @@ LIBC_NT_WS2_32_A = o/$(MODE)/libc/nt/ws2_32.a
LIBC_NT_WS2_32_A_SRCS := $(wildcard libc/nt/ws2_32/*.s)
LIBC_NT_WS2_32_A_OBJS = $(LIBC_NT_WS2_32_A_SRCS:%.s=o/$(MODE)/%.o)
LIBC_NT_WS2_32_A_CHECKS = $(LIBC_NT_WS2_32_A).pkg
LIBC_NT_WS2_32_A_DIRECTDEPS = LIBC_STUBS
LIBC_NT_WS2_32_A_DIRECTDEPS = LIBC_NT_KERNEL32
LIBC_NT_WS2_32_A_DEPS := \
$(call uniq,$(foreach x,$(LIBC_NT_WS2_32_A_DIRECTDEPS),$($(x))))
@ -261,7 +260,7 @@ LIBC_NT_MSWSOCK_A = o/$(MODE)/libc/nt/MsWSock.a
LIBC_NT_MSWSOCK_A_SRCS := $(wildcard libc/nt/MsWSock/*.s)
LIBC_NT_MSWSOCK_A_OBJS = $(LIBC_NT_MSWSOCK_A_SRCS:%.s=o/$(MODE)/%.o)
LIBC_NT_MSWSOCK_A_CHECKS = $(LIBC_NT_MSWSOCK_A).pkg
LIBC_NT_MSWSOCK_A_DIRECTDEPS = LIBC_STUBS
LIBC_NT_MSWSOCK_A_DIRECTDEPS = LIBC_NT_KERNEL32
LIBC_NT_MSWSOCK_A_DEPS := \
$(call uniq,$(foreach x,$(LIBC_NT_MSWSOCK_A_DIRECTDEPS),$($(x))))
@ -282,7 +281,7 @@ LIBC_NT_SHELL32_A = o/$(MODE)/libc/nt/shell32.a
LIBC_NT_SHELL32_A_SRCS := $(wildcard libc/nt/shell32/*.s)
LIBC_NT_SHELL32_A_OBJS = $(LIBC_NT_SHELL32_A_SRCS:%.s=o/$(MODE)/%.o)
LIBC_NT_SHELL32_A_CHECKS = $(LIBC_NT_SHELL32_A).pkg
LIBC_NT_SHELL32_A_DIRECTDEPS = LIBC_STUBS
LIBC_NT_SHELL32_A_DIRECTDEPS = LIBC_NT_KERNEL32
LIBC_NT_SHELL32_A_DEPS := \
$(call uniq,$(foreach x,$(LIBC_NT_SHELL32_A_DIRECTDEPS),$($(x))))
$(LIBC_NT_SHELL32_A): \

View file

@ -16,8 +16,7 @@
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/macros.h"
.text.windows
.section .text.windows,"ax",@progbits
/ Epilogues for calling functions w/ Microsoft x64 convention.
/
@ -32,18 +31,38 @@
__sysv2nt14:
pushq 72(%rbp)
pushq 64(%rbp)
.type __sysv2nt14,@function
.size __sysv2nt14,.-__sysv2nt14
.globl __sysv2nt14
.hidden __sysv2nt14
__sysv2nt12:
pushq 56(%rbp)
pushq 48(%rbp)
.type __sysv2nt12,@function
.size __sysv2nt12,.-__sysv2nt12
.globl __sysv2nt12
.hidden __sysv2nt12
__sysv2nt10:
pushq 40(%rbp)
pushq 32(%rbp)
.type __sysv2nt10,@function
.size __sysv2nt10,.-__sysv2nt10
.globl __sysv2nt10
.hidden __sysv2nt10
__sysv2nt8:
pushq 24(%rbp)
pushq 16(%rbp)
.type __sysv2nt8,@function
.size __sysv2nt8,.-__sysv2nt8
.globl __sysv2nt8
.hidden __sysv2nt8
__sysv2nt6:
push %r9
push %r8
.type __sysv2nt6,@function
.size __sysv2nt6,.-__sysv2nt6
.globl __sysv2nt6
.hidden __sysv2nt6
__sysv2nt:
mov %rdx,%r8
mov %rcx,%r9
@ -53,10 +72,7 @@ __sysv2nt:
call *%rax
leave
ret
.endfn __sysv2nt,globl,hidden
.endfn __sysv2nt6,globl,hidden
.endfn __sysv2nt8,globl,hidden
.endfn __sysv2nt10,globl,hidden
.endfn __sysv2nt12,globl,hidden
.endfn __sysv2nt14,globl,hidden
.source __FILE__
.type __sysv2nt,@function
.size __sysv2nt,.-__sysv2nt
.globl __sysv2nt
.hidden __sysv2nt

View file

@ -18,7 +18,6 @@ LIBC_OHMYPLUS_A_SRCS = \
$(LIBC_OHMYPLUS_A_SRCS_CXX)
LIBC_OHMYPLUS_A_OBJS = \
$(LIBC_OHMYPLUS_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_OHMYPLUS_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_OHMYPLUS_A_SRCS_C:%.c=o/$(MODE)/%.o) \
$(LIBC_OHMYPLUS_A_SRCS_CXX:%.cc=o/$(MODE)/%.o)
@ -29,8 +28,10 @@ LIBC_OHMYPLUS_A_CHECKS = \
LIBC_OHMYPLUS_A_DIRECTDEPS = \
LIBC_BITS \
LIBC_INTRIN \
LIBC_MEM \
LIBC_STUBS
LIBC_STUBS \
LIBC_NEXGEN32E
LIBC_OHMYPLUS_A_DEPS := \
$(call uniq,$(foreach x,$(LIBC_OHMYPLUS_A_DIRECTDEPS),$($(x))))

View file

@ -16,7 +16,6 @@ LIBC_RAND_A_SRCS = \
$(LIBC_RAND_A_SRCS_C)
LIBC_RAND_A_OBJS = \
$(LIBC_RAND_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_RAND_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_RAND_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -26,6 +25,7 @@ LIBC_RAND_A_CHECKS = \
LIBC_RAND_A_DIRECTDEPS = \
LIBC_STUBS \
LIBC_INTRIN \
LIBC_TINYMATH \
LIBC_NEXGEN32E \
LIBC_NT_KERNEL32 \

View file

@ -25,7 +25,6 @@ LIBC_RUNTIME_A_SRCS = \
$(LIBC_RUNTIME_A_SRCS_C)
LIBC_RUNTIME_A_OBJS = \
$(LIBC_RUNTIME_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_RUNTIME_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_RUNTIME_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -37,6 +36,7 @@ LIBC_RUNTIME_A_DIRECTDEPS = \
LIBC_CALLS \
LIBC_ELF \
LIBC_FMT \
LIBC_INTRIN \
LIBC_NEXGEN32E \
LIBC_NT_KERNEL32 \
LIBC_STR \

View file

@ -11,7 +11,6 @@ LIBC_SOCK_A_HDRS = $(filter %.h,$(LIBC_SOCK_A_FILES))
LIBC_SOCK_A_SRCS = $(filter %.c,$(LIBC_SOCK_A_FILES))
LIBC_SOCK_A_OBJS = \
$(LIBC_SOCK_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_SOCK_A_SRCS:%.c=o/$(MODE)/%.o)
LIBC_SOCK_A_CHECKS = \
@ -22,6 +21,7 @@ LIBC_SOCK_A_DIRECTDEPS = \
LIBC_BITS \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
LIBC_MEM \
LIBC_NEXGEN32E \
LIBC_NT_KERNEL32 \

View file

@ -16,7 +16,6 @@ LIBC_STDIO_A_SRCS = \
$(LIBC_STDIO_A_SRCS_C)
LIBC_STDIO_A_OBJS = \
$(LIBC_STDIO_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_STDIO_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_STDIO_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -30,6 +29,7 @@ LIBC_STDIO_A_DIRECTDEPS = \
LIBC_CALLS \
LIBC_CALLS_HEFTY \
LIBC_FMT \
LIBC_INTRIN \
LIBC_MEM \
LIBC_NEXGEN32E \
LIBC_NT_KERNEL32 \

View file

@ -18,7 +18,6 @@ LIBC_STR_A_SRCS = \
$(LIBC_STR_A_SRCS_C)
LIBC_STR_A_OBJS = \
$(LIBC_STR_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_STR_A_SRCS_A:%.s=o/$(MODE)/%.o) \
$(LIBC_STR_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_STR_A_SRCS_C:%.c=o/$(MODE)/%.o)

View file

@ -27,7 +27,6 @@ LIBC_STUBS_A_SRCS = \
$(filter %.S,$(LIBC_STUBS_A_FILES))
LIBC_STUBS_A_OBJS = \
$(LIBC_STUBS_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_STUBS_A_SRCS:%.S=o/$(MODE)/%.o)
LIBC_STUBS_A_CHECKS = \

View file

@ -1,23 +0,0 @@
/*-*- mode:unix-assembly; indent-tabs-mode:t; tab-width:8; coding:utf-8 -*-│
vi: set et ft=asm ts=8 tw=8 fenc=utf-8 :vi
Copyright 2020 Justine Alexandra Roberts Tunney
Permission to use, copy, modify, and/or distribute this software for
any purpose with or without fee is hereby granted, provided that the
above copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/macros.h"
#include "libc/notice.inc"
free: ret
.endfn free,weak

View file

@ -1,29 +0,0 @@
/*-*- mode:unix-assembly; indent-tabs-mode:t; tab-width:8; coding:utf-8 -*-│
vi: set et ft=asm ts=8 tw=8 fenc=utf-8 :vi
Copyright 2020 Justine Alexandra Roberts Tunney
Permission to use, copy, modify, and/or distribute this software for
any purpose with or without fee is hereby granted, provided that the
above copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/macros.h"
#include "libc/notice.inc"
malloc: push %rbp
mov %rsp,%rbp
mov ENOMEM(%rip),%eax
mov %eax,errno(%rip)
pushpop -1,%rax
pop %rbp
ret
.endfn malloc,weak

View file

@ -1,29 +0,0 @@
/*-*- mode:unix-assembly; indent-tabs-mode:t; tab-width:8; coding:utf-8 -*-│
vi: set et ft=asm ts=8 tw=8 fenc=utf-8 :vi
Copyright 2020 Justine Alexandra Roberts Tunney
Permission to use, copy, modify, and/or distribute this software for
any purpose with or without fee is hereby granted, provided that the
above copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/macros.h"
#include "libc/notice.inc"
realloc:push %rbp
mov %rsp,%rbp
mov ENOMEM(%rip),%eax
mov %eax,errno(%rip)
pushpop -1,%rax
pop %rbp
ret
.endfn realloc,weak

View file

@ -25,7 +25,7 @@ LIBC_SYSV_A_SRCS_S = $(filter %.S,$(LIBC_SYSV_A_FILES))
LIBC_SYSV_A_CHECKS = $(LIBC_SYSV_A).pkg
LIBC_SYSV_A_DIRECTDEPS = \
LIBC_STUBS
LIBC_NEXGEN32E
LIBC_SYSV_A_FILES := \
libc/sysv/macros.internal.h \
@ -34,7 +34,6 @@ LIBC_SYSV_A_FILES := \
libc/sysv/restorert.S \
libc/sysv/syscall.S \
libc/sysv/systemfive.S \
$(wildcard libc/sysv/stubs/*) \
$(wildcard libc/sysv/consts/*) \
$(wildcard libc/sysv/errfuns/*)
@ -44,17 +43,14 @@ LIBC_SYSV_A_SRCS = \
LIBC_SYSV_A_OBJS = \
$(LIBC_SYSV_A_SRCS_A:%.s=o/$(MODE)/%.o) \
$(LIBC_SYSV_A_SRCS_S:%.S=o/$(MODE)/%.o) \
o/$(MODE)/libc/sysv/g_syscount.S.zip.o \
o/$(MODE)/libc/sysv/restorert.S.zip.o \
o/$(MODE)/libc/sysv/syscall.S.zip.o \
o/$(MODE)/libc/sysv/systemfive.S.zip.o
$(LIBC_SYSV_A_SRCS_S:%.S=o/$(MODE)/%.o)
LIBC_SYSV_A_DEPS := \
$(call uniq,$(foreach x,$(LIBC_SYSV_A_DIRECTDEPS),$($(x))))
$(LIBC_SYSV_A): libc/sysv/ \
libc/sysv/consts/ \
libc/sysv/errfuns/ \
$(LIBC_SYSV_A).pkg \
$(LIBC_SYSV_A_OBJS)

View file

@ -74,7 +74,6 @@ LIBC_TESTLIB_A_SRCS = \
$(LIBC_TESTLIB_A_SRCS_C)
LIBC_TESTLIB_A_OBJS = \
$(LIBC_TESTLIB_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_TESTLIB_A_SRCS_C:%.c=o/$(MODE)/%.o) \
$(LIBC_TESTLIB_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_TESTLIB_A_ASSETS:%=o/$(MODE)/%.zip.o)
@ -84,6 +83,7 @@ LIBC_TESTLIB_A_DIRECTDEPS = \
LIBC_ALG \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
LIBC_LOG \
LIBC_MEM \
LIBC_NEXGEN32E \
@ -92,10 +92,10 @@ LIBC_TESTLIB_A_DIRECTDEPS = \
LIBC_RUNTIME \
LIBC_STDIO \
LIBC_STR \
LIBC_TIME \
LIBC_TINYMATH \
LIBC_STUBS \
LIBC_SYSV_CALLS \
LIBC_TIME \
LIBC_TINYMATH \
LIBC_UNICODE \
LIBC_X \
LIBC_ZIPOS \
@ -122,13 +122,13 @@ LIBC_TESTLIB_RUNNER_A_SRCS = libc/testlib/runner.c
LIBC_TESTLIB_RUNNER_A_CHECKS = $(LIBC_TESTLIB_RUNNER_A).pkg
LIBC_TESTLIB_RUNNER_A_OBJS = \
$(LIBC_TESTLIB_RUNNER_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_TESTLIB_RUNNER_A_SRCS:%.c=o/$(MODE)/%.o)
LIBC_TESTLIB_RUNNER_A_DIRECTDEPS = \
LIBC_FMT \
LIBC_RUNTIME \
LIBC_INTRIN \
LIBC_NEXGEN32E \
LIBC_RUNTIME \
LIBC_STDIO \
LIBC_STR \
LIBC_STUBS \
@ -161,11 +161,11 @@ LIBC_TESTMAIN_SRCS = \
libc/testlib/testmain.c
LIBC_TESTMAIN_OBJS = \
$(LIBC_TESTMAIN_SRCS:%=o/$(MODE)/%.zip.o) \
o/$(MODE)/libc/testlib/testmain.o
LIBC_TESTMAIN_DIRECTDEPS = \
LIBC_CALLS \
LIBC_INTRIN \
LIBC_LOG \
LIBC_NEXGEN32E \
LIBC_RUNTIME \

View file

@ -17,7 +17,6 @@ LIBC_TIME_A_SRCS = \
$(LIBC_TIME_A_SRCS_C)
LIBC_TIME_A_OBJS = \
$(LIBC_TIME_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_TIME_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_TIME_A_SRCS_C:%.c=o/$(MODE)/%.o) \
$(LIBC_TIME_A_SRCS_C:%.c=o/$(MODE)/%.o) \
@ -29,6 +28,7 @@ LIBC_TIME_A_CHECKS = \
LIBC_TIME_A_DIRECTDEPS = \
LIBC_CALLS \
LIBC_INTRIN \
LIBC_FMT \
LIBC_MEM \
LIBC_NEXGEN32E \

View file

@ -15,7 +15,6 @@ LIBC_TINYMATH_A_SRCS = $(LIBC_TINYMATH_A_SRCS_S) $(LIBC_TINYMATH_A_SRCS_C)
LIBC_TINYMATH_A_CHECKS = $(LIBC_TINYMATH_A).pkg
LIBC_TINYMATH_A_OBJS = \
$(LIBC_TINYMATH_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_TINYMATH_A_SRCS_A:%.s=o/$(MODE)/%.o) \
$(LIBC_TINYMATH_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_TINYMATH_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -25,6 +24,7 @@ LIBC_TINYMATH_A_CHECKS = \
$(LIBC_TINYMATH_A_HDRS:%=o/$(MODE)/%.ok)
LIBC_TINYMATH_A_DIRECTDEPS = \
LIBC_INTRIN \
LIBC_STUBS \
LIBC_NEXGEN32E

View file

@ -18,7 +18,6 @@ LIBC_UNICODE_A_SRCS = \
$(LIBC_UNICODE_A_SRCS_C)
LIBC_UNICODE_A_OBJS = \
$(LIBC_UNICODE_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_UNICODE_A_SRCS_A:%.s=o/$(MODE)/%.o) \
$(LIBC_UNICODE_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_UNICODE_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -28,10 +27,11 @@ LIBC_UNICODE_A_CHECKS = \
$(LIBC_UNICODE_A_HDRS:%=o/$(MODE)/%.ok)
LIBC_UNICODE_A_DIRECTDEPS = \
LIBC_STUBS \
LIBC_INTRIN \
LIBC_NEXGEN32E \
LIBC_RUNTIME \
LIBC_STR \
LIBC_STUBS \
LIBC_SYSV
LIBC_UNICODE_A_DEPS := \

View file

@ -25,7 +25,6 @@ LIBC_X_A_SRCS = \
$(LIBC_X_A_SRCS_C)
LIBC_X_A_OBJS = \
$(LIBC_X_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_X_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_X_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -36,6 +35,7 @@ LIBC_X_A_CHECKS = \
LIBC_X_A_DIRECTDEPS = \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
LIBC_MEM \
LIBC_NEXGEN32E \
LIBC_RUNTIME \

View file

@ -19,7 +19,6 @@ LIBC_ZIPOS_A_SRCS = \
$(LIBC_ZIPOS_A_SRCS_C)
LIBC_ZIPOS_A_OBJS = \
$(LIBC_ZIPOS_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(LIBC_ZIPOS_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_ZIPOS_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -28,12 +27,14 @@ LIBC_ZIPOS_A_CHECKS = \
$(LIBC_ZIPOS_A_HDRS:%=o/$(MODE)/%.ok)
LIBC_ZIPOS_A_DIRECTDEPS = \
APE_LIB \
LIBC_CALLS \
LIBC_MEM \
LIBC_NEXGEN32E \
LIBC_RUNTIME \
LIBC_SYSV \
LIBC_STR \
LIBC_INTRIN \
LIBC_STUBS \
LIBC_SYSV_CALLS \
LIBC_NT_KERNEL32 \