The below patch should fix the issue. diff --git a/tools/musl-gcc.specs.sh b/tools/musl-gcc.specs.sh index 30492574..ffb46d70 100644 --- a/tools/musl-gcc.specs.sh +++ b/tools/musl-gcc.specs.sh @@ -23,7 +23,7 @@ libgcc.a%s %:if-exists(libgcc_eh.a%s) crtendS.o%s $libdir/crtn.o *link: --dynamic-linker $ldso -nostdlib %{shared:-shared} %{static:-static} %{rdynamic:-export-dynamic} +%{!static:-dynamic-linker $ldso} -nostdlib %{shared:-shared} %{static:-static} %{rdynamic:-export-dynamic} *esp_link: On Sun, Nov 13, 2022 at 8:46 AM Rui Ueyama wrote: > Let me try to create a patch. > > On Sun, Nov 13, 2022 at 8:38 AM Rich Felker wrote: > >> On Sun, Nov 13, 2022 at 08:11:29AM +0800, Rui Ueyama wrote: >> > Hi, >> > >> > I think I found a musl-gcc issue. It looks like musl-gcc always appends >> > `-dynamic-linker /lib/ld-musl-x86_64.so.1` even if `-static` is given. >> That >> > causes a created program to immediately crash on startup as you can see >> > below: >> > >> > $ cat hello.c >> > #include >> > int main() { printf("Hello\n"); } >> > >> > $ musl-gcc -static -fuse-ld=lld hello.c -o hello >> > >> > $ ./hello >> > Segmentation fault (core dumped) >> > >> > $ musl-gcc -static -fuse-ld=lld hello.c -o hello -Wl,-no-dynamic-linker >> > $ ./hello >> > Hello >> > >> > This also happens to my new linker, mold, as well. `-dynamic-linker` >> option >> > is passed to the linker, and lld and mold do what it is told to do, so I >> > don't think it is a linker's bug. Rather, it's a compiler front end's >> bug >> > that passes the unnecessary command line option. Can you not to append >> > `-dynamic-linker` if `-static`? >> >> Yes, I think this should be fixed. It only works with bfd ld without >> static pie (which we're also missing support for) because it just >> ignores -dynamic-linker in the ET_EXEC case. >> >> Would you be willing to propose a candidate patch? I believe this has >> been raised before in the context of static pie not working with >> musl-gcc (it didn't exist when the wrapper was added) so ideally that >> will get fixed too. >> >> Rich >> >