klibc: Fix build with musl

klibc failed to build with armv7+ when using thumb2
it needed to resepct TUNE_CCARGS

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>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
This commit is contained in:
Khem Raj 2017-07-10 21:54:22 -07:00 committed by Martin Jansa
parent 592e9f26cc
commit 15266c135a
5 changed files with 200 additions and 11 deletions

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,29 @@
From b4e120f5edf06e6df138b1804a8b5180584cea6b Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Mon, 10 Jul 2017 20:42:50 -0700
Subject: [PATCH] mkfifo: Implement mkfifo
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
usr/utils/mkfifo.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/usr/utils/mkfifo.c b/usr/utils/mkfifo.c
index 5a758b2a..f1f577e6 100644
--- a/usr/utils/mkfifo.c
+++ b/usr/utils/mkfifo.c
@@ -26,6 +26,11 @@ static int make_fifo(char *dir)
return 0;
}
+int mkfifo (const char *__p, mode_t __m)
+{
+ return mknod(__p, (__m & ~S_IFMT) | S_IFIFO, (dev_t) 0);
+}
+
int main(int argc, char *argv[])
{
int c, ret = 0;
--
2.13.2

View File

@ -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-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 \
file://0001-mkfifo-Implement-mkfifo.patch \
"
ARMPATCHES ?= ""
ARMPATCHES_arm = "file://klibc-config-eabi.patch \
file://armv4-fix-v4bx.patch \
"
S = "${WORKDIR}/git"
@ -30,9 +36,12 @@ EXTRA_OEMAKE = "'KLIBCARCH=${KLIBC_ARCH}' \
'INSTALLROOT=${D}' \
'INSTALLDIR=${libdir}/klibc' \
'SHLIBDIR=${libdir}' \
'${KLIBCTHUMB}' \
'KLIBCOPTFLAGS=${TUNE_CCARGS}' \
"
export FIX_ARMV4_EABI_BX = "${FIX_V4BX}"
KLIBCTHUMB = "${@['', 'CONFIG_KLIBC_THUMB=y'][(d.getVar('ARM_INSTRUCTION_SET') == 'thumb')]}"
do_configure () {
ln -sf "${STAGING_DIR_TARGET}${exec_prefix}" linux
@ -51,3 +60,6 @@ KLIBC_ARCH_x86-64 = "x86_64"
KLIBC_ARCH_powerpc = "ppc"
KLIBC_ARCH_powerpc64 = "ppc64"
THIS_LIBKLIBC = "libklibc (= ${PV}-${PR})"
SECURITY_CFLAGS = "-fno-PIE -no-pie"
SECURITY_LDFLAGS = "-no-pie"