mailing list of musl libc
 help / color / mirror / code / Atom feed
* musl and gcc-4.8 (sabotage)
@ 2013-03-28 20:38 Daniel Cegiełka
  2013-03-28 23:32 ` John Spencer
  0 siblings, 1 reply; 16+ messages in thread
From: Daniel Cegiełka @ 2013-03-28 20:38 UTC (permalink / raw)
  To: musl

[-- Attachment #1: Type: text/plain, Size: 2951 bytes --]

Hi,
Is anyone able to compile gcc-4.8 with musl? I try to prepare patch
based on the work of Gregor Richards... but without success. I wonder
if the error isn't in gcc.

patch gcc-4.8-musl.diff and several fixes from sabotage distro:

        libibertyfix libiberty

        # Prevent libffi from being installed
        sed -i -e 's/\(install.*:\) install-.*recursive/\1/'
"${S}"/libffi/Makefile.in
        sed -i -e 's/\(install-data-am:\).*/\1/'
"${S}"/libffi/include/Makefile.in

configure:

        CHOST="x86_64-pc-linux-musl"
        PREFIX="/usr"
        BINPATH="${PREFIX}/lib/gcc/$version/bin"
        LIBPATH="${PREFIX}/lib/gcc/$version/lib"
        DATAPATH="${PREFIX}/share/gcc/$version/"
        STDCXX_INCDIR="${PREFIX}/include/c++/$version"
        GCC_LANG="c,c++"

        ./configure \
                --host="${CHOST}" \
                --build="${CHOST}" \
                --target="${CHOST}" \
                --prefix="${PREFIX}" \
                --exec-prefix="${PREFIX}" \
                --bindir="${BINPATH}" \
                --libdir="${LIBPATH}" \
                --with-slib=/lib \
                --includedir=/usr/lib/gcc/$version/include \
                --with-gxx-include-dir="${STDCXX_INCDIR}" \
                --datadir="${DATAPATH}" \
                --mandir="${DATAPATH}"/man \
                --infodir="${DATAPATH}"/info \
                --with-python-dir=/usr/share/gcc/$version/python \
                --with-newlib \
                --with-headers=no \
                --disable-altivec \
                --disable-fixed-point \
                --without-ppl \
                --without-cloog \
                --enable-lto \
                --disable-nls \
                --with-system-zlib \
                --enable-obsolete \
                --disable-werror \
                --enable-secureplt \
                --disable-multilib \
                --with-multilib-list=m64 \
                --disable-libmudflap \
                --disable-libssp \
                --enable-esp \
                --enable-libgomp \
                --enable-checking=release \
                --disable-libgcj \
                --enable-languages="${GCC_LANG}" \
                --enable-shared \
                --enable-threads=posix \
                --enable-tls \
                --enable-__cxa_atexit \
                --enable-clocale=generic

error:

make[3]: Entering directory
`/var/tmp/ports/gcc/work/gcc-4.8-20130321/x86_64-pc-linux-musl/libstdc++-v3/include'
echo timestamp > stamp-pb
make[3]: *** No rule to make target
`/var/tmp/ports/gcc/work/gcc-4.8-20130321/libstdc++-v3/config//ctype_base.h',
needed by `stamp-host'.  Stop.


This header file is located in (ls)
/var/tmp/ports/gcc/work/gcc-4.8-20130321/libstdc++-v3/config/os/generic/
ctype_base.h  ctype_configure_char.cc  ctype_inline.h
error_constants.h  os_defines.h

and a little strange that gcc does not see it. Any thoughts?

Daniel

[-- Attachment #2: gcc-4.8-musl.diff --]
[-- Type: application/octet-stream, Size: 14583 bytes --]

diff -urN gcc-4.8-20130203.orig/gcc/config/linux.h gcc-4.8-20130203/gcc/config/linux.h
--- gcc-4.8-20130203.orig/gcc/config/linux.h	Sun Feb 10 21:27:40 2013
+++ gcc-4.8-20130203/gcc/config/linux.h	Sun Feb 10 21:45:07 2013
@@ -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)
+#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)
+#define OPTION_MUSL (linux_libc == LIBC_MUSL)
 #endif
 
 #define GNU_USER_TARGET_OS_CPP_BUILTINS()			\
@@ -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.  */
 
-#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,19 +86,23 @@
 #define BIONIC_DYNAMIC_LINKER32 "/system/bin/linker"
 #define BIONIC_DYNAMIC_LINKER64 "/system/bin/linker64"
 #define BIONIC_DYNAMIC_LINKERX32 "/system/bin/linkerx32"
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl.so.1"
+#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"
 
 #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)
 
 /* Determine whether the entire c99 runtime
    is present in the runtime library.  */
diff -r 193f80e01b02 -r 45cd88d4fb7b gcc/config/linux.opt
--- a/gcc/config/linux.opt      Wed Nov 21 21:17:38 2012 -0500
+++ b/gcc/config/linux.opt      Wed Nov 21 21:19:19 2012 -0500
@@ -30,3 +30,7 @@
 muclibc
 Target Report RejectNegative Var(linux_libc,LIBC_UCLIBC) Negative(mbionic)
 Use uClibc C library
+
+mmusl
+Target Report RejectNegative Var(linux_libc,LIBC_MUSL) Negative(mglibc)
+Use musl C library
diff -urN gcc-4.8-20130203.orig/gcc/ginclude/stddef.h gcc-4.8-20130203/gcc/ginclude/stddef.h
--- gcc-4.8-20130203.orig/gcc/ginclude/stddef.h	Sun Feb 10 22:04:42 2013
+++ gcc-4.8-20130203/gcc/ginclude/stddef.h	Sun Feb 10 22:10:59 2013
@@ -181,6 +181,7 @@
 #ifndef _GCC_SIZE_T
 #ifndef _SIZET_
 #ifndef __size_t
+#ifndef __DEFINED_size_t /* musl */
 #define __size_t__	/* BeOS */
 #define __SIZE_T__	/* Cray Unicos/Mk */
 #define _SIZE_T
@@ -197,6 +198,7 @@
 #define ___int_size_t_h
 #define _GCC_SIZE_T
 #define _SIZET_
+#define __DEFINED_size_t /* musl */
 #if (defined (__FreeBSD__) && (__FreeBSD__ >= 5)) \
   || defined(__FreeBSD_kernel__)
 /* __size_t is a typedef on FreeBSD 5, must not trash it. */
@@ -231,6 +233,7 @@
 #endif /* _SIZE_T */
 #endif /* __SIZE_T__ */
 #endif /* __size_t__ */
+#endif /* musl */
 #undef	__need_size_t
 #endif /* _STDDEF_H or __need_size_t.  */
 
diff -r 45cd88d4fb7b -r 0afd9d82498d libgomp/config/posix/time.c
--- a/libgomp/config/posix/time.c       Wed Nov 21 21:19:19 2012 -0500
+++ b/libgomp/config/posix/time.c       Wed Nov 21 21:20:22 2012 -0500
@@ -28,6 +28,8 @@
    The following implementation uses the most simple POSIX routines.
    If present, POSIX 4 clocks should be used instead.  */
 
+#define _POSIX_C_SOURCE 199309L /* for clocks */
+
 #include "libgomp.h"
 #include <unistd.h>
 #if TIME_WITH_SYS_TIME
diff -r 0afd9d82498d -r 53f3e21a7d14 gcc/config/i386/linux.h
--- a/gcc/config/i386/linux.h   Wed Nov 21 21:20:22 2012 -0500
+++ b/gcc/config/i386/linux.h   Wed Nov 21 21:21:21 2012 -0500
@@ -22,3 +22,4 @@
 
 #define GNU_USER_LINK_EMULATION "elf_i386"
 #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl.so.1"
diff -r 0afd9d82498d -r 53f3e21a7d14 gcc/config/i386/linux64.h
--- a/gcc/config/i386/linux64.h Wed Nov 21 21:20:22 2012 -0500
+++ b/gcc/config/i386/linux64.h Wed Nov 21 21:21:21 2012 -0500
@@ -31,3 +31,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 0afd9d82498d -r 53f3e21a7d14 libitm/config/linux/x86/tls.h
--- a/libitm/config/linux/x86/tls.h     Wed Nov 21 21:20:22 2012 -0500
+++ b/libitm/config/linux/x86/tls.h     Wed Nov 21 21:21:21 2012 -0500
@@ -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 @@
 
 } // namespace GTM
 #endif /* >= GLIBC 2.10 */
+#endif
 
 #endif // LIBITM_X86_TLS_H
diff -r 53f3e21a7d14 -r 0a4e297edad6 gcc/config/arm/linux-eabi.h
--- a/gcc/config/arm/linux-eabi.h       Wed Nov 21 21:21:21 2012 -0500
+++ b/gcc/config/arm/linux-eabi.h       Wed Nov 21 21:21:54 2012 -0500
@@ -64,6 +64,10 @@
 #undef  GLIBC_DYNAMIC_LINKER
 #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.3"
 
+/* 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
diff -r 53f3e21a7d14 -r 0a4e297edad6 libitm/config/arm/hwcap.cc
--- a/libitm/config/arm/hwcap.cc        Wed Nov 21 21:21:21 2012 -0500
+++ b/libitm/config/arm/hwcap.cc        Wed Nov 21 21:21:54 2012 -0500
@@ -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))
diff -r 0a4e297edad6 -r 78025c74c5c1 gcc/config/mips/linux.h
--- a/gcc/config/mips/linux.h   Wed Nov 21 21:21:54 2012 -0500
+++ b/gcc/config/mips/linux.h   Wed Nov 21 21:23:49 2012 -0500
@@ -19,3 +19,5 @@
 <http://www.gnu.org/licenses/>.  */
 
 #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-mips.so.1"
diff -urN gcc-4.8-20130203.orig/gcc/config.gcc gcc-4.8-20130203/gcc/config.gcc
--- gcc-4.8-20130203.orig/gcc/config.gcc	Sun Feb 10 20:59:36 2013
+++ gcc-4.8-20130203/gcc/config.gcc	Sun Feb 10 21:17:44 2013
@@ -546,7 +546,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
@@ -648,6 +648,9 @@
       ;;
     *-*-*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 -urN gcc-4.8-20130203.orig/libstdc++-v3/configure.host gcc-4.8-20130203/libstdc++-v3/configure.host
--- gcc-4.8-20130203.orig/libstdc++-v3/configure.host	Sun Feb 10 21:00:14 2013
+++ gcc-4.8-20130203/libstdc++-v3/configure.host	Sun Feb 10 21:14:41 2013
@@ -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,10 @@
       os_include_dir="os/gnu-linux"
     fi
     ;;
+
+    esac
+    ;;
+
   hpux*)
     os_include_dir="os/hpux"
     ;;
diff -r 78025c74c5c1 gcc/config/rs6000/linux64.h
--- a/gcc/config/rs6000/linux64.h       Wed Nov 21 21:23:49 2012 -0500
+++ b/gcc/config/rs6000/linux64.h       Wed Nov 21 21:45:58 2012 -0500
@@ -362,17 +362,21 @@
 #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: \
diff -r 78025c74c5c1 gcc/config/rs6000/secureplt.h
--- a/gcc/config/rs6000/secureplt.h     Wed Nov 21 21:23:49 2012 -0500
+++ b/gcc/config/rs6000/secureplt.h     Wed Nov 21 21:45:58 2012 -0500
@@ -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 -urN gcc-4.8-20130203.orig/gcc/config/rs6000/sysv4.h gcc-4.8-20130203/gcc/config/rs6000/sysv4.h
--- gcc-4.8-20130203.orig/gcc/config/rs6000/sysv4.h	Mon Feb 11 07:48:22 2013
+++ gcc-4.8-20130203/gcc/config/rs6000/sysv4.h	Mon Feb 11 08:15:53 2013
@@ -551,6 +551,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 and set correct endian mode.  */
 #define	CC1_SPEC "%{G*} %(cc1_cpu) \
@@ -611,7 +614,8 @@
 %{mlittle: --oformat elf32-powerpcle } %{mlittle-endian: --oformat elf32-powerpcle } \
 %{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \
     %{mcall-i960-old: --oformat elf32-powerpcle} \
-  }}}}"
+  }}}} \
+%{!mbss-plt: %{!msecure-plt: %(link_secure_plt_default)}}"
 
 /* Any specific OS flags.  */
 #define LINK_OS_SPEC "\
@@ -789,15 +793,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} \
@@ -923,6 +930,7 @@
   { "cc1_endian_little",	CC1_ENDIAN_LITTLE_SPEC },		\
   { "cc1_endian_default",	CC1_ENDIAN_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 -urN gcc-4.8-20130203.orig/gcc/config.gcc gcc-4.8-20130203/gcc/config.gcc
--- gcc-4.8-20130203.orig/gcc/config.gcc	Mon Feb 11 07:48:22 2013
+++ gcc-4.8-20130203/gcc/config.gcc	Mon Feb 11 08:01:07 2013
@@ -2088,6 +2088,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

[-- Attachment #3: build.log.xz --]
[-- Type: application/octet-stream, Size: 39032 bytes --]

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: musl and gcc-4.8 (sabotage)
  2013-03-28 20:38 musl and gcc-4.8 (sabotage) Daniel Cegiełka
@ 2013-03-28 23:32 ` John Spencer
  2013-03-28 23:46   ` Daniel Cegiełka
  0 siblings, 1 reply; 16+ messages in thread
From: John Spencer @ 2013-03-28 23:32 UTC (permalink / raw)
  To: musl

On 03/28/2013 09:38 PM, Daniel Cegiełka wrote:
> Hi,
> Is anyone able to compile gcc-4.8 with musl? I try to prepare patch
> based on the work of Gregor Richards... but without success. I wonder
> if the error isn't in gcc.
>
>
> make[3]: Entering directory
> `/var/tmp/ports/gcc/work/gcc-4.8-20130321/x86_64-pc-linux-musl/libstdc++-v3/include'
> echo timestamp>  stamp-pb
> make[3]: *** No rule to make target
> `/var/tmp/ports/gcc/work/gcc-4.8-20130321/libstdc++-v3/config//ctype_base.h',
> needed by `stamp-host'.  Stop.

as you can see, the string os/generic is missing after config/

this section in your patch should make it pick that:

+    # check for musl by target
+    case "${host_os} in
+      *-musl*)
+        os_include_dir="os/generic"
+        ;;
+      *)
+


i'd try adding some debug code into that configure script and see what 
the actual values are and why that path is not taken.

>
> This header file is located in (ls)
> /var/tmp/ports/gcc/work/gcc-4.8-20130321/libstdc++-v3/config/os/generic/



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: musl and gcc-4.8 (sabotage)
  2013-03-28 23:32 ` John Spencer
@ 2013-03-28 23:46   ` Daniel Cegiełka
  2013-03-28 23:58     ` Daniel Cegiełka
  0 siblings, 1 reply; 16+ messages in thread
From: Daniel Cegiełka @ 2013-03-28 23:46 UTC (permalink / raw)
  To: musl

[-- Attachment #1: Type: text/plain, Size: 1927 bytes --]

>
> as you can see, the string os/generic is missing after config/
>
> this section in your patch should make it pick that:
>
> +    # check for musl by target
> +    case "${host_os} in
> +      *-musl*)
> +        os_include_dir="os/generic"
> +        ;;
> +      *)
> +
>
>
> i'd try adding some debug code into that configure script and see what the
> actual values are and why that path is not taken.

I forced os-generic (works with musl). But now I have a new error
(libsanitizer):


In file included from
../../.././libsanitizer/sanitizer_common/sanitizer_common.h:17:0,
                 from
../../.././libsanitizer/sanitizer_common/sanitizer_linux.cc:14:
../../.././libsanitizer/sanitizer_common/sanitizer_linux.cc: In
function 'void __sanitizer::GetThreadStackTopAndBottom(bool,
__sanitizer::uptr*, __sanitizer::uptr*)':
../../.././libsanitizer/sanitizer_common/sanitizer_linux.cc:201:52:
error: 'pthread_getattr_np' was not declared in this scope
   CHECK_EQ(pthread_getattr_np(pthread_self(), &attr), 0);
                                                    ^
../../.././libsanitizer/sanitizer_common/sanitizer_internal_defs.h:174:33:
note: in definition of macro 'CHECK_IMPL'
     __sanitizer::u64 v1 = (u64)(c1); \
                                 ^
../../.././libsanitizer/sanitizer_common/sanitizer_linux.cc:201:3:
note: in expansion of macro 'CHECK_EQ'
   CHECK_EQ(pthread_getattr_np(pthread_self(), &attr), 0);
   ^
make[4]: *** [sanitizer_linux.lo] Error 1
make[4]: *** Waiting for unfinished jobs....
libtool: compile:
/var/tmp/ports/gcc/work/gcc-4.8.0-RC-20130316/host-x86_64-pc-linux-musl/gcc/xgcc
-shared-libgcc -B/var/tmp/ports/gcc/work/gcc-4.8.0-RC-20130316/host-x86_64-p$
mv -f .deps/sanitizer_libc.Tpo .deps/sanitizer_libc.Plo
make[4]: Leaving directory
`/var/tmp/ports/gcc/work/gcc-4.8.0-RC-20130316/x86_64-pc-linux-musl/libsanitizer/sanitizer_common'
make[3]: *** [all-recursive] Error 1


Daniel

[-- Attachment #2: gcc-4.8-musl.diff --]
[-- Type: application/octet-stream, Size: 14495 bytes --]

diff -urN gcc-4.8-20130203.orig/gcc/config/linux.h gcc-4.8-20130203/gcc/config/linux.h
--- gcc-4.8-20130203.orig/gcc/config/linux.h	Sun Feb 10 21:27:40 2013
+++ gcc-4.8-20130203/gcc/config/linux.h	Sun Feb 10 21:45:07 2013
@@ -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)
+#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)
+#define OPTION_MUSL (linux_libc == LIBC_MUSL)
 #endif
 
 #define GNU_USER_TARGET_OS_CPP_BUILTINS()			\
@@ -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.  */
 
-#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,19 +86,23 @@
 #define BIONIC_DYNAMIC_LINKER32 "/system/bin/linker"
 #define BIONIC_DYNAMIC_LINKER64 "/system/bin/linker64"
 #define BIONIC_DYNAMIC_LINKERX32 "/system/bin/linkerx32"
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl.so.1"
+#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"
 
 #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)
 
 /* Determine whether the entire c99 runtime
    is present in the runtime library.  */
diff -r 193f80e01b02 -r 45cd88d4fb7b gcc/config/linux.opt
--- a/gcc/config/linux.opt      Wed Nov 21 21:17:38 2012 -0500
+++ b/gcc/config/linux.opt      Wed Nov 21 21:19:19 2012 -0500
@@ -30,3 +30,7 @@
 muclibc
 Target Report RejectNegative Var(linux_libc,LIBC_UCLIBC) Negative(mbionic)
 Use uClibc C library
+
+mmusl
+Target Report RejectNegative Var(linux_libc,LIBC_MUSL) Negative(mglibc)
+Use musl C library
diff -urN gcc-4.8-20130203.orig/gcc/ginclude/stddef.h gcc-4.8-20130203/gcc/ginclude/stddef.h
--- gcc-4.8-20130203.orig/gcc/ginclude/stddef.h	Sun Feb 10 22:04:42 2013
+++ gcc-4.8-20130203/gcc/ginclude/stddef.h	Sun Feb 10 22:10:59 2013
@@ -181,6 +181,7 @@
 #ifndef _GCC_SIZE_T
 #ifndef _SIZET_
 #ifndef __size_t
+#ifndef __DEFINED_size_t /* musl */
 #define __size_t__	/* BeOS */
 #define __SIZE_T__	/* Cray Unicos/Mk */
 #define _SIZE_T
@@ -197,6 +198,7 @@
 #define ___int_size_t_h
 #define _GCC_SIZE_T
 #define _SIZET_
+#define __DEFINED_size_t /* musl */
 #if (defined (__FreeBSD__) && (__FreeBSD__ >= 5)) \
   || defined(__FreeBSD_kernel__)
 /* __size_t is a typedef on FreeBSD 5, must not trash it. */
@@ -231,6 +233,7 @@
 #endif /* _SIZE_T */
 #endif /* __SIZE_T__ */
 #endif /* __size_t__ */
+#endif /* musl */
 #undef	__need_size_t
 #endif /* _STDDEF_H or __need_size_t.  */
 
diff -r 45cd88d4fb7b -r 0afd9d82498d libgomp/config/posix/time.c
--- a/libgomp/config/posix/time.c       Wed Nov 21 21:19:19 2012 -0500
+++ b/libgomp/config/posix/time.c       Wed Nov 21 21:20:22 2012 -0500
@@ -28,6 +28,8 @@
    The following implementation uses the most simple POSIX routines.
    If present, POSIX 4 clocks should be used instead.  */
 
+#define _POSIX_C_SOURCE 199309L /* for clocks */
+
 #include "libgomp.h"
 #include <unistd.h>
 #if TIME_WITH_SYS_TIME
diff -r 0afd9d82498d -r 53f3e21a7d14 gcc/config/i386/linux.h
--- a/gcc/config/i386/linux.h   Wed Nov 21 21:20:22 2012 -0500
+++ b/gcc/config/i386/linux.h   Wed Nov 21 21:21:21 2012 -0500
@@ -22,3 +22,4 @@
 
 #define GNU_USER_LINK_EMULATION "elf_i386"
 #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl.so.1"
diff -r 0afd9d82498d -r 53f3e21a7d14 gcc/config/i386/linux64.h
--- a/gcc/config/i386/linux64.h Wed Nov 21 21:20:22 2012 -0500
+++ b/gcc/config/i386/linux64.h Wed Nov 21 21:21:21 2012 -0500
@@ -31,3 +31,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 0afd9d82498d -r 53f3e21a7d14 libitm/config/linux/x86/tls.h
--- a/libitm/config/linux/x86/tls.h     Wed Nov 21 21:20:22 2012 -0500
+++ b/libitm/config/linux/x86/tls.h     Wed Nov 21 21:21:21 2012 -0500
@@ -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 @@
 
 } // namespace GTM
 #endif /* >= GLIBC 2.10 */
+#endif
 
 #endif // LIBITM_X86_TLS_H
diff -r 53f3e21a7d14 -r 0a4e297edad6 gcc/config/arm/linux-eabi.h
--- a/gcc/config/arm/linux-eabi.h       Wed Nov 21 21:21:21 2012 -0500
+++ b/gcc/config/arm/linux-eabi.h       Wed Nov 21 21:21:54 2012 -0500
@@ -64,6 +64,10 @@
 #undef  GLIBC_DYNAMIC_LINKER
 #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.3"
 
+/* 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
diff -r 53f3e21a7d14 -r 0a4e297edad6 libitm/config/arm/hwcap.cc
--- a/libitm/config/arm/hwcap.cc        Wed Nov 21 21:21:21 2012 -0500
+++ b/libitm/config/arm/hwcap.cc        Wed Nov 21 21:21:54 2012 -0500
@@ -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))
diff -r 0a4e297edad6 -r 78025c74c5c1 gcc/config/mips/linux.h
--- a/gcc/config/mips/linux.h   Wed Nov 21 21:21:54 2012 -0500
+++ b/gcc/config/mips/linux.h   Wed Nov 21 21:23:49 2012 -0500
@@ -19,3 +19,5 @@
 <http://www.gnu.org/licenses/>.  */
 
 #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-mips.so.1"
diff -urN gcc-4.8-20130203.orig/gcc/config.gcc gcc-4.8-20130203/gcc/config.gcc
--- gcc-4.8-20130203.orig/gcc/config.gcc	Sun Feb 10 20:59:36 2013
+++ gcc-4.8-20130203/gcc/config.gcc	Sun Feb 10 21:17:44 2013
@@ -546,7 +546,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
@@ -648,6 +648,9 @@
       ;;
     *-*-*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 -r 78025c74c5c1 gcc/config/rs6000/linux64.h
--- a/gcc/config/rs6000/linux64.h       Wed Nov 21 21:23:49 2012 -0500
+++ b/gcc/config/rs6000/linux64.h       Wed Nov 21 21:45:58 2012 -0500
@@ -362,17 +362,21 @@
 #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: \
diff -r 78025c74c5c1 gcc/config/rs6000/secureplt.h
--- a/gcc/config/rs6000/secureplt.h     Wed Nov 21 21:23:49 2012 -0500
+++ b/gcc/config/rs6000/secureplt.h     Wed Nov 21 21:45:58 2012 -0500
@@ -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 -urN gcc-4.8-20130203.orig/gcc/config/rs6000/sysv4.h gcc-4.8-20130203/gcc/config/rs6000/sysv4.h
--- gcc-4.8-20130203.orig/gcc/config/rs6000/sysv4.h	Mon Feb 11 07:48:22 2013
+++ gcc-4.8-20130203/gcc/config/rs6000/sysv4.h	Mon Feb 11 08:15:53 2013
@@ -551,6 +551,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 and set correct endian mode.  */
 #define	CC1_SPEC "%{G*} %(cc1_cpu) \
@@ -611,7 +614,8 @@
 %{mlittle: --oformat elf32-powerpcle } %{mlittle-endian: --oformat elf32-powerpcle } \
 %{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \
     %{mcall-i960-old: --oformat elf32-powerpcle} \
-  }}}}"
+  }}}} \
+%{!mbss-plt: %{!msecure-plt: %(link_secure_plt_default)}}"
 
 /* Any specific OS flags.  */
 #define LINK_OS_SPEC "\
@@ -789,15 +793,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} \
@@ -923,6 +930,7 @@
   { "cc1_endian_little",	CC1_ENDIAN_LITTLE_SPEC },		\
   { "cc1_endian_default",	CC1_ENDIAN_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 -urN gcc-4.8-20130203.orig/gcc/config.gcc gcc-4.8-20130203/gcc/config.gcc
--- gcc-4.8-20130203.orig/gcc/config.gcc	Mon Feb 11 07:48:22 2013
+++ gcc-4.8-20130203/gcc/config.gcc	Mon Feb 11 08:01:07 2013
@@ -2088,6 +2088,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 -urN gcc-4.8.0-RC-20130316.orig/libstdc++-v3/configure.host gcc-4.8.0-RC-20130316/libstdc++-v3/configure.host
--- gcc-4.8.0-RC-20130316.orig/libstdc++-v3/configure.host	Thu Mar 28 22:19:02 2013
+++ gcc-4.8.0-RC-20130316/libstdc++-v3/configure.host	Thu Mar 28 22:21:40 2013
@@ -264,13 +264,7 @@
     os_include_dir="os/bsd/freebsd"
     ;;
   gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
-    if [ "$uclibc" = "yes" ]; then
-      os_include_dir="os/uclibc"
-    elif [ "$bionic" = "yes" ]; then
-      os_include_dir="os/bionic"
-    else
-      os_include_dir="os/gnu-linux"
-    fi
+    os_include_dir="os/generic"
     ;;
   hpux*)
     os_include_dir="os/hpux"

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: musl and gcc-4.8 (sabotage)
  2013-03-28 23:46   ` Daniel Cegiełka
@ 2013-03-28 23:58     ` Daniel Cegiełka
  2013-03-29  0:07       ` Rich Felker
  2013-03-29  0:35       ` John Spencer
  0 siblings, 2 replies; 16+ messages in thread
From: Daniel Cegiełka @ 2013-03-28 23:58 UTC (permalink / raw)
  To: musl

game over. libsanitizer requires pthread_getattr_np() but this
function isn't implemented in musl.

http://cristi.indefero.net/p/uClibc-cristi/source/tree/nptl/libpthread/nptl/pthread_getattr_np.c

Daniel


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: musl and gcc-4.8 (sabotage)
  2013-03-28 23:58     ` Daniel Cegiełka
@ 2013-03-29  0:07       ` Rich Felker
  2013-03-29  9:42         ` Szabolcs Nagy
  2013-03-29  0:35       ` John Spencer
  1 sibling, 1 reply; 16+ messages in thread
From: Rich Felker @ 2013-03-29  0:07 UTC (permalink / raw)
  To: musl

On Fri, Mar 29, 2013 at 12:58:43AM +0100, Daniel Cegiełka wrote:
> game over. libsanitizer requires pthread_getattr_np() but this
> function isn't implemented in musl.

There's almost certainly a way to disable libsanitizer, no? It seems
like gcc folks keep inventing new low-quality alternatives to
valgrind...

Rich


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: musl and gcc-4.8 (sabotage)
  2013-03-28 23:58     ` Daniel Cegiełka
  2013-03-29  0:07       ` Rich Felker
@ 2013-03-29  0:35       ` John Spencer
  2013-03-29  1:39         ` Daniel Cegiełka
  1 sibling, 1 reply; 16+ messages in thread
From: John Spencer @ 2013-03-29  0:35 UTC (permalink / raw)
  To: musl

On 03/29/2013 12:58 AM, Daniel Cegiełka wrote:
> game over. libsanitizer requires pthread_getattr_np() but this
> function isn't implemented in musl.
>
>
blame the gcc developers for using non-portable code without offering a 
portable fallback.



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: musl and gcc-4.8 (sabotage)
  2013-03-29  0:35       ` John Spencer
@ 2013-03-29  1:39         ` Daniel Cegiełka
  2013-03-29  1:56           ` Rich Felker
  2013-03-29  2:10           ` John Spencer
  0 siblings, 2 replies; 16+ messages in thread
From: Daniel Cegiełka @ 2013-03-29  1:39 UTC (permalink / raw)
  To: musl

[-- Attachment #1: Type: text/plain, Size: 63 bytes --]

new patch. It's a bit ugly, but works :)

best regards,
Daniel

[-- Attachment #2: gcc-4.8-musl.diff --]
[-- Type: application/octet-stream, Size: 15475 bytes --]

diff -urN gcc-4.8-20130203.orig/gcc/config/linux.h gcc-4.8-20130203/gcc/config/linux.h
--- gcc-4.8-20130203.orig/gcc/config/linux.h	Sun Feb 10 21:27:40 2013
+++ gcc-4.8-20130203/gcc/config/linux.h	Sun Feb 10 21:45:07 2013
@@ -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)
+#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)
+#define OPTION_MUSL (linux_libc == LIBC_MUSL)
 #endif
 
 #define GNU_USER_TARGET_OS_CPP_BUILTINS()			\
@@ -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.  */
 
-#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,19 +86,23 @@
 #define BIONIC_DYNAMIC_LINKER32 "/system/bin/linker"
 #define BIONIC_DYNAMIC_LINKER64 "/system/bin/linker64"
 #define BIONIC_DYNAMIC_LINKERX32 "/system/bin/linkerx32"
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl.so.1"
+#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"
 
 #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)
 
 /* Determine whether the entire c99 runtime
    is present in the runtime library.  */
diff -r 193f80e01b02 -r 45cd88d4fb7b gcc/config/linux.opt
--- a/gcc/config/linux.opt      Wed Nov 21 21:17:38 2012 -0500
+++ b/gcc/config/linux.opt      Wed Nov 21 21:19:19 2012 -0500
@@ -30,3 +30,7 @@
 muclibc
 Target Report RejectNegative Var(linux_libc,LIBC_UCLIBC) Negative(mbionic)
 Use uClibc C library
+
+mmusl
+Target Report RejectNegative Var(linux_libc,LIBC_MUSL) Negative(mglibc)
+Use musl C library
diff -urN gcc-4.8-20130203.orig/gcc/ginclude/stddef.h gcc-4.8-20130203/gcc/ginclude/stddef.h
--- gcc-4.8-20130203.orig/gcc/ginclude/stddef.h	Sun Feb 10 22:04:42 2013
+++ gcc-4.8-20130203/gcc/ginclude/stddef.h	Sun Feb 10 22:10:59 2013
@@ -181,6 +181,7 @@
 #ifndef _GCC_SIZE_T
 #ifndef _SIZET_
 #ifndef __size_t
+#ifndef __DEFINED_size_t /* musl */
 #define __size_t__	/* BeOS */
 #define __SIZE_T__	/* Cray Unicos/Mk */
 #define _SIZE_T
@@ -197,6 +198,7 @@
 #define ___int_size_t_h
 #define _GCC_SIZE_T
 #define _SIZET_
+#define __DEFINED_size_t /* musl */
 #if (defined (__FreeBSD__) && (__FreeBSD__ >= 5)) \
   || defined(__FreeBSD_kernel__)
 /* __size_t is a typedef on FreeBSD 5, must not trash it. */
@@ -231,6 +233,7 @@
 #endif /* _SIZE_T */
 #endif /* __SIZE_T__ */
 #endif /* __size_t__ */
+#endif /* musl */
 #undef	__need_size_t
 #endif /* _STDDEF_H or __need_size_t.  */
 
diff -r 45cd88d4fb7b -r 0afd9d82498d libgomp/config/posix/time.c
--- a/libgomp/config/posix/time.c       Wed Nov 21 21:19:19 2012 -0500
+++ b/libgomp/config/posix/time.c       Wed Nov 21 21:20:22 2012 -0500
@@ -28,6 +28,8 @@
    The following implementation uses the most simple POSIX routines.
    If present, POSIX 4 clocks should be used instead.  */
 
+#define _POSIX_C_SOURCE 199309L /* for clocks */
+
 #include "libgomp.h"
 #include <unistd.h>
 #if TIME_WITH_SYS_TIME
diff -r 0afd9d82498d -r 53f3e21a7d14 gcc/config/i386/linux.h
--- a/gcc/config/i386/linux.h   Wed Nov 21 21:20:22 2012 -0500
+++ b/gcc/config/i386/linux.h   Wed Nov 21 21:21:21 2012 -0500
@@ -22,3 +22,4 @@
 
 #define GNU_USER_LINK_EMULATION "elf_i386"
 #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl.so.1"
diff -r 0afd9d82498d -r 53f3e21a7d14 gcc/config/i386/linux64.h
--- a/gcc/config/i386/linux64.h Wed Nov 21 21:20:22 2012 -0500
+++ b/gcc/config/i386/linux64.h Wed Nov 21 21:21:21 2012 -0500
@@ -31,3 +31,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 0afd9d82498d -r 53f3e21a7d14 libitm/config/linux/x86/tls.h
--- a/libitm/config/linux/x86/tls.h     Wed Nov 21 21:20:22 2012 -0500
+++ b/libitm/config/linux/x86/tls.h     Wed Nov 21 21:21:21 2012 -0500
@@ -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 @@
 
 } // namespace GTM
 #endif /* >= GLIBC 2.10 */
+#endif
 
 #endif // LIBITM_X86_TLS_H
diff -r 53f3e21a7d14 -r 0a4e297edad6 gcc/config/arm/linux-eabi.h
--- a/gcc/config/arm/linux-eabi.h       Wed Nov 21 21:21:21 2012 -0500
+++ b/gcc/config/arm/linux-eabi.h       Wed Nov 21 21:21:54 2012 -0500
@@ -64,6 +64,10 @@
 #undef  GLIBC_DYNAMIC_LINKER
 #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.3"
 
+/* 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
diff -r 53f3e21a7d14 -r 0a4e297edad6 libitm/config/arm/hwcap.cc
--- a/libitm/config/arm/hwcap.cc        Wed Nov 21 21:21:21 2012 -0500
+++ b/libitm/config/arm/hwcap.cc        Wed Nov 21 21:21:54 2012 -0500
@@ -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))
diff -r 0a4e297edad6 -r 78025c74c5c1 gcc/config/mips/linux.h
--- a/gcc/config/mips/linux.h   Wed Nov 21 21:21:54 2012 -0500
+++ b/gcc/config/mips/linux.h   Wed Nov 21 21:23:49 2012 -0500
@@ -19,3 +19,5 @@
 <http://www.gnu.org/licenses/>.  */
 
 #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-mips.so.1"
diff -urN gcc-4.8-20130203.orig/gcc/config.gcc gcc-4.8-20130203/gcc/config.gcc
--- gcc-4.8-20130203.orig/gcc/config.gcc	Sun Feb 10 20:59:36 2013
+++ gcc-4.8-20130203/gcc/config.gcc	Sun Feb 10 21:17:44 2013
@@ -546,7 +546,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
@@ -648,6 +648,9 @@
       ;;
     *-*-*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 -r 78025c74c5c1 gcc/config/rs6000/linux64.h
--- a/gcc/config/rs6000/linux64.h       Wed Nov 21 21:23:49 2012 -0500
+++ b/gcc/config/rs6000/linux64.h       Wed Nov 21 21:45:58 2012 -0500
@@ -362,17 +362,21 @@
 #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: \
diff -r 78025c74c5c1 gcc/config/rs6000/secureplt.h
--- a/gcc/config/rs6000/secureplt.h     Wed Nov 21 21:23:49 2012 -0500
+++ b/gcc/config/rs6000/secureplt.h     Wed Nov 21 21:45:58 2012 -0500
@@ -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 -urN gcc-4.8-20130203.orig/gcc/config/rs6000/sysv4.h gcc-4.8-20130203/gcc/config/rs6000/sysv4.h
--- gcc-4.8-20130203.orig/gcc/config/rs6000/sysv4.h	Mon Feb 11 07:48:22 2013
+++ gcc-4.8-20130203/gcc/config/rs6000/sysv4.h	Mon Feb 11 08:15:53 2013
@@ -551,6 +551,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 and set correct endian mode.  */
 #define	CC1_SPEC "%{G*} %(cc1_cpu) \
@@ -611,7 +614,8 @@
 %{mlittle: --oformat elf32-powerpcle } %{mlittle-endian: --oformat elf32-powerpcle } \
 %{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \
     %{mcall-i960-old: --oformat elf32-powerpcle} \
-  }}}}"
+  }}}} \
+%{!mbss-plt: %{!msecure-plt: %(link_secure_plt_default)}}"
 
 /* Any specific OS flags.  */
 #define LINK_OS_SPEC "\
@@ -789,15 +793,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} \
@@ -923,6 +930,7 @@
   { "cc1_endian_little",	CC1_ENDIAN_LITTLE_SPEC },		\
   { "cc1_endian_default",	CC1_ENDIAN_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 -urN gcc-4.8-20130203.orig/gcc/config.gcc gcc-4.8-20130203/gcc/config.gcc
--- gcc-4.8-20130203.orig/gcc/config.gcc	Mon Feb 11 07:48:22 2013
+++ gcc-4.8-20130203/gcc/config.gcc	Mon Feb 11 08:01:07 2013
@@ -2088,6 +2088,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 -urN gcc-4.8.0-RC-20130316.orig/libstdc++-v3/configure.host gcc-4.8.0-RC-20130316/libstdc++-v3/configure.host
--- gcc-4.8.0-RC-20130316.orig/libstdc++-v3/configure.host	Thu Mar 28 22:19:02 2013
+++ gcc-4.8.0-RC-20130316/libstdc++-v3/configure.host	Thu Mar 28 22:21:40 2013
@@ -264,13 +264,7 @@
     os_include_dir="os/bsd/freebsd"
     ;;
   gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
-    if [ "$uclibc" = "yes" ]; then
-      os_include_dir="os/uclibc"
-    elif [ "$bionic" = "yes" ]; then
-      os_include_dir="os/bionic"
-    else
-      os_include_dir="os/gnu-linux"
-    fi
+    os_include_dir="os/generic"
     ;;
   hpux*)
     os_include_dir="os/hpux"
diff -urN gcc-4.8.0-RC-20130316.orig/configure gcc-4.8.0-RC-20130316/configure
--- gcc-4.8.0-RC-20130316.orig/configure	Fri Mar 29 00:18:56 2013
+++ gcc-4.8.0-RC-20130316/configure	Fri Mar 29 00:20:04 2013
@@ -3197,23 +3197,7 @@
 fi
 
 # Disable libsanitizer on unsupported systems.
-if test -d ${srcdir}/libsanitizer; then
-    if test x$enable_libsanitizer = x; then
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsanitizer support" >&5
-$as_echo_n "checking for libsanitizer support... " >&6; }
-	if (srcdir=${srcdir}/libsanitizer; \
-		. ${srcdir}/configure.tgt; \
-		test -n "$UNSUPPORTED")
-	then
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-	    noconfigdirs="$noconfigdirs target-libsanitizer"
-	else
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	fi
-    fi
-fi
+noconfigdirs="$noconfigdirs target-libsanitizer"
 
 # Disable libquadmath for some systems.
 case "${target}" in

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: musl and gcc-4.8 (sabotage)
  2013-03-29  1:39         ` Daniel Cegiełka
@ 2013-03-29  1:56           ` Rich Felker
  2013-03-29 11:07             ` Daniel Cegiełka
  2013-03-29  2:10           ` John Spencer
  1 sibling, 1 reply; 16+ messages in thread
From: Rich Felker @ 2013-03-29  1:56 UTC (permalink / raw)
  To: musl

On Fri, Mar 29, 2013 at 02:39:03AM +0100, Daniel Cegiełka wrote:
> diff -urN gcc-4.8-20130203.orig/gcc/config/linux.h gcc-4.8-20130203/gcc/config/linux.h
> --- gcc-4.8-20130203.orig/gcc/config/linux.h	Sun Feb 10 21:27:40 2013
> +++ gcc-4.8-20130203/gcc/config/linux.h	Sun Feb 10 21:45:07 2013
> @@ -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)
> +#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)
> +#define OPTION_MUSL (linux_libc == LIBC_MUSL)
>  #endif
>  
>  #define GNU_USER_TARGET_OS_CPP_BUILTINS()			\
> @@ -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.  */
>  
> -#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,19 +86,23 @@
>  #define BIONIC_DYNAMIC_LINKER32 "/system/bin/linker"
>  #define BIONIC_DYNAMIC_LINKER64 "/system/bin/linker64"
>  #define BIONIC_DYNAMIC_LINKERX32 "/system/bin/linkerx32"
> +#define MUSL_DYNAMIC_LINKER "/lib/ld-musl.so.1"

This is almost certainly wrong.

> diff -r 45cd88d4fb7b -r 0afd9d82498d libgomp/config/posix/time.c
> --- a/libgomp/config/posix/time.c       Wed Nov 21 21:19:19 2012 -0500
> +++ b/libgomp/config/posix/time.c       Wed Nov 21 21:20:22 2012 -0500
> @@ -28,6 +28,8 @@
>     The following implementation uses the most simple POSIX routines.
>     If present, POSIX 4 clocks should be used instead.  */
>  
> +#define _POSIX_C_SOURCE 199309L /* for clocks */
> +
>  #include "libgomp.h"
>  #include <unistd.h>
>  #if TIME_WITH_SYS_TIME
> diff -r 0afd9d82498d -r 53f3e21a7d14 gcc/config/i386/linux.h
> --- a/gcc/config/i386/linux.h   Wed Nov 21 21:20:22 2012 -0500
> +++ b/gcc/config/i386/linux.h   Wed Nov 21 21:21:21 2012 -0500
> @@ -22,3 +22,4 @@
>  
>  #define GNU_USER_LINK_EMULATION "elf_i386"
>  #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
> +#define MUSL_DYNAMIC_LINKER "/lib/ld-musl.so.1"

This too.

> diff -r 53f3e21a7d14 -r 0a4e297edad6 libitm/config/arm/hwcap.cc
> --- a/libitm/config/arm/hwcap.cc        Wed Nov 21 21:21:21 2012 -0500
> +++ b/libitm/config/arm/hwcap.cc        Wed Nov 21 21:21:54 2012 -0500
> @@ -40,7 +40,11 @@
>  
>  #ifdef __linux__
>  #include <unistd.h>
> +#ifdef __GLIBC__
>  #include <sys/fcntl.h>
> +#else
> +#include <fcntl.h>
> +#endif
>  #include <elf.h>

This should just unconditionally be <fcntl.h>. <sys/fcntl.h> is wrong.

>  # Disable libsanitizer on unsupported systems.
> -if test -d ${srcdir}/libsanitizer; then
> -    if test x$enable_libsanitizer = x; then
> -	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsanitizer support" >&5
> -$as_echo_n "checking for libsanitizer support... " >&6; }
> -	if (srcdir=${srcdir}/libsanitizer; \
> -		. ${srcdir}/configure.tgt; \
> -		test -n "$UNSUPPORTED")
> -	then
> -	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
> -$as_echo "no" >&6; }
> -	    noconfigdirs="$noconfigdirs target-libsanitizer"
> -	else
> -	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
> -$as_echo "yes" >&6; }
> -	fi
> -    fi
> -fi
> +noconfigdirs="$noconfigdirs target-libsanitizer"

That works... :-)

Rich


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: musl and gcc-4.8 (sabotage)
  2013-03-29  1:39         ` Daniel Cegiełka
  2013-03-29  1:56           ` Rich Felker
@ 2013-03-29  2:10           ` John Spencer
  1 sibling, 0 replies; 16+ messages in thread
From: John Spencer @ 2013-03-29  2:10 UTC (permalink / raw)
  To: musl

On 03/29/2013 02:39 AM, Daniel Cegiełka wrote:
>   # Disable libsanitizer on unsupported systems.
> -if test -d ${srcdir}/libsanitizer; then
> -    if test x$enable_libsanitizer = x; then
> -	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsanitizer support">&5
> -$as_echo_n "checking for libsanitizer support... ">&6; }
> -	if (srcdir=${srcdir}/libsanitizer; \
> -		. ${srcdir}/configure.tgt; \
> -		test -n "$UNSUPPORTED")
> -	then
> -	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no">&5
> -$as_echo "no">&6; }
> -	    noconfigdirs="$noconfigdirs target-libsanitizer"
> -	else
> -	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes">&5
> -$as_echo "yes">&6; }
> -	fi
> -    fi
> -fi
> +noconfigdirs="$noconfigdirs target-libsanitizer"
this looks as if --disable-libsanitizer would have done the job as well.


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: musl and gcc-4.8 (sabotage)
  2013-03-29  0:07       ` Rich Felker
@ 2013-03-29  9:42         ` Szabolcs Nagy
  0 siblings, 0 replies; 16+ messages in thread
From: Szabolcs Nagy @ 2013-03-29  9:42 UTC (permalink / raw)
  To: musl

* Rich Felker <dalias@aerifal.cx> [2013-03-28 20:07:58 -0400]:
> On Fri, Mar 29, 2013 at 12:58:43AM +0100, Daniel Cegie??ka wrote:
> > game over. libsanitizer requires pthread_getattr_np() but this
> > function isn't implemented in musl.
> 
> There's almost certainly a way to disable libsanitizer, no? It seems
> like gcc folks keep inventing new low-quality alternatives to
> valgrind...

asan+tsan are useful tools, but now looking into the code
it has unreliable c++ code and invalid assumptions about
the c runtime internals

but i still think it may worth trying to port it to musl
maybe musl can provide some hooks for similar tools
(weak symbol callbacks at the right places)

asan hooks into thread creation, so they should be able
to get the bottom of the stack and they can assume a
guard page at the end which can be found by vmfill or
parsing /proc smaps which they already do

tsan tries to get the tls as well with
void *get_tls_static_info_ptr = dlsym(RTLD_NEXT, "_dl_get_tls_static_info");
and then copy this onto a function pointer with
__attribute__((regparm(3), stdcall)) on i386

the rest should be portable


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: musl and gcc-4.8 (sabotage)
  2013-03-29  1:56           ` Rich Felker
@ 2013-03-29 11:07             ` Daniel Cegiełka
  2013-03-29 11:25               ` Szabolcs Nagy
  0 siblings, 1 reply; 16+ messages in thread
From: Daniel Cegiełka @ 2013-03-29 11:07 UTC (permalink / raw)
  To: musl

2013/3/29 Rich Felker <dalias@aerifal.cx>:
> On Fri, Mar 29, 2013 at 02:39:03AM +0100, Daniel Cegiełka wrote:
>> diff -urN gcc-4.8-20130203.orig/gcc/config/linux.h gcc-4.8-20130203/gcc/config/linux.h
>> --- gcc-4.8-20130203.orig/gcc/config/linux.h  Sun Feb 10 21:27:40 2013
>> +++ gcc-4.8-20130203/gcc/config/linux.h       Sun Feb 10 21:45:07 2013
>> @@ -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)
>> +#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)
>> +#define OPTION_MUSL (linux_libc == LIBC_MUSL)
>>  #endif
>>
>>  #define GNU_USER_TARGET_OS_CPP_BUILTINS()                    \
>> @@ -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.  */
>>
>> -#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,19 +86,23 @@
>>  #define BIONIC_DYNAMIC_LINKER32 "/system/bin/linker"
>>  #define BIONIC_DYNAMIC_LINKER64 "/system/bin/linker64"
>>  #define BIONIC_DYNAMIC_LINKERX32 "/system/bin/linkerx32"
>> +#define MUSL_DYNAMIC_LINKER "/lib/ld-musl.so.1"
>
> This is almost certainly wrong.

What solution do you suggest? Below is the code, which was used for gcc-4.8:

https://bitbucket.org/GregorR/musl-cross/src/74d6e78976bda668af0046f4514cbce1f363c6cd/patches/gcc-4.7.2-musl.diff?at=default

Daniel


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: musl and gcc-4.8 (sabotage)
  2013-03-29 11:07             ` Daniel Cegiełka
@ 2013-03-29 11:25               ` Szabolcs Nagy
  2013-03-29 14:13                 ` Daniel Cegiełka
  0 siblings, 1 reply; 16+ messages in thread
From: Szabolcs Nagy @ 2013-03-29 11:25 UTC (permalink / raw)
  To: musl

* Daniel Cegie?ka <daniel.cegielka@gmail.com> [2013-03-29 12:07:33 +0100]:
> 2013/3/29 Rich Felker <dalias@aerifal.cx>:
> > On Fri, Mar 29, 2013 at 02:39:03AM +0100, Daniel Cegie??ka wrote:
> >> @@ -81,19 +86,23 @@
> >>  #define BIONIC_DYNAMIC_LINKER32 "/system/bin/linker"
> >>  #define BIONIC_DYNAMIC_LINKER64 "/system/bin/linker64"
> >>  #define BIONIC_DYNAMIC_LINKERX32 "/system/bin/linkerx32"
> >> +#define MUSL_DYNAMIC_LINKER "/lib/ld-musl.so.1"
> >
> > This is almost certainly wrong.
> 
> What solution do you suggest? Below is the code, which was used for gcc-4.8:

there is no ARCH, see the musl Makefile:

LDSO_PATHNAME = $(syslibdir)/ld-musl-$(ARCH).so.1

> https://bitbucket.org/GregorR/musl-cross/src/74d6e78976bda668af0046f4514cbce1f363c6cd/patches/gcc-4.7.2-musl.diff?at=default

here the ARCH is there


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: musl and gcc-4.8 (sabotage)
  2013-03-29 11:25               ` Szabolcs Nagy
@ 2013-03-29 14:13                 ` Daniel Cegiełka
  2013-03-29 15:19                   ` Szabolcs Nagy
  0 siblings, 1 reply; 16+ messages in thread
From: Daniel Cegiełka @ 2013-03-29 14:13 UTC (permalink / raw)
  To: musl

[-- Attachment #1: Type: text/plain, Size: 21 bytes --]

best regards,
Daniel

[-- Attachment #2: gcc-4.8-musl.diff --]
[-- Type: application/octet-stream, Size: 14506 bytes --]

diff -urN gcc-4.8-20130321.orig/gcc/config/arm/linux-eabi.h gcc-4.8-20130321/gcc/config/arm/linux-eabi.h
--- gcc-4.8-20130321.orig/gcc/config/arm/linux-eabi.h	Thu Jan 10 20:38:27 2013
+++ gcc-4.8-20130321/gcc/config/arm/linux-eabi.h	Fri Mar 29 11:47:34 2013
@@ -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
diff -urN gcc-4.8-20130321.orig/gcc/config/i386/linux.h gcc-4.8-20130321/gcc/config/i386/linux.h
--- gcc-4.8-20130321.orig/gcc/config/i386/linux.h	Thu Jan 10 20:38:27 2013
+++ gcc-4.8-20130321/gcc/config/i386/linux.h	Fri Mar 29 11:55:01 2013
@@ -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 -urN gcc-4.8-20130321.orig/gcc/config/i386/linux64.h gcc-4.8-20130321/gcc/config/i386/linux64.h
--- gcc-4.8-20130321.orig/gcc/config/i386/linux64.h	Fri Mar 29 11:45:28 2013
+++ gcc-4.8-20130321/gcc/config/i386/linux64.h	Fri Mar 29 11:47:35 2013
@@ -30,3 +30,7 @@
 #define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
 #define GLIBC_DYNAMIC_LINKER64 "/lib/ld-musl-x86_64.so.1"
 #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 -urN gcc-4.8-20130321.orig/gcc/config/linux.h gcc-4.8-20130321/gcc/config/linux.h
--- gcc-4.8-20130321.orig/gcc/config/linux.h	Thu Jan 10 20:38:27 2013
+++ gcc-4.8-20130321/gcc/config/linux.h	Fri Mar 29 11:54:13 2013
@@ -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)
+#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)
+#define OPTION_MUSL (linux_libc == LIBC_MUSL)
 #endif
 
 #define GNU_USER_TARGET_OS_CPP_BUILTINS()			\
@@ -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.  */
 
-#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 */
@@ -84,16 +89,16 @@
 
 #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)
 
 /* Determine whether the entire c99 runtime
    is present in the runtime library.  */
diff -urN gcc-4.8-20130321.orig/gcc/config/linux.opt gcc-4.8-20130321/gcc/config/linux.opt
--- gcc-4.8-20130321.orig/gcc/config/linux.opt	Thu Jan 10 20:38:27 2013
+++ gcc-4.8-20130321/gcc/config/linux.opt	Fri Mar 29 11:47:34 2013
@@ -30,3 +30,7 @@
 muclibc
 Target Report RejectNegative Var(linux_libc,LIBC_UCLIBC) Negative(mbionic)
 Use uClibc C library
+
+mmusl
+Target Report RejectNegative Var(linux_libc,LIBC_MUSL) Negative(mglibc)
+Use musl C library
diff -urN gcc-4.8-20130321.orig/gcc/config/mips/linux.h gcc-4.8-20130321/gcc/config/mips/linux.h
--- gcc-4.8-20130321.orig/gcc/config/mips/linux.h	Thu Jan 10 20:38:27 2013
+++ gcc-4.8-20130321/gcc/config/mips/linux.h	Fri Mar 29 11:47:34 2013
@@ -18,3 +18,5 @@
 <http://www.gnu.org/licenses/>.  */
 
 #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-mips.so.1"
diff -urN gcc-4.8-20130321.orig/gcc/config/rs6000/linux64.h gcc-4.8-20130321/gcc/config/rs6000/linux64.h
--- gcc-4.8-20130321.orig/gcc/config/rs6000/linux64.h	Thu Jan 10 20:38:27 2013
+++ gcc-4.8-20130321/gcc/config/rs6000/linux64.h	Fri Mar 29 11:47:34 2013
@@ -364,17 +364,21 @@
 #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: \
diff -urN gcc-4.8-20130321.orig/gcc/config/rs6000/secureplt.h gcc-4.8-20130321/gcc/config/rs6000/secureplt.h
--- gcc-4.8-20130321.orig/gcc/config/rs6000/secureplt.h	Thu Jan 10 20:38:27 2013
+++ gcc-4.8-20130321/gcc/config/rs6000/secureplt.h	Fri Mar 29 11:47:34 2013
@@ -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 -urN gcc-4.8-20130321.orig/gcc/config/rs6000/sysv4.h gcc-4.8-20130321/gcc/config/rs6000/sysv4.h
--- gcc-4.8-20130321.orig/gcc/config/rs6000/sysv4.h	Thu Jan 10 20:38:27 2013
+++ gcc-4.8-20130321/gcc/config/rs6000/sysv4.h	Fri Mar 29 11:47:34 2013
@@ -551,6 +551,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 and set correct endian mode.  */
 #define	CC1_SPEC "%{G*} %(cc1_cpu) \
@@ -611,7 +614,8 @@
 %{mlittle: --oformat elf32-powerpcle } %{mlittle-endian: --oformat elf32-powerpcle } \
 %{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \
     %{mcall-i960-old: --oformat elf32-powerpcle} \
-  }}}}"
+  }}}} \
+%{!mbss-plt: %{!msecure-plt: %(link_secure_plt_default)}}"
 
 /* Any specific OS flags.  */
 #define LINK_OS_SPEC "\
@@ -789,15 +793,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} \
@@ -923,6 +930,7 @@
   { "cc1_endian_little",	CC1_ENDIAN_LITTLE_SPEC },		\
   { "cc1_endian_default",	CC1_ENDIAN_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 -urN gcc-4.8-20130321.orig/gcc/config.gcc gcc-4.8-20130321/gcc/config.gcc
--- gcc-4.8-20130321.orig/gcc/config.gcc	Wed Mar 13 09:47:41 2013
+++ gcc-4.8-20130321/gcc/config.gcc	Fri Mar 29 11:47:34 2013
@@ -549,7 +549,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 @@
     *-*-*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"
       ;;
@@ -2108,6 +2111,10 @@
 		tm_file="${tm_file} rs6000/linuxspe.h rs6000/e500.h" ;;
 	    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}"
diff -urN gcc-4.8-20130321.orig/gcc/ginclude/stddef.h gcc-4.8-20130321/gcc/ginclude/stddef.h
--- gcc-4.8-20130321.orig/gcc/ginclude/stddef.h	Thu Jan 10 20:38:27 2013
+++ gcc-4.8-20130321/gcc/ginclude/stddef.h	Fri Mar 29 11:47:34 2013
@@ -181,6 +181,7 @@
 #ifndef _GCC_SIZE_T
 #ifndef _SIZET_
 #ifndef __size_t
+#ifndef __DEFINED_size_t /* musl */
 #define __size_t__	/* BeOS */
 #define __SIZE_T__	/* Cray Unicos/Mk */
 #define _SIZE_T
@@ -197,6 +198,7 @@
 #define ___int_size_t_h
 #define _GCC_SIZE_T
 #define _SIZET_
+#define __DEFINED_size_t /* musl */
 #if (defined (__FreeBSD__) && (__FreeBSD__ >= 5)) \
   || defined(__FreeBSD_kernel__)
 /* __size_t is a typedef on FreeBSD 5, must not trash it. */
@@ -231,6 +233,7 @@
 #endif /* _SIZE_T */
 #endif /* __SIZE_T__ */
 #endif /* __size_t__ */
+#endif /* musl */
 #undef	__need_size_t
 #endif /* _STDDEF_H or __need_size_t.  */
 
diff -urN gcc-4.8-20130321.orig/libgomp/config/posix/time.c gcc-4.8-20130321/libgomp/config/posix/time.c
--- gcc-4.8-20130321.orig/libgomp/config/posix/time.c	Mon Jan 14 18:18:49 2013
+++ gcc-4.8-20130321/libgomp/config/posix/time.c	Fri Mar 29 11:47:34 2013
@@ -28,6 +28,8 @@
    The following implementation uses the most simple POSIX routines.
    If present, POSIX 4 clocks should be used instead.  */
 
+#define _POSIX_C_SOURCE 199309L /* for clocks */
+
 #include "libgomp.h"
 #include <unistd.h>
 #if TIME_WITH_SYS_TIME
diff -urN gcc-4.8-20130321.orig/libitm/config/arm/hwcap.cc gcc-4.8-20130321/libitm/config/arm/hwcap.cc
--- gcc-4.8-20130321.orig/libitm/config/arm/hwcap.cc	Sun Feb  3 17:46:11 2013
+++ gcc-4.8-20130321/libitm/config/arm/hwcap.cc	Fri Mar 29 11:56:22 2013
@@ -40,7 +40,7 @@
 
 #ifdef __linux__
 #include <unistd.h>
-#include <sys/fcntl.h>
+#include <fcntl.h>
 #include <elf.h>
 
 static void __attribute__((constructor))
diff -urN gcc-4.8-20130321.orig/libitm/config/linux/x86/tls.h gcc-4.8-20130321/libitm/config/linux/x86/tls.h
--- gcc-4.8-20130321.orig/libitm/config/linux/x86/tls.h	Sun Feb  3 17:46:11 2013
+++ gcc-4.8-20130321/libitm/config/linux/x86/tls.h	Fri Mar 29 11:47:34 2013
@@ -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 @@
 
 } // namespace GTM
 #endif /* >= GLIBC 2.10 */
+#endif
 
 #endif // LIBITM_X86_TLS_H
diff -urN gcc-4.8-20130321.orig/libstdc++-v3/configure.host gcc-4.8-20130321/libstdc++-v3/configure.host
--- gcc-4.8-20130321.orig/libstdc++-v3/configure.host	Mon Oct 15 21:12:23 2012
+++ gcc-4.8-20130321/libstdc++-v3/configure.host	Fri Mar 29 11:47:34 2013
@@ -264,13 +264,7 @@
     os_include_dir="os/bsd/freebsd"
     ;;
   gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
-    if [ "$uclibc" = "yes" ]; then
-      os_include_dir="os/uclibc"
-    elif [ "$bionic" = "yes" ]; then
-      os_include_dir="os/bionic"
-    else
-      os_include_dir="os/gnu-linux"
-    fi
+    os_include_dir="os/generic"
     ;;
   hpux*)
     os_include_dir="os/hpux"

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: musl and gcc-4.8 (sabotage)
  2013-03-29 14:13                 ` Daniel Cegiełka
@ 2013-03-29 15:19                   ` Szabolcs Nagy
  2013-03-29 15:38                     ` Daniel Cegiełka
  2013-03-30  9:51                     ` Daniel Cegiełka
  0 siblings, 2 replies; 16+ messages in thread
From: Szabolcs Nagy @ 2013-03-29 15:19 UTC (permalink / raw)
  To: musl

for some reason the diff got attached as octet stream

i'd cc gregor since it was his work originally and he
is not subscribed to the ml

this part seems to change the behaviour for other
libcs, is that necessary?

diff -urN gcc-4.8-20130321.orig/libstdc++-v3/configure.host gcc-4.8-20130321/libstdc++-v3/configure.host
--- gcc-4.8-20130321.orig/libstdc++-v3/configure.host	Mon Oct 15 21:12:23 2012
+++ gcc-4.8-20130321/libstdc++-v3/configure.host	Fri Mar 29 11:47:34 2013
@@ -264,13 +264,7 @@
     os_include_dir="os/bsd/freebsd"
     ;;
   gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
-    if [ "$uclibc" = "yes" ]; then
-      os_include_dir="os/uclibc"
-    elif [ "$bionic" = "yes" ]; then
-      os_include_dir="os/bionic"
-    else
-      os_include_dir="os/gnu-linux"
-    fi
+    os_include_dir="os/generic"
     ;;
   hpux*)
     os_include_dir="os/hpux"





^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: musl and gcc-4.8 (sabotage)
  2013-03-29 15:19                   ` Szabolcs Nagy
@ 2013-03-29 15:38                     ` Daniel Cegiełka
  2013-03-30  9:51                     ` Daniel Cegiełka
  1 sibling, 0 replies; 16+ messages in thread
From: Daniel Cegiełka @ 2013-03-29 15:38 UTC (permalink / raw)
  To: musl

2013/3/29 Szabolcs Nagy <nsz@port70.net>:
> for some reason the diff got attached as octet stream
>
> i'd cc gregor since it was his work originally and he
> is not subscribed to the ml
>
> this part seems to change the behaviour for other
> libcs, is that necessary?

No, it's not necessary. See link:

http://openwall.com/lists/musl/2013/03/28/5

It can be quickly corrected.

Daniel


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: musl and gcc-4.8 (sabotage)
  2013-03-29 15:19                   ` Szabolcs Nagy
  2013-03-29 15:38                     ` Daniel Cegiełka
@ 2013-03-30  9:51                     ` Daniel Cegiełka
  1 sibling, 0 replies; 16+ messages in thread
From: Daniel Cegiełka @ 2013-03-30  9:51 UTC (permalink / raw)
  To: musl


[-- Attachment #1.1: Type: text/plain, Size: 3118 bytes --]

2013/3/29 Szabolcs Nagy <nsz@port70.net>

> for some reason the diff got attached as octet stream
>
> i'd cc gregor since it was his work originally and he
> is not subscribed to the ml
>
> this part seems to change the behaviour for other
> libcs, is that necessary?
>
>

glibc, bionic and uclib have special definitions to be able to detect which
libc is used (__GLIBC__, __UCLIBC__). musl doesn't support such solutions,
so we can use host_os (gcc-4.8-musl.diff):

diff -urN gcc-4.8-20130321.orig/libstdc++-v3/configure.host
gcc-4.8-20130321/libstdc++-v3/configure.host
--- gcc-4.8-20130321.orig/libstdc++-v3/configure.host    Sat Mar 30
00:29:39 2013
+++ gcc-4.8-20130321/libstdc++-v3/configure.host    Sat Mar 30 00:31:28 2013
@@ -268,6 +268,8 @@
       os_include_dir="os/uclibc"
     elif [ "$bionic" = "yes" ]; then
       os_include_dir="os/bionic"
+    elif [ "$host_os" = "linux-musl" ]; then
+      os_include_dir="os/generic"
     else
       os_include_dir="os/gnu-linux"
     fi


or detect glibc in gcc way (gcc-4.8-musl2.diff):


diff -urN gcc-4.8-20130321.orig/libstdc++-v3/acinclude.m4
gcc-4.8-20130321/libstdc++-v3/acinclude.m4
--- gcc-4.8-20130321.orig/libstdc++-v3/acinclude.m4    Fri Mar 29 22:23:14
2013
+++ gcc-4.8-20130321/libstdc++-v3/acinclude.m4    Fri Mar 29 22:30:53 2013
@@ -99,6 +99,13 @@

   # Check for C library flavor since GNU/Linux platforms use different
   # configuration directories depending on the C library in use.
+  AC_EGREP_CPP([_using_glibc], [
+  #include <features.h>
+  #if __GLIBC__
+    _using_glibc
+  #endif
+  ], glibc=yes, glibc=no)
+
   AC_EGREP_CPP([_using_uclibc], [
   #include <stdio.h>
   #if __UCLIBC__
diff -urN gcc-4.8-20130321.orig/libstdc++-v3/configure
gcc-4.8-20130321/libstdc++-v3/configure
--- gcc-4.8-20130321.orig/libstdc++-v3/configure    Fri Mar 29 22:23:14 2013
+++ gcc-4.8-20130321/libstdc++-v3/configure    Fri Mar 29 22:29:23 2013
@@ -5243,6 +5243,24 @@
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */

+  #include <features.h>
+  #if __GLIBC__
+    _using_glibc
+  #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "_using_glibc" >/dev/null 2>&1; then :
+  glibc=yes
+else
+  glibc=no
+fi
+rm -f conftest*
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
   #include <stdio.h>
   #if __UCLIBC__
     _using_uclibc
diff -urN gcc-4.8-20130321.orig/libstdc++-v3/configure.host
gcc-4.8-20130321/libstdc++-v3/configure.host
--- gcc-4.8-20130321.orig/libstdc++-v3/configure.host    Fri Mar 29
22:23:14 2013
+++ gcc-4.8-20130321/libstdc++-v3/configure.host    Fri Mar 29 22:36:15 2013
@@ -264,12 +264,14 @@
     os_include_dir="os/bsd/freebsd"
     ;;
   gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
-    if [ "$uclibc" = "yes" ]; then
+    if [ "$glibc" = "yes" ]; then
+      os_include_dir="os/gnu-linux"
+    elif [ "$uclibc" = "yes" ]; then
       os_include_dir="os/uclibc"
     elif [ "$bionic" = "yes" ]; then
       os_include_dir="os/bionic"
     else
-      os_include_dir="os/gnu-linux"
+      os_include_dir="os/generic"
     fi
     ;;
   hpux*)

Daniel

[-- Attachment #1.2: Type: text/html, Size: 4151 bytes --]

[-- Attachment #2: gcc-4.8-musl.diff --]
[-- Type: application/octet-stream, Size: 14375 bytes --]

[-- Attachment #3: gcc-4.8-musl2.diff --]
[-- Type: application/octet-stream, Size: 15902 bytes --]

diff -urN gcc-4.8-20130321.orig/gcc/config/arm/linux-eabi.h gcc-4.8-20130321/gcc/config/arm/linux-eabi.h
--- gcc-4.8-20130321.orig/gcc/config/arm/linux-eabi.h	Thu Jan 10 20:38:27 2013
+++ gcc-4.8-20130321/gcc/config/arm/linux-eabi.h	Fri Mar 29 11:47:34 2013
@@ -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
diff -urN gcc-4.8-20130321.orig/gcc/config/i386/linux.h gcc-4.8-20130321/gcc/config/i386/linux.h
--- gcc-4.8-20130321.orig/gcc/config/i386/linux.h	Thu Jan 10 20:38:27 2013
+++ gcc-4.8-20130321/gcc/config/i386/linux.h	Fri Mar 29 11:55:01 2013
@@ -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 -urN gcc-4.8-20130321.orig/gcc/config/i386/linux64.h gcc-4.8-20130321/gcc/config/i386/linux64.h
--- gcc-4.8-20130321.orig/gcc/config/i386/linux64.h	Fri Mar 29 11:45:28 2013
+++ gcc-4.8-20130321/gcc/config/i386/linux64.h	Fri Mar 29 11:47:35 2013
@@ -30,3 +30,7 @@
 #define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
 #define GLIBC_DYNAMIC_LINKER64 "/lib/ld-musl-x86_64.so.1"
 #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 -urN gcc-4.8-20130321.orig/gcc/config/linux.h gcc-4.8-20130321/gcc/config/linux.h
--- gcc-4.8-20130321.orig/gcc/config/linux.h	Thu Jan 10 20:38:27 2013
+++ gcc-4.8-20130321/gcc/config/linux.h	Fri Mar 29 11:54:13 2013
@@ -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)
+#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)
+#define OPTION_MUSL (linux_libc == LIBC_MUSL)
 #endif
 
 #define GNU_USER_TARGET_OS_CPP_BUILTINS()			\
@@ -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.  */
 
-#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 */
@@ -84,16 +89,16 @@
 
 #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)
 
 /* Determine whether the entire c99 runtime
    is present in the runtime library.  */
diff -urN gcc-4.8-20130321.orig/gcc/config/linux.opt gcc-4.8-20130321/gcc/config/linux.opt
--- gcc-4.8-20130321.orig/gcc/config/linux.opt	Thu Jan 10 20:38:27 2013
+++ gcc-4.8-20130321/gcc/config/linux.opt	Fri Mar 29 11:47:34 2013
@@ -30,3 +30,7 @@
 muclibc
 Target Report RejectNegative Var(linux_libc,LIBC_UCLIBC) Negative(mbionic)
 Use uClibc C library
+
+mmusl
+Target Report RejectNegative Var(linux_libc,LIBC_MUSL) Negative(mglibc)
+Use musl C library
diff -urN gcc-4.8-20130321.orig/gcc/config/mips/linux.h gcc-4.8-20130321/gcc/config/mips/linux.h
--- gcc-4.8-20130321.orig/gcc/config/mips/linux.h	Thu Jan 10 20:38:27 2013
+++ gcc-4.8-20130321/gcc/config/mips/linux.h	Fri Mar 29 11:47:34 2013
@@ -18,3 +18,5 @@
 <http://www.gnu.org/licenses/>.  */
 
 #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-mips.so.1"
diff -urN gcc-4.8-20130321.orig/gcc/config/rs6000/linux64.h gcc-4.8-20130321/gcc/config/rs6000/linux64.h
--- gcc-4.8-20130321.orig/gcc/config/rs6000/linux64.h	Thu Jan 10 20:38:27 2013
+++ gcc-4.8-20130321/gcc/config/rs6000/linux64.h	Fri Mar 29 11:47:34 2013
@@ -364,17 +364,21 @@
 #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: \
diff -urN gcc-4.8-20130321.orig/gcc/config/rs6000/secureplt.h gcc-4.8-20130321/gcc/config/rs6000/secureplt.h
--- gcc-4.8-20130321.orig/gcc/config/rs6000/secureplt.h	Thu Jan 10 20:38:27 2013
+++ gcc-4.8-20130321/gcc/config/rs6000/secureplt.h	Fri Mar 29 11:47:34 2013
@@ -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 -urN gcc-4.8-20130321.orig/gcc/config/rs6000/sysv4.h gcc-4.8-20130321/gcc/config/rs6000/sysv4.h
--- gcc-4.8-20130321.orig/gcc/config/rs6000/sysv4.h	Thu Jan 10 20:38:27 2013
+++ gcc-4.8-20130321/gcc/config/rs6000/sysv4.h	Fri Mar 29 11:47:34 2013
@@ -551,6 +551,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 and set correct endian mode.  */
 #define	CC1_SPEC "%{G*} %(cc1_cpu) \
@@ -611,7 +614,8 @@
 %{mlittle: --oformat elf32-powerpcle } %{mlittle-endian: --oformat elf32-powerpcle } \
 %{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \
     %{mcall-i960-old: --oformat elf32-powerpcle} \
-  }}}}"
+  }}}} \
+%{!mbss-plt: %{!msecure-plt: %(link_secure_plt_default)}}"
 
 /* Any specific OS flags.  */
 #define LINK_OS_SPEC "\
@@ -789,15 +793,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} \
@@ -923,6 +930,7 @@
   { "cc1_endian_little",	CC1_ENDIAN_LITTLE_SPEC },		\
   { "cc1_endian_default",	CC1_ENDIAN_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 -urN gcc-4.8-20130321.orig/gcc/config.gcc gcc-4.8-20130321/gcc/config.gcc
--- gcc-4.8-20130321.orig/gcc/config.gcc	Wed Mar 13 09:47:41 2013
+++ gcc-4.8-20130321/gcc/config.gcc	Fri Mar 29 11:47:34 2013
@@ -549,7 +549,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 @@
     *-*-*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"
       ;;
@@ -2108,6 +2111,10 @@
 		tm_file="${tm_file} rs6000/linuxspe.h rs6000/e500.h" ;;
 	    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}"
diff -urN gcc-4.8-20130321.orig/gcc/ginclude/stddef.h gcc-4.8-20130321/gcc/ginclude/stddef.h
--- gcc-4.8-20130321.orig/gcc/ginclude/stddef.h	Thu Jan 10 20:38:27 2013
+++ gcc-4.8-20130321/gcc/ginclude/stddef.h	Fri Mar 29 11:47:34 2013
@@ -181,6 +181,7 @@
 #ifndef _GCC_SIZE_T
 #ifndef _SIZET_
 #ifndef __size_t
+#ifndef __DEFINED_size_t /* musl */
 #define __size_t__	/* BeOS */
 #define __SIZE_T__	/* Cray Unicos/Mk */
 #define _SIZE_T
@@ -197,6 +198,7 @@
 #define ___int_size_t_h
 #define _GCC_SIZE_T
 #define _SIZET_
+#define __DEFINED_size_t /* musl */
 #if (defined (__FreeBSD__) && (__FreeBSD__ >= 5)) \
   || defined(__FreeBSD_kernel__)
 /* __size_t is a typedef on FreeBSD 5, must not trash it. */
@@ -231,6 +233,7 @@
 #endif /* _SIZE_T */
 #endif /* __SIZE_T__ */
 #endif /* __size_t__ */
+#endif /* musl */
 #undef	__need_size_t
 #endif /* _STDDEF_H or __need_size_t.  */
 
diff -urN gcc-4.8-20130321.orig/libgomp/config/posix/time.c gcc-4.8-20130321/libgomp/config/posix/time.c
--- gcc-4.8-20130321.orig/libgomp/config/posix/time.c	Mon Jan 14 18:18:49 2013
+++ gcc-4.8-20130321/libgomp/config/posix/time.c	Fri Mar 29 11:47:34 2013
@@ -28,6 +28,8 @@
    The following implementation uses the most simple POSIX routines.
    If present, POSIX 4 clocks should be used instead.  */
 
+#define _POSIX_C_SOURCE 199309L /* for clocks */
+
 #include "libgomp.h"
 #include <unistd.h>
 #if TIME_WITH_SYS_TIME
diff -urN gcc-4.8-20130321.orig/libitm/config/arm/hwcap.cc gcc-4.8-20130321/libitm/config/arm/hwcap.cc
--- gcc-4.8-20130321.orig/libitm/config/arm/hwcap.cc	Sun Feb  3 17:46:11 2013
+++ gcc-4.8-20130321/libitm/config/arm/hwcap.cc	Fri Mar 29 11:56:22 2013
@@ -40,7 +40,7 @@
 
 #ifdef __linux__
 #include <unistd.h>
-#include <sys/fcntl.h>
+#include <fcntl.h>
 #include <elf.h>
 
 static void __attribute__((constructor))
diff -urN gcc-4.8-20130321.orig/libitm/config/linux/x86/tls.h gcc-4.8-20130321/libitm/config/linux/x86/tls.h
--- gcc-4.8-20130321.orig/libitm/config/linux/x86/tls.h	Sun Feb  3 17:46:11 2013
+++ gcc-4.8-20130321/libitm/config/linux/x86/tls.h	Fri Mar 29 11:47:34 2013
@@ -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 @@
 
 } // namespace GTM
 #endif /* >= GLIBC 2.10 */
+#endif
 
 #endif // LIBITM_X86_TLS_H
diff -urN gcc-4.8-20130321.orig/libstdc++-v3/acinclude.m4 gcc-4.8-20130321/libstdc++-v3/acinclude.m4
--- gcc-4.8-20130321.orig/libstdc++-v3/acinclude.m4	Fri Mar 29 22:23:14 2013
+++ gcc-4.8-20130321/libstdc++-v3/acinclude.m4	Fri Mar 29 22:30:53 2013
@@ -99,6 +99,13 @@
 
   # Check for C library flavor since GNU/Linux platforms use different
   # configuration directories depending on the C library in use.
+  AC_EGREP_CPP([_using_glibc], [
+  #include <features.h>
+  #if __GLIBC__
+    _using_glibc
+  #endif
+  ], glibc=yes, glibc=no)
+
   AC_EGREP_CPP([_using_uclibc], [
   #include <stdio.h>
   #if __UCLIBC__
diff -urN gcc-4.8-20130321.orig/libstdc++-v3/configure gcc-4.8-20130321/libstdc++-v3/configure
--- gcc-4.8-20130321.orig/libstdc++-v3/configure	Fri Mar 29 22:23:14 2013
+++ gcc-4.8-20130321/libstdc++-v3/configure	Fri Mar 29 22:29:23 2013
@@ -5243,6 +5243,24 @@
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
+  #include <features.h>
+  #if __GLIBC__
+    _using_glibc
+  #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "_using_glibc" >/dev/null 2>&1; then :
+  glibc=yes
+else
+  glibc=no
+fi
+rm -f conftest*
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
   #include <stdio.h>
   #if __UCLIBC__
     _using_uclibc
diff -urN gcc-4.8-20130321.orig/libstdc++-v3/configure.host gcc-4.8-20130321/libstdc++-v3/configure.host
--- gcc-4.8-20130321.orig/libstdc++-v3/configure.host	Fri Mar 29 22:23:14 2013
+++ gcc-4.8-20130321/libstdc++-v3/configure.host	Fri Mar 29 22:36:15 2013
@@ -264,12 +264,14 @@
     os_include_dir="os/bsd/freebsd"
     ;;
   gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
-    if [ "$uclibc" = "yes" ]; then
+    if [ "$glibc" = "yes" ]; then
+      os_include_dir="os/gnu-linux"
+    elif [ "$uclibc" = "yes" ]; then
       os_include_dir="os/uclibc"
     elif [ "$bionic" = "yes" ]; then
       os_include_dir="os/bionic"
     else
-      os_include_dir="os/gnu-linux"
+      os_include_dir="os/generic"
     fi
     ;;
   hpux*)

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2013-03-30  9:51 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-28 20:38 musl and gcc-4.8 (sabotage) Daniel Cegiełka
2013-03-28 23:32 ` John Spencer
2013-03-28 23:46   ` Daniel Cegiełka
2013-03-28 23:58     ` Daniel Cegiełka
2013-03-29  0:07       ` Rich Felker
2013-03-29  9:42         ` Szabolcs Nagy
2013-03-29  0:35       ` John Spencer
2013-03-29  1:39         ` Daniel Cegiełka
2013-03-29  1:56           ` Rich Felker
2013-03-29 11:07             ` Daniel Cegiełka
2013-03-29 11:25               ` Szabolcs Nagy
2013-03-29 14:13                 ` Daniel Cegiełka
2013-03-29 15:19                   ` Szabolcs Nagy
2013-03-29 15:38                     ` Daniel Cegiełka
2013-03-30  9:51                     ` Daniel Cegiełka
2013-03-29  2:10           ` John Spencer

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).