mirror of
https://github.com/richfelker/musl-cross-make.git
synced 2025-03-12 18:16:59 +01:00

binutils-2.25.1/0003-shemuls.diff is needed to include the existing fdpic support in the build when targeting sh*-linux-* rather than tucking it away under sh*-uclinux-* only gcc-5.2.0/0007-fdpic.diff is based on the original abandoned fdpic patch 3/3 sent to the gcc list in 2010, updated for modern gcc and with the uclinux dependencies removed. the original is here: https://gcc.gnu.org/ml/gcc-patches/2010-08/msg01464.html gcc-5.2.0/0001-musl.diff has been updated to use the right musl dynamic linker pathname for fdpic so that musl-specific changes can be avoided in the main fdpic patch. at present, additional patches to musl are needed to produce working binaries for the target.
893 lines
33 KiB
Diff
893 lines
33 KiB
Diff
diff --git a/fixincludes/mkfixinc.sh b/fixincludes/mkfixinc.sh
|
|
index 6653fed..0d96c8c 100755
|
|
--- a/fixincludes/mkfixinc.sh
|
|
+++ b/fixincludes/mkfixinc.sh
|
|
@@ -19,7 +19,8 @@ case $machine in
|
|
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}
|
|
diff --git a/gcc/config.gcc b/gcc/config.gcc
|
|
index 3ede69b..d9eb8cf 100644
|
|
--- a/gcc/config.gcc
|
|
+++ b/gcc/config.gcc
|
|
@@ -575,7 +575,7 @@ case ${target} in
|
|
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"
|
|
|
|
# 32-bit x86 processors supported by --with-arch=. Each processor
|
|
# MUST be separated by exactly one space.
|
|
@@ -720,6 +720,9 @@ case ${target} in
|
|
*-*-*uclibc*)
|
|
tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC"
|
|
;;
|
|
+ *-*-*musl*)
|
|
+ tm_defines="$tm_defines DEFAULT_LIBC=LIBC_MUSL"
|
|
+ ;;
|
|
*)
|
|
tm_defines="$tm_defines DEFAULT_LIBC=LIBC_GLIBC"
|
|
;;
|
|
diff --git a/gcc/config/aarch64/aarch64-linux.h b/gcc/config/aarch64/aarch64-linux.h
|
|
index ba7fc3b..1600a32 100644
|
|
--- a/gcc/config/aarch64/aarch64-linux.h
|
|
+++ b/gcc/config/aarch64/aarch64-linux.h
|
|
@@ -23,6 +23,9 @@
|
|
|
|
#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1"
|
|
|
|
+#undef MUSL_DYNAMIC_LINKER
|
|
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1"
|
|
+
|
|
#undef ASAN_CC1_SPEC
|
|
#define ASAN_CC1_SPEC "%{%:sanitize(address):-funwind-tables}"
|
|
|
|
diff --git a/gcc/config/alpha/linux.h b/gcc/config/alpha/linux.h
|
|
index c567f43..475ea06 100644
|
|
--- a/gcc/config/alpha/linux.h
|
|
+++ b/gcc/config/alpha/linux.h
|
|
@@ -61,10 +61,14 @@ along with GCC; see the file COPYING3. If not see
|
|
#define OPTION_GLIBC (DEFAULT_LIBC == LIBC_GLIBC)
|
|
#define OPTION_UCLIBC (DEFAULT_LIBC == LIBC_UCLIBC)
|
|
#define OPTION_BIONIC (DEFAULT_LIBC == LIBC_BIONIC)
|
|
+#undef OPTION_MUSL
|
|
+#define OPTION_MUSL (DEFAULT_LIBC == LIBC_MUSL)
|
|
#else
|
|
#define OPTION_GLIBC (linux_libc == LIBC_GLIBC)
|
|
#define OPTION_UCLIBC (linux_libc == LIBC_UCLIBC)
|
|
#define OPTION_BIONIC (linux_libc == LIBC_BIONIC)
|
|
+#undef OPTION_MUSL
|
|
+#define OPTION_MUSL (linux_libc == LIBC_MUSL)
|
|
#endif
|
|
|
|
/* Determine what functions are present at the runtime;
|
|
diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h
|
|
index e9d65dc..f12e6bd 100644
|
|
--- a/gcc/config/arm/linux-eabi.h
|
|
+++ b/gcc/config/arm/linux-eabi.h
|
|
@@ -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"
|
|
+
|
|
/* 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 --git a/gcc/config/glibc-stdint.h b/gcc/config/glibc-stdint.h
|
|
index 3fc67dc..98f4f04 100644
|
|
--- a/gcc/config/glibc-stdint.h
|
|
+++ b/gcc/config/glibc-stdint.h
|
|
@@ -22,6 +22,12 @@ a copy of the GCC Runtime Library Exception along with this program;
|
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|
<http://www.gnu.org/licenses/>. */
|
|
|
|
+/* Systems using musl libc should use this header and make sure
|
|
+ OPTION_MUSL is defined correctly before using the TYPE macros. */
|
|
+#ifndef OPTION_MUSL
|
|
+#define OPTION_MUSL 0
|
|
+#endif
|
|
+
|
|
#define SIG_ATOMIC_TYPE "int"
|
|
|
|
#define INT8_TYPE "signed char"
|
|
@@ -43,12 +49,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|
#define UINT_LEAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "long long unsigned int")
|
|
|
|
#define INT_FAST8_TYPE "signed char"
|
|
-#define INT_FAST16_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "int")
|
|
-#define INT_FAST32_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "int")
|
|
+#define INT_FAST16_TYPE (LONG_TYPE_SIZE == 64 && !OPTION_MUSL ? "long int" : "int")
|
|
+#define INT_FAST32_TYPE (LONG_TYPE_SIZE == 64 && !OPTION_MUSL ? "long int" : "int")
|
|
#define INT_FAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "long long int")
|
|
#define UINT_FAST8_TYPE "unsigned char"
|
|
-#define UINT_FAST16_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "unsigned int")
|
|
-#define UINT_FAST32_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "unsigned int")
|
|
+#define UINT_FAST16_TYPE (LONG_TYPE_SIZE == 64 && !OPTION_MUSL ? "long unsigned int" : "unsigned int")
|
|
+#define UINT_FAST32_TYPE (LONG_TYPE_SIZE == 64 && !OPTION_MUSL ? "long unsigned int" : "unsigned int")
|
|
#define UINT_FAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "long long unsigned int")
|
|
|
|
#define INTPTR_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "int")
|
|
diff --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h
|
|
index a100963..385aefd 100644
|
|
--- a/gcc/config/i386/linux.h
|
|
+++ b/gcc/config/i386/linux.h
|
|
@@ -21,3 +21,6 @@ along with GCC; see the file COPYING3. If not see
|
|
|
|
#define GNU_USER_LINK_EMULATION "elf_i386"
|
|
#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
|
|
+
|
|
+#undef MUSL_DYNAMIC_LINKER
|
|
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-i386.so.1"
|
|
diff --git a/gcc/config/i386/linux64.h b/gcc/config/i386/linux64.h
|
|
index a27d3be..e300480 100644
|
|
--- a/gcc/config/i386/linux64.h
|
|
+++ b/gcc/config/i386/linux64.h
|
|
@@ -30,3 +30,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|
#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"
|
|
+
|
|
+#undef MUSL_DYNAMIC_LINKER32
|
|
+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-i386.so.1"
|
|
+#undef MUSL_DYNAMIC_LINKER64
|
|
+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-x86_64.so.1"
|
|
+#undef MUSL_DYNAMIC_LINKERX32
|
|
+#define MUSL_DYNAMIC_LINKERX32 "/lib/ld-musl-x32.so.1"
|
|
diff --git a/gcc/config/linux.h b/gcc/config/linux.h
|
|
index 857389a..7bc87ab 100644
|
|
--- a/gcc/config/linux.h
|
|
+++ b/gcc/config/linux.h
|
|
@@ -32,10 +32,14 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|
#define OPTION_GLIBC (DEFAULT_LIBC == LIBC_GLIBC)
|
|
#define OPTION_UCLIBC (DEFAULT_LIBC == LIBC_UCLIBC)
|
|
#define OPTION_BIONIC (DEFAULT_LIBC == LIBC_BIONIC)
|
|
+#undef OPTION_MUSL
|
|
+#define OPTION_MUSL (DEFAULT_LIBC == LIBC_MUSL)
|
|
#else
|
|
#define OPTION_GLIBC (linux_libc == LIBC_GLIBC)
|
|
#define OPTION_UCLIBC (linux_libc == LIBC_UCLIBC)
|
|
#define OPTION_BIONIC (linux_libc == LIBC_BIONIC)
|
|
+#undef OPTION_MUSL
|
|
+#define OPTION_MUSL (linux_libc == LIBC_MUSL)
|
|
#endif
|
|
|
|
#define GNU_USER_TARGET_OS_CPP_BUILTINS() \
|
|
@@ -50,21 +54,25 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|
} while (0)
|
|
|
|
/* Determine which dynamic linker to use depending on whether GLIBC or
|
|
- uClibc or Bionic is the default C library and whether
|
|
- -muclibc or -mglibc or -mbionic has been passed to change the default. */
|
|
+ uClibc or Bionic or musl is the default C library and whether
|
|
+ -muclibc or -mglibc or -mbionic or -mmusl has been passed to change
|
|
+ the default. */
|
|
|
|
-#define CHOOSE_DYNAMIC_LINKER1(LIBC1, LIBC2, LIBC3, LD1, LD2, LD3) \
|
|
- "%{" LIBC2 ":" LD2 ";:%{" LIBC3 ":" LD3 ";:" LD1 "}}"
|
|
+#define CHOOSE_DYNAMIC_LINKER1(LIBC1, LIBC2, LIBC3, LIBC4, LD1, LD2, LD3, LD4) \
|
|
+ "%{" LIBC2 ":" LD2 ";:%{" LIBC3 ":" LD3 ";:%{" LIBC4 ":" LD4 ";:" LD1 "}}}"
|
|
|
|
#if DEFAULT_LIBC == LIBC_GLIBC
|
|
-#define CHOOSE_DYNAMIC_LINKER(G, U, B) \
|
|
- CHOOSE_DYNAMIC_LINKER1 ("mglibc", "muclibc", "mbionic", G, U, B)
|
|
+#define CHOOSE_DYNAMIC_LINKER(G, U, B, M) \
|
|
+ CHOOSE_DYNAMIC_LINKER1 ("mglibc", "muclibc", "mbionic", "mmusl", G, U, B, M)
|
|
#elif DEFAULT_LIBC == LIBC_UCLIBC
|
|
-#define CHOOSE_DYNAMIC_LINKER(G, U, B) \
|
|
- CHOOSE_DYNAMIC_LINKER1 ("muclibc", "mglibc", "mbionic", U, G, B)
|
|
+#define CHOOSE_DYNAMIC_LINKER(G, U, B, M) \
|
|
+ CHOOSE_DYNAMIC_LINKER1 ("muclibc", "mglibc", "mbionic", "mmusl", U, G, B, M)
|
|
#elif DEFAULT_LIBC == LIBC_BIONIC
|
|
-#define CHOOSE_DYNAMIC_LINKER(G, U, B) \
|
|
- CHOOSE_DYNAMIC_LINKER1 ("mbionic", "mglibc", "muclibc", B, G, U)
|
|
+#define CHOOSE_DYNAMIC_LINKER(G, U, B, M) \
|
|
+ CHOOSE_DYNAMIC_LINKER1 ("mbionic", "mglibc", "muclibc", "mmusl", B, G, U, M)
|
|
+#elif DEFAULT_LIBC == LIBC_MUSL
|
|
+#define CHOOSE_DYNAMIC_LINKER(G, U, B, M) \
|
|
+ CHOOSE_DYNAMIC_LINKER1 ("mmusl", "mglibc", "muclibc", "mbionic", M, G, U, B)
|
|
#else
|
|
#error "Unsupported DEFAULT_LIBC"
|
|
#endif /* DEFAULT_LIBC */
|
|
@@ -81,24 +89,100 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|
#define BIONIC_DYNAMIC_LINKER32 "/system/bin/linker"
|
|
#define BIONIC_DYNAMIC_LINKER64 "/system/bin/linker64"
|
|
#define BIONIC_DYNAMIC_LINKERX32 "/system/bin/linkerx32"
|
|
+/* Should be redefined for each target that supports musl. */
|
|
+#define MUSL_DYNAMIC_LINKER "/dev/null"
|
|
+#define MUSL_DYNAMIC_LINKER32 "/dev/null"
|
|
+#define MUSL_DYNAMIC_LINKER64 "/dev/null"
|
|
+#define MUSL_DYNAMIC_LINKERX32 "/dev/null"
|
|
|
|
#define GNU_USER_DYNAMIC_LINKER \
|
|
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, \
|
|
- BIONIC_DYNAMIC_LINKER)
|
|
+ BIONIC_DYNAMIC_LINKER, MUSL_DYNAMIC_LINKER)
|
|
#define GNU_USER_DYNAMIC_LINKER32 \
|
|
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32, \
|
|
- BIONIC_DYNAMIC_LINKER32)
|
|
+ BIONIC_DYNAMIC_LINKER32, MUSL_DYNAMIC_LINKER32)
|
|
#define GNU_USER_DYNAMIC_LINKER64 \
|
|
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64, \
|
|
- BIONIC_DYNAMIC_LINKER64)
|
|
+ BIONIC_DYNAMIC_LINKER64, MUSL_DYNAMIC_LINKER64)
|
|
#define GNU_USER_DYNAMIC_LINKERX32 \
|
|
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKERX32, UCLIBC_DYNAMIC_LINKERX32, \
|
|
- BIONIC_DYNAMIC_LINKERX32)
|
|
+ BIONIC_DYNAMIC_LINKERX32, MUSL_DYNAMIC_LINKERX32)
|
|
|
|
/* 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 --git a/gcc/config/linux.opt b/gcc/config/linux.opt
|
|
index c054338..ef055a7 100644
|
|
--- a/gcc/config/linux.opt
|
|
+++ b/gcc/config/linux.opt
|
|
@@ -28,5 +28,9 @@ Target Report RejectNegative Var(linux_libc,LIBC_GLIBC) Negative(muclibc)
|
|
Use GNU C library
|
|
|
|
muclibc
|
|
-Target Report RejectNegative Var(linux_libc,LIBC_UCLIBC) Negative(mbionic)
|
|
+Target Report RejectNegative Var(linux_libc,LIBC_UCLIBC) Negative(mmusl)
|
|
Use uClibc C library
|
|
+
|
|
+mmusl
|
|
+Target Report RejectNegative Var(linux_libc,LIBC_MUSL) Negative(mbionic)
|
|
+Use musl C library
|
|
diff --git a/gcc/config/microblaze/linux.h b/gcc/config/microblaze/linux.h
|
|
index 655a70f..a8a3f3e 100644
|
|
--- a/gcc/config/microblaze/linux.h
|
|
+++ b/gcc/config/microblaze/linux.h
|
|
@@ -28,10 +28,20 @@
|
|
#undef TLS_NEEDS_GOT
|
|
#define TLS_NEEDS_GOT 1
|
|
|
|
-#define DYNAMIC_LINKER "/lib/ld.so.1"
|
|
+#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
|
|
+
|
|
+#if TARGET_BIG_ENDIAN_DEFAULT == 0 /* LE */
|
|
+#define MUSL_DYNAMIC_LINKER_E "%{mbig-endian:;:el}"
|
|
+#else
|
|
+#define MUSL_DYNAMIC_LINKER_E "%{mlittle-endian:el}"
|
|
+#endif
|
|
+
|
|
+#undef MUSL_DYNAMIC_LINKER
|
|
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-microblaze" MUSL_DYNAMIC_LINKER_E ".so.1"
|
|
+
|
|
#undef SUBTARGET_EXTRA_SPECS
|
|
#define SUBTARGET_EXTRA_SPECS \
|
|
- { "dynamic_linker", DYNAMIC_LINKER }
|
|
+ { "dynamic_linker", GNU_USER_DYNAMIC_LINKER }
|
|
|
|
#undef LINK_SPEC
|
|
#define LINK_SPEC "%{shared:-shared} \
|
|
diff --git a/gcc/config/mips/linux.h b/gcc/config/mips/linux.h
|
|
index 91df261..fb358e2 100644
|
|
--- a/gcc/config/mips/linux.h
|
|
+++ b/gcc/config/mips/linux.h
|
|
@@ -37,7 +37,13 @@ along with GCC; see the file COPYING3. If not see
|
|
#define UCLIBC_DYNAMIC_LINKERN32 \
|
|
"%{mnan=2008:/lib32/ld-uClibc-mipsn8.so.0;:/lib32/ld-uClibc.so.0}"
|
|
|
|
+#undef MUSL_DYNAMIC_LINKER32
|
|
+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-mips%{EL:el}%{msoft-float:-sf}.so.1"
|
|
+#undef MUSL_DYNAMIC_LINKER64
|
|
+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-mips64%{EL:el}%{msoft-float:-sf}.so.1"
|
|
+#define MUSL_DYNAMIC_LINKERN32 "/lib/ld-musl-mipsn32%{EL:el}%{msoft-float:-sf}.so.1"
|
|
+
|
|
#define BIONIC_DYNAMIC_LINKERN32 "/system/bin/linker32"
|
|
#define GNU_USER_DYNAMIC_LINKERN32 \
|
|
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKERN32, UCLIBC_DYNAMIC_LINKERN32, \
|
|
- BIONIC_DYNAMIC_LINKERN32)
|
|
+ BIONIC_DYNAMIC_LINKERN32, MUSL_DYNAMIC_LINKERN32)
|
|
diff --git a/gcc/config/rs6000/linux.h b/gcc/config/rs6000/linux.h
|
|
index fe0ebd6..a68ff69 100644
|
|
--- a/gcc/config/rs6000/linux.h
|
|
+++ b/gcc/config/rs6000/linux.h
|
|
@@ -30,10 +30,14 @@
|
|
#define OPTION_GLIBC (DEFAULT_LIBC == LIBC_GLIBC)
|
|
#define OPTION_UCLIBC (DEFAULT_LIBC == LIBC_UCLIBC)
|
|
#define OPTION_BIONIC (DEFAULT_LIBC == LIBC_BIONIC)
|
|
+#undef OPTION_MUSL
|
|
+#define OPTION_MUSL (DEFAULT_LIBC == LIBC_MUSL)
|
|
#else
|
|
#define OPTION_GLIBC (linux_libc == LIBC_GLIBC)
|
|
#define OPTION_UCLIBC (linux_libc == LIBC_UCLIBC)
|
|
#define OPTION_BIONIC (linux_libc == LIBC_BIONIC)
|
|
+#undef OPTION_MUSL
|
|
+#define OPTION_MUSL (linux_libc == LIBC_MUSL)
|
|
#endif
|
|
|
|
/* Determine what functions are present at the runtime;
|
|
diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
|
|
index 0879e7e..6a7d435 100644
|
|
--- a/gcc/config/rs6000/linux64.h
|
|
+++ b/gcc/config/rs6000/linux64.h
|
|
@@ -299,10 +299,14 @@ extern int dot_symbols;
|
|
#define OPTION_GLIBC (DEFAULT_LIBC == LIBC_GLIBC)
|
|
#define OPTION_UCLIBC (DEFAULT_LIBC == LIBC_UCLIBC)
|
|
#define OPTION_BIONIC (DEFAULT_LIBC == LIBC_BIONIC)
|
|
+#undef OPTION_MUSL
|
|
+#define OPTION_MUSL (DEFAULT_LIBC == LIBC_MUSL)
|
|
#else
|
|
#define OPTION_GLIBC (linux_libc == LIBC_GLIBC)
|
|
#define OPTION_UCLIBC (linux_libc == LIBC_UCLIBC)
|
|
#define OPTION_BIONIC (linux_libc == LIBC_BIONIC)
|
|
+#undef OPTION_MUSL
|
|
+#define OPTION_MUSL (linux_libc == LIBC_MUSL)
|
|
#endif
|
|
|
|
/* Determine what functions are present at the runtime;
|
|
@@ -365,17 +369,23 @@ extern int dot_symbols;
|
|
#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" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.so.1"
|
|
+#define MUSL_DYNAMIC_LINKER64 \
|
|
+ "/lib/ld-musl-powerpc64" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.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 --git a/gcc/config/rs6000/secureplt.h b/gcc/config/rs6000/secureplt.h
|
|
index b463463..77edf2a 100644
|
|
--- a/gcc/config/rs6000/secureplt.h
|
|
+++ b/gcc/config/rs6000/secureplt.h
|
|
@@ -18,3 +18,4 @@ along with GCC; see the file COPYING3. If not see
|
|
<http://www.gnu.org/licenses/>. */
|
|
|
|
#define CC1_SECURE_PLT_DEFAULT_SPEC "-msecure-plt"
|
|
+#define LINK_SECURE_PLT_DEFAULT_SPEC "--secure-plt"
|
|
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
|
|
index 9917c2f..68365de 100644
|
|
--- a/gcc/config/rs6000/sysv4.h
|
|
+++ b/gcc/config/rs6000/sysv4.h
|
|
@@ -537,6 +537,9 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
|
|
#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. */
|
|
#undef CC1_SPEC
|
|
@@ -586,7 +589,8 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
|
|
|
|
/* 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 "\
|
|
@@ -762,17 +766,23 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
|
|
|
|
#define LINK_START_LINUX_SPEC ""
|
|
|
|
+#define MUSL_DYNAMIC_LINKER_E ENDIAN_SELECT("","le","")
|
|
+
|
|
#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" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.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} \
|
|
@@ -895,6 +905,7 @@ ncrtn.o%s"
|
|
{ "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 }, \
|
|
@@ -949,3 +960,72 @@ ncrtn.o%s"
|
|
/* This target uses the sysv4.opt file. */
|
|
#define TARGET_USES_SYSV4_OPT 1
|
|
|
|
+/* Include order changes for musl, same as in generic linux.h. */
|
|
+#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
|
|
diff --git a/gcc/config/rs6000/sysv4le.h b/gcc/config/rs6000/sysv4le.h
|
|
index 7b1d6a1..064323c 100644
|
|
--- a/gcc/config/rs6000/sysv4le.h
|
|
+++ b/gcc/config/rs6000/sysv4le.h
|
|
@@ -35,3 +35,5 @@
|
|
/* Little-endian PowerPC64 Linux uses the ELF v2 ABI by default. */
|
|
#define LINUX64_DEFAULT_ABI_ELFv2
|
|
|
|
+#undef MUSL_DYNAMIC_LINKER_E
|
|
+#define MUSL_DYNAMIC_LINKER_E ENDIAN_SELECT("","le","le")
|
|
diff --git a/gcc/config/sh/linux.h b/gcc/config/sh/linux.h
|
|
index 0f5d614..4c167c6 100644
|
|
--- a/gcc/config/sh/linux.h
|
|
+++ b/gcc/config/sh/linux.h
|
|
@@ -43,6 +43,29 @@ along with GCC; see the file COPYING3. If not see
|
|
|
|
#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
|
|
|
|
+#if TARGET_ENDIAN_DEFAULT == MASK_LITTLE_ENDIAN
|
|
+#define MUSL_DYNAMIC_LINKER_E "%{mb:eb}"
|
|
+#else
|
|
+#define MUSL_DYNAMIC_LINKER_E "%{!ml:eb}"
|
|
+#endif
|
|
+
|
|
+#if TARGET_CPU_DEFAULT & ( MASK_HARD_SH2A_DOUBLE | MASK_SH4 )
|
|
+/* "-nofpu" if any nofpu option is specified */
|
|
+#define MUSL_DYNAMIC_LINKER_FP \
|
|
+ "%{m1|m2|m2a-nofpu|m3|m4-nofpu|m4-100-nofpu|m4-200-nofpu|m4-300-nofpu|" \
|
|
+ "m4-340|m4-400|m4-500|m4al|m5-32media-nofpu|m5-64media-nofpu|" \
|
|
+ "m5-compact-nofpu:-nofpu}"
|
|
+#else
|
|
+/* "-nofpu" if none of the hard fpu options are specified */
|
|
+#define MUSL_DYNAMIC_LINKER_FP \
|
|
+ "%{m2a|m4|m4-100|m4-200|m4-300|m4a|m5-32media|m5-64media|m5-compact:;:-nofpu}"
|
|
+#endif
|
|
+
|
|
+#undef MUSL_DYNAMIC_LINKER
|
|
+#define MUSL_DYNAMIC_LINKER \
|
|
+ "/lib/ld-musl-sh" MUSL_DYNAMIC_LINKER_E MUSL_DYNAMIC_LINKER_FP \
|
|
+ "%{mfdpic:-fdpic}.so.1"
|
|
+
|
|
#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
|
|
|
|
#undef SUBTARGET_LINK_EMUL_SUFFIX
|
|
diff --git a/gcc/configure b/gcc/configure
|
|
index 0037240..66aab9f 100755
|
|
--- a/gcc/configure
|
|
+++ b/gcc/configure
|
|
@@ -27742,6 +27742,9 @@ if test "${gcc_cv_libc_provides_ssp+set}" = set; then :
|
|
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.
|
|
@@ -27774,6 +27777,7 @@ fi
|
|
# <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"
|
|
@@ -27870,6 +27874,9 @@ case "$target" in
|
|
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 --git a/gcc/configure.ac b/gcc/configure.ac
|
|
index 6f38ba1..b81960c 100644
|
|
--- a/gcc/configure.ac
|
|
+++ b/gcc/configure.ac
|
|
@@ -5229,6 +5229,9 @@ AC_CACHE_CHECK(__stack_chk_fail in target C library,
|
|
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.
|
|
@@ -5255,6 +5258,7 @@ AC_CACHE_CHECK(__stack_chk_fail in target C library,
|
|
# <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],
|
|
@@ -5328,6 +5332,9 @@ case "$target" in
|
|
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
|
|
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
|
|
index f84a199..ee9765b 100644
|
|
--- a/gcc/doc/invoke.texi
|
|
+++ b/gcc/doc/invoke.texi
|
|
@@ -667,7 +667,7 @@ Objective-C and Objective-C++ Dialects}.
|
|
-mcpu=@var{cpu}}
|
|
|
|
@emph{GNU/Linux Options}
|
|
-@gccoptlist{-mglibc -muclibc -mbionic -mandroid @gol
|
|
+@gccoptlist{-mglibc -muclibc -mmusl -mbionic -mandroid @gol
|
|
-tno-android-cc -tno-android-ld}
|
|
|
|
@emph{H8/300 Options}
|
|
@@ -15324,13 +15324,19 @@ These @samp{-m} options are defined for GNU/Linux targets:
|
|
@item -mglibc
|
|
@opindex mglibc
|
|
Use the GNU C library. This is the default except
|
|
-on @samp{*-*-linux-*uclibc*} and @samp{*-*-linux-*android*} targets.
|
|
+on @samp{*-*-linux-*uclibc*}, @samp{*-*-linux-*musl*} and
|
|
+@samp{*-*-linux-*android*} targets.
|
|
|
|
@item -muclibc
|
|
@opindex muclibc
|
|
Use uClibc C library. This is the default on
|
|
@samp{*-*-linux-*uclibc*} targets.
|
|
|
|
+@item -mmusl
|
|
+@opindex mmusl
|
|
+Use the musl C library. This is the default on
|
|
+@samp{*-*-linux-*musl*} targets.
|
|
+
|
|
@item -mbionic
|
|
@opindex mbionic
|
|
Use Bionic C library. This is the default on
|
|
diff --git a/libcilkrts/runtime/os-unix.c b/libcilkrts/runtime/os-unix.c
|
|
index cb582dd..e43d7d5 100644
|
|
--- a/libcilkrts/runtime/os-unix.c
|
|
+++ b/libcilkrts/runtime/os-unix.c
|
|
@@ -51,6 +51,7 @@
|
|
#if defined __linux__
|
|
# include <sys/sysinfo.h>
|
|
# include <sys/syscall.h>
|
|
+# include <sched.h>
|
|
#elif defined __APPLE__
|
|
# include <sys/sysctl.h>
|
|
// Uses sysconf(_SC_NPROCESSORS_ONLN) in verbose output
|
|
@@ -400,28 +401,19 @@ COMMON_SYSDEP void __cilkrts_sleep(void)
|
|
|
|
COMMON_SYSDEP void __cilkrts_yield(void)
|
|
{
|
|
-#if __APPLE__ || __FreeBSD__ || __VXWORKS__
|
|
- // On MacOS, call sched_yield to yield quantum. I'm not sure why we
|
|
- // don't do this on Linux also.
|
|
- sched_yield();
|
|
-#elif defined(__DragonFly__)
|
|
- // On DragonFly BSD, call sched_yield to yield quantum.
|
|
- sched_yield();
|
|
-#elif defined(__MIC__)
|
|
+#if defined(__MIC__)
|
|
// On MIC, pthread_yield() really trashes things. Arch's measurements
|
|
// showed that calling _mm_delay_32() (or doing nothing) was a better
|
|
// option. Delaying 1024 clock cycles is a reasonable compromise between
|
|
// giving up the processor and latency starting up when work becomes
|
|
// available
|
|
_mm_delay_32(1024);
|
|
-#elif defined(__ANDROID__) || (defined(__sun__) && defined(__svr4__))
|
|
- // On Android and Solaris, call sched_yield to yield quantum. I'm not
|
|
- // sure why we don't do this on Linux also.
|
|
- sched_yield();
|
|
-#else
|
|
- // On Linux, call pthread_yield (which in turn will call sched_yield)
|
|
- // to yield quantum.
|
|
+#elif defined(__sun__) && !defined(__svr4__)
|
|
+ // On old SunOS call pthread_yield to yield a quantum.
|
|
pthread_yield();
|
|
+#else
|
|
+ // On other platforms call sched_yield to yield a quantum.
|
|
+ sched_yield();
|
|
#endif
|
|
}
|
|
|
|
diff --git a/libgcc/unwind-dw2-fde-dip.c b/libgcc/unwind-dw2-fde-dip.c
|
|
index e1e566b..137dced 100644
|
|
--- a/libgcc/unwind-dw2-fde-dip.c
|
|
+++ b/libgcc/unwind-dw2-fde-dip.c
|
|
@@ -59,6 +59,12 @@
|
|
|
|
#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
|
|
&& defined(TARGET_DL_ITERATE_PHDR) \
|
|
+ && defined(__linux__)
|
|
+# define USE_PT_GNU_EH_FRAME
|
|
+#endif
|
|
+
|
|
+#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
|
|
+ && defined(TARGET_DL_ITERATE_PHDR) \
|
|
&& (defined(__DragonFly__) || defined(__FreeBSD__))
|
|
# define ElfW __ElfN
|
|
# define USE_PT_GNU_EH_FRAME
|
|
diff --git a/libgfortran/acinclude.m4 b/libgfortran/acinclude.m4
|
|
index ba890f9..30b8b1a6 100644
|
|
--- a/libgfortran/acinclude.m4
|
|
+++ b/libgfortran/acinclude.m4
|
|
@@ -100,7 +100,7 @@ void foo (void);
|
|
[Define to 1 if the target supports #pragma weak])
|
|
fi
|
|
case "$host" in
|
|
- *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* )
|
|
+ *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* | *-*-musl* )
|
|
AC_DEFINE(GTHREAD_USE_WEAK, 0,
|
|
[Define to 0 if the target shouldn't use #pragma weak])
|
|
;;
|
|
diff --git a/libgfortran/configure b/libgfortran/configure
|
|
index e1592f7..07542e1 100755
|
|
--- a/libgfortran/configure
|
|
+++ b/libgfortran/configure
|
|
@@ -26447,7 +26447,7 @@ $as_echo "#define SUPPORTS_WEAK 1" >>confdefs.h
|
|
|
|
fi
|
|
case "$host" in
|
|
- *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* )
|
|
+ *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* | *-*-musl* )
|
|
|
|
$as_echo "#define GTHREAD_USE_WEAK 0" >>confdefs.h
|
|
|
|
diff --git a/libitm/config/arm/hwcap.cc b/libitm/config/arm/hwcap.cc
|
|
index a1c2cfd..ea8f023 100644
|
|
--- a/libitm/config/arm/hwcap.cc
|
|
+++ b/libitm/config/arm/hwcap.cc
|
|
@@ -40,7 +40,7 @@ int GTM_hwcap HIDDEN = 0
|
|
|
|
#ifdef __linux__
|
|
#include <unistd.h>
|
|
-#include <sys/fcntl.h>
|
|
+#include <fcntl.h>
|
|
#include <elf.h>
|
|
|
|
static void __attribute__((constructor))
|
|
diff --git a/libitm/config/linux/x86/tls.h b/libitm/config/linux/x86/tls.h
|
|
index e731ab7..54ad8b6 100644
|
|
--- a/libitm/config/linux/x86/tls.h
|
|
+++ b/libitm/config/linux/x86/tls.h
|
|
@@ -25,16 +25,19 @@
|
|
#ifndef LIBITM_X86_TLS_H
|
|
#define LIBITM_X86_TLS_H 1
|
|
|
|
-#if defined(__GLIBC_PREREQ) && __GLIBC_PREREQ(2, 10)
|
|
+#if defined(__GLIBC_PREREQ)
|
|
+#if __GLIBC_PREREQ(2, 10)
|
|
/* Use slots in the TCB head rather than __thread lookups.
|
|
GLIBC has reserved words 10 through 13 for TM. */
|
|
#define HAVE_ARCH_GTM_THREAD 1
|
|
#define HAVE_ARCH_GTM_THREAD_DISP 1
|
|
#endif
|
|
+#endif
|
|
|
|
#include "config/generic/tls.h"
|
|
|
|
-#if defined(__GLIBC_PREREQ) && __GLIBC_PREREQ(2, 10)
|
|
+#if defined(__GLIBC_PREREQ)
|
|
+#if __GLIBC_PREREQ(2, 10)
|
|
namespace GTM HIDDEN {
|
|
|
|
#ifdef __x86_64__
|
|
@@ -101,5 +104,6 @@ static inline void set_abi_disp(struct abi_dispatch *x)
|
|
|
|
} // namespace GTM
|
|
#endif /* >= GLIBC 2.10 */
|
|
+#endif
|
|
|
|
#endif // LIBITM_X86_TLS_H
|
|
diff --git a/libstdc++-v3/config/os/generic/os_defines.h b/libstdc++-v3/config/os/generic/os_defines.h
|
|
index 45bf52a..103ec0e 100644
|
|
--- a/libstdc++-v3/config/os/generic/os_defines.h
|
|
+++ b/libstdc++-v3/config/os/generic/os_defines.h
|
|
@@ -33,4 +33,9 @@
|
|
// System-specific #define, typedefs, corrections, etc, go here. This
|
|
// file will come before all others.
|
|
|
|
+// Disable the weak reference logic in gthr.h for os/generic because it
|
|
+// is broken on every platform unless there is implementation specific
|
|
+// workaround in gthr-posix.h and at link-time for static linking.
|
|
+#define _GLIBCXX_GTHREAD_USE_WEAK 0
|
|
+
|
|
#endif
|
|
diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host
|
|
index 640199c..106134e 100644
|
|
--- a/libstdc++-v3/configure.host
|
|
+++ b/libstdc++-v3/configure.host
|
|
@@ -273,6 +273,9 @@ case "${host_os}" in
|
|
freebsd*)
|
|
os_include_dir="os/bsd/freebsd"
|
|
;;
|
|
+ linux-musl*)
|
|
+ os_include_dir="os/generic"
|
|
+ ;;
|
|
gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
|
|
if [ "$uclibc" = "yes" ]; then
|
|
os_include_dir="os/uclibc"
|