diff --git a/Makefile b/Makefile index f06bd75cb..4f4b954fc 100644 --- a/Makefile +++ b/Makefile @@ -617,9 +617,21 @@ PIC_OBJS = \ # link that using `--whole-archive` rather than pass the object files directly # to CC. This is a workaround for a Windows command line size limitation. See # the `%.a` rule below for details. -$(SYSROOT_LIB)/%.so: $(OBJDIR)/%.so.a $(BUILTINS_LIB) - $(CC) --target=$(TARGET_TRIPLE) -nodefaultlibs -shared --sysroot=$(SYSROOT) \ - -o $@ -Wl,--whole-archive $< -Wl,--no-whole-archive $(BUILTINS_LIB) + +# Note: libc.so is special because it shouldn't link to libc.so. +# Note: --allow-undefined-file=linker-provided-symbols.txt is +# a workaround for https://github.com/llvm/llvm-project/issues/103592 +$(SYSROOT_LIB)/libc.so: $(OBJDIR)/libc.so.a $(BUILTINS_LIB) + $(CC) $(EXTRA_CFLAGS) --target=${TARGET_TRIPLE} -nodefaultlibs \ + -shared --sysroot=$(SYSROOT) \ + -o $@ -Wl,--whole-archive $< -Wl,--no-whole-archive $(BUILTINS_LIB) \ + -Wl,--allow-undefined-file=linker-provided-symbols.txt + +$(SYSROOT_LIB)/%.so: $(OBJDIR)/%.so.a $(SYSROOT_LIB)/libc.so + $(CC) $(EXTRA_CFLAGS) --target=${TARGET_TRIPLE} \ + -shared --sysroot=$(SYSROOT) \ + -o $@ -Wl,--whole-archive $< -Wl,--no-whole-archive \ + -Wl,--allow-undefined-file=linker-provided-symbols.txt $(OBJDIR)/libc.so.a: $(LIBC_SO_OBJS) $(MUSL_PRINTSCAN_LONG_DOUBLE_SO_OBJS) diff --git a/libc-top-half/musl/src/signal/psignal.c b/libc-top-half/musl/src/signal/psignal.c index 138dbe00f..5b9dc38fa 100644 --- a/libc-top-half/musl/src/signal/psignal.c +++ b/libc-top-half/musl/src/signal/psignal.c @@ -3,6 +3,13 @@ #include #include +#ifndef __wasilibc_unmodified_upstream +/* undef the macro to use the standard stderr instead of __stderr_FILE + * (the libc internal symbol) as this lives in a separate library, + * libwasi-emulated-signal.so. */ +#undef stderr +#endif + void psignal(int sig, const char *msg) { FILE *f = stderr; diff --git a/linker-provided-symbols.txt b/linker-provided-symbols.txt new file mode 100644 index 000000000..8508f8d50 --- /dev/null +++ b/linker-provided-symbols.txt @@ -0,0 +1,3 @@ +__heap_base +__heap_end +__c_longjmp