[oe] [meta-initramfs][PATCH 1/2] klibc 2.0.2: add support for Aarch64
Koen Kooi
koen at dominion.thruhere.net
Tue Dec 10 10:41:40 UTC 2013
Signed-off-by: Koen Kooi <koen.kooi at linaro.org>
---
.../0001-syscalls-Fixup-some-syscalls.patch | 111 ++++
...002-syscalls-Add-syscalls-needed-by-arm64.patch | 621 +++++++++++++++++++++
.../0003-arm64-Introduce-arm64-support.patch | 431 ++++++++++++++
.../recipes-devtools/klibc/klibc_2.0.2.bb | 6 +
4 files changed, 1169 insertions(+)
create mode 100644 meta-initramfs/recipes-devtools/klibc/klibc-2.0.2/0001-syscalls-Fixup-some-syscalls.patch
create mode 100644 meta-initramfs/recipes-devtools/klibc/klibc-2.0.2/0002-syscalls-Add-syscalls-needed-by-arm64.patch
create mode 100644 meta-initramfs/recipes-devtools/klibc/klibc-2.0.2/0003-arm64-Introduce-arm64-support.patch
diff --git a/meta-initramfs/recipes-devtools/klibc/klibc-2.0.2/0001-syscalls-Fixup-some-syscalls.patch b/meta-initramfs/recipes-devtools/klibc/klibc-2.0.2/0001-syscalls-Fixup-some-syscalls.patch
new file mode 100644
index 0000000..c80b171
--- /dev/null
+++ b/meta-initramfs/recipes-devtools/klibc/klibc-2.0.2/0001-syscalls-Fixup-some-syscalls.patch
@@ -0,0 +1,111 @@
+From 131489114132a4199b6b1240c67439ba584fb8fa Mon Sep 17 00:00:00 2001
+From: Steve Capper <steve.capper at linaro.org>
+Date: Wed, 6 Nov 2013 16:37:08 +0000
+Subject: [PATCH 1/3] syscalls: Fixup some syscalls
+
+mknodat and mkdirat contain a spurious repeated parameter, linkat
+is missing the final int flags parameter, symlinkat has the first
+two parameters transposed, and fchmodat is missing the flags
+parameter and is declared in the wrong header.
+
+Also declarations are missing for utimensat and fchownat.
+
+This patch fixes up these syscall declarations.
+
+Originally-by: Neil Williams <codehelp at debian.org>
+Originally-by: Anil Singhar <anil.singhar at linaro.org>
+Signed-off-by: Steve Capper <steve.capper at linaro.org>
+
+Upstream-status: Submitted
+
+---
+ usr/include/sys/stat.h | 4 +++-
+ usr/include/unistd.h | 8 ++++----
+ usr/klibc/SYSCALLS.def | 8 ++++----
+ 3 files changed, 11 insertions(+), 9 deletions(-)
+
+diff --git a/usr/include/sys/stat.h b/usr/include/sys/stat.h
+index 4850429..c4b378e 100644
+--- a/usr/include/sys/stat.h
++++ b/usr/include/sys/stat.h
+@@ -69,8 +69,10 @@ __extern int fstatat(int, const char *, struct stat *, int);
+ __extern int lstat(const char *, struct stat *);
+ __extern mode_t umask(mode_t);
+ __extern int mknod(const char *, mode_t, dev_t);
+-__extern int mknodat(int, const char *, const char *, mode_t, dev_t);
++__extern int mknodat(int, const char *, mode_t, dev_t);
+ __extern int mkfifo(const char *, mode_t);
++__extern int utimensat(int, const char *, const struct timespec *, int);
++__extern int fchmodat(int, const char *, mode_t, int);
+
+ __extern_inline int mkfifo(const char *__p, mode_t __m)
+ {
+diff --git a/usr/include/unistd.h b/usr/include/unistd.h
+index f0e19c2..6c08d4e 100644
+--- a/usr/include/unistd.h
++++ b/usr/include/unistd.h
+@@ -61,28 +61,28 @@ __extern int setfsuid(uid_t);
+ __extern int access(const char *, int);
+ __extern int faccessat(int, const char *, int, int);
+ __extern int link(const char *, const char *);
+-__extern int linkat(int, const char *, int, const char *);
++__extern int linkat(int, const char *, int, const char *, int);
+ __extern int unlink(const char *);
+ __extern int unlinkat(int, const char *, int);
+ __extern int chdir(const char *);
+ __extern int fchdir(int);
+ __extern int chmod(const char *, mode_t);
+ __extern int fchmod(int, mode_t);
+-__extern int fchmodat(int, const char *, mode_t);
+ __extern int mkdir(const char *, mode_t);
+-__extern int mkdirat(int, const char *, const char *, mode_t);
++__extern int mkdirat(int, const char *, mode_t);
+ __extern int rmdir(const char *);
+ __extern int pipe(int *);
+ __extern int pipe2(int *, int);
+ __extern int chroot(const char *);
+ __extern int symlink(const char *, const char *);
+-__extern int symlinkat(int, const char *, const char *);
++__extern int symlinkat(const char *, int, const char *);
+ __extern int readlink(const char *, char *, size_t);
+ __extern int readlinkat(int, const char *, char *, size_t);
+ __extern int chown(const char *, uid_t, gid_t);
+ __extern int fchown(int, uid_t, gid_t);
+ __extern int lchown(const char *, uid_t, gid_t);
+ __extern char *getcwd(char *, size_t);
++__extern int fchownat(int, const char *, uid_t, gid_t, int);
+
+ /* Also in <fcntl.h> */
+ #ifndef _KLIBC_IN_OPEN_C
+diff --git a/usr/klibc/SYSCALLS.def b/usr/klibc/SYSCALLS.def
+index 9b07aa2..55d8e36 100644
+--- a/usr/klibc/SYSCALLS.def
++++ b/usr/klibc/SYSCALLS.def
+@@ -109,7 +109,7 @@ int swapoff(const char *);
+ int access(const char *, int);
+ int faccessat(int, const char *, int, int);
+ int link(const char *, const char *);
+-<?> int linkat(int, const char *, int, const char *);
++<?> int linkat(int, const char *, int, const char *, int);
+ int unlink(const char *);
+ <?> int unlinkat(int, const char *, int);
+ int chdir(const char *);
+@@ -117,12 +117,12 @@ int fchdir(int);
+ int rename(const char *, const char *);
+ <?> int renameat(int, const char *, int, const char *);
+ int mknod(const char *, mode_t, dev_t);
+-<?> int mknodat(int, const char *, const char *, mode_t, dev_t);
++<?> int mknodat(int, const char *, mode_t, dev_t);
+ int chmod(const char *, mode_t);
+ int fchmod(int, mode_t);
+-<?> int fchmodat(int, const char *, mode_t);
++<?> int fchmodat(int, const char *, mode_t, int);
+ int mkdir(const char *, mode_t);
+-<?> int mkdirat(int, const char *, const char *, mode_t);
++<?> int mkdirat(int, const char *, mode_t);
+ int rmdir(const char *);
+ <!alpha,ia64,mips,mips64,sh,sparc,sparc64> int pipe(int *);
+ int pipe2(int *, int);
+--
+1.8.4.2
+
diff --git a/meta-initramfs/recipes-devtools/klibc/klibc-2.0.2/0002-syscalls-Add-syscalls-needed-by-arm64.patch b/meta-initramfs/recipes-devtools/klibc/klibc-2.0.2/0002-syscalls-Add-syscalls-needed-by-arm64.patch
new file mode 100644
index 0000000..3a0b0fe
--- /dev/null
+++ b/meta-initramfs/recipes-devtools/klibc/klibc-2.0.2/0002-syscalls-Add-syscalls-needed-by-arm64.patch
@@ -0,0 +1,621 @@
+From f7acda1b953dd185e756f614aa858127cf6992ec Mon Sep 17 00:00:00 2001
+From: Steve Capper <steve.capper at linaro.org>
+Date: Wed, 6 Nov 2013 16:07:33 +0000
+Subject: [PATCH 2/3] syscalls: Add syscalls needed by arm64
+
+arm64 uses generic syscalls, and does not include the "noat",
+"noflags", and "deprecated" syscalls.
+i.e. __ARCH_WANT_SYSCALL_{NO_AT|NO_FLAGS|DEPRECATED}
+
+This patch adds the syscalls needed for klibc to run on arm64.
+
+Originally-by: Neil Williams <codehelp at debian.org>
+Originally-by: Anil Singhar <anil.singhar at linaro.org>
+Signed-off-by: Steve Capper <steve.capper at linaro.org>
+
+Upstream-status: Submitted
+
+---
+ usr/klibc/Kbuild | 3 +++
+ usr/klibc/SYSCALLS.def | 39 ++++++++++++++++++++-------------------
+ usr/klibc/access.c | 12 ++++++++++++
+ usr/klibc/chmod.c | 13 +++++++++++++
+ usr/klibc/chown.c | 12 ++++++++++++
+ usr/klibc/dup2.c | 11 +++++++++++
+ usr/klibc/lchown.c | 12 ++++++++++++
+ usr/klibc/link.c | 12 ++++++++++++
+ usr/klibc/lstat.c | 14 ++++++++++++++
+ usr/klibc/mkdir.c | 14 ++++++++++++++
+ usr/klibc/mknod.c | 14 ++++++++++++++
+ usr/klibc/open.c | 29 +++++++++++++++++++++++++++--
+ usr/klibc/pipe.c | 11 +++++++++++
+ usr/klibc/poll.c | 21 +++++++++++++++++++++
+ usr/klibc/readlink.c | 12 ++++++++++++
+ usr/klibc/rename.c | 11 +++++++++++
+ usr/klibc/rmdir.c | 12 ++++++++++++
+ usr/klibc/select.c | 34 ++++++++++++++++++++++++++++++++++
+ usr/klibc/stat.c | 14 ++++++++++++++
+ usr/klibc/symlink.c | 12 ++++++++++++
+ usr/klibc/unlink.c | 12 ++++++++++++
+ usr/klibc/utimes.c | 20 ++++++++++++++++++++
+ 22 files changed, 323 insertions(+), 21 deletions(-)
+ create mode 100644 usr/klibc/access.c
+ create mode 100644 usr/klibc/chmod.c
+ create mode 100644 usr/klibc/chown.c
+ create mode 100644 usr/klibc/dup2.c
+ create mode 100644 usr/klibc/lchown.c
+ create mode 100644 usr/klibc/link.c
+ create mode 100644 usr/klibc/lstat.c
+ create mode 100644 usr/klibc/mkdir.c
+ create mode 100644 usr/klibc/mknod.c
+ create mode 100644 usr/klibc/pipe.c
+ create mode 100644 usr/klibc/poll.c
+ create mode 100644 usr/klibc/readlink.c
+ create mode 100644 usr/klibc/rename.c
+ create mode 100644 usr/klibc/rmdir.c
+ create mode 100644 usr/klibc/select.c
+ create mode 100644 usr/klibc/stat.c
+ create mode 100644 usr/klibc/symlink.c
+ create mode 100644 usr/klibc/unlink.c
+ create mode 100644 usr/klibc/utimes.c
+
+diff --git a/usr/klibc/Kbuild b/usr/klibc/Kbuild
+index 2bef9ca..40d43c7 100644
+--- a/usr/klibc/Kbuild
++++ b/usr/klibc/Kbuild
+@@ -58,6 +58,9 @@ klib-y += vsnprintf.o snprintf.o vsprintf.o sprintf.o \
+ inet/inet_ntoa.o inet/inet_aton.o inet/inet_addr.o \
+ inet/inet_ntop.o inet/inet_pton.o inet/bindresvport.o \
+ send.o recv.o \
++ access.o chmod.o chown.o dup2.o mknod.o poll.o rename.o stat.o \
++ lchown.o link.o rmdir.o unlink.o utimes.o lstat.o mkdir.o \
++ readlink.o select.o symlink.o pipe.o \
+ ctype/isalnum.o ctype/isalpha.o ctype/isascii.o \
+ ctype/isblank.o ctype/iscntrl.o ctype/isdigit.o \
+ ctype/isgraph.o ctype/islower.o ctype/isprint.o \
+diff --git a/usr/klibc/SYSCALLS.def b/usr/klibc/SYSCALLS.def
+index 55d8e36..12f57ac 100644
+--- a/usr/klibc/SYSCALLS.def
++++ b/usr/klibc/SYSCALLS.def
+@@ -106,34 +106,34 @@ int swapoff(const char *);
+ /*
+ * Inode-related system calls
+ */
+-int access(const char *, int);
++<?> int access(const char *, int);
+ int faccessat(int, const char *, int, int);
+-int link(const char *, const char *);
++<?> int link(const char *, const char *);
+ <?> int linkat(int, const char *, int, const char *, int);
+-int unlink(const char *);
++<?> int unlink(const char *);
+ <?> int unlinkat(int, const char *, int);
+ int chdir(const char *);
+ int fchdir(int);
+-int rename(const char *, const char *);
++<?> int rename(const char *, const char *);
+ <?> int renameat(int, const char *, int, const char *);
+-int mknod(const char *, mode_t, dev_t);
++<?> int mknod(const char *, mode_t, dev_t);
+ <?> int mknodat(int, const char *, mode_t, dev_t);
+-int chmod(const char *, mode_t);
++<?> int chmod(const char *, mode_t);
+ int fchmod(int, mode_t);
+ <?> int fchmodat(int, const char *, mode_t, int);
+-int mkdir(const char *, mode_t);
++<?> int mkdir(const char *, mode_t);
+ <?> int mkdirat(int, const char *, mode_t);
+-int rmdir(const char *);
+-<!alpha,ia64,mips,mips64,sh,sparc,sparc64> int pipe(int *);
++<?> int rmdir(const char *);
++<?!alpha,ia64,mips,mips64,sh,sparc,sparc64> int pipe(int *);
+ int pipe2(int *, int);
+ mode_t umask(mode_t);
+ int chroot(const char *);
+-int symlink(const char *, const char *);
++<?> int symlink(const char *, const char *);
+ <?> int symlinkat(const char *, int, const char *);
+-int readlink(const char *, char *, size_t);
++<?> int readlink(const char *, char *, size_t);
+ <?> int readlinkat(int, const char *, char *, int);
+-<!ppc64> int stat64,stat::stat(const char *, struct stat *);
+-<!ppc64> int lstat64,lstat::lstat(const char *, struct stat *);
++<?!ppc64> int stat64,stat::stat(const char *, struct stat *);
++<?!ppc64> int lstat64,lstat::lstat(const char *, struct stat *);
+ <!ppc64> int fstat64,fstat::fstat(int, struct stat *);
+ <ppc64> int stat::stat(const char *, struct stat *);
+ <ppc64> int lstat::lstat(const char *, struct stat *);
+@@ -141,14 +141,15 @@ int readlink(const char *, char *, size_t);
+ /* XXX: Is this right?! */
+ <?> int fstatat64,newfstatat,fstatat::fstatat(int, const char *, struct stat *, int);
+ int getdents64,getdents::getdents(unsigned int, struct dirent *, unsigned int);
+-int chown32,chown::chown(const char *, uid_t, gid_t);
++<?> int chown32,chown::chown(const char *, uid_t, gid_t);
+ int fchown32,fchown::fchown(int, uid_t, gid_t);
+ <?> int fchownat(int, const char *, uid_t, gid_t, int);
+-int lchown32,lchown::lchown(const char *, uid_t, gid_t);
++<?> int lchown32,lchown::lchown(const char *, uid_t, gid_t);
+ int getcwd::__getcwd(char *, size_t);
+ <?> int utime(const char *, const struct utimbuf *);
+ <?> int utimes(const char *, const struct timeval *);
+ <?> int futimesat(int, const char *, const struct timeval *);
++<?> int utimensat(int, const char *, const struct timespec *, int);
+ <?> int inotify_init();
+ <?> int inotify_add_watch(int, const char *, __u32);
+ <?> int inotify_rm_watch(int, __u32);
+@@ -158,7 +159,7 @@ int getcwd::__getcwd(char *, size_t);
+ */
+ <!i386,m68k,64> int open::__open(const char *, int, mode_t);
+ <?!i386,m68k,64> int openat::__openat(int, const char *, int, mode_t);
+-<64> int open(const char *, int, mode_t);
++<?64> int open(const char *, int, mode_t);
+ <64> int openat(int, const char *, int, mode_t);
+ ssize_t read(int, void *, size_t);
+ ssize_t write(int, const void *, size_t);
+@@ -166,14 +167,14 @@ int close(int);
+ <64> off_t lseek(int, off_t, int);
+ <32> int _llseek::__llseek(int, unsigned long, unsigned long, off_t *, int);
+ int dup(int);
+-int dup2(int, int);
++<?> int dup2(int, int);
+ int dup3(int, int, int);
+ <i386> int fcntl64 at varadic::fcntl(int, int, unsigned long);
+ <ppc64> int fcntl(int, int, unsigned long);
+ <!i386,ppc64> int fcntl64,fcntl::fcntl(int, int, unsigned long);
+ int ioctl(int, int, void *);
+ int flock(int, int);
+-int _newselect,select::select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
++<?> int _newselect,select::select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
+ #if defined(__NR_pselect) && !_KLIBC_USE_RT_SIG
+ int pselect(int, fd_set *, fd_set *, fd_set *, const struct timespec *, const sigset_t *);
+ #elif defined(__NR_pselect7)
+@@ -181,7 +182,7 @@ int pselect7::__pselect7(int, fd_set *, fd_set *, fd_set *, struct timespec *, c
+ #elif defined(__NR_pselect6)
+ int pselect6::__pselect6(int, fd_set *, fd_set *, fd_set *, struct timespec *, const struct __pselect6 *);
+ #endif
+-int poll(struct pollfd *, nfds_t, long);
++<?> int poll(struct pollfd *, nfds_t, long);
+ <?> int ppoll::__ppoll(struct pollfd *, nfds_t, struct timespec *, const sigset_t *, size_t);
+ int fsync(int);
+ int fdatasync,fsync::fdatasync(int);
+diff --git a/usr/klibc/access.c b/usr/klibc/access.c
+new file mode 100644
+index 0000000..0f24856
+--- /dev/null
++++ b/usr/klibc/access.c
+@@ -0,0 +1,12 @@
++#include <fcntl.h>
++#include <unistd.h>
++#include <sys/syscall.h>
++
++#ifndef __NR_access
++
++int access(const char *pathname, int mode)
++{
++ return faccessat(AT_FDCWD, pathname, mode, 0);
++}
++
++#endif /* __NR_access */
+diff --git a/usr/klibc/chmod.c b/usr/klibc/chmod.c
+new file mode 100644
+index 0000000..b5129e6
+--- /dev/null
++++ b/usr/klibc/chmod.c
+@@ -0,0 +1,13 @@
++#include <fcntl.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <sys/syscall.h>
++
++#ifndef __NR_chmod
++
++int chmod(const char *path, mode_t mode)
++{
++ return fchmodat(AT_FDCWD, path, mode, 0);
++}
++
++#endif /* __NR_chmod */
+diff --git a/usr/klibc/chown.c b/usr/klibc/chown.c
+new file mode 100644
+index 0000000..089cfc5
+--- /dev/null
++++ b/usr/klibc/chown.c
+@@ -0,0 +1,12 @@
++#include <fcntl.h>
++#include <unistd.h>
++#include <sys/syscall.h>
++
++#ifndef __NR_chown
++
++int chown(const char *path, uid_t owner, gid_t group)
++{
++ return fchownat(AT_FDCWD, path, owner, group, 0);
++}
++
++#endif /* __NR_chown */
+diff --git a/usr/klibc/dup2.c b/usr/klibc/dup2.c
+new file mode 100644
+index 0000000..67e2171
+--- /dev/null
++++ b/usr/klibc/dup2.c
+@@ -0,0 +1,11 @@
++#include <unistd.h>
++#include <sys/syscall.h>
++
++#ifndef __NR_dup2
++
++int dup2(int fd, int fd2)
++{
++ return dup3(fd, fd2, 0);
++}
++
++#endif /* __NR_dup2 */
+diff --git a/usr/klibc/lchown.c b/usr/klibc/lchown.c
+new file mode 100644
+index 0000000..9a9e1e1
+--- /dev/null
++++ b/usr/klibc/lchown.c
+@@ -0,0 +1,12 @@
++#include <fcntl.h>
++#include <unistd.h>
++#include <sys/syscall.h>
++
++#ifndef __NR_lchown
++
++int lchown(const char *path, uid_t owner, gid_t group)
++{
++ return fchownat(AT_FDCWD, path, owner, group, AT_SYMLINK_NOFOLLOW);
++}
++
++#endif /* __NR_lchown */
+diff --git a/usr/klibc/link.c b/usr/klibc/link.c
+new file mode 100644
+index 0000000..1d4b70e
+--- /dev/null
++++ b/usr/klibc/link.c
+@@ -0,0 +1,12 @@
++#include <fcntl.h>
++#include <unistd.h>
++#include <sys/syscall.h>
++
++#ifndef __NR_link
++
++int link(const char *oldpath, const char *newpath)
++{
++ return linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0);
++}
++
++#endif /* __NR_link */
+diff --git a/usr/klibc/lstat.c b/usr/klibc/lstat.c
+new file mode 100644
+index 0000000..3288a33
+--- /dev/null
++++ b/usr/klibc/lstat.c
+@@ -0,0 +1,14 @@
++#include <fcntl.h>
++#include <unistd.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <sys/syscall.h>
++
++#ifndef __NR_lstat
++
++int lstat(const char *path, struct stat *buf)
++{
++ return fstatat(AT_FDCWD, path, buf, AT_SYMLINK_NOFOLLOW);
++}
++
++#endif /* __NR_lstat */
+diff --git a/usr/klibc/mkdir.c b/usr/klibc/mkdir.c
+new file mode 100644
+index 0000000..27673e3
+--- /dev/null
++++ b/usr/klibc/mkdir.c
+@@ -0,0 +1,14 @@
++#include <fcntl.h>
++#include <sys/stat.h>
++#include <sys/types.h>
++#include <unistd.h>
++#include <sys/syscall.h>
++
++#ifndef __NR_mkdir
++
++int mkdir(const char *pathname, mode_t mode)
++{
++ return mkdirat(AT_FDCWD, pathname, mode);
++}
++
++#endif /* __NR_mkdir */
+diff --git a/usr/klibc/mknod.c b/usr/klibc/mknod.c
+new file mode 100644
+index 0000000..727505f
+--- /dev/null
++++ b/usr/klibc/mknod.c
+@@ -0,0 +1,14 @@
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#include <unistd.h>
++#include <sys/syscall.h>
++
++#ifndef __NR_mknod
++
++int mknod(const char *pathname, mode_t mode, dev_t dev)
++{
++ return mknodat(AT_FDCWD, pathname, mode, dev);
++}
++
++#endif /* __NR_mknod */
+diff --git a/usr/klibc/open.c b/usr/klibc/open.c
+index 126f6db..5305c3d 100644
+--- a/usr/klibc/open.c
++++ b/usr/klibc/open.c
+@@ -3,14 +3,39 @@
+ *
+ * On 32-bit platforms we need to pass O_LARGEFILE to the open()
+ * system call, to indicate that we're 64-bit safe.
++ *
++ * For 64 bit systems without the open syscall, pass straight
++ * through into openat.
+ */
+
+ #define _KLIBC_IN_OPEN_C
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <bitsize.h>
++#include <sys/syscall.h>
++
++#ifndef __NR_open
++#if _BITSIZE == 32
++
++extern int __openat(int, const char *, int, mode_t);
++
++int open(const char *pathname, int flags, mode_t mode)
++{
++ return __openat(AT_FDCWD, pathname, flags | O_LARGEFILE, mode);
++}
++
++#else
++
++__extern int openat(int, const char *, int, ...);
++
++int open(const char *pathname, int flags, mode_t mode)
++{
++ return openat(AT_FDCWD, pathname, flags, mode);
++}
++
++#endif /* _BITSIZE == 32 */
+
+-#if _BITSIZE == 32 && !defined(__i386__) && !defined(__m68k__)
++#elif _BITSIZE == 32 && !defined(__i386__) && !defined(__m68k__)
+
+ extern int __open(const char *, int, mode_t);
+
+@@ -19,4 +44,4 @@ int open(const char *pathname, int flags, mode_t mode)
+ return __open(pathname, flags | O_LARGEFILE, mode);
+ }
+
+-#endif
++#endif /* __NR_open */
+diff --git a/usr/klibc/pipe.c b/usr/klibc/pipe.c
+new file mode 100644
+index 0000000..dfaed9e
+--- /dev/null
++++ b/usr/klibc/pipe.c
+@@ -0,0 +1,11 @@
++#include <unistd.h>
++#include <sys/syscall.h>
++
++#ifndef __NR_pipe
++
++int pipe(int pipefd[2])
++{
++ return pipe2(pipefd, 0);
++}
++
++#endif /* __NR_pipe */
+diff --git a/usr/klibc/poll.c b/usr/klibc/poll.c
+new file mode 100644
+index 0000000..69da693
+--- /dev/null
++++ b/usr/klibc/poll.c
+@@ -0,0 +1,21 @@
++#include <errno.h>
++#include <sys/poll.h>
++#include <sys/syscall.h>
++
++#ifndef __NR_poll
++
++int poll (struct pollfd *fds, nfds_t nfds, long timeout)
++{
++ struct timespec timeout_ts;
++ struct timespec *timeout_ts_p = NULL;
++
++ if (timeout >= 0) {
++ timeout_ts.tv_sec = timeout / 1000;
++ timeout_ts.tv_nsec = (timeout % 1000) * 1000000;
++ timeout_ts_p = &timeout_ts;
++ }
++
++ return ppoll(fds, nfds, timeout_ts_p, 0);
++}
++
++#endif /* __NR_poll */
+diff --git a/usr/klibc/readlink.c b/usr/klibc/readlink.c
+new file mode 100644
+index 0000000..0e67442
+--- /dev/null
++++ b/usr/klibc/readlink.c
+@@ -0,0 +1,12 @@
++#include <fcntl.h>
++#include <unistd.h>
++#include <sys/syscall.h>
++
++#ifndef __NR_readlink
++
++int readlink(const char *path, char *buf, size_t bufsiz)
++{
++ return readlinkat(AT_FDCWD, path, buf, bufsiz);
++}
++
++#endif /* __NR_readlink */
+diff --git a/usr/klibc/rename.c b/usr/klibc/rename.c
+new file mode 100644
+index 0000000..587c26f
+--- /dev/null
++++ b/usr/klibc/rename.c
+@@ -0,0 +1,11 @@
++#include <fcntl.h>
++#include <stdio.h>
++
++#ifndef __NR_rename
++
++int rename(const char *oldpath, const char *newpath)
++{
++ return renameat(AT_FDCWD, oldpath, AT_FDCWD, newpath);
++}
++
++#endif /* __NR_rename */
+diff --git a/usr/klibc/rmdir.c b/usr/klibc/rmdir.c
+new file mode 100644
+index 0000000..94ae5f2
+--- /dev/null
++++ b/usr/klibc/rmdir.c
+@@ -0,0 +1,12 @@
++#include <fcntl.h>
++#include <unistd.h>
++#include <sys/syscall.h>
++
++#ifndef __NR_rmdir
++
++int rmdir(const char *pathname)
++{
++ return unlinkat(AT_FDCWD, pathname, AT_REMOVEDIR);
++}
++
++#endif /* __NR_rmdir */
+diff --git a/usr/klibc/select.c b/usr/klibc/select.c
+new file mode 100644
+index 0000000..e416794
+--- /dev/null
++++ b/usr/klibc/select.c
+@@ -0,0 +1,34 @@
++#include <sys/time.h>
++#include <sys/types.h>
++#include <sys/select.h>
++#include <errno.h>
++#include <sys/syscall.h>
++
++#if !defined(__NR_select) && !defined(__NR__newselect)
++
++struct __pselect6;
++__extern int __pselect6(int, fd_set *, fd_set *, fd_set *,
++ const struct timespec *, const struct __pselect6 *);
++
++int select(int nfds, fd_set *readfds, fd_set *writefds,
++ fd_set *exceptfds, struct timeval *timeout)
++{
++ int result;
++ struct timespec ts;
++
++ if (timeout) {
++ ts.tv_sec = timeout->tv_sec;
++ ts.tv_nsec = timeout->tv_usec * 1000;
++ }
++
++ result = __pselect6(nfds, readfds, writefds, exceptfds, &ts, NULL);
++
++ if (timeout) {
++ timeout->tv_sec = ts.tv_sec;
++ timeout->tv_usec = ts.tv_nsec / 1000;
++ }
++
++ return result;
++}
++
++#endif
+diff --git a/usr/klibc/stat.c b/usr/klibc/stat.c
+new file mode 100644
+index 0000000..65063b0
+--- /dev/null
++++ b/usr/klibc/stat.c
+@@ -0,0 +1,14 @@
++#include <fcntl.h>
++#include <unistd.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <sys/syscall.h>
++
++#ifndef __NR_stat
++
++int stat(const char *path, struct stat *buf)
++{
++ return fstatat(AT_FDCWD, path, buf, 0);
++}
++
++#endif /* __NR_stat */
+diff --git a/usr/klibc/symlink.c b/usr/klibc/symlink.c
+new file mode 100644
+index 0000000..080394f
+--- /dev/null
++++ b/usr/klibc/symlink.c
+@@ -0,0 +1,12 @@
++#include <fcntl.h>
++#include <unistd.h>
++#include <sys/syscall.h>
++
++#ifndef __NR_symlink
++
++int symlink(const char *oldpath, const char *newpath)
++{
++ return symlinkat(oldpath, AT_FDCWD, newpath);
++}
++
++#endif /* __NR_symlink */
+diff --git a/usr/klibc/unlink.c b/usr/klibc/unlink.c
+new file mode 100644
+index 0000000..6dfe66c
+--- /dev/null
++++ b/usr/klibc/unlink.c
+@@ -0,0 +1,12 @@
++#include <fcntl.h>
++#include <unistd.h>
++#include <sys/syscall.h>
++
++#ifndef __NR_unlink
++
++int unlink(const char *pathname)
++{
++ return unlinkat(AT_FDCWD, pathname, 0);
++}
++
++#endif /* __NR_unlink */
+diff --git a/usr/klibc/utimes.c b/usr/klibc/utimes.c
+new file mode 100644
+index 0000000..fd378a6
+--- /dev/null
++++ b/usr/klibc/utimes.c
+@@ -0,0 +1,20 @@
++#include <fcntl.h>
++#include <sys/time.h>
++#include <sys/stat.h>
++#include <sys/syscall.h>
++
++#ifndef __NR_utimes
++
++int utimes(const char *file, const struct timeval tvp[2])
++{
++ struct timespec ts[2];
++
++ if (tvp) {
++ ts->tv_sec = tvp->tv_sec;
++ ts->tv_nsec = tvp->tv_usec * 1000;
++ }
++
++ return utimensat(AT_FDCWD, file, &ts[0], 0);
++}
++
++#endif /* __NR_utimes */
+--
+1.8.4.2
+
diff --git a/meta-initramfs/recipes-devtools/klibc/klibc-2.0.2/0003-arm64-Introduce-arm64-support.patch b/meta-initramfs/recipes-devtools/klibc/klibc-2.0.2/0003-arm64-Introduce-arm64-support.patch
new file mode 100644
index 0000000..f0426c8
--- /dev/null
+++ b/meta-initramfs/recipes-devtools/klibc/klibc-2.0.2/0003-arm64-Introduce-arm64-support.patch
@@ -0,0 +1,431 @@
+From 7a4ccb45e823e465e5e8a3787bc6269fa9538d3c Mon Sep 17 00:00:00 2001
+From: Steve Capper <steve.capper at linaro.org>
+Date: Wed, 6 Nov 2013 16:30:27 +0000
+Subject: [PATCH 3/3] arm64: Introduce arm64 support
+
+Based on work by Neil Williams (codehelp at debian.org) and Anil Singhar
+(anil.singhar at linaro.org), this patch introduces arm64 support.
+
+Originally-by: Neil Williams <codehelp at debian.org>
+Originally-by: Anil Singhar <anil.singhar at linaro.org>
+Signed-off-by: Steve Capper <steve.capper at linaro.org>
+
+Upstream-status: Submitted
+
+---
+ Makefile | 3 +-
+ usr/include/arch/arm64/klibc/archconfig.h | 17 +++++++++++
+ usr/include/arch/arm64/klibc/archsetjmp.h | 22 +++++++++++++++
+ usr/include/arch/arm64/klibc/archsignal.h | 14 +++++++++
+ usr/include/arch/arm64/klibc/archstat.h | 29 +++++++++++++++++++
+ usr/include/arch/arm64/klibc/asmmacros.h | 11 ++++++++
+ usr/klibc/README.klibc | 1 +
+ usr/klibc/SYSCALLS.def | 2 +-
+ usr/klibc/arch/arm64/Kbuild | 7 +++++
+ usr/klibc/arch/arm64/MCONFIG | 23 +++++++++++++++
+ usr/klibc/arch/arm64/crt0.S | 19 +++++++++++++
+ usr/klibc/arch/arm64/setjmp.S | 47 +++++++++++++++++++++++++++++++
+ usr/klibc/arch/arm64/syscall.S | 25 ++++++++++++++++
+ usr/klibc/arch/arm64/sysstub.ph | 25 ++++++++++++++++
+ usr/klibc/arch/arm64/vfork.S | 34 ++++++++++++++++++++++
+ 15 files changed, 277 insertions(+), 2 deletions(-)
+ create mode 100644 usr/include/arch/arm64/klibc/archconfig.h
+ create mode 100644 usr/include/arch/arm64/klibc/archsetjmp.h
+ create mode 100644 usr/include/arch/arm64/klibc/archsignal.h
+ create mode 100644 usr/include/arch/arm64/klibc/archstat.h
+ create mode 100644 usr/include/arch/arm64/klibc/asmmacros.h
+ create mode 100644 usr/klibc/arch/arm64/Kbuild
+ create mode 100644 usr/klibc/arch/arm64/MCONFIG
+ create mode 100644 usr/klibc/arch/arm64/crt0.S
+ create mode 100644 usr/klibc/arch/arm64/setjmp.S
+ create mode 100644 usr/klibc/arch/arm64/syscall.S
+ create mode 100644 usr/klibc/arch/arm64/sysstub.ph
+ create mode 100644 usr/klibc/arch/arm64/vfork.S
+
+diff --git a/Makefile b/Makefile
+index 0a3ee69..a7da622 100644
+--- a/Makefile
++++ b/Makefile
+@@ -30,7 +30,8 @@ export OBJDUMP := $(KLIBCROSS)objdump
+
+ NOSTDINC_FLAGS := -nostdlib -nostdinc -isystem $(shell $(CC) -print-file-name=include)
+
+-ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/parisc64/parisc/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/ -e s/sh.*/sh/)
++ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/parisc64/parisc/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/ \
++ -e s/aarch64.*/arm64/ -e s/sh.*/sh/)
+ export KLIBCARCH ?= $(ARCH)
+ export KLIBCARCHDIR := $(shell echo $(KLIBCARCH) | sed -e s/s390x/s390/)
+
+diff --git a/usr/include/arch/arm64/klibc/archconfig.h b/usr/include/arch/arm64/klibc/archconfig.h
+new file mode 100644
+index 0000000..5e2004b
+--- /dev/null
++++ b/usr/include/arch/arm64/klibc/archconfig.h
+@@ -0,0 +1,17 @@
++/*
++ * include/arch/arm64/klibc/archconfig.h
++ *
++ * See include/klibc/sysconfig.h for the options that can be set in
++ * this file.
++ *
++ */
++
++#ifndef _KLIBC_ARCHCONFIG_H
++#define _KLIBC_ARCHCONFIG_H
++
++/* Use rt_* signals */
++#define _KLIBC_USE_RT_SIG 1
++#define _KLIBC_NO_MMU 0
++#define _KLIBC_REAL_VFORK 1
++
++#endif /* _KLIBC_ARCHCONFIG_H */
+diff --git a/usr/include/arch/arm64/klibc/archsetjmp.h b/usr/include/arch/arm64/klibc/archsetjmp.h
+new file mode 100644
+index 0000000..edc3312
+--- /dev/null
++++ b/usr/include/arch/arm64/klibc/archsetjmp.h
+@@ -0,0 +1,22 @@
++/*
++ * arch/arm64/include/klibc/archsetjmp.h
++ */
++
++#ifndef _KLIBC_ARCHSETJMP_H
++#define _KLIBC_ARCHSETJMP_H
++
++/*
++ * x19-x28 are callee saved, also save fp, lr, sp.
++ * d8-d15 are unused as we specify -mgeneral-regs-only as a build flag.
++ */
++
++struct __jmp_buf {
++ uint64_t __x19, __x20, __x21, __x22;
++ uint64_t __x23, __x24, __x25, __x26;
++ uint64_t __x27, __x28, __x29, __x30;
++ uint64_t __sp;
++};
++
++typedef struct __jmp_buf jmp_buf[1];
++
++#endif /* _SETJMP_H */
+diff --git a/usr/include/arch/arm64/klibc/archsignal.h b/usr/include/arch/arm64/klibc/archsignal.h
+new file mode 100644
+index 0000000..94e6bc8
+--- /dev/null
++++ b/usr/include/arch/arm64/klibc/archsignal.h
+@@ -0,0 +1,14 @@
++/*
++ * arch/arm64/include/klibc/archsignal.h
++ *
++ * Architecture-specific signal definitions
++ *
++ */
++
++#ifndef _KLIBC_ARCHSIGNAL_H
++#define _KLIBC_ARCHSIGNAL_H
++
++#include <asm/signal.h>
++/* No special stuff for this architecture */
++
++#endif
+diff --git a/usr/include/arch/arm64/klibc/archstat.h b/usr/include/arch/arm64/klibc/archstat.h
+new file mode 100644
+index 0000000..a1a3e79
+--- /dev/null
++++ b/usr/include/arch/arm64/klibc/archstat.h
+@@ -0,0 +1,29 @@
++#ifndef _KLIBC_ARCHSTAT_H
++#define _KLIBC_ARCHSTAT_H
++
++#include <klibc/stathelp.h>
++
++struct stat {
++ unsigned long st_dev; /* Device. */
++ unsigned long st_ino; /* File serial number. */
++ unsigned int st_mode; /* File mode. */
++ unsigned int st_nlink; /* Link count. */
++ unsigned int st_uid; /* User ID of the file's owner. */
++ unsigned int st_gid; /* Group ID of the file's group. */
++ unsigned long st_rdev; /* Device number, if device. */
++ unsigned long __pad1;
++ long st_size; /* Size of file, in bytes. */
++ int st_blksize; /* Optimal block size for I/O. */
++ int __pad2;
++ long st_blocks; /* Number 512-byte blocks allocated. */
++ long st_atime; /* Time of last access. */
++ unsigned long st_atime_nsec;
++ long st_mtime; /* Time of last modification. */
++ unsigned long st_mtime_nsec;
++ long st_ctime; /* Time of last status change. */
++ unsigned long st_ctime_nsec;
++ unsigned int __unused4;
++ unsigned int __unused5;
++ };
++
++#endif
+diff --git a/usr/include/arch/arm64/klibc/asmmacros.h b/usr/include/arch/arm64/klibc/asmmacros.h
+new file mode 100644
+index 0000000..c298f66
+--- /dev/null
++++ b/usr/include/arch/arm64/klibc/asmmacros.h
+@@ -0,0 +1,11 @@
++/*
++ * usr/include/arch/arm64/klibc/asmmacros.h
++ *
++ * Assembly macros used by arm64 system call stubs
++ */
++
++#ifndef _KLIBC_ASMMACROS_H
++#define _KLIBC_ASMMACROS_H
++
++
++#endif /* _KLIBC_ASMMACROS_H */
+diff --git a/usr/klibc/README.klibc b/usr/klibc/README.klibc
+index 7de5fea..c72ae47 100644
+--- a/usr/klibc/README.klibc
++++ b/usr/klibc/README.klibc
+@@ -36,6 +36,7 @@ b) If you're cross-compiling, you need to set KLIBCARCH to the
+ arm-thumb: Untested
+ arm: Working
+ arm26: Not yet ported
++ arm64: Working
+ avr32: Not yet ported
+ cris: Working
+ h8300: Not yet ported
+diff --git a/usr/klibc/SYSCALLS.def b/usr/klibc/SYSCALLS.def
+index 12f57ac..41cfa17 100644
+--- a/usr/klibc/SYSCALLS.def
++++ b/usr/klibc/SYSCALLS.def
+@@ -21,7 +21,7 @@ void _exit,exit::_exit(int);
+ <?!ia64> pid_t clone::__clone(unsigned long, void *);
+ <?ia64> pid_t clone::__clone2(unsigned long, void *, void *);
+ # if ! _KLIBC_NO_MMU
+-<!sparc,sparc64,ia64> pid_t fork();
++<!sparc,sparc64,ia64,arm64> pid_t fork();
+ <sparc,sparc64> pid_t fork at forkish();
+ #endif
+ #if _KLIBC_REAL_VFORK
+diff --git a/usr/klibc/arch/arm64/Kbuild b/usr/klibc/arch/arm64/Kbuild
+new file mode 100644
+index 0000000..f8643b5
+--- /dev/null
++++ b/usr/klibc/arch/arm64/Kbuild
+@@ -0,0 +1,7 @@
++
++# klibc files for arm64
++#
++
++klib-y := setjmp.o syscall.o vfork.o
++always := crt0.o
++targets := crt0.o
+diff --git a/usr/klibc/arch/arm64/MCONFIG b/usr/klibc/arch/arm64/MCONFIG
+new file mode 100644
+index 0000000..82664a7
+--- /dev/null
++++ b/usr/klibc/arch/arm64/MCONFIG
+@@ -0,0 +1,23 @@
++# -*- makefile -*-
++#
++# arch/arm64/MCONFIG
++#
++# Special rules for this architecture. Note that this is actually
++# included from the main Makefile, and that pathnames should be
++# accordingly.
++#
++
++CPU_ARCH ?= armv8-a
++CPU_TUNE ?= generic
++
++KLIBCOPTFLAGS += -g -Os -march=$(CPU_ARCH) -mtune=$(CPU_TUNE)
++KLIBCBITSIZE = 64
++KLIBCREQFLAGS += -fno-exceptions -mgeneral-regs-only
++
++# Extra linkflags when building the shared version of the library
++# This address needs to be reachable using normal inter-module
++# calls, and work on the memory models for this architecture
++
++# On arm64, binaries are normally loaded at 4MB. Place klibc.so
++# a little before that at 2MB to prevent overlap.
++KLIBCSHAREDFLAGS = -Ttext 0x0200000
+diff --git a/usr/klibc/arch/arm64/crt0.S b/usr/klibc/arch/arm64/crt0.S
+new file mode 100644
+index 0000000..0b2dd32
+--- /dev/null
++++ b/usr/klibc/arch/arm64/crt0.S
+@@ -0,0 +1,19 @@
++#
++# arch/arm64/crt0.S
++#
++# void _start(void)
++# {
++# __libc_init(elf_structure, atexit_ptr);
++# }
++#
++
++ .text
++ .balign 8
++ .type _start,#function
++ .globl _start
++
++_start:
++ mov x0, sp
++ mov x1, #0
++ bl __libc_init
++ .size _start,.-_start
+diff --git a/usr/klibc/arch/arm64/setjmp.S b/usr/klibc/arch/arm64/setjmp.S
+new file mode 100644
+index 0000000..13ab99d
+--- /dev/null
++++ b/usr/klibc/arch/arm64/setjmp.S
+@@ -0,0 +1,47 @@
++#
++# arch/arm64/setjmp.S
++#
++# setjmp/longjmp for arm64
++#
++
++#include <klibc/asmmacros.h>
++
++# we specify -mgeneral-regs-only as a build flag thus do not need to
++# save d8-d15
++
++ .text
++ .balign 8
++ .globl setjmp
++ .type setjmp, #function
++setjmp:
++ mov x1, sp
++ stp x19, x20, [x0, #0]
++ stp x21, x22, [x0, #16]
++ stp x23, x24, [x0, #32]
++ stp x25, x26, [x0, #48]
++ stp x27, x28, [x0, #64]
++ stp x29, x30, [x0, #80]
++ str x1, [x0, #96]
++ mov x0, #0 /* set the return value of setjmp */
++ br x30
++ .size setjmp,.-setjmp
++
++ .text
++ .balign 8
++ .globl longjmp
++ .type longjmp, #function
++longjmp:
++ ldp x19, x20, [x0, #0]
++ ldp x21, x22, [x0, #16]
++ ldp x23, x24, [x0, #32]
++ ldp x25, x26, [x0, #48]
++ ldp x27, x28, [x0, #64]
++ ldp x29, x30, [x0, #80]
++ ldr x2, [x0, #96]
++ mov sp, x2
++ mov x0, x1
++ cbnz x1, 1f
++ mov x0, #1
++1:
++ br x30
++ .size longjmp,.-longjmp
+diff --git a/usr/klibc/arch/arm64/syscall.S b/usr/klibc/arch/arm64/syscall.S
+new file mode 100644
+index 0000000..3ce91fb
+--- /dev/null
++++ b/usr/klibc/arch/arm64/syscall.S
+@@ -0,0 +1,25 @@
++/*
++ * arch/arm64/syscall.S
++ *
++ * System call common handling - if the return
++ * value from the system call is negative, then
++ * extract the magnitude and return it as errno and
++ * return -1, if the return value is 0 that is
++ * success case.
++ */
++
++ .type __syscall_common,#function
++ .globl __syscall_common
++ .balign 8
++
++__syscall_common:
++ cmp x0, #0x0
++ b.ge 2f
++ neg x0, x0
++ ldr x8, 1f
++ str x0, [x8]
++ mov x0, #-1
++2:
++ ret
++1:
++ .dword errno
+diff --git a/usr/klibc/arch/arm64/sysstub.ph b/usr/klibc/arch/arm64/sysstub.ph
+new file mode 100644
+index 0000000..47cbfd9
+--- /dev/null
++++ b/usr/klibc/arch/arm64/sysstub.ph
+@@ -0,0 +1,25 @@
++# -*- perl -*-
++#
++# arch/arm64/sysstub.ph
++#
++# Script to generate system call stubs
++#
++
++sub make_sysstub($$$$$@) {
++ my($outputdir, $fname, $type, $sname, $stype, @args) = @_;
++
++ open(OUT, '>', "${outputdir}/${fname}.S");
++ print OUT "#include <asm/unistd.h>\n";
++ print OUT "#include <klibc/asmmacros.h>\n";
++ print OUT " .text\n";
++ print OUT " .type ${fname}, #function\n";
++ print OUT " .globl ${fname}\n";
++ print OUT " .balign 8\n";
++ print OUT "${fname}:\n";
++ print OUT " mov w8,__NR_${sname}\n";
++ print OUT " svc 0\n";
++ print OUT " b __syscall_common\n";
++ print OUT " .size ${fname},.-${fname}\n";
++}
++
++1;
+diff --git a/usr/klibc/arch/arm64/vfork.S b/usr/klibc/arch/arm64/vfork.S
+new file mode 100644
+index 0000000..494326c
+--- /dev/null
++++ b/usr/klibc/arch/arm64/vfork.S
+@@ -0,0 +1,34 @@
++/*
++ * arch/arm64/vfork.S
++ *
++ * vfork - a system call which must not use the stack.
++ */
++
++#include <klibc/asmmacros.h>
++#include <asm/unistd.h>
++
++ .type vfork,#function
++ .globl vfork
++ .balign 8
++
++vfork:
++ /* Prepare for the system call */
++ /* 1. Push the function pointer and argument location
++ on to the child process stack */
++ /* 2. Gather the Flags */
++ /* New sp is already in x1. */
++ mov x0, #0x4111 /* CLONE_VM | CLONE_VFORK | SIGCHLD */
++ mov x1, sp
++ mov w8,__NR_clone
++ svc 0
++ cmp x0, #0x0
++ b.ge 2f
++ neg x0, x0
++ ldr x8, 1f
++ str x0, [x8]
++ mov x0, #-1
++2:
++ ret
++1:
++ .dword errno
++ .size vfork,.-vfork
+--
+1.8.4.2
+
diff --git a/meta-initramfs/recipes-devtools/klibc/klibc_2.0.2.bb b/meta-initramfs/recipes-devtools/klibc/klibc_2.0.2.bb
index 4244cf2..7d1eabe 100644
--- a/meta-initramfs/recipes-devtools/klibc/klibc_2.0.2.bb
+++ b/meta-initramfs/recipes-devtools/klibc/klibc_2.0.2.bb
@@ -22,4 +22,10 @@ FILES_libklibc-dev = "${libdir}/klibc.so \
${libdir}/klibc/include/* \
"
require klibc.inc
+
+SRC_URI += "file://0001-syscalls-Fixup-some-syscalls.patch \
+ file://0002-syscalls-Add-syscalls-needed-by-arm64.patch \
+ file://0003-arm64-Introduce-arm64-support.patch \
+ "
+
SUMMARY = "klibc, a small C library for use with initramfs"
--
1.8.4.2
More information about the Openembedded-devel
mailing list