We don't support static pie in our toolchain so I haven't really tested that scenario but now I see why the SHARED macro is needed here.

One option around this issue would be to avoid building rcrt1.c altogether, but I'd like to avoid carrying an extra patch for that. The other option would be to allow inline assembly in this case since it seems to be only used as a guard.  I'll see if the second option is feasible.

On Sat, Nov 7, 2015 at 5:24 AM Szabolcs Nagy <nsz@port70.net> wrote:
* Petr Hosek <phosek@google.com> [2015-11-06 23:46:40 +0000]:
> When building musl with pnacl-clang compiler I found a bug: crt/rcrt1.c
> defines the SHARED macro which enables the conditional block in
> src/ldso/dlstart.c, this breaks for us because pnacl-clang doesn't support
> shared libraries nor inline assembly. If my understanding is correct, the
> SHARED macro should be (and already is) defined only in CFLAGS_ALL_SHARED.
> The attached patch fixes that.

but rcrt1.o is not built with CFLAGS_ALL_SHARED and SHARED is needed

rcrt1.o should be only used for static pie

> From 7b1348fa1a8dd2d02a9087639c6b02ce9585aef2 Mon Sep 17 00:00:00 2001
> From: Petr Hosek <phosek@chromium.org>
> Date: Thu, 5 Nov 2015 21:55:20 -0800
> Subject: [PATCH] don't define SHARED macro in the source
>
> the SHARED macro should only be defined in CFLAGS_ALL_SHARED when
> building musl as shared library.
> ---
>  crt/rcrt1.c | 1 -
>  1 file changed, 1 deletion(-)
>
> diff --git a/crt/rcrt1.c b/crt/rcrt1.c
> index 9be117f..0ba78f8 100644
> --- a/crt/rcrt1.c
> +++ b/crt/rcrt1.c
> @@ -1,4 +1,3 @@
> -#define SHARED
>  #define START "_start"
>  #define _dlstart_c _start_c
>  #include "../src/ldso/dlstart.c"
> --
> 2.6.0.rc2.230.g3dd15c0
>