summaryrefslogtreecommitdiffstats
path: root/meta/recipes-core/uclibc/files
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-core/uclibc/files')
-rw-r--r--meta/recipes-core/uclibc/files/armeb-kernel-stat.h.patch125
-rw-r--r--meta/recipes-core/uclibc/files/errno_values.h.patch21
-rw-r--r--meta/recipes-core/uclibc/files/kernel-key-t-ipc.h.patch27
-rw-r--r--meta/recipes-core/uclibc/files/nokernelheadercheck.patch24
-rw-r--r--meta/recipes-core/uclibc/files/termios.h.patch22
-rw-r--r--meta/recipes-core/uclibc/files/uClibc.distro3
6 files changed, 222 insertions, 0 deletions
diff --git a/meta/recipes-core/uclibc/files/armeb-kernel-stat.h.patch b/meta/recipes-core/uclibc/files/armeb-kernel-stat.h.patch
new file mode 100644
index 0000000..0440718
--- /dev/null
+++ b/meta/recipes-core/uclibc/files/armeb-kernel-stat.h.patch
@@ -0,0 +1,125 @@
+# The 2.6 asm/stat.h for ARM has some rather unusual transmogrifications
+# for big-endian running. This patch adds ARM specific code in xstatconv.c
+# which deals with the 2.4->2.6 ABI change.
+--- uClibc-0.9.27/libc/sysdeps/linux/common/xstatconv.c 2005-01-11 23:59:21.000000000 -0800
++++ uClibc-0.9.27/libc/sysdeps/linux/common/xstatconv.c 2005-06-05 11:03:56.742587966 -0700
+@@ -18,7 +18,14 @@
+ 02111-1307 USA.
+
+ Modified for uClibc by Erik Andersen <andersen@codepoet.org>
++ Further modified for ARMBE by John Bowler <jbowler@acm.org>
+ */
++/* This is a copy of common/xstatconv.c with a fixup for the ABI
++ * (structure layout) change in ARM Linux 2.6 - this shifts the
++ * st_dev and st_rdev information from the start of the 8 byte
++ * space to the end on big-endian ARM (only). The code is unchanged
++ * on little endian.
++ */
+
+ #define _GNU_SOURCE
+ #define _LARGEFILE64_SOURCE
+@@ -32,6 +39,84 @@
+ #include <sys/stat.h>
+ #include "xstatconv.h"
+
++/* Only for ARMEB and LFS. */
++#if defined(__ARMEB__) && defined(__UCLIBC_HAS_LFS__)
++/* stat64 (renamed) from 2.6.11.11. What happened here is that after
++ * Linux 2.4 the 2.4 unsigned short st_rdev and st_dev fields were
++ * lengthened to unsigned long long - causing the inclusion of at least
++ * some of the 0 padding bytes which followed them. On little endian
++ * this is fine because 2.4 did zero the pad bytes (I think) and the
++ * position of the data did not change. On big endian the change
++ * shifted the data to the end of the field. Someone noticed for the
++ * struct stat, and the armeb (big endian) case preserved the
++ * unsigned short (yuck), but no so for stat64 (maybe this was deliberate,
++ * but there is no evidence in the code of this.) Consequently a
++ * fixup is necessary for the stat64 case. The fixup here is to
++ * use the new structure when the change is detected. See below.
++ */
++struct __kernel_stat64_armeb {
++ /* This definition changes the layout on big-endian from that
++ * used in 2.4.31 - ABI change! Likewise for st_rdev.
++ */
++ unsigned long long st_dev;
++ unsigned char __pad0[4];
++ unsigned long __st_ino;
++ unsigned int st_mode;
++ unsigned int st_nlink;
++ unsigned long st_uid;
++ unsigned long st_gid;
++ unsigned long long st_rdev;
++ unsigned char __pad3[4];
++ long long st_size;
++ unsigned long st_blksize;
++ unsigned long __pad4;
++ unsigned long st_blocks;
++ unsigned long st_atime;
++ unsigned long st_atime_nsec;
++ unsigned long st_mtime;
++ unsigned long st_mtime_nsec;
++ unsigned long st_ctime;
++ unsigned long st_ctime_nsec;
++ unsigned long long st_ino;
++};
++
++/* This fixup only works so long as the old struct stat64 is no
++ * smaller than the new one - the caller of xstatconv uses the
++ * *old* struct, but the kernel writes the new one. CASSERT
++ * detects this at compile time.
++ */
++#define CASSERT(c) do switch (0) { case 0:; case (c):; } while (0)
++
++void __xstat64_conv_new(struct __kernel_stat64_armeb *kbuf, struct stat64 *buf)
++{
++ CASSERT(sizeof *kbuf <= sizeof (struct kernel_stat64));
++
++ /* Convert from new kernel version of `struct stat64'. */
++ buf->st_dev = kbuf->st_dev;
++ buf->st_ino = kbuf->st_ino;
++#ifdef _HAVE_STAT64___ST_INO
++ buf->__st_ino = kbuf->__st_ino;
++#endif
++ buf->st_mode = kbuf->st_mode;
++ buf->st_nlink = kbuf->st_nlink;
++ buf->st_uid = kbuf->st_uid;
++ buf->st_gid = kbuf->st_gid;
++ buf->st_rdev = kbuf->st_rdev;
++ buf->st_size = kbuf->st_size;
++ buf->st_blksize = kbuf->st_blksize;
++ buf->st_blocks = kbuf->st_blocks;
++ buf->st_atime = kbuf->st_atime;
++ buf->st_mtime = kbuf->st_mtime;
++ buf->st_ctime = kbuf->st_ctime;
++}
++#define _MAY_HAVE_NEW_STAT64 1
++#else
++#define _MAY_HAVE_NEW_STAT64 0
++#endif
++
++/* The following is taken verbatim from xstatconv.c apart from
++ * the addition of the _MAY_HAVE_NEW_STAT64 code.
++ */
+ void __xstat_conv(struct kernel_stat *kbuf, struct stat *buf)
+ {
+ /* Convert to current kernel version of `struct stat'. */
+@@ -53,6 +138,19 @@
+ #if defined __UCLIBC_HAS_LFS__
+ void __xstat64_conv(struct kernel_stat64 *kbuf, struct stat64 *buf)
+ {
++# if _MAY_HAVE_NEW_STAT64
++ /* This relies on any device (0,0) not being mountable - i.e.
++ * it fails on Linux 2.4 if dev(0,0) is a mountable block file
++ * system and itself contains it's own device. That doesn't
++ * happen on Linux 2.4 so far as I can see, but even if it
++ * does the API only fails (even then) if 2.4 didn't set all
++ * of the pad bytes to 0 (and it does set them to zero.)
++ */
++ if (kbuf->st_dev == 0 && kbuf->st_rdev == 0) {
++ __xstat64_conv_new((struct __kernel_stat64_armeb*)kbuf, buf);
++ return;
++ }
++# endif
+ /* Convert to current kernel version of `struct stat64'. */
+ buf->st_dev = kbuf->st_dev;
+ buf->st_ino = kbuf->st_ino;
diff --git a/meta/recipes-core/uclibc/files/errno_values.h.patch b/meta/recipes-core/uclibc/files/errno_values.h.patch
new file mode 100644
index 0000000..a1e39c1
--- /dev/null
+++ b/meta/recipes-core/uclibc/files/errno_values.h.patch
@@ -0,0 +1,21 @@
+Index: uClibc-0.9.29/libc/sysdeps/linux/common/bits/errno_values.h
+===================================================================
+--- uClibc-0.9.29/libc/sysdeps/linux/common/bits/errno_values.h 2002-08-23 20:48:19.000000000 +0200
++++ uClibc-0.9.29/libc/sysdeps/linux/common/bits/errno_values.h 2007-07-01 22:11:53.000000000 +0200
+@@ -134,4 +134,16 @@
+ #define ENOMEDIUM 123 /* No medium found */
+ #define EMEDIUMTYPE 124 /* Wrong medium type */
+
++/* the following errornumbers are only in 2.6 */
++
++#define ECANCELED 125 /* Operation Canceled */
++#define ENOKEY 126 /* Required key not available */
++#define EKEYEXPIRED 127 /* Key has expired */
++#define EKEYREVOKED 128 /* Key has been revoked */
++#define EKEYREJECTED 129 /* Key was rejected by service */
++
++/* for robust mutexes */
++#define EOWNERDEAD 130 /* Owner died */
++#define ENOTRECOVERABLE 131 /* State not recoverable */
++
+ #endif /* _BITS_ERRNO_VALUES_H */
diff --git a/meta/recipes-core/uclibc/files/kernel-key-t-ipc.h.patch b/meta/recipes-core/uclibc/files/kernel-key-t-ipc.h.patch
new file mode 100644
index 0000000..4cc4530
--- /dev/null
+++ b/meta/recipes-core/uclibc/files/kernel-key-t-ipc.h.patch
@@ -0,0 +1,27 @@
+# include/linux/posix_types.h defines __kernel_key_t as int, this file
+# contains an identical definition. This results in a compiler error
+# if both files are included. The ipc.h file, however, also includes
+# bits/types.h, which typedefs __key_t to (int), therefore it must
+# be safe to use __key_t in place of __kernel_key_t (given that C
+# regards equivalent numeric typedefs as identical.)
+--- uClibc-0.9.27/libc/sysdeps/linux/common/bits/ipc.h.orig 2005-05-07 13:36:04.448332211 -0700
++++ uClibc-0.9.27/libc/sysdeps/linux/common/bits/ipc.h 2005-05-07 13:37:00.493885708 -0700
+@@ -35,9 +35,6 @@
+ # define IPC_INFO 3 /* See ipcs. */
+ #endif
+
+-/* Type of a SYSV IPC key. */
+-typedef int __kernel_key_t;
+-
+ /* Special key values. */
+ #define IPC_PRIVATE ((__key_t) 0) /* Private key. */
+
+@@ -45,7 +42,7 @@
+ /* Data structure used to pass permission information to IPC operations. */
+ struct ipc_perm
+ {
+- __kernel_key_t __key;
++ __key_t __key;
+ __kernel_uid_t uid;
+ __kernel_gid_t gid;
+ __kernel_uid_t cuid;
diff --git a/meta/recipes-core/uclibc/files/nokernelheadercheck.patch b/meta/recipes-core/uclibc/files/nokernelheadercheck.patch
new file mode 100644
index 0000000..9f09fb2
--- /dev/null
+++ b/meta/recipes-core/uclibc/files/nokernelheadercheck.patch
@@ -0,0 +1,24 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- uClibc/Makefile~nokernelheadercheck
++++ uClibc/Makefile
+@@ -121,11 +121,11 @@
+ @./extra/config/conf -o extra/Configs/Config.in
+
+ headers: include/bits/uClibc_config.h
+-ifeq ($(strip $(ARCH_HAS_MMU)),y)
+- @set -x; ./extra/scripts/fix_includes.sh -k $(KERNEL_SOURCE) -t $(TARGET_ARCH)
+-else
+- @set -x; ./extra/scripts/fix_includes.sh -k $(KERNEL_SOURCE) -t $(TARGET_ARCH) -n
+-endif
++#ifeq ($(strip $(ARCH_HAS_MMU)),y)
++# @set -x; ./extra/scripts/fix_includes.sh -k $(KERNEL_SOURCE) -t $(TARGET_ARCH)
++#else
++# @set -x; ./extra/scripts/fix_includes.sh -k $(KERNEL_SOURCE) -t $(TARGET_ARCH) -n
++#endif
+ @cd include/bits; \
+ set -e; \
+ for i in `ls ../../libc/sysdeps/linux/common/bits/*.h` ; do \
diff --git a/meta/recipes-core/uclibc/files/termios.h.patch b/meta/recipes-core/uclibc/files/termios.h.patch
new file mode 100644
index 0000000..f7200ba
--- /dev/null
+++ b/meta/recipes-core/uclibc/files/termios.h.patch
@@ -0,0 +1,22 @@
+Index: uClibc-0.9.29/libc/sysdeps/linux/common/bits/termios.h
+===================================================================
+--- uClibc-0.9.29.orig/libc/sysdeps/linux/common/bits/termios.h 2006-02-13 09:41:37.000000000 +0100
++++ uClibc-0.9.29/libc/sysdeps/linux/common/bits/termios.h 2007-07-03 00:41:27.000000000 +0200
+@@ -156,7 +156,6 @@
+ #endif
+ #define B57600 0010001
+ #define B115200 0010002
+-#if 0 /* limited on uClibc, keep in sync w/ cfsetspeed.c */
+ #define B230400 0010003
+ #define B460800 0010004
+ #define B500000 0010005
+@@ -171,9 +170,6 @@
+ #define B3500000 0010016
+ #define B4000000 0010017
+ #define __MAX_BAUD B4000000
+-#else
+-#define __MAX_BAUD B115200
+-#endif
+ #ifdef __USE_MISC
+ # define CIBAUD 002003600000 /* input baud rate (not used) */
+ # define CMSPAR 010000000000 /* mark or space (stick) parity */
diff --git a/meta/recipes-core/uclibc/files/uClibc.distro b/meta/recipes-core/uclibc/files/uClibc.distro
new file mode 100644
index 0000000..d87b891
--- /dev/null
+++ b/meta/recipes-core/uclibc/files/uClibc.distro
@@ -0,0 +1,3 @@
+# Default per-distro config
+# DO NOT CHANGE THIS
+# Create a new file ${DISTRO}/uClibc.distro
OpenPOWER on IntegriCloud