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

@ -1,7 +1,11 @@
int main() {
int rc;
FILE *f;
f = fopen("/dev/null", "w");
fprintf(f, "hello world\n");
fclose(f);
rc = system("exit 42");
CHECK_NE(-1, rc);
CHECK_EQ(42, WEXITSTATUS(rc));
return 0;
}

View file

@ -7,9 +7,13 @@ o/$(MODE)/test/libc/release/cosmopolitan.zip: \
o/$(MODE)/libc/crt/crt.o \
o/$(MODE)/ape/ape.o \
o/$(MODE)/cosmopolitan.a
zip -j $@ $^
@zip -j $@ $^
o/$(MODE)/test/libc/release/smoke.com: \
o/$(MODE)/test/libc/release/smoke.com.dbg
@objcopy -SO binary $< $@
o/$(MODE)/test/libc/release/smoke.com.dbg: \
test/libc/release/smoke.c \
o/cosmopolitan.h \
o/$(MODE)/ape/ape.lds \
@ -26,7 +30,6 @@ o/$(MODE)/test/libc/release/smoke.com: \
-nostdinc \
-mno-red-zone \
-Wl,--gc-sections \
-Wl,--oformat=binary \
-Wl,-z,max-page-size=0x1000 \
-Wl,-T,o/$(MODE)/ape/ape.lds \
-include o/cosmopolitan.h \