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 @@ THIRD_PARTY_BLAS_A_SRCS = \
$(THIRD_PARTY_BLAS_A_SRCS_C)
THIRD_PARTY_BLAS_A_OBJS = \
$(THIRD_PARTY_BLAS_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(THIRD_PARTY_BLAS_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(THIRD_PARTY_BLAS_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -25,8 +24,9 @@ THIRD_PARTY_BLAS_A_CHECKS = \
$(THIRD_PARTY_BLAS_A_HDRS:%=o/$(MODE)/%.ok)
THIRD_PARTY_BLAS_A_DIRECTDEPS = \
LIBC_STUBS \
LIBC_INTRIN \
LIBC_NEXGEN32E \
LIBC_STUBS \
THIRD_PARTY_F2C
THIRD_PARTY_BLAS_A_DEPS := \

View file

@ -37,10 +37,8 @@ THIRD_PARTY_CHIBICC_BINS = \
o/$(MODE)/third_party/chibicc/chibicc2.com
THIRD_PARTY_CHIBICC_A_OBJS = \
$(THIRD_PARTY_CHIBICC_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(THIRD_PARTY_CHIBICC_A_SRCS:%.c=o/$(MODE)/%.o)
THIRD_PARTY_CHIBICC2_A_OBJS = \
$(THIRD_PARTY_CHIBICC_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(THIRD_PARTY_CHIBICC_A_SRCS:%.c=o/$(MODE)/%.chibicc.o)
THIRD_PARTY_CHIBICC_A_CHECKS = \
@ -54,21 +52,22 @@ THIRD_PARTY_CHIBICC_A_DIRECTDEPS = \
LIBC_CALLS \
LIBC_CALLS_HEFTY \
LIBC_FMT \
LIBC_INTRIN \
LIBC_LOG \
LIBC_LOG \
LIBC_MEM \
LIBC_NEXGEN32E \
LIBC_RUNTIME \
LIBC_STDIO \
LIBC_LOG \
LIBC_STR \
LIBC_STUBS \
LIBC_SYSV \
LIBC_TIME \
LIBC_UNICODE \
LIBC_SYSV \
LIBC_X \
TOOL_BUILD_LIB \
THIRD_PARTY_COMPILER_RT \
THIRD_PARTY_DLMALLOC \
TOOL_BUILD_LIB \
THIRD_PARTY_GDTOA
THIRD_PARTY_CHIBICC_A_DEPS := \

View file

@ -25,11 +25,9 @@ THIRD_PARTY_CHIBICC_TEST_COMS = \
$(THIRD_PARTY_CHIBICC_TEST_SRCS_TEST:%.c=o/$(MODE)/%2.com)
THIRD_PARTY_CHIBICC_TEST_OBJS = \
$(THIRD_PARTY_CHIBICC_TEST_SRCS:%=o/$(MODE)/%.zip.o) \
$(THIRD_PARTY_CHIBICC_TEST_SRCS:%.c=o/$(MODE)/%.chibicc.o)
THIRD_PARTY_CHIBICC_TEST2_OBJS = \
$(THIRD_PARTY_CHIBICC_TEST_SRCS:%=o/$(MODE)/%.zip.o) \
$(THIRD_PARTY_CHIBICC_TEST_SRCS:%.c=o/$(MODE)/%.chibicc2.o)
THIRD_PARTY_CHIBICC_TEST_BINS = \
@ -41,15 +39,16 @@ THIRD_PARTY_CHIBICC_TEST_CHECKS = \
$(THIRD_PARTY_CHIBICC_TEST_HDRS:%=o/$(MODE)/%.ok)
THIRD_PARTY_CHIBICC_TEST_DIRECTDEPS = \
LIBC_RUNTIME \
LIBC_FMT \
LIBC_STR \
LIBC_STDIO \
LIBC_STUBS \
LIBC_NEXGEN32E \
LIBC_UNICODE \
LIBC_INTRIN \
LIBC_MEM \
LIBC_NEXGEN32E \
LIBC_RUNTIME \
LIBC_STDIO \
LIBC_STR \
LIBC_STUBS \
LIBC_TINYMATH \
LIBC_UNICODE \
LIBC_X \
THIRD_PARTY_CHIBICC \
THIRD_PARTY_COMPILER_RT

View file

@ -18,7 +18,6 @@ THIRD_PARTY_COMPILER_RT_A_SRCS = \
$(THIRD_PARTY_COMPILER_RT_A_SRCS_C)
THIRD_PARTY_COMPILER_RT_A_OBJS = \
$(THIRD_PARTY_COMPILER_RT_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(THIRD_PARTY_COMPILER_RT_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(THIRD_PARTY_COMPILER_RT_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -27,8 +26,10 @@ THIRD_PARTY_COMPILER_RT_A_CHECKS = \
$(THIRD_PARTY_COMPILER_RT_A_HDRS:%=o/$(MODE)/%.ok)
THIRD_PARTY_COMPILER_RT_A_DIRECTDEPS = \
LIBC_TINYMATH \
LIBC_STUBS
LIBC_INTRIN \
LIBC_NEXGEN32E \
LIBC_STUBS \
LIBC_TINYMATH
THIRD_PARTY_COMPILER_RT_A_DEPS := \
$(call uniq,$(foreach x,$(THIRD_PARTY_COMPILER_RT_A_DIRECTDEPS),$($(x))))

View file

@ -16,7 +16,6 @@ THIRD_PARTY_DLMALLOC_A_SRCS = \
$(THIRD_PARTY_DLMALLOC_A_SRCS_C)
THIRD_PARTY_DLMALLOC_A_OBJS = \
$(THIRD_PARTY_DLMALLOC_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(THIRD_PARTY_DLMALLOC_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(THIRD_PARTY_DLMALLOC_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -27,6 +26,7 @@ THIRD_PARTY_DLMALLOC_A_CHECKS = \
THIRD_PARTY_DLMALLOC_A_DIRECTDEPS = \
LIBC_BITS \
LIBC_CALLS \
LIBC_INTRIN \
LIBC_FMT \
LIBC_NEXGEN32E \
LIBC_RUNTIME \

View file

@ -18,7 +18,6 @@ THIRD_PARTY_DUKTAPE_A_SRCS = \
$(THIRD_PARTY_DUKTAPE_A_SRCS_C)
THIRD_PARTY_DUKTAPE_A_OBJS = \
$(THIRD_PARTY_DUKTAPE_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(THIRD_PARTY_DUKTAPE_A_SRCS_A:%.s=o/$(MODE)/%.o) \
$(THIRD_PARTY_DUKTAPE_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(THIRD_PARTY_DUKTAPE_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -28,11 +27,12 @@ THIRD_PARTY_DUKTAPE_A_CHECKS = \
THIRD_PARTY_DUKTAPE_A_DIRECTDEPS = \
LIBC_CALLS \
LIBC_STUBS \
LIBC_FMT \
LIBC_TIME \
LIBC_INTRIN \
LIBC_MEM \
LIBC_STR \
LIBC_STUBS \
LIBC_TIME \
LIBC_TINYMATH \
LIBC_UNICODE \
LIBC_NEXGEN32E

View file

@ -14,7 +14,6 @@ THIRD_PARTY_F2C_A_SRCS = \
$(THIRD_PARTY_F2C_A_SRCS_C)
THIRD_PARTY_F2C_A_OBJS = \
$(THIRD_PARTY_F2C_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(THIRD_PARTY_F2C_A_SRCS_C:%.c=o/$(MODE)/%.o)
THIRD_PARTY_F2C_A_CHECKS = \
@ -25,6 +24,7 @@ THIRD_PARTY_F2C_A_DIRECTDEPS = \
LIBC_CALLS \
LIBC_CALLS_HEFTY \
LIBC_FMT \
LIBC_INTRIN \
LIBC_MEM \
LIBC_NEXGEN32E \
LIBC_RUNTIME \

View file

@ -16,7 +16,6 @@ THIRD_PARTY_GDTOA_A_SRCS = \
$(THIRD_PARTY_GDTOA_A_SRCS_C)
THIRD_PARTY_GDTOA_A_OBJS = \
$(THIRD_PARTY_GDTOA_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(THIRD_PARTY_GDTOA_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(THIRD_PARTY_GDTOA_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -25,12 +24,13 @@ THIRD_PARTY_GDTOA_A_CHECKS = \
$(THIRD_PARTY_GDTOA_A_HDRS:%=o/$(MODE)/%.ok)
THIRD_PARTY_GDTOA_A_DIRECTDEPS = \
LIBC_TINYMATH \
LIBC_STR \
LIBC_STUBS \
LIBC_INTRIN \
LIBC_MEM \
LIBC_NEXGEN32E \
LIBC_SYSV
LIBC_STR \
LIBC_STUBS \
LIBC_SYSV \
LIBC_TINYMATH
THIRD_PARTY_GDTOA_A_DEPS := \
$(call uniq,$(foreach x,$(THIRD_PARTY_GDTOA_A_DIRECTDEPS),$($(x))))

View file

@ -16,7 +16,6 @@ THIRD_PARTY_GETOPT_A_SRCS = \
$(THIRD_PARTY_GETOPT_A_SRCS_C)
THIRD_PARTY_GETOPT_A_OBJS = \
$(THIRD_PARTY_GETOPT_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(THIRD_PARTY_GETOPT_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(THIRD_PARTY_GETOPT_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -27,11 +26,12 @@ THIRD_PARTY_GETOPT_A_CHECKS = \
THIRD_PARTY_GETOPT_A_DIRECTDEPS = \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
LIBC_LOG \
LIBC_NEXGEN32E \
LIBC_STDIO \
LIBC_STUBS \
LIBC_STR
LIBC_STR \
LIBC_STUBS
THIRD_PARTY_GETOPT_A_DEPS := \
$(call uniq,$(foreach x,$(THIRD_PARTY_GETOPT_A_DIRECTDEPS),$($(x))))

View file

@ -7,7 +7,6 @@ THIRD_PARTY_LEMON = o/$(MODE)/third_party/lemon/lemon.com.dbg
THIRD_PARTY_LEMON_OBJS = \
o/$(MODE)/third_party/lemon/lemon.o \
o/$(MODE)/third_party/lemon/lemon.c.zip.o \
o/$(MODE)/third_party/lemon/lempar.c.txt.zip.o
THIRD_PARTY_LEMON_COMS = \
@ -23,6 +22,7 @@ THIRD_PARTY_LEMON_DIRECTDEPS = \
LIBC_ALG \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
LIBC_MEM \
LIBC_NEXGEN32E \
LIBC_RUNTIME \

View file

@ -24,15 +24,7 @@ THIRD_PARTY_LZ4CLI_OBJS = \
o/$(MODE)/third_party/lz4cli/lz4hc.o \
o/$(MODE)/third_party/lz4cli/lz4frame.o \
o/$(MODE)/third_party/lz4cli/datagen.o \
o/$(MODE)/third_party/lz4cli/xxhash.o \
o/$(MODE)/third_party/lz4cli/bench.c.zip.o \
o/$(MODE)/third_party/lz4cli/lz4.c.zip.o \
o/$(MODE)/third_party/lz4cli/lz4cli.c.zip.o \
o/$(MODE)/third_party/lz4cli/lz4io.c.zip.o \
o/$(MODE)/third_party/lz4cli/lz4hc.c.zip.o \
o/$(MODE)/third_party/lz4cli/lz4frame.c.zip.o \
o/$(MODE)/third_party/lz4cli/datagen.c.zip.o \
o/$(MODE)/third_party/lz4cli/xxhash.c.zip.o
o/$(MODE)/third_party/lz4cli/xxhash.o
o/$(MODE)/third_party/lz4cli/lz4.o \
o/$(MODE)/third_party/lz4cli/lz4io.o \
@ -43,9 +35,10 @@ o/$(MODE)/third_party/lz4cli/datagen.o: \
-DSTACK_FRAME_UNLIMITED
THIRD_PARTY_LZ4CLI_DIRECTDEPS = \
LIBC_CALLS_HEFTY \
LIBC_INTRIN \
LIBC_STDIO \
LIBC_TIME \
LIBC_CALLS_HEFTY \
LIBC_UNICODE
THIRD_PARTY_LZ4CLI_DEPS := \

View file

@ -14,13 +14,13 @@ THIRD_PARTY_MUSL_A_HDRS = $(filter %.h,$(THIRD_PARTY_MUSL_A_FILES))
THIRD_PARTY_MUSL_A_SRCS = $(filter %.c,$(THIRD_PARTY_MUSL_A_FILES))
THIRD_PARTY_MUSL_A_OBJS = \
$(THIRD_PARTY_MUSL_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(THIRD_PARTY_MUSL_A_SRCS:%.c=o/$(MODE)/%.o)
THIRD_PARTY_MUSL_A_DIRECTDEPS = \
LIBC_ALG \
LIBC_CALLS \
LIBC_CALLS_HEFTY \
LIBC_INTRIN \
LIBC_MEM \
LIBC_NEXGEN32E \
LIBC_STDIO \

View file

@ -11,12 +11,12 @@ THIRD_PARTY_REGEX_A_HDRS = $(filter %.h,$(THIRD_PARTY_REGEX_A_FILES))
THIRD_PARTY_REGEX_A_SRCS = $(filter %.c,$(THIRD_PARTY_REGEX_A_FILES))
THIRD_PARTY_REGEX_A_OBJS = \
$(THIRD_PARTY_REGEX_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(THIRD_PARTY_REGEX_A_SRCS:%.c=o/$(MODE)/%.o)
THIRD_PARTY_REGEX_A_DIRECTDEPS = \
LIBC_ALG \
LIBC_FMT \
LIBC_INTRIN \
LIBC_MEM \
LIBC_NEXGEN32E \
LIBC_STR \

View file

@ -21,7 +21,6 @@ THIRD_PARTY_STB_A_SRCS = \
$(THIRD_PARTY_STB_A_SRCS_C)
THIRD_PARTY_STB_A_OBJS = \
$(THIRD_PARTY_STB_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(THIRD_PARTY_STB_A_OBJS_S) \
$(THIRD_PARTY_STB_A_OBJS_C)
@ -30,6 +29,7 @@ THIRD_PARTY_STB_A_DIRECTDEPS = \
LIBC_ALG \
LIBC_BITS \
LIBC_FMT \
LIBC_INTRIN \
LIBC_LOG \
LIBC_MEM \
LIBC_NEXGEN32E \

View file

@ -24,7 +24,6 @@ THIRD_PARTY_XED_A_SRCS = \
$(THIRD_PARTY_XED_A_SRCS_C)
THIRD_PARTY_XED_A_OBJS = \
$(THIRD_PARTY_XED_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(THIRD_PARTY_XED_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(THIRD_PARTY_XED_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -33,9 +32,10 @@ THIRD_PARTY_XED_A_CHECKS = \
$(THIRD_PARTY_XED_A_HDRS:%=o/$(MODE)/%.ok)
THIRD_PARTY_XED_A_DIRECTDEPS = \
LIBC_INTRIN \
LIBC_NEXGEN32E \
LIBC_STUBS \
LIBC_STR
LIBC_STR \
LIBC_STUBS
THIRD_PARTY_XED_A_DEPS := \
$(call uniq,$(foreach x,$(THIRD_PARTY_XED_A_DIRECTDEPS),$($(x))))

View file

@ -17,7 +17,6 @@ THIRD_PARTY_ZLIB_A_SRCS = \
$(THIRD_PARTY_ZLIB_A_SRCS_C)
THIRD_PARTY_ZLIB_A_OBJS = \
$(THIRD_PARTY_ZLIB_A_SRCS:%=o/$(MODE)/%.zip.o) \
$(THIRD_PARTY_ZLIB_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(THIRD_PARTY_ZLIB_A_SRCS_C:%.c=o/$(MODE)/%.o)
@ -26,8 +25,9 @@ THIRD_PARTY_ZLIB_A_CHECKS = \
$(THIRD_PARTY_ZLIB_A_HDRS_ALL:%=o/$(MODE)/%.ok)
THIRD_PARTY_ZLIB_A_DIRECTDEPS = \
LIBC_STUBS \
LIBC_NEXGEN32E
LIBC_INTRIN \
LIBC_NEXGEN32E \
LIBC_STUBS
THIRD_PARTY_ZLIB_A_DEPS := \
$(call uniq,$(foreach x,$(THIRD_PARTY_ZLIB_A_DIRECTDEPS),$($(x))))