I've tested and both "-fno-pie" and "-static" are not compatible with some gcc and clang sanitizers, so these solutions are bad.

Found right solution in gmp source. It was hidden in configure: "--with-pic" option. I've enabled it and now both glibc and musl works perfect. Created gentoo bug https://bugs.gentoo.org/707332. For everyone who will read this thread - you need to enable "--with-pic" option for gmp. You don't need to disable assembly completely.

So on this week I will try to create small user friendly patch for musl about readonly relocations.

чт, 30 янв. 2020 г. в 00:46, Rich Felker <dalias@libc.org>:
On Thu, Jan 30, 2020 at 12:35:52AM +0300, Андрей Аладьев wrote:
> "readelf -d main | grep TEXTREL" returns the same text on both musl and
> glibc containers:
>
> 0x0000000000000016 (TEXTREL) 0x0
> 0x000000000000001e (FLAGS)     TEXTREL
>
> "gcc -no-pie" is another workaround for musl container like Rich said. But
> I think that 'set(CMAKE_EXE_LINKER_FLAGS "-static")' will be best cross
> platform solution. As I know "-static" implies "no-pie".

-static normally does not imply -no-pie with musl target. musl was the
first to introduce static pie, and it was not treated as something
special/weird you have to request, just what you get with -static +
-pie or -static and default-pie toolchain.

When GCC upstreamed static pie with glibc support, they made it so
-static overrides -pie and so you need the new -static-pie to get
static pie. musl patches for gcc revert this change since it's a
regression to the original behavior, treats static-pie a second-class,
and does not work with environments where pie is mandatory (like nommu
targets) where default-pie *must* be honored.

Rich