From: Dirk Neukirchen <[email protected]> taken from musl-cross https://github.com/GregorR/musl-cross/blob/master/patches/gcc-4.9.0-musl.diff
Signed-off-by: Dirk Neukirchen <[email protected]> --- toolchain/gcc/patches/4.9.0/200-musl.patch | 730 ++++++++++++++++++++++------- 1 file changed, 556 insertions(+), 174 deletions(-) diff --git a/toolchain/gcc/patches/4.9.0/200-musl.patch b/toolchain/gcc/patches/4.9.0/200-musl.patch index 2e6df47..06381ce 100644 --- a/toolchain/gcc/patches/4.9.0/200-musl.patch +++ b/toolchain/gcc/patches/4.9.0/200-musl.patch @@ -1,15 +1,51 @@ ---- a/gcc/config.gcc -+++ b/gcc/config.gcc -@@ -549,7 +549,7 @@ case ${target} in +# HG changeset patch +# Parent 2f9df662aaaba956600bbdb123b6a227c8e64c59 +Use the generic implementation of libstdc++ primitives when we're on musl, not the glibc one. + +diff -r 2f9df662aaab libstdc++-v3/configure.host +--- a/libstdc++-v3/configure.host Tue May 20 11:00:21 2014 -0400 ++++ b/libstdc++-v3/configure.host Tue May 20 11:05:42 2014 -0400 +@@ -264,6 +264,13 @@ + os_include_dir="os/bsd/freebsd" + ;; + gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu) ++ # check for musl by target ++ case "${host_os}" in ++ *-musl*) ++ os_include_dir="os/generic" ++ ;; ++ *) ++ + if [ "$uclibc" = "yes" ]; then + os_include_dir="os/uclibc" + elif [ "$bionic" = "yes" ]; then +@@ -272,6 +279,9 @@ + os_include_dir="os/gnu-linux" + fi + ;; ++ ++ esac ++ ;; + hpux*) + os_include_dir="os/hpux" + ;; +# HG changeset patch +# Parent b6f4ce05a3155dbcbc06d72aebdb67e2f8abc094 +Adding -mmusl as a musl libc specifier, and the necessary hacks for it to know how to find musl's dynamic linker. + +diff -r b6f4ce05a315 gcc/config.gcc +--- a/gcc/config.gcc Tue May 20 11:05:42 2014 -0400 ++++ b/gcc/config.gcc Tue May 20 11:05:45 2014 -0400 +@@ -594,7 +594,7 @@ esac # Common C libraries. -tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3" +tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3 LIBC_MUSL=4" - # Common parts for widely ported systems. - case ${target} in -@@ -652,6 +652,9 @@ case ${target} in + # 32-bit x86 processors supported by --with-arch=. Each processor + # MUST be separated by exactly one space. +@@ -719,6 +719,9 @@ *-*-*uclibc*) tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC" ;; @@ -19,39 +55,10 @@ *) tm_defines="$tm_defines DEFAULT_LIBC=LIBC_GLIBC" ;; ---- a/gcc/config/arm/linux-eabi.h -+++ b/gcc/config/arm/linux-eabi.h -@@ -77,6 +77,10 @@ - %{mfloat-abi=soft*:" GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "} \ - %{!mfloat-abi=*:" GLIBC_DYNAMIC_LINKER_DEFAULT "}" - -+/* musl has no "classic" (i.e. broken) mode */ -+#undef MUSL_DYNAMIC_LINKER -+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-arm.so.1" -+ - /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to - use the GNU/Linux version, not the generic BPABI version. */ - #undef LINK_SPEC ---- a/gcc/config/i386/linux.h -+++ b/gcc/config/i386/linux.h -@@ -21,3 +21,4 @@ along with GCC; see the file COPYING3. - - #define GNU_USER_LINK_EMULATION "elf_i386" - #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" -+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-i386.so.1" ---- a/gcc/config/i386/linux64.h -+++ b/gcc/config/i386/linux64.h -@@ -30,3 +30,7 @@ see the files COPYING3 and COPYING.RUNTI - #define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2" - #define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2" - #define GLIBC_DYNAMIC_LINKERX32 "/libx32/ld-linux-x32.so.2" -+ -+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-i386.so.1" -+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-x86_64.so.1" -+#define MUSL_DYNAMIC_LINKERX32 "/lib/ld-musl-x32.so.1" ---- a/gcc/config/linux.h -+++ b/gcc/config/linux.h -@@ -32,10 +32,12 @@ see the files COPYING3 and COPYING.RUNTI +diff -r b6f4ce05a315 gcc/config/linux.h +--- a/gcc/config/linux.h Tue May 20 11:05:42 2014 -0400 ++++ b/gcc/config/linux.h Tue May 20 11:05:45 2014 -0400 +@@ -32,10 +32,12 @@ #define OPTION_GLIBC (DEFAULT_LIBC == LIBC_GLIBC) #define OPTION_UCLIBC (DEFAULT_LIBC == LIBC_UCLIBC) #define OPTION_BIONIC (DEFAULT_LIBC == LIBC_BIONIC) @@ -64,7 +71,7 @@ #endif #define GNU_USER_TARGET_OS_CPP_BUILTINS() \ -@@ -53,18 +55,21 @@ see the files COPYING3 and COPYING.RUNTI +@@ -53,18 +55,21 @@ uClibc or Bionic is the default C library and whether -muclibc or -mglibc or -mbionic has been passed to change the default. */ @@ -94,7 +101,7 @@ #else #error "Unsupported DEFAULT_LIBC" #endif /* DEFAULT_LIBC */ -@@ -84,16 +89,16 @@ see the files COPYING3 and COPYING.RUNTI +@@ -84,21 +89,92 @@ #define GNU_USER_DYNAMIC_LINKER \ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, \ @@ -113,11 +120,88 @@ - BIONIC_DYNAMIC_LINKERX32) + BIONIC_DYNAMIC_LINKERX32, MUSL_DYNAMIC_LINKERX32) - /* Determine whether the entire c99 runtime - is present in the runtime library. */ ---- a/gcc/config/linux.opt -+++ b/gcc/config/linux.opt -@@ -30,3 +30,7 @@ Use GNU C library + /* Whether we have Bionic libc runtime */ + #undef TARGET_HAS_BIONIC + #define TARGET_HAS_BIONIC (OPTION_BIONIC) + ++/* musl avoids problematic includes by rearranging the include directories. ++ * Unfortunately, this is mostly duplicated from cppdefault.c */ ++#if DEFAULT_LIBC == LIBC_MUSL ++#define INCLUDE_DEFAULTS_MUSL_GPP \ ++ { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, \ ++ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 }, \ ++ { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1, \ ++ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 1 }, \ ++ { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1, \ ++ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 }, ++ ++#ifdef LOCAL_INCLUDE_DIR ++#define INCLUDE_DEFAULTS_MUSL_LOCAL \ ++ { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 }, \ ++ { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 }, ++#else ++#define INCLUDE_DEFAULTS_MUSL_LOCAL ++#endif ++ ++#ifdef PREFIX_INCLUDE_DIR ++#define INCLUDE_DEFAULTS_MUSL_PREFIX \ ++ { PREFIX_INCLUDE_DIR, 0, 0, 1, 0, 0}, ++#else ++#define INCLUDE_DEFAULTS_MUSL_PREFIX ++#endif ++ ++#ifdef CROSS_INCLUDE_DIR ++#define INCLUDE_DEFAULTS_MUSL_CROSS \ ++ { CROSS_INCLUDE_DIR, "GCC", 0, 0, 0, 0}, ++#else ++#define INCLUDE_DEFAULTS_MUSL_CROSS ++#endif ++ ++#ifdef TOOL_INCLUDE_DIR ++#define INCLUDE_DEFAULTS_MUSL_TOOL \ ++ { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1, 0, 0}, ++#else ++#define INCLUDE_DEFAULTS_MUSL_TOOL ++#endif ++ ++#ifdef NATIVE_SYSTEM_HEADER_DIR ++#define INCLUDE_DEFAULTS_MUSL_NATIVE \ ++ { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 2 }, \ ++ { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 0 }, ++#else ++#define INCLUDE_DEFAULTS_MUSL_NATIVE ++#endif ++ ++#if defined (CROSS_DIRECTORY_STRUCTURE) && !defined (TARGET_SYSTEM_ROOT) ++# undef INCLUDE_DEFAULTS_MUSL_LOCAL ++# define INCLUDE_DEFAULTS_MUSL_LOCAL ++# undef INCLUDE_DEFAULTS_MUSL_NATIVE ++# define INCLUDE_DEFAULTS_MUSL_NATIVE ++#else ++# undef INCLUDE_DEFAULTS_MUSL_CROSS ++# define INCLUDE_DEFAULTS_MUSL_CROSS ++#endif ++ ++#undef INCLUDE_DEFAULTS ++#define INCLUDE_DEFAULTS \ ++ { \ ++ INCLUDE_DEFAULTS_MUSL_GPP \ ++ INCLUDE_DEFAULTS_MUSL_PREFIX \ ++ INCLUDE_DEFAULTS_MUSL_CROSS \ ++ INCLUDE_DEFAULTS_MUSL_TOOL \ ++ INCLUDE_DEFAULTS_MUSL_NATIVE \ ++ { GCC_INCLUDE_DIR, "GCC", 0, 1, 0, 0 }, \ ++ { 0, 0, 0, 0, 0, 0 } \ ++ } ++#endif ++ + #if (DEFAULT_LIBC == LIBC_UCLIBC) && defined (SINGLE_LIBC) /* uClinux */ + /* This is a *uclinux* target. We don't define below macros to normal linux + versions, because doing so would require *uclinux* targets to include +diff -r b6f4ce05a315 gcc/config/linux.opt +--- a/gcc/config/linux.opt Tue May 20 11:05:42 2014 -0400 ++++ b/gcc/config/linux.opt Tue May 20 11:05:45 2014 -0400 +@@ -30,3 +30,7 @@ muclibc Target Report RejectNegative Var(linux_libc,LIBC_UCLIBC) Negative(mbionic) Use uClibc C library @@ -125,69 +209,10 @@ +mmusl +Target Report RejectNegative Var(linux_libc,LIBC_MUSL) Negative(mglibc) +Use musl C library ---- a/gcc/config/mips/linux.h -+++ b/gcc/config/mips/linux.h -@@ -18,3 +18,5 @@ along with GCC; see the file COPYING3. - <http://www.gnu.org/licenses/>. */ - - #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1" -+ -+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-mips.so.1" ---- a/gcc/config/rs6000/linux64.h -+++ b/gcc/config/rs6000/linux64.h -@@ -364,17 +364,21 @@ extern int dot_symbols; - #define GLIBC_DYNAMIC_LINKER64 "/lib64/ld64.so.1" - #define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0" - #define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0" -+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-powerpc.so.1" -+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-powerpc64.so.1" - #if DEFAULT_LIBC == LIBC_UCLIBC --#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}" -+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{mmusl:" M ";:" U "}}" - #elif DEFAULT_LIBC == LIBC_GLIBC --#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:" U ";:" G "}" -+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{muclibc:" U ";:%{mmusl:" M ";:" G "}}" -+#elif DEFAULT_LIBC == LIBC_MUSL -+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{muclibc:" U ";:" M "}}" - #else - #error "Unsupported DEFAULT_LIBC" - #endif - #define GNU_USER_DYNAMIC_LINKER32 \ -- CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32) -+ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32, MUSL_DYNAMIC_LINKER32) - #define GNU_USER_DYNAMIC_LINKER64 \ -- CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64) -+ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64, MUSL_DYNAMIC_LINKER64) - - - #define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux %{!shared: %{!static: \ ---- a/gcc/config/rs6000/sysv4.h -+++ b/gcc/config/rs6000/sysv4.h -@@ -789,15 +789,18 @@ extern int fixuplabelno; - - #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1" - #define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0" -+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-powerpc.so.1" - #if DEFAULT_LIBC == LIBC_UCLIBC --#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}" -+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{mmusl:" M ";:" U "}}" -+#elif DEFAULT_LIBC == LIBC_MUSL -+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{muclibc:" U ";:" M "}}" - #elif !defined (DEFAULT_LIBC) || DEFAULT_LIBC == LIBC_GLIBC --#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:" U ";:" G "}" -+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{muclibc:" U ";:%{mmusl:" M ";:" G "}}" - #else - #error "Unsupported DEFAULT_LIBC" - #endif - #define GNU_USER_DYNAMIC_LINKER \ -- CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER) -+ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, MUSL_DYNAMIC_LINKER) - - #define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \ - %{rdynamic:-export-dynamic} \ ---- a/gcc/ginclude/stddef.h -+++ b/gcc/ginclude/stddef.h -@@ -181,6 +181,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t; +diff -r b6f4ce05a315 gcc/ginclude/stddef.h +--- a/gcc/ginclude/stddef.h Tue May 20 11:05:42 2014 -0400 ++++ b/gcc/ginclude/stddef.h Tue May 20 11:05:45 2014 -0400 +@@ -181,6 +181,7 @@ #ifndef _GCC_SIZE_T #ifndef _SIZET_ #ifndef __size_t @@ -195,7 +220,7 @@ #define __size_t__ /* BeOS */ #define __SIZE_T__ /* Cray Unicos/Mk */ #define _SIZE_T -@@ -197,6 +198,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t; +@@ -197,6 +198,7 @@ #define ___int_size_t_h #define _GCC_SIZE_T #define _SIZET_ @@ -203,7 +228,7 @@ #if (defined (__FreeBSD__) && (__FreeBSD__ >= 5)) \ || defined(__FreeBSD_kernel__) /* __size_t is a typedef on FreeBSD 5, must not trash it. */ -@@ -214,6 +216,7 @@ typedef __SIZE_TYPE__ size_t; +@@ -214,6 +216,7 @@ typedef long ssize_t; #endif /* __BEOS__ */ #endif /* !(defined (__GNUG__) && defined (size_t)) */ @@ -211,8 +236,13 @@ #endif /* __size_t */ #endif /* _SIZET_ */ #endif /* _GCC_SIZE_T */ ---- a/libgomp/config/posix/time.c -+++ b/libgomp/config/posix/time.c +# HG changeset patch +# Parent 65d595ef9fc3cdbbde4894d927593f1b0f5bbcb7 +A fix for libgomp to correctly request a POSIX version for time support. + +diff -r 65d595ef9fc3 libgomp/config/posix/time.c +--- a/libgomp/config/posix/time.c Tue May 20 11:05:45 2014 -0400 ++++ b/libgomp/config/posix/time.c Tue May 20 11:05:48 2014 -0400 @@ -28,6 +28,8 @@ The following implementation uses the most simple POSIX routines. If present, POSIX 4 clocks should be used instead. */ @@ -222,22 +252,154 @@ #include "libgomp.h" #include <unistd.h> #if TIME_WITH_SYS_TIME ---- a/libitm/config/arm/hwcap.cc -+++ b/libitm/config/arm/hwcap.cc -@@ -40,7 +40,11 @@ int GTM_hwcap HIDDEN = 0 +diff -r 95f4f1d7668b libgcc/unwind-dw2-fde-dip.c +--- a/libgcc/unwind-dw2-fde-dip.c Tue May 20 11:05:48 2014 -0400 ++++ b/libgcc/unwind-dw2-fde-dip.c Tue May 20 11:05:52 2014 -0400 +@@ -46,33 +46,13 @@ + #include "unwind-compat.h" + #include "gthr.h" - #ifdef __linux__ - #include <unistd.h> -+#ifdef __GLIBC__ - #include <sys/fcntl.h> -+#else -+#include <fcntl.h> -+#endif - #include <elf.h> +-#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \ +- && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \ +- || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG))) ++#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) && defined(TARGET_DL_ITERATE_PHDR) + # define USE_PT_GNU_EH_FRAME +-#endif +- +-#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \ +- && defined(__BIONIC__) +-# define USE_PT_GNU_EH_FRAME +-#endif +- +-#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \ +- && defined(__FreeBSD__) && __FreeBSD__ >= 7 +-# define ElfW __ElfN +-# define USE_PT_GNU_EH_FRAME +-#endif +- +-#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \ +- && defined(__OpenBSD__) +-# define ElfW(type) Elf_##type +-# define USE_PT_GNU_EH_FRAME +-#endif +- +-#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \ +- && defined(TARGET_DL_ITERATE_PHDR) \ +- && defined(__sun__) && defined(__svr4__) +-# define USE_PT_GNU_EH_FRAME ++# ifdef __OpenBSD__ ++# define ElfW(type) Elf_##type ++# elif defined(__FreeBSD__) && __FreeBSD__ >= 7 ++# define ElfW __ElfN ++# endif + #endif - static void __attribute__((constructor)) ---- a/libitm/config/linux/x86/tls.h -+++ b/libitm/config/linux/x86/tls.h + #if defined(USE_PT_GNU_EH_FRAME) +diff -r ff03fa61c6b3 gcc/configure +--- a/gcc/configure Tue May 20 11:05:51 2014 -0400 ++++ b/gcc/configure Tue May 20 11:05:55 2014 -0400 +@@ -27300,6 +27300,9 @@ + else + gcc_cv_libc_provides_ssp=no + case "$target" in ++ *-*-musl*) ++ # All versions of musl provide stack protector ++ gcc_cv_libc_provides_ssp=yes;; + *-*-linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu) + # glibc 2.4 and later provides __stack_chk_fail and + # either __stack_chk_guard, or TLS access to stack guard canary. +@@ -27332,6 +27335,7 @@ + # <http://gcc.gnu.org/ml/gcc/2008-10/msg00130.html>) and for now + # simply assert that glibc does provide this, which is true for all + # realistically usable GNU/Hurd configurations. ++ # All supported versions of musl provide it as well + gcc_cv_libc_provides_ssp=yes;; + *-*-darwin* | *-*-freebsd*) + ac_fn_c_check_func "$LINENO" "__stack_chk_fail" "ac_cv_func___stack_chk_fail" +@@ -27421,6 +27425,9 @@ + gcc_cv_target_dl_iterate_phdr=no + fi + ;; ++ *-linux-musl*) ++ gcc_cv_target_dl_iterate_phdr=yes ++ ;; + esac + + if test x$gcc_cv_target_dl_iterate_phdr = xyes; then +diff -r ff03fa61c6b3 gcc/configure.ac +--- a/gcc/configure.ac Tue May 20 11:05:51 2014 -0400 ++++ b/gcc/configure.ac Tue May 20 11:05:55 2014 -0400 +@@ -5001,6 +5001,9 @@ + gcc_cv_libc_provides_ssp, + [gcc_cv_libc_provides_ssp=no + case "$target" in ++ *-*-musl*) ++ # All versions of musl provide stack protector ++ gcc_cv_libc_provides_ssp=yes;; + *-*-linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu) + # glibc 2.4 and later provides __stack_chk_fail and + # either __stack_chk_guard, or TLS access to stack guard canary. +@@ -5027,6 +5030,7 @@ + # <http://gcc.gnu.org/ml/gcc/2008-10/msg00130.html>) and for now + # simply assert that glibc does provide this, which is true for all + # realistically usable GNU/Hurd configurations. ++ # All supported versions of musl provide it as well + gcc_cv_libc_provides_ssp=yes;; + *-*-darwin* | *-*-freebsd*) + AC_CHECK_FUNC(__stack_chk_fail,[gcc_cv_libc_provides_ssp=yes], +@@ -5093,6 +5097,9 @@ + gcc_cv_target_dl_iterate_phdr=no + fi + ;; ++ *-linux-musl*) ++ gcc_cv_target_dl_iterate_phdr=yes ++ ;; + esac + GCC_TARGET_TEMPLATE([TARGET_DL_ITERATE_PHDR]) + if test x$gcc_cv_target_dl_iterate_phdr = xyes; then +# HG changeset patch +# Parent 26f591b9e77e3df3d0f772b840bd9c13ec24bd4c +Get rid of ever-broken fixincludes on musl. + +diff -r 26f591b9e77e fixincludes/mkfixinc.sh +--- a/fixincludes/mkfixinc.sh Tue May 20 11:05:55 2014 -0400 ++++ b/fixincludes/mkfixinc.sh Tue May 20 11:05:58 2014 -0400 +@@ -19,7 +19,8 @@ + powerpc-*-eabi* | \ + powerpc-*-rtems* | \ + powerpcle-*-eabisim* | \ +- powerpcle-*-eabi* ) ++ powerpcle-*-eabi* | \ ++ *-musl* ) + # IF there is no include fixing, + # THEN create a no-op fixer and exit + (echo "#! /bin/sh" ; echo "exit 0" ) > ${target} +# HG changeset patch +# Parent bc117c35705fcc39396c19af046101411f251161 +Support for i386-linux-musl and x86_64-linux-musl. + +diff -r bc117c35705f gcc/config/i386/linux.h +--- a/gcc/config/i386/linux.h Tue May 20 11:05:58 2014 -0400 ++++ b/gcc/config/i386/linux.h Tue May 20 11:06:01 2014 -0400 +@@ -21,3 +21,4 @@ + + #define GNU_USER_LINK_EMULATION "elf_i386" + #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" ++#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-i386.so.1" +diff -r bc117c35705f gcc/config/i386/linux64.h +--- a/gcc/config/i386/linux64.h Tue May 20 11:05:58 2014 -0400 ++++ b/gcc/config/i386/linux64.h Tue May 20 11:06:01 2014 -0400 +@@ -30,3 +30,7 @@ + #define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2" + #define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2" + #define GLIBC_DYNAMIC_LINKERX32 "/libx32/ld-linux-x32.so.2" ++ ++#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-i386.so.1" ++#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-x86_64.so.1" ++#define MUSL_DYNAMIC_LINKERX32 "/lib/ld-musl-x32.so.1" +diff -r bc117c35705f libitm/config/linux/x86/tls.h +--- a/libitm/config/linux/x86/tls.h Tue May 20 11:05:58 2014 -0400 ++++ b/libitm/config/linux/x86/tls.h Tue May 20 11:06:01 2014 -0400 @@ -25,16 +25,19 @@ #ifndef LIBITM_X86_TLS_H #define LIBITM_X86_TLS_H 1 @@ -260,62 +422,282 @@ namespace GTM HIDDEN { #ifdef __x86_64__ -@@ -101,5 +104,6 @@ static inline void set_abi_disp(struct a +@@ -101,5 +104,6 @@ } // namespace GTM #endif /* >= GLIBC 2.10 */ +#endif #endif // LIBITM_X86_TLS_H ---- a/libstdc++-v3/configure.host -+++ b/libstdc++-v3/configure.host -@@ -264,6 +264,13 @@ case "${host_os}" in - os_include_dir="os/bsd/freebsd" - ;; - gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu) -+ # check for musl by target -+ case "${host_os}" in -+ *-musl*) -+ os_include_dir="os/generic" -+ ;; -+ *) +# HG changeset patch +# Parent 933c4f064622eb96a0b2ab213abd0cddbd977d1a +Support for arm-linux-musl. + +diff -r 933c4f064622 gcc/config/arm/linux-eabi.h +--- a/gcc/config/arm/linux-eabi.h Tue May 20 11:06:01 2014 -0400 ++++ b/gcc/config/arm/linux-eabi.h Tue May 20 11:06:04 2014 -0400 +@@ -77,6 +77,23 @@ + %{mfloat-abi=soft*:" GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "} \ + %{!mfloat-abi=*:" GLIBC_DYNAMIC_LINKER_DEFAULT "}" + ++/* For ARM musl currently supports four dynamic linkers: ++ - ld-musl-arm.so.1 - for the EABI-derived soft-float ABI ++ - ld-musl-armhf.so.1 - for the EABI-derived hard-float ABI ++ - ld-musl-armeb.so.1 - for the EABI-derived soft-float ABI, EB ++ - ld-musl-armebhf.so.1 - for the EABI-derived hard-float ABI, EB ++ musl does not support the legacy OABI mode. ++ All the dynamic linkers live in /lib. ++ We default to soft-float, EL. */ ++#undef MUSL_DYNAMIC_LINKER ++#if TARGET_BIG_ENDIAN_DEFAULT ++#define MUSL_DYNAMIC_LINKER_E "%{mlittle-endian:;:eb}" ++#else ++#define MUSL_DYNAMIC_LINKER_E "%{mbig-endian:eb}" ++#endif ++#define MUSL_DYNAMIC_LINKER \ ++ "/lib/ld-musl-arm" MUSL_DYNAMIC_LINKER_E "%{mfloat-abi=hard:hf}.so.1" + - if [ "$uclibc" = "yes" ]; then - os_include_dir="os/uclibc" - elif [ "$bionic" = "yes" ]; then -@@ -272,6 +279,9 @@ case "${host_os}" in - os_include_dir="os/gnu-linux" - fi - ;; + /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to + use the GNU/Linux version, not the generic BPABI version. */ + #undef LINK_SPEC +diff -r 933c4f064622 libitm/config/arm/hwcap.cc +--- a/libitm/config/arm/hwcap.cc Tue May 20 11:06:01 2014 -0400 ++++ b/libitm/config/arm/hwcap.cc Tue May 20 11:06:04 2014 -0400 +@@ -40,7 +40,11 @@ + + #ifdef __linux__ + #include <unistd.h> ++#ifdef __GLIBC__ + #include <sys/fcntl.h> ++#else ++#include <fcntl.h> ++#endif + #include <elf.h> + + static void __attribute__((constructor)) +# HG changeset patch +# Parent 03fe896f3acaa911e935a8e999d15c7542ee73d1 +Support for mips-linux-musl. + +diff -r 03fe896f3aca gcc/config/mips/linux.h +--- a/gcc/config/mips/linux.h Tue May 20 11:06:04 2014 -0400 ++++ b/gcc/config/mips/linux.h Tue May 20 11:06:08 2014 -0400 +@@ -23,3 +23,10 @@ + #undef UCLIBC_DYNAMIC_LINKER + #define UCLIBC_DYNAMIC_LINKER \ + "%{mnan=2008:/lib/ld-uClibc-mipsn8.so.0;:/lib/ld-uClibc.so.0}" + -+ esac -+ ;; - hpux*) - os_include_dir="os/hpux" - ;; ---- a/gcc/config/mips/linux64.h -+++ b/gcc/config/mips/linux64.h -@@ -27,6 +27,9 @@ along with GCC; see the file COPYING3. - #define GLIBC_DYNAMIC_LINKERN32 "/lib32/ld.so.1" - #define UCLIBC_DYNAMIC_LINKERN32 "/lib32/ld-uClibc.so.0" - #define BIONIC_DYNAMIC_LINKERN32 "/system/bin/linker32" -+#define MUSL_DYNAMIC_LINKERN32 "/lib/ld-musl-mips.so.1" -+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-mips.so.1" -+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-mips.so.1" - #define GNU_USER_DYNAMIC_LINKERN32 \ - CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKERN32, UCLIBC_DYNAMIC_LINKERN32, \ -- BIONIC_DYNAMIC_LINKERN32) -+ BIONIC_DYNAMIC_LINKERN32, MUSL_DYNAMIC_LINKERN32) ---- a/gcc/config/sparc/linux64.h 2013-09-10 10:02:45.663973856 +0100 -+++ b/gcc/config/sparc/linux64.h 2013-09-10 10:03:17.871972435 +0100 -@@ -104,6 +104,9 @@ - #define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2" - #define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux.so.2" ++#if TARGET_ENDIAN_DEFAULT == 0 /* LE */ ++#define MUSL_DYNAMIC_LINKER_E "%{EB:;:el}" ++#else ++#define MUSL_DYNAMIC_LINKER_E "%{EL:el}" ++#endif ++#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-mips" MUSL_DYNAMIC_LINKER_E ".so.1" +# HG changeset patch +# Parent 6097333f2ab47a4ce37ccfb18b0f07a0cdcfec49 +Support for powerpc-linux-musl. + +diff -r 6097333f2ab4 gcc/config.gcc +--- a/gcc/config.gcc Tue May 20 11:06:08 2014 -0400 ++++ b/gcc/config.gcc Tue May 20 11:06:11 2014 -0400 +@@ -2326,6 +2326,10 @@ + powerpc*-*-linux*paired*) + tm_file="${tm_file} rs6000/750cl.h" ;; + esac ++ case ${target} in ++ *-linux*-musl*) ++ enable_secureplt=yes ;; ++ esac + if test x${enable_secureplt} = xyes; then + tm_file="rs6000/secureplt.h ${tm_file}" + fi +diff -r 6097333f2ab4 gcc/config/rs6000/linux64.h +--- a/gcc/config/rs6000/linux64.h Tue May 20 11:06:08 2014 -0400 ++++ b/gcc/config/rs6000/linux64.h Tue May 20 11:06:11 2014 -0400 +@@ -375,17 +375,21 @@ + #endif + #define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0" + #define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0" ++#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-powerpc.so.1" ++#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-powerpc64.so.1" + #if DEFAULT_LIBC == LIBC_UCLIBC +-#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}" ++#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{mmusl:" M ";:" U "}}" + #elif DEFAULT_LIBC == LIBC_GLIBC +-#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:" U ";:" G "}" ++#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{muclibc:" U ";:%{mmusl:" M ";:" G "}}" ++#elif DEFAULT_LIBC == LIBC_MUSL ++#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{muclibc:" U ";:" M "}}" + #else + #error "Unsupported DEFAULT_LIBC" + #endif + #define GNU_USER_DYNAMIC_LINKER32 \ +- CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32) ++ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32, MUSL_DYNAMIC_LINKER32) + #define GNU_USER_DYNAMIC_LINKER64 \ +- CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64) ++ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64, MUSL_DYNAMIC_LINKER64) + + #undef DEFAULT_ASM_ENDIAN + #if (TARGET_DEFAULT & MASK_LITTLE_ENDIAN) +diff -r 6097333f2ab4 gcc/config/rs6000/secureplt.h +--- a/gcc/config/rs6000/secureplt.h Tue May 20 11:06:08 2014 -0400 ++++ b/gcc/config/rs6000/secureplt.h Tue May 20 11:06:11 2014 -0400 +@@ -18,3 +18,4 @@ + <http://www.gnu.org/licenses/>. */ + + #define CC1_SECURE_PLT_DEFAULT_SPEC "-msecure-plt" ++#define LINK_SECURE_PLT_DEFAULT_SPEC "--secure-plt" +diff -r 6097333f2ab4 gcc/config/rs6000/sysv4.h +--- a/gcc/config/rs6000/sysv4.h Tue May 20 11:06:08 2014 -0400 ++++ b/gcc/config/rs6000/sysv4.h Tue May 20 11:06:11 2014 -0400 +@@ -537,6 +537,9 @@ + #ifndef CC1_SECURE_PLT_DEFAULT_SPEC + #define CC1_SECURE_PLT_DEFAULT_SPEC "" + #endif ++#ifndef LINK_SECURE_PLT_DEFAULT_SPEC ++#define LINK_SECURE_PLT_DEFAULT_SPEC "" ++#endif + + /* Pass -G xxx to the compiler. */ + #define CC1_SPEC "%{G*} %(cc1_cpu)" \ +@@ -585,7 +588,8 @@ -+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-sparc.so.1" -+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-sparc.so.1" + /* Override the default target of the linker. */ + #define LINK_TARGET_SPEC \ +- ENDIAN_SELECT("", " --oformat elf32-powerpcle", "") ++ ENDIAN_SELECT("", " --oformat elf32-powerpcle", "") \ ++ "%{!mbss-plt: %{!msecure-plt: %(link_secure_plt_default)}}" + + /* Any specific OS flags. */ + #define LINK_OS_SPEC "\ +@@ -763,15 +767,18 @@ + + #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1" + #define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0" ++#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-powerpc.so.1" + #if DEFAULT_LIBC == LIBC_UCLIBC +-#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}" ++#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{mmusl:" M ";:" U "}}" ++#elif DEFAULT_LIBC == LIBC_MUSL ++#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{muclibc:" U ";:" M "}}" + #elif !defined (DEFAULT_LIBC) || DEFAULT_LIBC == LIBC_GLIBC +-#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:" U ";:" G "}" ++#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{muclibc:" U ";:%{mmusl:" M ";:" G "}}" + #else + #error "Unsupported DEFAULT_LIBC" + #endif + #define GNU_USER_DYNAMIC_LINKER \ +- CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER) ++ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, MUSL_DYNAMIC_LINKER) + + #define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \ + %{rdynamic:-export-dynamic} \ +@@ -894,6 +901,7 @@ + { "link_os_openbsd", LINK_OS_OPENBSD_SPEC }, \ + { "link_os_default", LINK_OS_DEFAULT_SPEC }, \ + { "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \ ++ { "link_secure_plt_default", LINK_SECURE_PLT_DEFAULT_SPEC }, \ + { "cpp_os_ads", CPP_OS_ADS_SPEC }, \ + { "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \ + { "cpp_os_mvme", CPP_OS_MVME_SPEC }, \ +diff -r 813971b9f083 gcc/config/aarch64/aarch64-linux.h +--- a/gcc/config/aarch64/aarch64-linux.h Tue May 20 11:06:11 2014 -0400 ++++ b/gcc/config/aarch64/aarch64-linux.h Tue May 20 11:06:14 2014 -0400 +@@ -23,6 +23,8 @@ + + #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}.so.1" + ++#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-aarch64.so.1" + - #ifdef SPARC_BI_ARCH + #define CPP_SPEC "%{pthread:-D_REENTRANT}" + + #define LINUX_TARGET_LINK_SPEC "%{h*} \ +# HG changeset patch +# Parent 4a62a6813db995fe195d47ff73234d455975ac30 +Microblaze support (again). + +diff -r 4a62a6813db9 gcc/config/microblaze/linux.h +--- a/gcc/config/microblaze/linux.h Tue May 20 11:06:14 2014 -0400 ++++ b/gcc/config/microblaze/linux.h Tue May 20 11:06:17 2014 -0400 +@@ -25,7 +25,22 @@ + #undef TLS_NEEDS_GOT + #define TLS_NEEDS_GOT 1 - #undef SUBTARGET_EXTRA_SPECS +-#define DYNAMIC_LINKER "/lib/ld.so.1" ++#if TARGET_BIG_ENDIAN_DEFAULT == 0 /* LE */ ++#define MUSL_DYNAMIC_LINKER_E "%{EB:;:el}" ++#else ++#define MUSL_DYNAMIC_LINKER_E "%{EL:el}" ++#endif ++ ++#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-microblaze" MUSL_DYNAMIC_LINKER_E ".so.1" ++#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1" ++ ++#if DEFAULT_LIBC == LIBC_MUSL ++#define DYNAMIC_LINKER MUSL_DYNAMIC_LINKER ++#else ++#define DYNAMIC_LINKER GLIBC_DYNAMIC_LINKER ++#endif ++ ++ + #undef SUBTARGET_EXTRA_SPECS + #define SUBTARGET_EXTRA_SPECS \ + { "dynamic_linker", DYNAMIC_LINKER } +From 478ee0c03a08e2ef9371fd88d516738936943e78 Mon Sep 17 00:00:00 2001 +From: David Holsgrove <[email protected]> +Date: Fri, 28 Sep 2012 16:32:03 +1000 +Subject: [PATCH 06/11] [Patch, microblaze]: Add SIZE_TYPE and PTRDIFF_TYPE to + microblaze.h +Fixes warnings like; + +warning: format '%zX' expects argument of type 'size_t', +but argument 3 has type 'unsigned int' [-Wformat] + +Changelog + +2013-03-18 David Holsgrove <[email protected]> + + * gcc/config/microblaze/microblaze.h: Define SIZE_TYPE + and PTRDIFF_TYPE. + +Signed-off-by: David Holsgrove <[email protected]> +--- + gcc/config/microblaze/microblaze.h | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff -r 20d1c995f5de gcc/config/microblaze/microblaze.h +--- a/gcc/config/microblaze/microblaze.h Tue May 20 11:06:17 2014 -0400 ++++ b/gcc/config/microblaze/microblaze.h Tue May 20 11:06:20 2014 -0400 +@@ -218,6 +218,12 @@ + #undef PTRDIFF_TYPE + #define PTRDIFF_TYPE "int" + ++#undef SIZE_TYPE ++#define SIZE_TYPE "unsigned int" ++ ++#undef PTRDIFF_TYPE ++#define PTRDIFF_TYPE "int" ++ + #define CONSTANT_ALIGNMENT(EXP, ALIGN) \ + ((TREE_CODE (EXP) == STRING_CST || TREE_CODE (EXP) == CONSTRUCTOR) \ + && (ALIGN) < BITS_PER_WORD \ +diff -r 2f999fc929da gcc/config/sh/linux.h +--- a/gcc/config/sh/linux.h Fri Sep 28 16:32:03 2012 +1000 ++++ b/gcc/config/sh/linux.h Tue May 20 11:06:23 2014 -0400 +@@ -43,7 +43,14 @@ + + #define TARGET_ASM_FILE_END file_end_indicate_exec_stack + ++#if TARGET_BIG_ENDIAN_DEFAULT /* BE */ ++#define MUSL_DYNAMIC_LINKER_E "eb" ++#else ++#define MUSL_DYNAMIC_LINKER_E ++#endif ++ + #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" ++#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-sh" MUSL_DYNAMIC_LINKER_E ".so.1" + + #undef SUBTARGET_LINK_EMUL_SUFFIX + #define SUBTARGET_LINK_EMUL_SUFFIX "_linux" -- 2.0.0 _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
