|
Message-ID: <CAHu4ykj+pfsrwQ=vDhTFUH1TPb_R0J5jba4kf=TTevCpz_2J7g@mail.gmail.com> Date: Wed, 25 Dec 2019 18:37:01 +0800 From: Youren Shen <shenyouren@...il.com> To: Rich Felker <dalias@...c.org> Cc: musl@...ts.openwall.com Subject: Re: [BUG] Force to use a dynamic linker in musl-clang wapper cause a crash for static-pie c++ programs. Thanks for your reply. Dived deeper, I think this is because the options clang/gcc passed to ld are not well handled by ld. Unlike "-static", which is passed directly to the linker, the clang pass -no-dynamic-linker when static-pie is enabled. However, -dynamic-linker=<file> in ld.musl-clang wrapper conflict with this -no-dynamic-linker. As a result, ld accepts the last one it received, which is "-dynamic-linker=<file>" in this case. Here is the problem: even we passed static-pie to clang, and then the clang pass -no-dynamic-linker to ld, This option is still omitted by ld.musl-clang. I suggest a fix on it: move -dynamic-linker "$ldso" before the previous user inputs. Before: ``` exec $($cc -print-prog-name=ld) -nostdlib "$@" -lc -dynamic-linker "$ldso" ``` After: ``` exec $($cc -print-prog-name=ld) -nostdlib -dynamic-linker "$ldso" "$@" -lc ``` As you can see, this is a quite simple patch. Further testes may required. And for musl-gcc, as I test, it seems that it has the same problem. But I'm not familiar with gcc specs file. So maybe if anyone encounter the same problem, they can refer this email and give a solution. On Tue, Dec 24, 2019 at 11:03 PM Rich Felker <dalias@...c.org> wrote: > On Tue, Dec 24, 2019 at 10:38:49PM +0800, Youren Shen wrote: > > Hey, there, > > Recently I'm trying to build a non-gnu toolchain with musl, clang, llvm, > > libc++, compiler-rt. While static-pie feature is very useful in our > > project, musl-clang force to link a dynamic linker into the binary. This > > behavior will cause a crash in c++ programs with compiler-rt and libc++. > > For more details and reproduction of this bug, you can read my previous > > email to llvm-dev mail lists.[1] > > I spend a few days to find the reason -- in function _dlstart_c, the > > program will get a "base" of relocation in /lib/ld-musl-x86_64.so.1, > which > > is not right when it tries to relocate .rel.dyn section in the binary. > > Overall, the static-pie program does not need a dynamic linker at all. So > > maybe we should remove this argument in wrapper when static-pie is > enabled. > > > > Thank you very much. > > > > [1]. > https://groups.google.com/forum/#!msg/llvm-dev/XPrSPqD2zjM/YtH6Fi2YAgAJ > > I don't think the wrappers (gcc or clang one) have been updated with > logic for static pie since it was added, and I'm not sure how easy it > is to add. I'd welcome patches for review, though. > > Rich > -- Best Regards. Youren Shen. Content of type "text/html" skipped Download attachment "static-pie-for-ld.musl-clang.patch" of type "application/octet-stream" (346 bytes)
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.