On Sunday, 17 December 2017 at 12:45:58 UTC, Yuxuan Shui wrote:
I'm trying to get dmd and phobos working with musl. Right now I
have a bootstrapped compiler built with musl, which seems to
work fine. However user applications will segmentation fault
before even reaches main.
I investigated a bit. Looks like musl is not happy with how
druntime uses dlopen related functions. When a D library loads,
it tries to call _d_dso_registry, which will try to get a
handle of the library using dlopen. Meaning dlopen will be
called on the library itself while it's still loading. This
seems to break musl. Although this might also be a bug on musl
side: it tries to call init functions even when RTLD_NOLOAD is
passed to dlopen.
However, going through sections_elf_shared.d, it makes me feel
it's doing some magic tricks with dl functions, but I don't
know what for?
If my understand is correct, it's used to register TLS storage
to GC. If that's the case, there must be simpler ways to do
that.
It does various things to setup the ELF executable for BSD and
linux/Glibc, including support for using the stdlib as a shared
library: take a look at the much simpler sections_android or
sections_solaris for the minimum of what's required.
You can use sections_elf_shared with the shared library support
turned off, by adding the SHARED=0 flag when building druntime.
I'd do that first before trying to modify the source for Musl.