|
Message-ID: <20221113032653.6qz4hqh3nfm25tpt@gmail.com> Date: Sat, 12 Nov 2022 19:26:53 -0800 From: Fangrui Song <i@...kray.me> To: Rui Ueyama <rui314@...il.com> Cc: Rich Felker <dalias@...c.org>, musl@...ts.openwall.com Subject: Re: `musl-gcc -static` and lld/mold On 2022-11-13, Rui Ueyama wrote: >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: I use this patch which handles -static-pie as well: https://github.com/MaskRay/musl/tree/musl-gcc In addition, I use `*libdir: $libdir` to avoid absolute path references so that the spec file can be easily fixed after moving the build directory. >On Sun, Nov 13, 2022 at 8:46 AM Rui Ueyama <rui314@...il.com> wrote: > >> Let me try to create a patch. >> >> On Sun, Nov 13, 2022 at 8:38 AM Rich Felker <dalias@...c.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 >>> >>
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.