mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Youren Shen <shenyouren@gmail.com>
To: Rich Felker <dalias@libc.org>
Cc: musl@lists.openwall.com
Subject: Re: [BUG] Force to use a dynamic linker in musl-clang wapper cause a crash for static-pie c++ programs.
Date: Wed, 25 Dec 2019 18:37:01 +0800	[thread overview]
Message-ID: <CAHu4ykj+pfsrwQ=vDhTFUH1TPb_R0J5jba4kf=TTevCpz_2J7g@mail.gmail.com> (raw)
In-Reply-To: <20191224150331.GX1666@brightrain.aerifal.cx>


[-- Attachment #1.1: Type: text/plain, Size: 2453 bytes --]

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@libc.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.

[-- Attachment #1.2: Type: text/html, Size: 3303 bytes --]

[-- Attachment #2: static-pie-for-ld.musl-clang.patch --]
[-- Type: application/octet-stream, Size: 346 bytes --]

diff --git a/tools/ld.musl-clang.in b/tools/ld.musl-clang.in
index 93763d6..7cb49d9 100644
--- a/tools/ld.musl-clang.in
+++ b/tools/ld.musl-clang.in
@@ -48,4 +48,4 @@ for x ; do
     esac
 done

-exec $($cc -print-prog-name=ld) -nostdlib "$@" -lc -dynamic-linker "$ldso"
+exec $($cc -print-prog-name=ld) -nostdlib -dynamic-linker "$ldso" "$@" -lc

  reply	other threads:[~2019-12-25 10:37 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-24 14:38 Youren Shen
2019-12-24 15:03 ` Rich Felker
2019-12-25 10:37   ` Youren Shen [this message]
2019-12-26  4:46     ` Fangrui Song

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAHu4ykj+pfsrwQ=vDhTFUH1TPb_R0J5jba4kf=TTevCpz_2J7g@mail.gmail.com' \
    --to=shenyouren@gmail.com \
    --cc=dalias@libc.org \
    --cc=musl@lists.openwall.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).