mirror of https://github.com/hak5/openwrt-owl.git
add preliminary support for musl
Musl is an alternative C-library, see http://www.musl-libc.org for more infos. Signed-off-by: Florian Fainelli <florian@openwrt.org> SVN-Revision: 34314owl
parent
14ed3f0f22
commit
6b63716262
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. $TOPDIR/include/site/arm-linux
|
||||||
|
. $TOPDIR/include/site/linux-uclibc
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. $TOPDIR/include/site/arm-linux
|
||||||
|
. $TOPDIR/include/site/linux-uclibc
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. $TOPDIR/include/site/armeb-linux
|
||||||
|
. $TOPDIR/include/site/linux-uclibc
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. $TOPDIR/include/site/armeb-linux
|
||||||
|
. $TOPDIR/include/site/linux-uclibc
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. $TOPDIR/include/site/i486-linux
|
||||||
|
. $TOPDIR/include/site/linux-uclibc
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. $TOPDIR/include/site/i686-linux
|
||||||
|
. $TOPDIR/include/site/linux-uclibc
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. $TOPDIR/include/site/mips-linux
|
||||||
|
. $TOPDIR/include/site/linux-uclibc
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. $TOPDIR/include/site/mipsel-linux
|
||||||
|
. $TOPDIR/include/site/linux-uclibc
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. $TOPDIR/include/site/powerpc-linux
|
||||||
|
. $TOPDIR/include/site/linux-uclibc
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. $TOPDIR/include/site/x86_64-linux
|
||||||
|
. $TOPDIR/include/site/linux-uclibc
|
||||||
|
|
|
@ -29,7 +29,7 @@ define Package/hotplug2
|
||||||
VERSION:=1.0-beta-$(PKG_RELEASE)
|
VERSION:=1.0-beta-$(PKG_RELEASE)
|
||||||
TITLE:=Version 1.0 Dynamic device management subsystem for embedded systems
|
TITLE:=Version 1.0 Dynamic device management subsystem for embedded systems
|
||||||
URL:=http://isteve.bofh.cz/~isteve/hotplug2/
|
URL:=http://isteve.bofh.cz/~isteve/hotplug2/
|
||||||
DEPENDS:=+!USE_UCLIBC:libbsd
|
DEPENDS:=+!(USE_UCLIBC||USE_MUSL):libbsd
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/hotplug2/description
|
define Package/hotplug2/description
|
||||||
|
|
|
@ -18,7 +18,7 @@ PKG_INSTALL:=1
|
||||||
define Package/libbsd
|
define Package/libbsd
|
||||||
SECTION:=libs
|
SECTION:=libs
|
||||||
CATEGORY:=Libraries
|
CATEGORY:=Libraries
|
||||||
DEPENDS:=@!USE_UCLIBC
|
DEPENDS:=@!(USE_UCLIBC||USE_MUSL)
|
||||||
TITLE:=common BSD library
|
TITLE:=common BSD library
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|
|
@ -426,6 +426,16 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
|
||||||
$(1)/lib/
|
$(1)/lib/
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define Package/musl/install
|
||||||
|
$(INSTALL_DIR) $(1)/lib
|
||||||
|
$(CP) \
|
||||||
|
$(TOOLCHAIN_DIR)/lib/ld-musl-*.so* \
|
||||||
|
$(1)/lib/
|
||||||
|
$(CP) \
|
||||||
|
$(TOOLCHAIN_DIR)/lib/libc.so* \
|
||||||
|
$(1)/lib/
|
||||||
|
endef
|
||||||
|
|
||||||
define Package/libc/install
|
define Package/libc/install
|
||||||
$(call Package/$(LIBC)/install,$1)
|
$(call Package/$(LIBC)/install,$1)
|
||||||
endef
|
endef
|
||||||
|
|
|
@ -128,7 +128,8 @@ case $maybe_os in
|
||||||
linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
|
linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
|
||||||
knetbsd*-gnu* | netbsd*-gnu* | \
|
knetbsd*-gnu* | netbsd*-gnu* | \
|
||||||
kopensolaris*-gnu* | \
|
kopensolaris*-gnu* | \
|
||||||
storm-chaos* | os2-emx* | rtmk-nova*)
|
storm-chaos* | os2-emx* | rtmk-nova* | \
|
||||||
|
linux-musl*)
|
||||||
os=-$maybe_os
|
os=-$maybe_os
|
||||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||||
;;
|
;;
|
||||||
|
@ -1309,7 +1310,7 @@ case $os in
|
||||||
| -chorusos* | -chorusrdb* | -cegcc* \
|
| -chorusos* | -chorusrdb* | -cegcc* \
|
||||||
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||||
| -mingw32* | -linux-gnu* | -linux-android* \
|
| -mingw32* | -linux-gnu* | -linux-android* \
|
||||||
| -linux-newlib* | -linux-uclibc* \
|
| -linux-newlib* | -linux-uclibc* | -linux-musl* \
|
||||||
| -uxpv* | -beos* | -mpeix* | -udk* \
|
| -uxpv* | -beos* | -mpeix* | -udk* \
|
||||||
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
||||||
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
||||||
|
|
|
@ -64,6 +64,10 @@ case $TOOLCHAIN_PLATFORM in
|
||||||
GCC_SYSROOT_FLAGS="--sysroot=$TOOLCHAIN_SYSROOT -Wl,-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib"
|
GCC_SYSROOT_FLAGS="--sysroot=$TOOLCHAIN_SYSROOT -Wl,-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib"
|
||||||
LD_SYSROOT_FLAGS="-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib"
|
LD_SYSROOT_FLAGS="-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib"
|
||||||
;;
|
;;
|
||||||
|
musl)
|
||||||
|
GCC_SYSROOT_FLAGS="--sysroot=$TOOLCHAIN_SYSROOT -Wl,-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib"
|
||||||
|
LD_SYSROOT_FLAGS="-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib"
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
GCC_SYSROOT_FLAGS=""
|
GCC_SYSROOT_FLAGS=""
|
||||||
LD_SYSROOT_FLAGS=""
|
LD_SYSROOT_FLAGS=""
|
||||||
|
|
|
@ -145,10 +145,14 @@ choice
|
||||||
config USE_UCLIBC
|
config USE_UCLIBC
|
||||||
bool "Use uClibc"
|
bool "Use uClibc"
|
||||||
|
|
||||||
|
config USE_MUSL
|
||||||
|
bool "Use musl"
|
||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
source "toolchain/eglibc/Config.in"
|
source "toolchain/eglibc/Config.in"
|
||||||
source "toolchain/uClibc/Config.in"
|
source "toolchain/uClibc/Config.in"
|
||||||
|
source "toolchain/musl/Config.in"
|
||||||
|
|
||||||
comment "Debuggers"
|
comment "Debuggers"
|
||||||
depends TOOLCHAINOPTS
|
depends TOOLCHAINOPTS
|
||||||
|
@ -181,20 +185,25 @@ source "toolchain/gcc/Config.version"
|
||||||
|
|
||||||
source "toolchain/eglibc/Config.version"
|
source "toolchain/eglibc/Config.version"
|
||||||
source "toolchain/uClibc/Config.version"
|
source "toolchain/uClibc/Config.version"
|
||||||
|
source "toolchain/musl/Config.version"
|
||||||
|
|
||||||
config LIBC
|
config LIBC
|
||||||
string
|
string
|
||||||
default "eglibc" if USE_EGLIBC
|
default "eglibc" if USE_EGLIBC
|
||||||
default "uClibc" if USE_UCLIBC
|
default "uClibc" if USE_UCLIBC
|
||||||
|
default "musl" if USE_MUSL
|
||||||
|
|
||||||
config LIBC_VERSION
|
config LIBC_VERSION
|
||||||
string
|
string
|
||||||
default EGLIBC_VERSION if USE_EGLIBC
|
default EGLIBC_VERSION if USE_EGLIBC
|
||||||
default UCLIBC_VERSION if USE_UCLIBC
|
default UCLIBC_VERSION if USE_UCLIBC
|
||||||
|
default MUSL_VERSION if USE_MUSL
|
||||||
|
|
||||||
config TARGET_SUFFIX
|
config TARGET_SUFFIX
|
||||||
string
|
string
|
||||||
default "gnueabi" if (USE_EGLIBC) && (arm || armeb)
|
default "gnueabi" if USE_EGLIBC && (arm || armeb)
|
||||||
default "gnu" if (USE_EGLIBC) && !(arm || armeb)
|
default "gnu" if USE_EGLIBC && !(arm || armeb)
|
||||||
default "uclibcgnueabi" if USE_UCLIBC && (arm || armeb)
|
default "uclibcgnueabi" if USE_UCLIBC && (arm || armeb)
|
||||||
default "uclibc" if USE_UCLIBC && !(arm || armeb)
|
default "uclibc" if USE_UCLIBC && !(arm || armeb)
|
||||||
|
default "muslgnueabi" if USE_MUSL && (arm || armeb)
|
||||||
|
default "musl" if USE_MUSL && !(arm || armeb)
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
diff --git a/config.sub b/config.sub
|
||||||
|
--- a/config.sub
|
||||||
|
+++ b/config.sub
|
||||||
|
@@ -125,6 +125,7 @@
|
||||||
|
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||||
|
case $maybe_os in
|
||||||
|
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
|
||||||
|
+ linux-musl* | \
|
||||||
|
linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
|
||||||
|
knetbsd*-gnu* | netbsd*-gnu* | \
|
||||||
|
kopensolaris*-gnu* | \
|
||||||
|
@@ -1335,6 +1336,7 @@
|
||||||
|
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||||
|
| -mingw32* | -linux-gnu* | -linux-android* \
|
||||||
|
| -linux-newlib* | -linux-uclibc* \
|
||||||
|
+ | -linux-musl* \
|
||||||
|
| -uxpv* | -beos* | -mpeix* | -udk* \
|
||||||
|
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
||||||
|
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
|
@ -79,7 +79,7 @@ config SJLJ_EXCEPTIONS
|
||||||
config INSTALL_LIBSTDCPP
|
config INSTALL_LIBSTDCPP
|
||||||
bool
|
bool
|
||||||
prompt "Build/install c++ compiler and libstdc++?" if TOOLCHAINOPTS
|
prompt "Build/install c++ compiler and libstdc++?" if TOOLCHAINOPTS
|
||||||
default y
|
default y if !USE_MUSL
|
||||||
help
|
help
|
||||||
Build/install c++ compiler and libstdc++?
|
Build/install c++ compiler and libstdc++?
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,231 @@
|
||||||
|
diff --git a/config.sub b/config.sub
|
||||||
|
--- a/config.sub
|
||||||
|
+++ b/config.sub
|
||||||
|
@@ -125,6 +125,7 @@ esac
|
||||||
|
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||||
|
case $maybe_os in
|
||||||
|
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
|
||||||
|
+ linux-musl* | \
|
||||||
|
linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
|
||||||
|
knetbsd*-gnu* | netbsd*-gnu* | \
|
||||||
|
kopensolaris*-gnu* | \
|
||||||
|
@@ -1310,6 +1311,7 @@ case $os in
|
||||||
|
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||||
|
| -mingw32* | -linux-gnu* | -linux-android* \
|
||||||
|
| -linux-newlib* | -linux-uclibc* \
|
||||||
|
+ | -linux-musl* \
|
||||||
|
| -uxpv* | -beos* | -mpeix* | -udk* \
|
||||||
|
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
||||||
|
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
||||||
|
diff --git a/gcc/config.gcc b/gcc/config.gcc
|
||||||
|
--- a/gcc/config.gcc
|
||||||
|
+++ b/gcc/config.gcc
|
||||||
|
@@ -478,7 +478,7 @@ case ${target} in
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Common C libraries.
|
||||||
|
-tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3"
|
||||||
|
+tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3 LIBC_MUSL=4"
|
||||||
|
|
||||||
|
# Common parts for widely ported systems.
|
||||||
|
case ${target} in
|
||||||
|
@@ -591,6 +591,9 @@ case ${target} in
|
||||||
|
*-*-*uclibc*)
|
||||||
|
tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC"
|
||||||
|
;;
|
||||||
|
+ *-*-*musl*)
|
||||||
|
+ tm_defines="$tm_defines DEFAULT_LIBC=LIBC_MUSL"
|
||||||
|
+ ;;
|
||||||
|
*)
|
||||||
|
tm_defines="$tm_defines DEFAULT_LIBC=LIBC_GLIBC"
|
||||||
|
;;
|
||||||
|
diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h
|
||||||
|
--- a/gcc/config/arm/linux-eabi.h
|
||||||
|
+++ b/gcc/config/arm/linux-eabi.h
|
||||||
|
@@ -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 --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h
|
||||||
|
--- a/gcc/config/i386/linux.h
|
||||||
|
+++ b/gcc/config/i386/linux.h
|
||||||
|
@@ -93,6 +93,7 @@ along with GCC; see the file COPYING3. If not see
|
||||||
|
/* These macros may be overridden in k*bsd-gnu.h and i386/k*bsd-gnu.h. */
|
||||||
|
#define LINK_EMULATION "elf_i386"
|
||||||
|
#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
|
||||||
|
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-i386.so.1"
|
||||||
|
|
||||||
|
#undef ASM_SPEC
|
||||||
|
#define ASM_SPEC \
|
||||||
|
diff --git a/gcc/config/i386/linux64.h b/gcc/config/i386/linux64.h
|
||||||
|
--- a/gcc/config/i386/linux64.h
|
||||||
|
+++ b/gcc/config/i386/linux64.h
|
||||||
|
@@ -65,6 +65,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
|
||||||
|
#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2"
|
||||||
|
|
||||||
|
+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-i386.so.1"
|
||||||
|
+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-x86_64.so.1"
|
||||||
|
+
|
||||||
|
#if TARGET_64BIT_DEFAULT
|
||||||
|
#define SPEC_32 "m32"
|
||||||
|
#define SPEC_64 "!m32"
|
||||||
|
diff --git a/gcc/config/linux.h b/gcc/config/linux.h
|
||||||
|
--- a/gcc/config/linux.h
|
||||||
|
+++ b/gcc/config/linux.h
|
||||||
|
@@ -33,10 +33,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
#define OPTION_GLIBC (DEFAULT_LIBC == LIBC_GLIBC)
|
||||||
|
#define OPTION_UCLIBC (DEFAULT_LIBC == LIBC_UCLIBC)
|
||||||
|
#define OPTION_BIONIC (DEFAULT_LIBC == LIBC_BIONIC)
|
||||||
|
+#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 LINUX_TARGET_OS_CPP_BUILTINS() \
|
||||||
|
@@ -54,18 +56,21 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
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 */
|
||||||
|
@@ -83,13 +88,13 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
|
||||||
|
#define LINUX_DYNAMIC_LINKER \
|
||||||
|
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, \
|
||||||
|
- BIONIC_DYNAMIC_LINKER)
|
||||||
|
+ BIONIC_DYNAMIC_LINKER, MUSL_DYNAMIC_LINKER)
|
||||||
|
#define LINUX_DYNAMIC_LINKER32 \
|
||||||
|
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32, \
|
||||||
|
- BIONIC_DYNAMIC_LINKER32)
|
||||||
|
+ BIONIC_DYNAMIC_LINKER32, MUSL_DYNAMIC_LINKER32)
|
||||||
|
#define LINUX_DYNAMIC_LINKER64 \
|
||||||
|
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64, \
|
||||||
|
- BIONIC_DYNAMIC_LINKER64)
|
||||||
|
+ BIONIC_DYNAMIC_LINKER64, MUSL_DYNAMIC_LINKER64)
|
||||||
|
|
||||||
|
/* Determine whether the entire c99 runtime
|
||||||
|
is present in the runtime library. */
|
||||||
|
diff --git a/gcc/config/linux.opt b/gcc/config/linux.opt
|
||||||
|
--- a/gcc/config/linux.opt
|
||||||
|
+++ b/gcc/config/linux.opt
|
||||||
|
@@ -30,3 +30,7 @@ Use GNU C library
|
||||||
|
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 --git a/gcc/config/mips/linux.h b/gcc/config/mips/linux.h
|
||||||
|
--- a/gcc/config/mips/linux.h
|
||||||
|
+++ b/gcc/config/mips/linux.h
|
||||||
|
@@ -63,6 +63,8 @@ along with GCC; see the file COPYING3. If not see
|
||||||
|
|
||||||
|
#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
|
||||||
|
|
||||||
|
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-mips.so.1"
|
||||||
|
+
|
||||||
|
/* Borrowed from sparc/linux.h */
|
||||||
|
#undef LINK_SPEC
|
||||||
|
#define LINK_SPEC \
|
||||||
|
diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h
|
||||||
|
--- a/gcc/ginclude/stddef.h
|
||||||
|
+++ b/gcc/ginclude/stddef.h
|
||||||
|
@@ -184,6 +184,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
|
||||||
|
#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
|
||||||
|
@@ -200,6 +201,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
|
||||||
|
#define ___int_size_t_h
|
||||||
|
#define _GCC_SIZE_T
|
||||||
|
#define _SIZET_
|
||||||
|
+#define __DEFINED_size_t /* musl */
|
||||||
|
#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
|
||||||
|
/* __size_t is a typedef on FreeBSD 5!, must not trash it. */
|
||||||
|
#else
|
||||||
|
@@ -214,6 +216,7 @@ typedef __SIZE_TYPE__ size_t;
|
||||||
|
typedef long ssize_t;
|
||||||
|
#endif /* __BEOS__ */
|
||||||
|
#endif /* !(defined (__GNUG__) && defined (size_t)) */
|
||||||
|
+#endif /* __DEFINED_size_t */
|
||||||
|
#endif /* __size_t */
|
||||||
|
#endif /* _SIZET_ */
|
||||||
|
#endif /* _GCC_SIZE_T */
|
||||||
|
diff --git a/libgomp/config/posix/time.c b/libgomp/config/posix/time.c
|
||||||
|
--- a/libgomp/config/posix/time.c
|
||||||
|
+++ b/libgomp/config/posix/time.c
|
||||||
|
@@ -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 --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host
|
||||||
|
--- a/libstdc++-v3/configure.host
|
||||||
|
+++ b/libstdc++-v3/configure.host
|
||||||
|
@@ -237,6 +237,13 @@ case "${host_os}" in
|
||||||
|
os_include_dir="os/bsd/freebsd"
|
||||||
|
;;
|
||||||
|
gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
|
||||||
|
+ # check for musl by target
|
||||||
|
+ case "${host_os}" in
|
||||||
|
+ *-musl*)
|
||||||
|
+ os_include_dir="os/generic"
|
||||||
|
+ ;;
|
||||||
|
+ *)
|
||||||
|
+
|
||||||
|
if [ "$uclibc" = "yes" ]; then
|
||||||
|
os_include_dir="os/uclibc"
|
||||||
|
elif [ "$bionic" = "yes" ]; then
|
||||||
|
@@ -245,6 +252,9 @@ case "${host_os}" in
|
||||||
|
os_include_dir="os/gnu-linux"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
+
|
||||||
|
+ esac
|
||||||
|
+ ;;
|
||||||
|
hpux*)
|
||||||
|
os_include_dir="os/hpux"
|
||||||
|
;;
|
|
@ -0,0 +1,231 @@
|
||||||
|
diff --git a/config.sub b/config.sub
|
||||||
|
--- a/config.sub
|
||||||
|
+++ b/config.sub
|
||||||
|
@@ -125,6 +125,7 @@ esac
|
||||||
|
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||||
|
case $maybe_os in
|
||||||
|
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
|
||||||
|
+ linux-musl* | \
|
||||||
|
linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
|
||||||
|
knetbsd*-gnu* | netbsd*-gnu* | \
|
||||||
|
kopensolaris*-gnu* | \
|
||||||
|
@@ -1310,6 +1311,7 @@ case $os in
|
||||||
|
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||||
|
| -mingw32* | -linux-gnu* | -linux-android* \
|
||||||
|
| -linux-newlib* | -linux-uclibc* \
|
||||||
|
+ | -linux-musl* \
|
||||||
|
| -uxpv* | -beos* | -mpeix* | -udk* \
|
||||||
|
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
||||||
|
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
||||||
|
diff --git a/gcc/config.gcc b/gcc/config.gcc
|
||||||
|
--- a/gcc/config.gcc
|
||||||
|
+++ b/gcc/config.gcc
|
||||||
|
@@ -478,7 +478,7 @@ case ${target} in
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Common C libraries.
|
||||||
|
-tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3"
|
||||||
|
+tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3 LIBC_MUSL=4"
|
||||||
|
|
||||||
|
# Common parts for widely ported systems.
|
||||||
|
case ${target} in
|
||||||
|
@@ -591,6 +591,9 @@ case ${target} in
|
||||||
|
*-*-*uclibc*)
|
||||||
|
tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC"
|
||||||
|
;;
|
||||||
|
+ *-*-*musl*)
|
||||||
|
+ tm_defines="$tm_defines DEFAULT_LIBC=LIBC_MUSL"
|
||||||
|
+ ;;
|
||||||
|
*)
|
||||||
|
tm_defines="$tm_defines DEFAULT_LIBC=LIBC_GLIBC"
|
||||||
|
;;
|
||||||
|
diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h
|
||||||
|
--- a/gcc/config/arm/linux-eabi.h
|
||||||
|
+++ b/gcc/config/arm/linux-eabi.h
|
||||||
|
@@ -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 --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h
|
||||||
|
--- a/gcc/config/i386/linux.h
|
||||||
|
+++ b/gcc/config/i386/linux.h
|
||||||
|
@@ -93,6 +93,7 @@ along with GCC; see the file COPYING3. If not see
|
||||||
|
/* These macros may be overridden in k*bsd-gnu.h and i386/k*bsd-gnu.h. */
|
||||||
|
#define LINK_EMULATION "elf_i386"
|
||||||
|
#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
|
||||||
|
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-i386.so.1"
|
||||||
|
|
||||||
|
#undef ASM_SPEC
|
||||||
|
#define ASM_SPEC \
|
||||||
|
diff --git a/gcc/config/i386/linux64.h b/gcc/config/i386/linux64.h
|
||||||
|
--- a/gcc/config/i386/linux64.h
|
||||||
|
+++ b/gcc/config/i386/linux64.h
|
||||||
|
@@ -65,6 +65,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
|
||||||
|
#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2"
|
||||||
|
|
||||||
|
+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-i386.so.1"
|
||||||
|
+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-x86_64.so.1"
|
||||||
|
+
|
||||||
|
#if TARGET_64BIT_DEFAULT
|
||||||
|
#define SPEC_32 "m32"
|
||||||
|
#define SPEC_64 "!m32"
|
||||||
|
diff --git a/gcc/config/linux.h b/gcc/config/linux.h
|
||||||
|
--- a/gcc/config/linux.h
|
||||||
|
+++ b/gcc/config/linux.h
|
||||||
|
@@ -33,10 +33,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
#define OPTION_GLIBC (DEFAULT_LIBC == LIBC_GLIBC)
|
||||||
|
#define OPTION_UCLIBC (DEFAULT_LIBC == LIBC_UCLIBC)
|
||||||
|
#define OPTION_BIONIC (DEFAULT_LIBC == LIBC_BIONIC)
|
||||||
|
+#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 LINUX_TARGET_OS_CPP_BUILTINS() \
|
||||||
|
@@ -54,18 +56,21 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
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 */
|
||||||
|
@@ -83,13 +88,13 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
|
||||||
|
#define LINUX_DYNAMIC_LINKER \
|
||||||
|
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, \
|
||||||
|
- BIONIC_DYNAMIC_LINKER)
|
||||||
|
+ BIONIC_DYNAMIC_LINKER, MUSL_DYNAMIC_LINKER)
|
||||||
|
#define LINUX_DYNAMIC_LINKER32 \
|
||||||
|
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32, \
|
||||||
|
- BIONIC_DYNAMIC_LINKER32)
|
||||||
|
+ BIONIC_DYNAMIC_LINKER32, MUSL_DYNAMIC_LINKER32)
|
||||||
|
#define LINUX_DYNAMIC_LINKER64 \
|
||||||
|
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64, \
|
||||||
|
- BIONIC_DYNAMIC_LINKER64)
|
||||||
|
+ BIONIC_DYNAMIC_LINKER64, MUSL_DYNAMIC_LINKER64)
|
||||||
|
|
||||||
|
/* Determine whether the entire c99 runtime
|
||||||
|
is present in the runtime library. */
|
||||||
|
diff --git a/gcc/config/linux.opt b/gcc/config/linux.opt
|
||||||
|
--- a/gcc/config/linux.opt
|
||||||
|
+++ b/gcc/config/linux.opt
|
||||||
|
@@ -30,3 +30,7 @@ Use GNU C library
|
||||||
|
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 --git a/gcc/config/mips/linux.h b/gcc/config/mips/linux.h
|
||||||
|
--- a/gcc/config/mips/linux.h
|
||||||
|
+++ b/gcc/config/mips/linux.h
|
||||||
|
@@ -63,6 +63,8 @@ along with GCC; see the file COPYING3. If not see
|
||||||
|
|
||||||
|
#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
|
||||||
|
|
||||||
|
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-mips.so.1"
|
||||||
|
+
|
||||||
|
/* Borrowed from sparc/linux.h */
|
||||||
|
#undef LINK_SPEC
|
||||||
|
#define LINK_SPEC \
|
||||||
|
diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h
|
||||||
|
--- a/gcc/ginclude/stddef.h
|
||||||
|
+++ b/gcc/ginclude/stddef.h
|
||||||
|
@@ -184,6 +184,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
|
||||||
|
#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
|
||||||
|
@@ -200,6 +201,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
|
||||||
|
#define ___int_size_t_h
|
||||||
|
#define _GCC_SIZE_T
|
||||||
|
#define _SIZET_
|
||||||
|
+#define __DEFINED_size_t /* musl */
|
||||||
|
#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
|
||||||
|
/* __size_t is a typedef on FreeBSD 5!, must not trash it. */
|
||||||
|
#else
|
||||||
|
@@ -214,6 +216,7 @@ typedef __SIZE_TYPE__ size_t;
|
||||||
|
typedef long ssize_t;
|
||||||
|
#endif /* __BEOS__ */
|
||||||
|
#endif /* !(defined (__GNUG__) && defined (size_t)) */
|
||||||
|
+#endif /* __DEFINED_size_t */
|
||||||
|
#endif /* __size_t */
|
||||||
|
#endif /* _SIZET_ */
|
||||||
|
#endif /* _GCC_SIZE_T */
|
||||||
|
diff --git a/libgomp/config/posix/time.c b/libgomp/config/posix/time.c
|
||||||
|
--- a/libgomp/config/posix/time.c
|
||||||
|
+++ b/libgomp/config/posix/time.c
|
||||||
|
@@ -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 --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host
|
||||||
|
--- a/libstdc++-v3/configure.host
|
||||||
|
+++ b/libstdc++-v3/configure.host
|
||||||
|
@@ -237,6 +237,13 @@ case "${host_os}" in
|
||||||
|
os_include_dir="os/bsd/freebsd"
|
||||||
|
;;
|
||||||
|
gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
|
||||||
|
+ # check for musl by target
|
||||||
|
+ case "${host_os}" in
|
||||||
|
+ *-musl*)
|
||||||
|
+ os_include_dir="os/generic"
|
||||||
|
+ ;;
|
||||||
|
+ *)
|
||||||
|
+
|
||||||
|
if [ "$uclibc" = "yes" ]; then
|
||||||
|
os_include_dir="os/uclibc"
|
||||||
|
elif [ "$bionic" = "yes" ]; then
|
||||||
|
@@ -245,6 +252,9 @@ case "${host_os}" in
|
||||||
|
os_include_dir="os/gnu-linux"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
+
|
||||||
|
+ esac
|
||||||
|
+ ;;
|
||||||
|
hpux*)
|
||||||
|
os_include_dir="os/hpux"
|
||||||
|
;;
|
|
@ -0,0 +1,231 @@
|
||||||
|
diff --git a/config.sub b/config.sub
|
||||||
|
--- a/config.sub
|
||||||
|
+++ b/config.sub
|
||||||
|
@@ -125,6 +125,7 @@ esac
|
||||||
|
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||||
|
case $maybe_os in
|
||||||
|
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
|
||||||
|
+ linux-musl* | \
|
||||||
|
linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
|
||||||
|
knetbsd*-gnu* | netbsd*-gnu* | \
|
||||||
|
kopensolaris*-gnu* | \
|
||||||
|
@@ -1310,6 +1311,7 @@ case $os in
|
||||||
|
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||||
|
| -mingw32* | -linux-gnu* | -linux-android* \
|
||||||
|
| -linux-newlib* | -linux-uclibc* \
|
||||||
|
+ | -linux-musl* \
|
||||||
|
| -uxpv* | -beos* | -mpeix* | -udk* \
|
||||||
|
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
||||||
|
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
||||||
|
diff --git a/gcc/config.gcc b/gcc/config.gcc
|
||||||
|
--- a/gcc/config.gcc
|
||||||
|
+++ b/gcc/config.gcc
|
||||||
|
@@ -478,7 +478,7 @@ case ${target} in
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Common C libraries.
|
||||||
|
-tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3"
|
||||||
|
+tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3 LIBC_MUSL=4"
|
||||||
|
|
||||||
|
# Common parts for widely ported systems.
|
||||||
|
case ${target} in
|
||||||
|
@@ -591,6 +591,9 @@ case ${target} in
|
||||||
|
*-*-*uclibc*)
|
||||||
|
tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC"
|
||||||
|
;;
|
||||||
|
+ *-*-*musl*)
|
||||||
|
+ tm_defines="$tm_defines DEFAULT_LIBC=LIBC_MUSL"
|
||||||
|
+ ;;
|
||||||
|
*)
|
||||||
|
tm_defines="$tm_defines DEFAULT_LIBC=LIBC_GLIBC"
|
||||||
|
;;
|
||||||
|
diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h
|
||||||
|
--- a/gcc/config/arm/linux-eabi.h
|
||||||
|
+++ b/gcc/config/arm/linux-eabi.h
|
||||||
|
@@ -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 --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h
|
||||||
|
--- a/gcc/config/i386/linux.h
|
||||||
|
+++ b/gcc/config/i386/linux.h
|
||||||
|
@@ -93,6 +93,7 @@ along with GCC; see the file COPYING3. If not see
|
||||||
|
/* These macros may be overridden in k*bsd-gnu.h and i386/k*bsd-gnu.h. */
|
||||||
|
#define LINK_EMULATION "elf_i386"
|
||||||
|
#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
|
||||||
|
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-i386.so.1"
|
||||||
|
|
||||||
|
#undef ASM_SPEC
|
||||||
|
#define ASM_SPEC \
|
||||||
|
diff --git a/gcc/config/i386/linux64.h b/gcc/config/i386/linux64.h
|
||||||
|
--- a/gcc/config/i386/linux64.h
|
||||||
|
+++ b/gcc/config/i386/linux64.h
|
||||||
|
@@ -65,6 +65,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
|
||||||
|
#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2"
|
||||||
|
|
||||||
|
+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-i386.so.1"
|
||||||
|
+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-x86_64.so.1"
|
||||||
|
+
|
||||||
|
#if TARGET_64BIT_DEFAULT
|
||||||
|
#define SPEC_32 "m32"
|
||||||
|
#define SPEC_64 "!m32"
|
||||||
|
diff --git a/gcc/config/linux.h b/gcc/config/linux.h
|
||||||
|
--- a/gcc/config/linux.h
|
||||||
|
+++ b/gcc/config/linux.h
|
||||||
|
@@ -33,10 +33,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
#define OPTION_GLIBC (DEFAULT_LIBC == LIBC_GLIBC)
|
||||||
|
#define OPTION_UCLIBC (DEFAULT_LIBC == LIBC_UCLIBC)
|
||||||
|
#define OPTION_BIONIC (DEFAULT_LIBC == LIBC_BIONIC)
|
||||||
|
+#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 LINUX_TARGET_OS_CPP_BUILTINS() \
|
||||||
|
@@ -54,18 +56,21 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
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 */
|
||||||
|
@@ -83,13 +88,13 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
|
||||||
|
#define LINUX_DYNAMIC_LINKER \
|
||||||
|
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, \
|
||||||
|
- BIONIC_DYNAMIC_LINKER)
|
||||||
|
+ BIONIC_DYNAMIC_LINKER, MUSL_DYNAMIC_LINKER)
|
||||||
|
#define LINUX_DYNAMIC_LINKER32 \
|
||||||
|
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32, \
|
||||||
|
- BIONIC_DYNAMIC_LINKER32)
|
||||||
|
+ BIONIC_DYNAMIC_LINKER32, MUSL_DYNAMIC_LINKER32)
|
||||||
|
#define LINUX_DYNAMIC_LINKER64 \
|
||||||
|
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64, \
|
||||||
|
- BIONIC_DYNAMIC_LINKER64)
|
||||||
|
+ BIONIC_DYNAMIC_LINKER64, MUSL_DYNAMIC_LINKER64)
|
||||||
|
|
||||||
|
/* Determine whether the entire c99 runtime
|
||||||
|
is present in the runtime library. */
|
||||||
|
diff --git a/gcc/config/linux.opt b/gcc/config/linux.opt
|
||||||
|
--- a/gcc/config/linux.opt
|
||||||
|
+++ b/gcc/config/linux.opt
|
||||||
|
@@ -30,3 +30,7 @@ Use GNU C library
|
||||||
|
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 --git a/gcc/config/mips/linux.h b/gcc/config/mips/linux.h
|
||||||
|
--- a/gcc/config/mips/linux.h
|
||||||
|
+++ b/gcc/config/mips/linux.h
|
||||||
|
@@ -63,6 +63,8 @@ along with GCC; see the file COPYING3. If not see
|
||||||
|
|
||||||
|
#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
|
||||||
|
|
||||||
|
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-mips.so.1"
|
||||||
|
+
|
||||||
|
/* Borrowed from sparc/linux.h */
|
||||||
|
#undef LINK_SPEC
|
||||||
|
#define LINK_SPEC \
|
||||||
|
diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h
|
||||||
|
--- a/gcc/ginclude/stddef.h
|
||||||
|
+++ b/gcc/ginclude/stddef.h
|
||||||
|
@@ -184,6 +184,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
|
||||||
|
#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
|
||||||
|
@@ -200,6 +201,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
|
||||||
|
#define ___int_size_t_h
|
||||||
|
#define _GCC_SIZE_T
|
||||||
|
#define _SIZET_
|
||||||
|
+#define __DEFINED_size_t /* musl */
|
||||||
|
#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
|
||||||
|
/* __size_t is a typedef on FreeBSD 5!, must not trash it. */
|
||||||
|
#else
|
||||||
|
@@ -214,6 +216,7 @@ typedef __SIZE_TYPE__ size_t;
|
||||||
|
typedef long ssize_t;
|
||||||
|
#endif /* __BEOS__ */
|
||||||
|
#endif /* !(defined (__GNUG__) && defined (size_t)) */
|
||||||
|
+#endif /* __DEFINED_size_t */
|
||||||
|
#endif /* __size_t */
|
||||||
|
#endif /* _SIZET_ */
|
||||||
|
#endif /* _GCC_SIZE_T */
|
||||||
|
diff --git a/libgomp/config/posix/time.c b/libgomp/config/posix/time.c
|
||||||
|
--- a/libgomp/config/posix/time.c
|
||||||
|
+++ b/libgomp/config/posix/time.c
|
||||||
|
@@ -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 --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host
|
||||||
|
--- a/libstdc++-v3/configure.host
|
||||||
|
+++ b/libstdc++-v3/configure.host
|
||||||
|
@@ -237,6 +237,13 @@ case "${host_os}" in
|
||||||
|
os_include_dir="os/bsd/freebsd"
|
||||||
|
;;
|
||||||
|
gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
|
||||||
|
+ # check for musl by target
|
||||||
|
+ case "${host_os}" in
|
||||||
|
+ *-musl*)
|
||||||
|
+ os_include_dir="os/generic"
|
||||||
|
+ ;;
|
||||||
|
+ *)
|
||||||
|
+
|
||||||
|
if [ "$uclibc" = "yes" ]; then
|
||||||
|
os_include_dir="os/uclibc"
|
||||||
|
elif [ "$bionic" = "yes" ]; then
|
||||||
|
@@ -245,6 +252,9 @@ case "${host_os}" in
|
||||||
|
os_include_dir="os/gnu-linux"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
+
|
||||||
|
+ esac
|
||||||
|
+ ;;
|
||||||
|
hpux*)
|
||||||
|
os_include_dir="os/hpux"
|
||||||
|
;;
|
|
@ -0,0 +1,317 @@
|
||||||
|
diff --git a/gcc/config.gcc b/gcc/config.gcc
|
||||||
|
--- a/gcc/config.gcc
|
||||||
|
+++ b/gcc/config.gcc
|
||||||
|
@@ -522,7 +522,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
|
||||||
|
@@ -625,6 +625,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"
|
||||||
|
;;
|
||||||
|
@@ -1722,6 +1725,7 @@
|
||||||
|
tm_file="${tm_file} dbxelf.h gnu-user.h linux.h microblaze/linux.h"
|
||||||
|
c_target_objs="${c_target_objs} microblaze-c.o"
|
||||||
|
cxx_target_objs="${cxx_target_objs} microblaze-c.o"
|
||||||
|
+ tmake_file="${tmake_file} microblaze/t-microblaze"
|
||||||
|
;;
|
||||||
|
microblaze*-*-*)
|
||||||
|
tm_file="${tm_file} dbxelf.h"
|
||||||
|
diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h
|
||||||
|
--- a/gcc/config/arm/linux-eabi.h
|
||||||
|
+++ b/gcc/config/arm/linux-eabi.h
|
||||||
|
@@ -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 --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h
|
||||||
|
--- a/gcc/config/i386/linux.h
|
||||||
|
+++ b/gcc/config/i386/linux.h
|
||||||
|
@@ -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-i386.so.1"
|
||||||
|
diff --git a/gcc/config/i386/linux64.h b/gcc/config/i386/linux64.h
|
||||||
|
--- a/gcc/config/i386/linux64.h
|
||||||
|
+++ b/gcc/config/i386/linux64.h
|
||||||
|
@@ -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 --git a/gcc/config/linux.h b/gcc/config/linux.h
|
||||||
|
--- a/gcc/config/linux.h
|
||||||
|
+++ b/gcc/config/linux.h
|
||||||
|
@@ -33,10 +33,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() \
|
||||||
|
@@ -54,18 +56,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 */
|
||||||
|
@@ -85,16 +90,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 --git a/gcc/config/linux.opt b/gcc/config/linux.opt
|
||||||
|
--- a/gcc/config/linux.opt
|
||||||
|
+++ b/gcc/config/linux.opt
|
||||||
|
@@ -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 --git a/gcc/config/mips/linux.h b/gcc/config/mips/linux.h
|
||||||
|
--- a/gcc/config/mips/linux.h
|
||||||
|
+++ b/gcc/config/mips/linux.h
|
||||||
|
@@ -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 --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
|
||||||
|
--- a/gcc/config/rs6000/linux64.h
|
||||||
|
+++ b/gcc/config/rs6000/linux64.h
|
||||||
|
@@ -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 --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
|
||||||
|
--- a/gcc/config/rs6000/sysv4.h
|
||||||
|
+++ b/gcc/config/rs6000/sysv4.h
|
||||||
|
@@ -804,15 +804,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} \
|
||||||
|
diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h
|
||||||
|
--- a/gcc/ginclude/stddef.h
|
||||||
|
+++ b/gcc/ginclude/stddef.h
|
||||||
|
@@ -184,6 +184,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
|
||||||
|
@@ -200,6 +201,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. */
|
||||||
|
@@ -215,6 +217,7 @@
|
||||||
|
typedef long ssize_t;
|
||||||
|
#endif /* __BEOS__ */
|
||||||
|
#endif /* !(defined (__GNUG__) && defined (size_t)) */
|
||||||
|
+#endif /* __DEFINED_size_t */
|
||||||
|
#endif /* __size_t */
|
||||||
|
#endif /* _SIZET_ */
|
||||||
|
#endif /* _GCC_SIZE_T */
|
||||||
|
diff --git a/libgomp/config/posix/time.c b/libgomp/config/posix/time.c
|
||||||
|
--- a/libgomp/config/posix/time.c
|
||||||
|
+++ b/libgomp/config/posix/time.c
|
||||||
|
@@ -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 --git a/libitm/config/arm/hwcap.cc b/libitm/config/arm/hwcap.cc
|
||||||
|
--- a/libitm/config/arm/hwcap.cc
|
||||||
|
+++ b/libitm/config/arm/hwcap.cc
|
||||||
|
@@ -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 --git a/libitm/config/linux/x86/tls.h b/libitm/config/linux/x86/tls.h
|
||||||
|
--- a/libitm/config/linux/x86/tls.h
|
||||||
|
+++ b/libitm/config/linux/x86/tls.h
|
||||||
|
@@ -25,16 +25,19 @@
|
||||||
|
#ifndef LIBITM_X86_TLS_H
|
||||||
|
#define LIBITM_X86_TLS_H 1
|
||||||
|
|
||||||
|
-#if defined(__GLIBC_PREREQ) && __GLIBC_PREREQ(2, 10)
|
||||||
|
+#if defined(__GLIBC_PREREQ)
|
||||||
|
+#if __GLIBC_PREREQ(2, 10)
|
||||||
|
/* Use slots in the TCB head rather than __thread lookups.
|
||||||
|
GLIBC has reserved words 10 through 13 for TM. */
|
||||||
|
#define HAVE_ARCH_GTM_THREAD 1
|
||||||
|
#define HAVE_ARCH_GTM_THREAD_DISP 1
|
||||||
|
#endif
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#include "config/generic/tls.h"
|
||||||
|
|
||||||
|
-#if defined(__GLIBC_PREREQ) && __GLIBC_PREREQ(2, 10)
|
||||||
|
+#if defined(__GLIBC_PREREQ)
|
||||||
|
+#if __GLIBC_PREREQ(2, 10)
|
||||||
|
namespace GTM HIDDEN {
|
||||||
|
|
||||||
|
#ifdef __x86_64__
|
||||||
|
@@ -101,5 +104,6 @@
|
||||||
|
|
||||||
|
} // namespace GTM
|
||||||
|
#endif /* >= GLIBC 2.10 */
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#endif // LIBITM_X86_TLS_H
|
||||||
|
diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host
|
||||||
|
--- a/libstdc++-v3/configure.host
|
||||||
|
+++ b/libstdc++-v3/configure.host
|
||||||
|
@@ -243,6 +243,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
|
||||||
|
@@ -251,6 +258,9 @@
|
||||||
|
os_include_dir="os/gnu-linux"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
+
|
||||||
|
+ esac
|
||||||
|
+ ;;
|
||||||
|
hpux*)
|
||||||
|
os_include_dir="os/hpux"
|
||||||
|
;;
|
|
@ -0,0 +1,336 @@
|
||||||
|
diff --git a/config.sub b/config.sub
|
||||||
|
--- a/config.sub
|
||||||
|
+++ b/config.sub
|
||||||
|
@@ -125,6 +125,7 @@
|
||||||
|
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||||
|
case $maybe_os in
|
||||||
|
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
|
||||||
|
+ linux-musl* | \
|
||||||
|
linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
|
||||||
|
knetbsd*-gnu* | netbsd*-gnu* | \
|
||||||
|
kopensolaris*-gnu* | \
|
||||||
|
@@ -1346,6 +1347,7 @@
|
||||||
|
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||||
|
| -mingw32* | -linux-gnu* | -linux-android* \
|
||||||
|
| -linux-newlib* | -linux-uclibc* \
|
||||||
|
+ | -linux-musl* \
|
||||||
|
| -uxpv* | -beos* | -mpeix* | -udk* \
|
||||||
|
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
||||||
|
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
||||||
|
diff --git a/gcc/config.gcc b/gcc/config.gcc
|
||||||
|
--- a/gcc/config.gcc
|
||||||
|
+++ b/gcc/config.gcc
|
||||||
|
@@ -522,7 +522,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
|
||||||
|
@@ -625,6 +625,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"
|
||||||
|
;;
|
||||||
|
@@ -1722,6 +1725,7 @@
|
||||||
|
tm_file="${tm_file} dbxelf.h gnu-user.h linux.h microblaze/linux.h"
|
||||||
|
c_target_objs="${c_target_objs} microblaze-c.o"
|
||||||
|
cxx_target_objs="${cxx_target_objs} microblaze-c.o"
|
||||||
|
+ tmake_file="${tmake_file} microblaze/t-microblaze"
|
||||||
|
;;
|
||||||
|
microblaze*-*-*)
|
||||||
|
tm_file="${tm_file} dbxelf.h"
|
||||||
|
diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h
|
||||||
|
--- a/gcc/config/arm/linux-eabi.h
|
||||||
|
+++ b/gcc/config/arm/linux-eabi.h
|
||||||
|
@@ -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 --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h
|
||||||
|
--- a/gcc/config/i386/linux.h
|
||||||
|
+++ b/gcc/config/i386/linux.h
|
||||||
|
@@ -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-i386.so.1"
|
||||||
|
diff --git a/gcc/config/i386/linux64.h b/gcc/config/i386/linux64.h
|
||||||
|
--- a/gcc/config/i386/linux64.h
|
||||||
|
+++ b/gcc/config/i386/linux64.h
|
||||||
|
@@ -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 --git a/gcc/config/linux.h b/gcc/config/linux.h
|
||||||
|
--- a/gcc/config/linux.h
|
||||||
|
+++ b/gcc/config/linux.h
|
||||||
|
@@ -33,10 +33,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() \
|
||||||
|
@@ -54,18 +56,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 */
|
||||||
|
@@ -85,16 +90,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 --git a/gcc/config/linux.opt b/gcc/config/linux.opt
|
||||||
|
--- a/gcc/config/linux.opt
|
||||||
|
+++ b/gcc/config/linux.opt
|
||||||
|
@@ -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 --git a/gcc/config/mips/linux.h b/gcc/config/mips/linux.h
|
||||||
|
--- a/gcc/config/mips/linux.h
|
||||||
|
+++ b/gcc/config/mips/linux.h
|
||||||
|
@@ -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 --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
|
||||||
|
--- a/gcc/config/rs6000/linux64.h
|
||||||
|
+++ b/gcc/config/rs6000/linux64.h
|
||||||
|
@@ -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 --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
|
||||||
|
--- a/gcc/config/rs6000/sysv4.h
|
||||||
|
+++ b/gcc/config/rs6000/sysv4.h
|
||||||
|
@@ -804,15 +804,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} \
|
||||||
|
diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h
|
||||||
|
--- a/gcc/ginclude/stddef.h
|
||||||
|
+++ b/gcc/ginclude/stddef.h
|
||||||
|
@@ -184,6 +184,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
|
||||||
|
@@ -200,6 +201,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. */
|
||||||
|
@@ -215,6 +217,7 @@
|
||||||
|
typedef long ssize_t;
|
||||||
|
#endif /* __BEOS__ */
|
||||||
|
#endif /* !(defined (__GNUG__) && defined (size_t)) */
|
||||||
|
+#endif /* __DEFINED_size_t */
|
||||||
|
#endif /* __size_t */
|
||||||
|
#endif /* _SIZET_ */
|
||||||
|
#endif /* _GCC_SIZE_T */
|
||||||
|
diff --git a/libgomp/config/posix/time.c b/libgomp/config/posix/time.c
|
||||||
|
--- a/libgomp/config/posix/time.c
|
||||||
|
+++ b/libgomp/config/posix/time.c
|
||||||
|
@@ -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 --git a/libitm/config/arm/hwcap.cc b/libitm/config/arm/hwcap.cc
|
||||||
|
--- a/libitm/config/arm/hwcap.cc
|
||||||
|
+++ b/libitm/config/arm/hwcap.cc
|
||||||
|
@@ -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 --git a/libitm/config/linux/x86/tls.h b/libitm/config/linux/x86/tls.h
|
||||||
|
--- a/libitm/config/linux/x86/tls.h
|
||||||
|
+++ b/libitm/config/linux/x86/tls.h
|
||||||
|
@@ -25,16 +25,19 @@
|
||||||
|
#ifndef LIBITM_X86_TLS_H
|
||||||
|
#define LIBITM_X86_TLS_H 1
|
||||||
|
|
||||||
|
-#if defined(__GLIBC_PREREQ) && __GLIBC_PREREQ(2, 10)
|
||||||
|
+#if defined(__GLIBC_PREREQ)
|
||||||
|
+#if __GLIBC_PREREQ(2, 10)
|
||||||
|
/* Use slots in the TCB head rather than __thread lookups.
|
||||||
|
GLIBC has reserved words 10 through 13 for TM. */
|
||||||
|
#define HAVE_ARCH_GTM_THREAD 1
|
||||||
|
#define HAVE_ARCH_GTM_THREAD_DISP 1
|
||||||
|
#endif
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#include "config/generic/tls.h"
|
||||||
|
|
||||||
|
-#if defined(__GLIBC_PREREQ) && __GLIBC_PREREQ(2, 10)
|
||||||
|
+#if defined(__GLIBC_PREREQ)
|
||||||
|
+#if __GLIBC_PREREQ(2, 10)
|
||||||
|
namespace GTM HIDDEN {
|
||||||
|
|
||||||
|
#ifdef __x86_64__
|
||||||
|
@@ -101,5 +104,6 @@
|
||||||
|
|
||||||
|
} // namespace GTM
|
||||||
|
#endif /* >= GLIBC 2.10 */
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#endif // LIBITM_X86_TLS_H
|
||||||
|
diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host
|
||||||
|
--- a/libstdc++-v3/configure.host
|
||||||
|
+++ b/libstdc++-v3/configure.host
|
||||||
|
@@ -243,6 +243,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
|
||||||
|
@@ -251,6 +258,9 @@
|
||||||
|
os_include_dir="os/gnu-linux"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
+
|
||||||
|
+ esac
|
||||||
|
+ ;;
|
||||||
|
hpux*)
|
||||||
|
os_include_dir="os/hpux"
|
||||||
|
;;
|
|
@ -0,0 +1,22 @@
|
||||||
|
diff -urN gdb-linaro-7.5-2012.09/config.sub gdb-linaro-7.5-2012.09.new/config.sub
|
||||||
|
--- gdb-linaro-7.5-2012.09/config.sub 2012-09-13 16:01:23.000000000 +0200
|
||||||
|
+++ gdb-linaro-7.5-2012.09.new/config.sub 2012-11-21 18:19:43.516916352 +0100
|
||||||
|
@@ -126,7 +126,8 @@
|
||||||
|
linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
|
||||||
|
knetbsd*-gnu* | netbsd*-gnu* | \
|
||||||
|
kopensolaris*-gnu* | \
|
||||||
|
- storm-chaos* | os2-emx* | rtmk-nova*)
|
||||||
|
+ storm-chaos* | os2-emx* | rtmk-nova* | \
|
||||||
|
+ linux-musl*)
|
||||||
|
os=-$maybe_os
|
||||||
|
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||||
|
;;
|
||||||
|
@@ -1360,7 +1361,7 @@
|
||||||
|
| -chorusos* | -chorusrdb* | -cegcc* \
|
||||||
|
| -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||||
|
| -mingw32* | -linux-gnu* | -linux-android* \
|
||||||
|
- | -linux-newlib* | -linux-uclibc* \
|
||||||
|
+ | -linux-newlib* | -linux-uclibc* | -linux-musl* \
|
||||||
|
| -uxpv* | -beos* | -mpeix* | -udk* \
|
||||||
|
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
||||||
|
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
|
@ -0,0 +1,21 @@
|
||||||
|
# Choose musl version.
|
||||||
|
|
||||||
|
choice
|
||||||
|
prompt "musl Version"
|
||||||
|
depends on TOOLCHAINOPTS && USE_MUSL
|
||||||
|
default UCLIBC_VERSION_0_9_7
|
||||||
|
help
|
||||||
|
Select the version of musl you wish to use.
|
||||||
|
|
||||||
|
config MUSL_VERSION_0_9_7
|
||||||
|
bool "musl 0.9.7"
|
||||||
|
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
|
||||||
|
# Debug version.
|
||||||
|
|
||||||
|
config MUSL_ENABLE_DEBUG
|
||||||
|
bool "Build with debug information"
|
||||||
|
depends on TOOLCHAINOPTS && USE_MUSL
|
||||||
|
default n
|
|
@ -0,0 +1,13 @@
|
||||||
|
config MUSL_VERSION
|
||||||
|
string
|
||||||
|
depends on USE_MUSL
|
||||||
|
default "0.9.7" if MUSL_VERSION_0_9_7
|
||||||
|
default "0.9.7"
|
||||||
|
|
||||||
|
if !TOOLCHAINOPTS
|
||||||
|
|
||||||
|
config MUSL_VERSION_0_9_7
|
||||||
|
default y if USE_MUSL
|
||||||
|
bool
|
||||||
|
|
||||||
|
endif
|
|
@ -0,0 +1,38 @@
|
||||||
|
PATH_PREFIX=.
|
||||||
|
|
||||||
|
include ./common.mk
|
||||||
|
|
||||||
|
HOST_STAMP_BUILT:=$(HOST_BUILD_DIR)/.built
|
||||||
|
HOST_STAMP_INSTALLED:=$(TOOLCHAIN_DIR)/stamp/.musl_installed
|
||||||
|
|
||||||
|
HOST_BUILD_PARALLEL:=1
|
||||||
|
|
||||||
|
define Host/SetToolchainInfo
|
||||||
|
$(SED) 's,^\(LIBC_TYPE\)=.*,\1=$(PKG_NAME),' $(TOOLCHAIN_DIR)/info.mk
|
||||||
|
$(SED) 's,^\(LIBC_URL\)=.*,\1=http://www.musl-libc.org/,' $(TOOLCHAIN_DIR)/info.mk
|
||||||
|
$(SED) 's,^\(LIBC_VERSION\)=.*,\1=$(PKG_VERSION),' $(TOOLCHAIN_DIR)/info.mk
|
||||||
|
$(SED) 's,^\(LIBC_SO_VERSION\)=.*,\1=$(LIBC_SO_VERSION),' $(TOOLCHAIN_DIR)/info.mk
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Host/Compile
|
||||||
|
$(MAKE) $(HOST_JOBS) -C $(HOST_BUILD_DIR) all
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Host/Install
|
||||||
|
$(call Host/SetToolchainInfo)
|
||||||
|
$(MAKE) -C $(HOST_BUILD_DIR) DESTDIR="$(TOOLCHAIN_DIR)/" install
|
||||||
|
( cd $(TOOLCHAIN_DIR) ; \
|
||||||
|
for d in lib usr/lib ; do \
|
||||||
|
for f in libc.so libpthread.so libgcc_s.so ; do \
|
||||||
|
if [ -f $$$$d/$$$$f -a ! -L $$$$d/$$$$f ] ; then \
|
||||||
|
$(SED) 's,/usr/lib/,,g;s,/lib/,,g' $$$$d/$$$$f ; \
|
||||||
|
fi \
|
||||||
|
done \
|
||||||
|
done \
|
||||||
|
)
|
||||||
|
rm -f \
|
||||||
|
$(TOOLCHAIN_DIR)/lib/libresolv*.so* \
|
||||||
|
$(TOOLCHAIN_DIR)/lib/libnsl*.so*
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call HostBuild))
|
|
@ -0,0 +1,65 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2012 OpenWrt.org
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
|
# See /LICENSE for more information.
|
||||||
|
#
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
include $(INCLUDE_DIR)/target.mk
|
||||||
|
|
||||||
|
PKG_NAME:=musl
|
||||||
|
PKG_VERSION:=$(call qstrip,$(CONFIG_MUSL_VERSION))
|
||||||
|
PKG_RELEASE=$(PKG_SOURCE_VERSION)
|
||||||
|
|
||||||
|
PKG_SOURCE_PROTO:=git
|
||||||
|
PKG_SOURCE_URL:=git://git.musl-libc.org/musl
|
||||||
|
PKG_SOURCE_SUBDIR=$(PKG_NAME)-$(PKG_VERSION)
|
||||||
|
PKG_SOURCE_VERSION:=2df4f6f17b1f14684cb991c53c9ef0ddaa8c7bad
|
||||||
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||||
|
LIBC_SO_VERSION:=$(PKG_VERSION)
|
||||||
|
PATCH_DIR:=$(PATH_PREFIX)/patches-$(PKG_VERSION)
|
||||||
|
CONFIG_DIR:=$(PATH_PREFIX)/config-$(PKG_VERSION)
|
||||||
|
|
||||||
|
HOST_BUILD_DIR:=$(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME)-$(PKG_VERSION)
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/toolchain-build.mk
|
||||||
|
|
||||||
|
MUSL_CONFIGURE:= \
|
||||||
|
$(TARGET_CONFIGURE_OPTS) \
|
||||||
|
CFLAGS="$(TARGET_CFLAGS)" \
|
||||||
|
CROSS_COMPILE="$(TARGET_CROSS)" \
|
||||||
|
$(HOST_BUILD_DIR)/configure \
|
||||||
|
--prefix=/ \
|
||||||
|
--host=$(GNU_HOST_NAME) \
|
||||||
|
--target=$(REAL_GNU_TARGET_NAME) \
|
||||||
|
--disable-gcc-wrapper
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_MUSL_ENABLE_DEBUG),y)
|
||||||
|
MUSL_CONFIGURE+= \
|
||||||
|
--enable-debug
|
||||||
|
endif
|
||||||
|
|
||||||
|
define Host/Prepare
|
||||||
|
$(call Host/Prepare/Default)
|
||||||
|
$(if $(strip $(QUILT)), \
|
||||||
|
cd $(HOST_BUILD_DIR); \
|
||||||
|
if $(QUILT_CMD) next >/dev/null 2>&1; then \
|
||||||
|
$(QUILT_CMD) push -a; \
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
ln -snf $(PKG_NAME)-$(PKG_VERSION) $(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Host/Configure
|
||||||
|
( cd $(HOST_BUILD_DIR); rm -f config.cache; \
|
||||||
|
$(MUSL_CONFIGURE) \
|
||||||
|
);
|
||||||
|
endef
|
||||||
|
|
||||||
|
|
||||||
|
define Host/Clean
|
||||||
|
rm -rf \
|
||||||
|
$(HOST_BUILD_DIR) \
|
||||||
|
$(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME) \
|
||||||
|
$(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev
|
||||||
|
endef
|
|
@ -0,0 +1,16 @@
|
||||||
|
PATH_PREFIX:=..
|
||||||
|
|
||||||
|
include ../common.mk
|
||||||
|
|
||||||
|
HOST_STAMP_BUILT:=$(HOST_BUILD_DIR)/.headers_built
|
||||||
|
HOST_STAMP_INSTALLED:=$(TOOLCHAIN_DIR)/stamp/.uclibc_headers_installed
|
||||||
|
|
||||||
|
define Host/Compile
|
||||||
|
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Host/Install
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call HostBuild))
|
||||||
|
|
|
@ -0,0 +1,219 @@
|
||||||
|
Date: Sat, 20 Oct 2012 22:15:44 +0200
|
||||||
|
From: Abdoulaye Walsimou Gaye <awg@...toolkit.org>
|
||||||
|
To: musl@...ts.openwall.com
|
||||||
|
Cc: Abdoulaye Walsimou Gaye <awg@...toolkit.org>
|
||||||
|
Subject: [PATCH 3/4] Import BSD functions defined in <netinet/ether.h> from NetBSD
|
||||||
|
|
||||||
|
Signed-off-by: Abdoulaye Walsimou Gaye <awg@...toolkit.org>
|
||||||
|
---
|
||||||
|
include/netinet/ether.h | 14 ++++
|
||||||
|
src/network/ethers.c | 180 +++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
2 files changed, 194 insertions(+)
|
||||||
|
create mode 100644 include/netinet/ether.h
|
||||||
|
create mode 100644 src/network/ethers.c
|
||||||
|
|
||||||
|
diff --git a/include/netinet/ether.h b/include/netinet/ether.h
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..44c614e
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/include/netinet/ether.h
|
||||||
|
@@ -0,0 +1,10 @@
|
||||||
|
+#ifndef _NETINET_ETHER_H
|
||||||
|
+#define _NETINET_ETHER_H
|
||||||
|
+
|
||||||
|
+char *ether_ntoa(const struct ether_addr *);
|
||||||
|
+struct ether_addr *ether_aton(const char *);
|
||||||
|
+int ether_ntohost(char *, const struct ether_addr *);
|
||||||
|
+int ether_hostton(const char *, struct ether_addr *);
|
||||||
|
+int ether_line(const char *, struct ether_addr *, char *);
|
||||||
|
+
|
||||||
|
+#endif /* !_NETINET_ETHER_H */
|
||||||
|
diff --git a/src/network/ethers.c b/src/network/ethers.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..8014581
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/network/ethers.c
|
||||||
|
@@ -0,0 +1,180 @@
|
||||||
|
+/* Origin NetBSD: src/lib/libc/net/ethers.c */
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
+ * ethers(3N) a la Sun.
|
||||||
|
+ *
|
||||||
|
+ * Written by Roland McGrath <roland@...b.com> 10/14/93.
|
||||||
|
+ * Public domain.
|
||||||
|
+ *
|
||||||
|
+ * port for musl by Abdoulaye Walsimou GAYE <awg@...toolkit.org> 2012/10/15
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#define _BSD_SOURCE
|
||||||
|
+#include <net/ethernet.h>
|
||||||
|
+#include <netinet/ether.h>
|
||||||
|
+
|
||||||
|
+#include <sys/param.h>
|
||||||
|
+#include <assert.h>
|
||||||
|
+#include <errno.h>
|
||||||
|
+#include <paths.h>
|
||||||
|
+#include <stdio.h>
|
||||||
|
+#include <stdlib.h>
|
||||||
|
+#include <string.h>
|
||||||
|
+
|
||||||
|
+#ifndef _PATH_ETHERS
|
||||||
|
+#define _PATH_ETHERS "/etc/ethers"
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
+ * ether_ntoa():
|
||||||
|
+ * This function converts this structure into an ASCII string of the form
|
||||||
|
+ * ``xx:xx:xx:xx:xx:xx'', consisting of 6 hexadecimal numbers separated
|
||||||
|
+ * by colons. It returns a pointer to a static buffer that is reused for
|
||||||
|
+ * each call.
|
||||||
|
+ */
|
||||||
|
+char *ether_ntoa(const struct ether_addr *e)
|
||||||
|
+{
|
||||||
|
+ static char a[18];
|
||||||
|
+
|
||||||
|
+ assert(e != NULL);
|
||||||
|
+
|
||||||
|
+ (void) snprintf(a, sizeof a, "%02x:%02x:%02x:%02x:%02x:%02x",
|
||||||
|
+ e->ether_addr_octet[0], e->ether_addr_octet[1],
|
||||||
|
+ e->ether_addr_octet[2], e->ether_addr_octet[3],
|
||||||
|
+ e->ether_addr_octet[4], e->ether_addr_octet[5]);
|
||||||
|
+ return a;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
+ * ether_aton():
|
||||||
|
+ * This function converts an ASCII string of the same form and to a structure
|
||||||
|
+ * containing the 6 octets of the address. It returns a pointer to a
|
||||||
|
+ * static structure that is reused for each call.
|
||||||
|
+ */
|
||||||
|
+struct ether_addr *ether_aton(const char *s)
|
||||||
|
+{
|
||||||
|
+ static struct ether_addr n;
|
||||||
|
+ unsigned int i[6];
|
||||||
|
+
|
||||||
|
+ assert(s != NULL);
|
||||||
|
+
|
||||||
|
+ if (sscanf(s, " %x:%x:%x:%x:%x:%x ", &i[0], &i[1],
|
||||||
|
+ &i[2], &i[3], &i[4], &i[5]) == 6) {
|
||||||
|
+ n.ether_addr_octet[0] = (unsigned char)i[0];
|
||||||
|
+ n.ether_addr_octet[1] = (unsigned char)i[1];
|
||||||
|
+ n.ether_addr_octet[2] = (unsigned char)i[2];
|
||||||
|
+ n.ether_addr_octet[3] = (unsigned char)i[3];
|
||||||
|
+ n.ether_addr_octet[4] = (unsigned char)i[4];
|
||||||
|
+ n.ether_addr_octet[5] = (unsigned char)i[5];
|
||||||
|
+ return &n;
|
||||||
|
+ }
|
||||||
|
+ return NULL;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
+ * ether_ntohost():
|
||||||
|
+ * This function interrogates the data base mapping host names to Ethernet
|
||||||
|
+ * addresses, /etc/ethers.
|
||||||
|
+ * It looks up the given Ethernet address and writes the associated host name
|
||||||
|
+ * into the character buffer passed.
|
||||||
|
+ * It returns zero if it finds the requested host name and -1 if not.
|
||||||
|
+ */
|
||||||
|
+int ether_ntohost(char *hostname, const struct ether_addr *e)
|
||||||
|
+{
|
||||||
|
+ FILE *f;
|
||||||
|
+ char *p;
|
||||||
|
+ size_t len;
|
||||||
|
+ struct ether_addr try;
|
||||||
|
+
|
||||||
|
+ assert(hostname != NULL);
|
||||||
|
+ assert(e != NULL);
|
||||||
|
+
|
||||||
|
+ f = fopen(_PATH_ETHERS, "r");
|
||||||
|
+ if (f == NULL)
|
||||||
|
+ return -1;
|
||||||
|
+ while ((p = fgetln(f, &len)) != NULL) {
|
||||||
|
+ if (p[len - 1] != '\n')
|
||||||
|
+ continue; /* skip lines w/o \n */
|
||||||
|
+ p[--len] = '\0';
|
||||||
|
+ if (ether_line(p, &try, hostname) == 0 &&
|
||||||
|
+ memcmp(&try, e, sizeof try) == 0) {
|
||||||
|
+ (void)fclose(f);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ (void)fclose(f);
|
||||||
|
+ errno = ENOENT;
|
||||||
|
+ return -1;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
+ * ether_hostton():
|
||||||
|
+ * This function interrogates the data base mapping host names to Ethernet
|
||||||
|
+ * addresses, /etc/ethers.
|
||||||
|
+ * It looks up the given host name and writes the associated Ethernet address
|
||||||
|
+ * into the structure passed.
|
||||||
|
+ * It returns zero if it finds the requested address and -1 if not.
|
||||||
|
+ */
|
||||||
|
+int ether_hostton(const char *hostname, struct ether_addr *e)
|
||||||
|
+{
|
||||||
|
+ FILE *f;
|
||||||
|
+ char *p;
|
||||||
|
+ size_t len;
|
||||||
|
+ char try[MAXHOSTNAMELEN + 1];
|
||||||
|
+
|
||||||
|
+ assert(hostname != NULL);
|
||||||
|
+ assert(e != NULL);
|
||||||
|
+
|
||||||
|
+ f = fopen(_PATH_ETHERS, "r");
|
||||||
|
+ if (f==NULL)
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
+ while ((p = fgetln(f, &len)) != NULL) {
|
||||||
|
+ if (p[len - 1] != '\n')
|
||||||
|
+ continue; /* skip lines w/o \n */
|
||||||
|
+ p[--len] = '\0';
|
||||||
|
+ if (ether_line(p, e, try) == 0 && strcmp(hostname, try) == 0) {
|
||||||
|
+ (void)fclose(f);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ (void)fclose(f);
|
||||||
|
+ errno = ENOENT;
|
||||||
|
+ return -1;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
+ * ether_line():
|
||||||
|
+ * This function parses a line from the /etc/ethers file and fills in the passed
|
||||||
|
+ * ``struct ether_addr'' and character buffer with the Ethernet address and host
|
||||||
|
+ * name on the line.
|
||||||
|
+ * It returns zero if the line was successfully parsed and -1 if not.
|
||||||
|
+ */
|
||||||
|
+int ether_line(const char *l, struct ether_addr *e, char *hostname)
|
||||||
|
+{
|
||||||
|
+ unsigned int i[6];
|
||||||
|
+
|
||||||
|
+#define S2(arg) #arg
|
||||||
|
+#define S1(arg) S2(arg)
|
||||||
|
+ static const char fmt[] = " %x:%x:%x:%x:%x:%x"
|
||||||
|
+ " %" S1(MAXHOSTNAMELEN) "s\n";
|
||||||
|
+#undef S2
|
||||||
|
+#undef S1
|
||||||
|
+
|
||||||
|
+ assert(l != NULL);
|
||||||
|
+ assert(e != NULL);
|
||||||
|
+ assert(hostname != NULL);
|
||||||
|
+
|
||||||
|
+ if (sscanf(l, fmt,
|
||||||
|
+ &i[0], &i[1], &i[2], &i[3], &i[4], &i[5], hostname) == 7) {
|
||||||
|
+ e->ether_addr_octet[0] = (unsigned char)i[0];
|
||||||
|
+ e->ether_addr_octet[1] = (unsigned char)i[1];
|
||||||
|
+ e->ether_addr_octet[2] = (unsigned char)i[2];
|
||||||
|
+ e->ether_addr_octet[3] = (unsigned char)i[3];
|
||||||
|
+ e->ether_addr_octet[4] = (unsigned char)i[4];
|
||||||
|
+ e->ether_addr_octet[5] = (unsigned char)i[5];
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+ errno = EINVAL;
|
||||||
|
+ return -1;
|
||||||
|
+}
|
||||||
|
--
|
||||||
|
1.7.9.5
|
||||||
|
|
Loading…
Reference in New Issue