Let me try to create a patch.

On Sun, Nov 13, 2022 at 8:38 AM Rich Felker <dalias@libc.org> 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 <stdio.h>
> 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