This patch set adds musl libc[0] support to GCC.

The patches were originally developed by Gregor Richards[1][2],
who I believe have already done the FSF copyright assignment and agrees
with the changes I made (please verify).  I only did minor cleanups
to make the patches better suited for upstream.

Issues I don't have patches for:

* On powerpc it seems the only configure option to choose the default
long-double abi is --with-long-double-128, but that's the default with
sufficiently new glibc. (musl gets 64bit long-double because the glibc
version check fails, this is ok, because there is no ibm128 support in
musl, but it would be better if --with-long-double-64 could be set
explicitly or even ieee128 abi if gcc supports that).

* libcilkrts uses pthread_yield on linux instead of sched_yield by
default, but musl does not have the non-standard pthread_yield symbol.

Tests:

I only tested the C and C++ languages.  GCJ needs further patching,
I haven't tested gfortran nor Ada.  libsanitizer has to be disabled
for musl.  I built cross compilers for various targets musl supports
and ran x86_64-linux-musl cross compiler (musl target glibc host)
and native musl make check.  There were several errors, some of the
causes:

* libcilkrts.so has undefined ref to pthread_yield
* ifunc is not supported by musl
* ifunc is used in x86 libatomic.so for __atomic_store_16
* gcc stdatomic.h has some incompatible typedefs with musl stdint.h
* musl does not support unwind across libc calls or signal handlers
* splitstacks does not work (undef refs to __morestack* in libgcc)
* musl does not yet have __memcpy_chk etc.
* -fshort-wchar is not supported
* i've seen x86 specific avx failures
* atexit during exit fails with musl (some c++ destructor tests)

This fixes BZ 58446 and 55807 which requested musl support.

[0] http://www.musl-libc.org/
[1] https://github.com/GregorR/musl-gcc-patches
[2] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58446

--
Changes:
 fixincludes/mkfixinc.sh                     |    3 +-
 gcc/config.gcc                              |    9 ++-
 gcc/config/aarch64/aarch64-linux.h          |    8 ++
 gcc/config/arm/linux-eabi.h                 |   17 +++++
 gcc/config/i386/linux.h                     |    1 +
 gcc/config/i386/linux64.h                   |    4 +
 gcc/config/i386/pmm_malloc.h                |    9 ++-
 gcc/config/linux.h                          |  105 +++++++++++++++++++++++----
 gcc/config/linux.opt                        |    4 +
 gcc/config/microblaze/linux.h               |   16 +++-
 gcc/config/mips/linux.h                     |    7 ++
 gcc/config/rs6000/linux64.h                 |   12 ++-
 gcc/config/rs6000/secureplt.h               |    1 +
 gcc/config/rs6000/sysv4.h                   |   16 +++-
 gcc/config/sh/linux.h                       |    7 ++
 gcc/configure                               |    7 ++
 gcc/configure.ac                            |    7 ++
 libgcc/unwind-dw2-fde-dip.c                 |    6 ++
 libgfortran/acinclude.m4                    |    2 +-
 libgfortran/configure                       |    2 +-
 libitm/config/arm/hwcap.cc                  |    2 +-
 libitm/config/linux/x86/tls.h               |    8 +-
 libstdc++-v3/config/os/generic/os_defines.h |    5 ++
 libstdc++-v3/configure.host                 |    3 +
 24 files changed, 227 insertions(+), 34 deletions(-)

Reply via email to