new file mode 100644
@@ -0,0 +1,85 @@
+From f414dea1316a48aba3e8e293201ebd51652d3ef4 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 9 Jul 2017 15:17:29 -0700
+Subject: [PATCH] Define in_* structs for non-glibc system libs
+
+These defines and structs are required to be coming from
+userspace netinet/in.h, which is being overridden in klibc
+however, libc-compat.h from kernel is only written keeping
+glibc in mind, and does not provide adequate guards for musl
+to infer that these structs should be defined in linux/in.h
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ usr/include/netinet/in.h | 33 +++++++++++++++++++++++++++++++++
+ 1 file changed, 33 insertions(+)
+
+Index: git/usr/include/netinet/in.h
+===================================================================
+--- git.orig/usr/include/netinet/in.h
++++ git/usr/include/netinet/in.h
+@@ -5,6 +5,42 @@
+ #ifndef _NETINET_IN_H
+ #define _NETINET_IN_H
+
++#ifndef __GLIBC__
++#include <linux/libc-compat.h>
++
++#undef __UAPI_DEF_IN_ADDR
++#undef __UAPI_DEF_IN_IPPROTO
++#undef __UAPI_DEF_IN_PKTINFO
++#undef __UAPI_DEF_IP_MREQ
++#undef __UAPI_DEF_SOCKADDR_IN
++#undef __UAPI_DEF_IN_CLASS
++#undef __UAPI_DEF_IN6_ADDR
++#undef __UAPI_DEF_IN6_ADDR_ALT
++#undef __UAPI_DEF_SOCKADDR_IN6
++#undef __UAPI_DEF_IPV6_MREQ
++#undef __UAPI_DEF_IPPROTO_V6
++#undef __UAPI_DEF_IPV6_OPTIONS
++#undef __UAPI_DEF_IN6_PKTINFO
++#undef __UAPI_DEF_IP6_MTUINFO
++#undef __UAPI_DEF_IF_IFREQ
++
++#define __UAPI_DEF_IN_ADDR 1
++#define __UAPI_DEF_IN_IPPROTO 1
++#define __UAPI_DEF_IN_PKTINFO 1
++#define __UAPI_DEF_IP_MREQ 1
++#define __UAPI_DEF_SOCKADDR_IN 1
++#define __UAPI_DEF_IN_CLASS 1
++#define __UAPI_DEF_IN6_ADDR 1
++#define __UAPI_DEF_IN6_ADDR_ALT 1
++#define __UAPI_DEF_SOCKADDR_IN6 1
++#define __UAPI_DEF_IPV6_MREQ 1
++#define __UAPI_DEF_IPPROTO_V6 1
++#define __UAPI_DEF_IPV6_OPTIONS 1
++#define __UAPI_DEF_IN6_PKTINFO 1
++#define __UAPI_DEF_IP6_MTUINFO 1
++#define __UAPI_DEF_IF_IFREQ 1
++#endif
++
+ #include <klibc/extern.h>
+ #include <stdint.h>
+ #include <endian.h> /* Must be included *before* <linux/in.h> */
+Index: git/usr/include/net/if.h
+===================================================================
+--- git.orig/usr/include/net/if.h
++++ git/usr/include/net/if.h
+@@ -1,6 +1,17 @@
+ #ifndef _NET_IF_H
+ #define _NET_IF_H
+
++#ifndef __GLIBC__
++#include <linux/libc-compat.h>
++#undef __UAPI_DEF_IF_IFREQ
++#define __UAPI_DEF_IF_IFREQ 1
++#undef __UAPI_DEF_IF_IFNAMSIZ
++#define __UAPI_DEF_IF_IFNAMSIZ 1
++#undef __UAPI_DEF_IF_IFMAP
++#define __UAPI_DEF_IF_IFMAP 1
++#undef __UAPI_DEF_IF_NET_DEVICE_FLAGS
++#define __UAPI_DEF_IF_NET_DEVICE_FLAGS 1
++#endif
+ #include <sys/socket.h>
+ #include <sys/types.h>
+ #include <linux/if.h>
new file mode 100644
@@ -0,0 +1,73 @@
+From b7e28e93776c2f08590d95f3b00975b42cfdb5f5 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 9 Jul 2017 13:15:38 -0700
+Subject: [PATCH] build: Do not override variables passed from environment
+
+OE already passes right options via compiler
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile | 16 ++++++++--------
+ usr/klibc/arch/arm/MCONFIG | 6 ++----
+ usr/klibc/arch/arm64/MCONFIG | 5 +----
+ 3 files changed, 11 insertions(+), 16 deletions(-)
+
+Index: git/Makefile
+===================================================================
+--- git.orig/Makefile
++++ git/Makefile
+@@ -19,14 +19,14 @@ include $(srctree)/scripts/Kbuild.includ
+
+ KLIBCROSS ?= $(CROSS_COMPILE)
+ export KLIBCROSS
+-export CC := $(KLIBCROSS)gcc
+-export LD := $(KLIBCROSS)ld
+-export AR := $(KLIBCROSS)ar
+-export RANLIB := $(KLIBCROSS)ranlib
+-export STRIP := $(KLIBCROSS)strip
+-export NM := $(KLIBCROSS)nm
+-export OBJCOPY := $(KLIBCROSS)objcopy
+-export OBJDUMP := $(KLIBCROSS)objdump
++export CC ?= $(KLIBCROSS)gcc
++export LD ?= $(KLIBCROSS)ld
++export AR ?= $(KLIBCROSS)ar
++export RANLIB ?= $(KLIBCROSS)ranlib
++export STRIP ?= $(KLIBCROSS)strip
++export NM ?= $(KLIBCROSS)nm
++export OBJCOPY ?= $(KLIBCROSS)objcopy
++export OBJDUMP ?= $(KLIBCROSS)objdump
+
+ NOSTDINC_FLAGS := -nostdlib -nostdinc -isystem $(shell $(CC) -print-file-name=include)
+
+Index: git/usr/klibc/arch/arm/MCONFIG
+===================================================================
+--- git.orig/usr/klibc/arch/arm/MCONFIG
++++ git/usr/klibc/arch/arm/MCONFIG
+@@ -7,10 +7,7 @@
+ # accordingly.
+ #
+
+-CPU_ARCH ?= armv4
+-CPU_TUNE ?= strongarm
+-
+-KLIBCOPTFLAGS += -Os -march=$(CPU_ARCH) -mtune=$(CPU_TUNE)
++KLIBCOPTFLAGS += -Os
+ KLIBCBITSIZE = 32
+ KLIBCREQFLAGS += -fno-exceptions
+ KLIBCSTRIPFLAGS += -R .ARM.exidx
+Index: git/usr/klibc/arch/arm64/MCONFIG
+===================================================================
+--- git.orig/usr/klibc/arch/arm64/MCONFIG
++++ git/usr/klibc/arch/arm64/MCONFIG
+@@ -7,10 +7,7 @@
+ # accordingly.
+ #
+
+-CPU_ARCH ?= armv8-a
+-CPU_TUNE ?= generic
+-
+-KLIBCOPTFLAGS += -g -Os -march=$(CPU_ARCH) -mtune=$(CPU_TUNE)
++KLIBCOPTFLAGS += -g -Os
+ KLIBCBITSIZE = 64
+ KLIBCREQFLAGS += -fno-exceptions -mgeneral-regs-only
+
new file mode 100644
@@ -0,0 +1,31 @@
+From 2fff607fd0b5550e5072a6fffcbb01c29d5207d2 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 9 Jul 2017 13:51:25 -0700
+Subject: [PATCH] dash: Specify format string in fmtstr()
+
+Fixes build with hardening flags
+
+usr/dash/jobs.c:429:3: error: format not a string literal and no format arguments [-Werror=format-security]
+ col = fmtstr(s, 32, strsignal(st));
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ usr/dash/jobs.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/usr/dash/jobs.c b/usr/dash/jobs.c
+index 009bbfee..299bcacc 100644
+--- a/usr/dash/jobs.c
++++ b/usr/dash/jobs.c
+@@ -426,7 +426,7 @@ sprint_status(char *s, int status, int sigonly)
+ goto out;
+ #endif
+ }
+- col = fmtstr(s, 32, strsignal(st));
++ col = fmtstr(s, 32, "%s", strsignal(st));
+ #ifdef WCOREDUMP
+ if (WCOREDUMP(status)) {
+ col += fmtstr(s + col, 16, " (core dumped)");
+--
+2.13.2
+
new file mode 100644
@@ -0,0 +1,32 @@
+From ab060a57b41f989665ade20e813bbcb67f91f1f2 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 9 Jul 2017 15:56:28 -0700
+Subject: [PATCH] include linux/sysinfo.h directly
+
+This is done to avoid the kernel header linux/kernel.h to use
+__GLIBC__ define to decide on if libc implements sysinfo() API
+or not. Kernel headers should be independent of such assumptions
+but until its done in right place, change the local header
+override to avoid this assumption
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ usr/include/sys/sysinfo.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/usr/include/sys/sysinfo.h b/usr/include/sys/sysinfo.h
+index dba68dc6..d145c0b1 100644
+--- a/usr/include/sys/sysinfo.h
++++ b/usr/include/sys/sysinfo.h
+@@ -5,7 +5,7 @@
+ #ifndef _SYS_SYSINFO_H
+ #define _SYS_SYSINFO_H
+
+-#include <linux/kernel.h>
++#include <linux/sysinfo.h>
+
+ extern int sysinfo(struct sysinfo *info);
+
+--
+2.13.2
+
@@ -7,17 +7,23 @@ LIC_FILES_CHKSUM = "file://usr/klibc/LICENSE;md5=d75181f10e998c21eb147f6d2e43ce8
DEPENDS = "linux-libc-headers perl-native"
SRCREV = "4d19974d7020488f63651244e1f9f51727c3f66c"
-SRC_URI = "git://git.kernel.org/pub/scm/libs/klibc/klibc.git"
-SRC_URI_append_linux-gnueabi = " file://klibc-config-eabi.patch \
- file://armv4-fix-v4bx.patch \
- "
-SRC_URI_append_linux-uclibceabi = " file://klibc-config-eabi.patch \
- file://armv4-fix-v4bx.patch \
- "
-SRC_URI += "file://klibc-linux-libc-dev.patch \
- file://staging.patch \
- file://klcc-consider-sysroot.patch \
- "
+SRC_URI = "git://git.kernel.org/pub/scm/libs/klibc/klibc.git \
+ ${ARMPATCHES} \
+ file://klibc-linux-libc-dev.patch \
+ file://staging.patch \
+ file://klcc-consider-sysroot.patch \
+ file://0001-build-Do-not-override-variables-passed-from-environm.patch \
+ file://0001-dash-Specify-format-string-in-fmtstr.patch \
+ file://0001-Define-in_-structs-for-non-glibc-system-libs.patch \
+ file://0001-include-linux-sysinfo.h-directly.patch \
+"
+
+ARMPATCHES ?= ""
+
+ARMPATCHES_arm = "file://klibc-config-eabi.patch \
+ file://armv4-fix-v4bx.patch \
+ "
+
S = "${WORKDIR}/git"
@@ -34,10 +40,27 @@ EXTRA_OEMAKE = "'KLIBCARCH=${KLIBC_ARCH}' \
export FIX_ARMV4_EABI_BX = "${FIX_V4BX}"
+#klibc_conf_variable CMDLINE "\"${CMDLINE} ${CMDLINE_DEBUG}\""
+
+klibc_conf_variable() {
+ CONF_SED_SCRIPT="$CONF_SED_SCRIPT /CONFIG_$1[ =]/d;"
+ if test "$2" = "n"
+ then
+ echo "# CONFIG_$1 is not set" >> ${S}/defconfig
+ else
+ echo "CONFIG_$1=$2" >> ${S}/defconfig
+ fi
+}
+
do_configure () {
ln -sf "${STAGING_DIR_TARGET}${exec_prefix}" linux
+ if [ "${ARM_INSTRUCTION_SET}" = "thumb" ] ; then
+ klibc_conf_variable KLIBC_THUMB y
+ fi
+
}
+
INHIBIT_PACKAGE_STRIP = "1"
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
INSANE_SKIP_${PN} = "already-stripped"
klibc failed to build with armv7+ when using thumb2 it needed to resepct CC/CXX/LD from environment Add patches to fix build with musl, to sort out the linux header maze. Signed-off-by: Khem Raj <raj.khem@gmail.com> Cc: Andrea Adami <andrea.adami@gmail.com> --- ...ine-in_-structs-for-non-glibc-system-libs.patch | 85 ++++++++++++++++++++++ ...t-override-variables-passed-from-environm.patch | 73 +++++++++++++++++++ ...0001-dash-Specify-format-string-in-fmtstr.patch | 31 ++++++++ .../0001-include-linux-sysinfo.h-directly.patch | 32 ++++++++ meta-initramfs/recipes-devtools/klibc/klibc.inc | 45 +++++++++--- 5 files changed, 255 insertions(+), 11 deletions(-) create mode 100644 meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-Define-in_-structs-for-non-glibc-system-libs.patch create mode 100644 meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-build-Do-not-override-variables-passed-from-environm.patch create mode 100644 meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-dash-Specify-format-string-in-fmtstr.patch create mode 100644 meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-include-linux-sysinfo.h-directly.patch -- 2.13.2 -- _______________________________________________ Openembedded-devel mailing list Openembedded-devel@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-devel