uclibc: Upgrade to 0.9.32-rc3
Bring in the uclibc recipes from meta-oe they have been well tested by now. Delete 0.9.30.1 recipes (From OE-Core rev: ac60a936e737680c16b287a3dab6aa285d87c5c0) Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
ed6f039bca
commit
4ea8b2fde4
|
@ -1,125 +0,0 @@
|
|||
# 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;
|
|
@ -1,21 +0,0 @@
|
|||
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 */
|
|
@ -1,27 +0,0 @@
|
|||
# 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;
|
|
@ -1,24 +0,0 @@
|
|||
|
||||
#
|
||||
# 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 \
|
|
@ -1,22 +0,0 @@
|
|||
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 */
|
|
@ -1,3 +0,0 @@
|
|||
# Default per-distro config
|
||||
# DO NOT CHANGE THIS
|
||||
# Create a new file ${DISTRO}/uClibc.distro
|
|
@ -121,6 +121,7 @@ gethostid
|
|||
gethostname
|
||||
getifaddrs
|
||||
getline
|
||||
getloadavg
|
||||
getmntent
|
||||
getmsg
|
||||
getnameinfo
|
||||
|
|
|
@ -17,8 +17,9 @@ UCLIBC_CTOR_DTOR=y
|
|||
LDSO_GNU_HASH_SUPPORT=y
|
||||
# HAS_NO_THREADS is not set
|
||||
UCLIBC_HAS_THREADS=y
|
||||
UCLIBC_HAS_THREADS_NATIVE=y
|
||||
PTHREADS_DEBUG_SUPPORT=y
|
||||
LINUXTHREADS_OLD=y
|
||||
# LINUXTHREADS_OLD is not set
|
||||
UCLIBC_HAS_LFS=y
|
||||
# MALLOC is not set
|
||||
# MALLOC_SIMPLE is not set
|
||||
|
@ -28,12 +29,13 @@ UCLIBC_DYNAMIC_ATEXIT=y
|
|||
COMPAT_ATEXIT=y
|
||||
UCLIBC_SUSV3_LEGACY=y
|
||||
UCLIBC_SUSV3_LEGACY_MACROS=y
|
||||
UCLIBC_SUSV4_LEGACY=y
|
||||
UCLIBC_HAS_SHADOW=y
|
||||
UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y
|
||||
UCLIBC_HAS___PROGNAME=y
|
||||
UNIX98PTY_ONLY=y
|
||||
UCLIBC_HAS_GETPT=y
|
||||
ASSUME_DEVPTS=y
|
||||
UCLIBC_HAS_LIBUTIL=y
|
||||
UCLIBC_HAS_TM_EXTENSIONS=y
|
||||
UCLIBC_HAS_TZ_CACHING=y
|
||||
UCLIBC_HAS_TZ_FILE=y
|
||||
|
@ -53,8 +55,12 @@ UCLIBC_HAS_IPV6=y
|
|||
UCLIBC_HAS_RPC=y
|
||||
UCLIBC_HAS_FULL_RPC=y
|
||||
# UCLIBC_HAS_REENTRANT_RPC is not set
|
||||
# UCLIBC_USE_NETLINK is not set
|
||||
# UCLIBC_HAS_BSD_RES_CLOSE is not set
|
||||
UCLIBC_USE_NETLINK=y
|
||||
UCLIBC_SUPPORT_AI_ADDRCONFIG=y
|
||||
|
||||
UCLIBC_HAS_BSD_RES_CLOSE=y
|
||||
UCLIBC_HAS_LIBRESOLV_STUB=y
|
||||
UCLIBC_HAS_LIBNSL_STUB=y
|
||||
|
||||
#
|
||||
# String and Stdio Support
|
||||
|
@ -83,8 +89,8 @@ UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y
|
|||
# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set
|
||||
# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set
|
||||
# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set
|
||||
# UCLIBC_HAS_STDIO_GETC_MACRO is not set
|
||||
# UCLIBC_HAS_STDIO_PUTC_MACRO is not set
|
||||
UCLIBC_HAS_STDIO_GETC_MACRO=y
|
||||
UCLIBC_HAS_STDIO_PUTC_MACRO=y
|
||||
UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
|
||||
# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set
|
||||
UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y
|
||||
|
@ -105,7 +111,9 @@ UCLIBC_HAS_REGEX=y
|
|||
UCLIBC_HAS_FNMATCH=y
|
||||
# UCLIBC_HAS_FNMATCH_OLD is not set
|
||||
UCLIBC_HAS_WORDEXP=y
|
||||
UCLIBC_HAS_NFTW=y
|
||||
UCLIBC_HAS_FTW=y
|
||||
UCLIBC_HAS_FTS=y
|
||||
UCLIBC_HAS_GLOB=y
|
||||
UCLIBC_HAS_GNU_GLOB=y
|
||||
|
||||
|
@ -134,7 +142,7 @@ CROSS_COMPILER_PREFIX=""
|
|||
UCLIBC_EXTRA_CFLAGS=""
|
||||
# DODEBUG is not set
|
||||
# DODEBUG_PT is not set
|
||||
DOSTRIP=n
|
||||
# DOSTRIP is not set
|
||||
# DOASSERTS is not set
|
||||
# SUPPORT_LD_DEBUG is not set
|
||||
# SUPPORT_LD_DEBUG_EARLY is not set
|
||||
|
@ -146,3 +154,4 @@ WARNINGS="-Wall"
|
|||
|
||||
# math stuff for perl
|
||||
DO_C99_MATH=y
|
||||
UCLIBC_HAS_LONG_DOUBLE_MATH=y
|
|
@ -1,393 +0,0 @@
|
|||
From c190f738e1b0e87658ea5f86c057fb147dc19428 Mon Sep 17 00:00:00 2001
|
||||
From: Carmelo Amoroso <carmelo.amoroso@st.com>
|
||||
Date: Thu, 5 Mar 2009 13:28:55 +0000
|
||||
Subject: [PATCH] Use __always_inline instead of __inline__
|
||||
|
||||
---
|
||||
ldso/ldso/arm/dl-sysdep.h | 8 ++++----
|
||||
ldso/ldso/bfin/dl-sysdep.h | 2 +-
|
||||
ldso/ldso/cris/dl-sysdep.h | 6 +++---
|
||||
ldso/ldso/i386/dl-sysdep.h | 10 +++++-----
|
||||
ldso/ldso/m68k/dl-sysdep.h | 6 +++---
|
||||
ldso/ldso/mips/dl-sysdep.h | 8 ++++----
|
||||
ldso/ldso/powerpc/dl-sysdep.h | 8 ++++----
|
||||
ldso/ldso/sh/dl-sysdep.h | 8 ++++----
|
||||
ldso/ldso/sh64/dl-sysdep.h | 6 +++---
|
||||
ldso/ldso/sparc/dl-sysdep.h | 8 ++++----
|
||||
ldso/ldso/xtensa/dl-sysdep.h | 6 +++---
|
||||
11 files changed, 38 insertions(+), 38 deletions(-)
|
||||
|
||||
diff --git a/ldso/ldso/arm/dl-sysdep.h b/ldso/ldso/arm/dl-sysdep.h
|
||||
index eea3b98..5191dd7 100644
|
||||
--- a/ldso/ldso/arm/dl-sysdep.h
|
||||
+++ b/ldso/ldso/arm/dl-sysdep.h
|
||||
@@ -15,7 +15,7 @@
|
||||
GOT_BASE[1] = (unsigned long) MODULE; \
|
||||
}
|
||||
|
||||
-static __inline__ unsigned long arm_modulus(unsigned long m, unsigned long p)
|
||||
+static __always_inline unsigned long arm_modulus(unsigned long m, unsigned long p)
|
||||
{
|
||||
unsigned long i,t,inc;
|
||||
i=p; t=0;
|
||||
@@ -67,7 +67,7 @@ unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry);
|
||||
first element of the GOT. We used to use the PIC register to do this
|
||||
without a constant pool reference, but GCC 4.2 will use a pseudo-register
|
||||
for the PIC base, so it may not be in r10. */
|
||||
-static __inline__ Elf32_Addr __attribute__ ((unused))
|
||||
+static __always_inline Elf32_Addr __attribute__ ((unused))
|
||||
elf_machine_dynamic (void)
|
||||
{
|
||||
Elf32_Addr dynamic;
|
||||
@@ -99,7 +99,7 @@ elf_machine_dynamic (void)
|
||||
}
|
||||
|
||||
/* Return the run-time load address of the shared object. */
|
||||
-static __inline__ Elf32_Addr __attribute__ ((unused))
|
||||
+static __always_inline Elf32_Addr __attribute__ ((unused))
|
||||
elf_machine_load_address (void)
|
||||
{
|
||||
extern void __dl_start __asm__ ("_dl_start");
|
||||
@@ -123,7 +123,7 @@ elf_machine_load_address (void)
|
||||
return pcrel_addr - got_addr;
|
||||
}
|
||||
|
||||
-static __inline__ void
|
||||
+static __always_inline void
|
||||
elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
|
||||
Elf32_Word relative_count)
|
||||
{
|
||||
diff --git a/ldso/ldso/bfin/dl-sysdep.h b/ldso/ldso/bfin/dl-sysdep.h
|
||||
index 3c88da4..f0c5129 100644
|
||||
--- a/ldso/ldso/bfin/dl-sysdep.h
|
||||
+++ b/ldso/ldso/bfin/dl-sysdep.h
|
||||
@@ -210,7 +210,7 @@ while (0)
|
||||
#endif
|
||||
|
||||
#include <elf.h>
|
||||
-static __inline__ void
|
||||
+static __always_inline void
|
||||
elf_machine_relative (DL_LOADADDR_TYPE load_off, const Elf32_Addr rel_addr,
|
||||
Elf32_Word relative_count)
|
||||
{
|
||||
diff --git a/ldso/ldso/cris/dl-sysdep.h b/ldso/ldso/cris/dl-sysdep.h
|
||||
index ffb763a..e454c10 100644
|
||||
--- a/ldso/ldso/cris/dl-sysdep.h
|
||||
+++ b/ldso/ldso/cris/dl-sysdep.h
|
||||
@@ -37,7 +37,7 @@ extern unsigned long _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entr
|
||||
|| ((type) == R_CRIS_GLOB_DAT)) * ELF_RTYPE_CLASS_PLT) \
|
||||
| (((type) == R_CRIS_COPY) * ELF_RTYPE_CLASS_COPY))
|
||||
|
||||
-static __inline__ Elf32_Addr
|
||||
+static __always_inline Elf32_Addr
|
||||
elf_machine_dynamic(void)
|
||||
{
|
||||
/* Don't just set this to an asm variable "r0" since that's not logical
|
||||
@@ -59,7 +59,7 @@ elf_machine_dynamic(void)
|
||||
there's some other symbol we could use, that we don't *have* to force a
|
||||
GOT entry for. */
|
||||
|
||||
-static __inline__ Elf32_Addr
|
||||
+static __always_inline Elf32_Addr
|
||||
elf_machine_load_address(void)
|
||||
{
|
||||
Elf32_Addr gotaddr_diff;
|
||||
@@ -93,7 +93,7 @@ elf_machine_load_address(void)
|
||||
return gotaddr_diff;
|
||||
}
|
||||
|
||||
-static __inline__ void
|
||||
+static __always_inline void
|
||||
elf_machine_relative(Elf32_Addr load_off, const Elf32_Addr rel_addr,
|
||||
Elf32_Word relative_count)
|
||||
{
|
||||
diff --git a/ldso/ldso/i386/dl-sysdep.h b/ldso/ldso/i386/dl-sysdep.h
|
||||
index 77fa372..6e84861 100644
|
||||
--- a/ldso/ldso/i386/dl-sysdep.h
|
||||
+++ b/ldso/ldso/i386/dl-sysdep.h
|
||||
@@ -37,8 +37,8 @@ extern unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_ent
|
||||
/* Return the link-time address of _DYNAMIC. Conveniently, this is the
|
||||
first element of the GOT. This must be inlined in a function which
|
||||
uses global data. */
|
||||
-static __inline__ Elf32_Addr elf_machine_dynamic (void) attribute_unused;
|
||||
-static __inline__ Elf32_Addr
|
||||
+static __always_inline Elf32_Addr elf_machine_dynamic (void) attribute_unused;
|
||||
+static __always_inline Elf32_Addr
|
||||
elf_machine_dynamic (void)
|
||||
{
|
||||
register Elf32_Addr *got __asm__ ("%ebx");
|
||||
@@ -47,8 +47,8 @@ elf_machine_dynamic (void)
|
||||
|
||||
|
||||
/* Return the run-time load address of the shared object. */
|
||||
-static __inline__ Elf32_Addr elf_machine_load_address (void) attribute_unused;
|
||||
-static __inline__ Elf32_Addr
|
||||
+static __always_inline Elf32_Addr elf_machine_load_address (void) attribute_unused;
|
||||
+static __always_inline Elf32_Addr
|
||||
elf_machine_load_address (void)
|
||||
{
|
||||
/* It doesn't matter what variable this is, the reference never makes
|
||||
@@ -61,7 +61,7 @@ elf_machine_load_address (void)
|
||||
return addr;
|
||||
}
|
||||
|
||||
-static __inline__ void
|
||||
+static __always_inline void
|
||||
elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
|
||||
Elf32_Word relative_count)
|
||||
{
|
||||
diff --git a/ldso/ldso/m68k/dl-sysdep.h b/ldso/ldso/m68k/dl-sysdep.h
|
||||
index 8e26e20..259cb84 100644
|
||||
--- a/ldso/ldso/m68k/dl-sysdep.h
|
||||
+++ b/ldso/ldso/m68k/dl-sysdep.h
|
||||
@@ -39,7 +39,7 @@ extern unsigned long _dl_linux_resolver (struct elf_resolve *, int);
|
||||
/* Return the link-time address of _DYNAMIC. Conveniently, this is the
|
||||
first element of the GOT. This must be inlined in a function which
|
||||
uses global data. */
|
||||
-static __inline__ Elf32_Addr
|
||||
+static __always_inline Elf32_Addr
|
||||
elf_machine_dynamic (void)
|
||||
{
|
||||
register Elf32_Addr *got __asm__ ("%a5");
|
||||
@@ -48,7 +48,7 @@ elf_machine_dynamic (void)
|
||||
|
||||
|
||||
/* Return the run-time load address of the shared object. */
|
||||
-static __inline__ Elf32_Addr
|
||||
+static __always_inline Elf32_Addr
|
||||
elf_machine_load_address (void)
|
||||
{
|
||||
Elf32_Addr addr;
|
||||
@@ -58,7 +58,7 @@ elf_machine_load_address (void)
|
||||
return addr;
|
||||
}
|
||||
|
||||
-static __inline__ void
|
||||
+static __always_inline void
|
||||
elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
|
||||
Elf32_Word relative_count)
|
||||
{
|
||||
diff --git a/ldso/ldso/mips/dl-sysdep.h b/ldso/ldso/mips/dl-sysdep.h
|
||||
index cf6b28b..30d84fb 100644
|
||||
--- a/ldso/ldso/mips/dl-sysdep.h
|
||||
+++ b/ldso/ldso/mips/dl-sysdep.h
|
||||
@@ -169,7 +169,7 @@ void _dl_perform_mips_global_got_relocations(struct elf_resolve *tpnt, int lazy)
|
||||
|
||||
#define OFFSET_GP_GOT 0x7ff0
|
||||
|
||||
-static __inline__ ElfW(Addr) *
|
||||
+static __always_inline ElfW(Addr) *
|
||||
elf_mips_got_from_gpreg (ElfW(Addr) gpreg)
|
||||
{
|
||||
/* FIXME: the offset of gp from GOT may be system-dependent. */
|
||||
@@ -179,7 +179,7 @@ elf_mips_got_from_gpreg (ElfW(Addr) gpreg)
|
||||
/* Return the link-time address of _DYNAMIC. Conveniently, this is the
|
||||
first element of the GOT. This must be inlined in a function which
|
||||
uses global data. We assume its $gp points to the primary GOT. */
|
||||
-static __inline__ ElfW(Addr)
|
||||
+static __always_inline ElfW(Addr)
|
||||
elf_machine_dynamic (void)
|
||||
{
|
||||
register ElfW(Addr) gp __asm__ ("$28");
|
||||
@@ -198,7 +198,7 @@ elf_machine_dynamic (void)
|
||||
#endif
|
||||
|
||||
/* Return the run-time load address of the shared object. */
|
||||
-static __inline__ ElfW(Addr)
|
||||
+static __always_inline ElfW(Addr)
|
||||
elf_machine_load_address (void)
|
||||
{
|
||||
ElfW(Addr) addr;
|
||||
@@ -214,7 +214,7 @@ elf_machine_load_address (void)
|
||||
return addr;
|
||||
}
|
||||
|
||||
-static __inline__ void
|
||||
+static __always_inline void
|
||||
elf_machine_relative (ElfW(Addr) load_off, const ElfW(Addr) rel_addr,
|
||||
ElfW(Word) relative_count)
|
||||
{
|
||||
diff --git a/ldso/ldso/powerpc/dl-sysdep.h b/ldso/ldso/powerpc/dl-sysdep.h
|
||||
index fdbf564..f33214c 100644
|
||||
--- a/ldso/ldso/powerpc/dl-sysdep.h
|
||||
+++ b/ldso/ldso/powerpc/dl-sysdep.h
|
||||
@@ -85,7 +85,7 @@ void _dl_init_got(unsigned long *lpnt,struct elf_resolve *tpnt);
|
||||
#define ELF_MACHINE_PLTREL_OVERLAP 1
|
||||
|
||||
/* Return the value of the GOT pointer. */
|
||||
-static __inline__ Elf32_Addr * __attribute__ ((const))
|
||||
+static __always_inline Elf32_Addr * __attribute__ ((const))
|
||||
ppc_got (void)
|
||||
{
|
||||
Elf32_Addr *got;
|
||||
@@ -104,14 +104,14 @@ ppc_got (void)
|
||||
|
||||
/* Return the link-time address of _DYNAMIC, stored as
|
||||
the first value in the GOT. */
|
||||
-static __inline__ Elf32_Addr __attribute__ ((const))
|
||||
+static __always_inline Elf32_Addr __attribute__ ((const))
|
||||
elf_machine_dynamic (void)
|
||||
{
|
||||
return *ppc_got();
|
||||
}
|
||||
|
||||
/* Return the run-time load address of the shared object. */
|
||||
-static __inline__ Elf32_Addr __attribute__ ((const))
|
||||
+static __always_inline Elf32_Addr __attribute__ ((const))
|
||||
elf_machine_load_address (void)
|
||||
{
|
||||
Elf32_Addr *branchaddr;
|
||||
@@ -159,7 +159,7 @@ elf_machine_load_address (void)
|
||||
return runtime_dynamic - elf_machine_dynamic ();
|
||||
}
|
||||
|
||||
-static __inline__ void
|
||||
+static __always_inline void
|
||||
elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
|
||||
Elf32_Word relative_count)
|
||||
{
|
||||
diff --git a/ldso/ldso/sh/dl-sysdep.h b/ldso/ldso/sh/dl-sysdep.h
|
||||
index daedda5..d4fc784 100644
|
||||
--- a/ldso/ldso/sh/dl-sysdep.h
|
||||
+++ b/ldso/ldso/sh/dl-sysdep.h
|
||||
@@ -25,7 +25,7 @@
|
||||
struct elf_resolve;
|
||||
extern unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry);
|
||||
|
||||
-static __inline__ unsigned int
|
||||
+static __always_inline unsigned int
|
||||
_dl_urem(unsigned int n, unsigned int base)
|
||||
{
|
||||
int res;
|
||||
@@ -95,7 +95,7 @@ _dl_urem(unsigned int n, unsigned int base)
|
||||
/* Return the link-time address of _DYNAMIC. Conveniently, this is the
|
||||
first element of the GOT. This must be inlined in a function which
|
||||
uses global data. */
|
||||
-static __inline__ Elf32_Addr __attribute__ ((unused))
|
||||
+static __always_inline Elf32_Addr __attribute__ ((unused))
|
||||
elf_machine_dynamic (void)
|
||||
{
|
||||
register Elf32_Addr *got;
|
||||
@@ -104,7 +104,7 @@ elf_machine_dynamic (void)
|
||||
}
|
||||
|
||||
/* Return the run-time load address of the shared object. */
|
||||
-static __inline__ Elf32_Addr __attribute__ ((unused))
|
||||
+static __always_inline Elf32_Addr __attribute__ ((unused))
|
||||
elf_machine_load_address (void)
|
||||
{
|
||||
Elf32_Addr addr;
|
||||
@@ -146,7 +146,7 @@ elf_machine_load_address (void)
|
||||
} \
|
||||
}
|
||||
|
||||
-static __inline__ void
|
||||
+static __always_inline void
|
||||
elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
|
||||
Elf32_Word relative_count)
|
||||
{
|
||||
diff --git a/ldso/ldso/sh64/dl-sysdep.h b/ldso/ldso/sh64/dl-sysdep.h
|
||||
index fc67b12..15d9b5e 100644
|
||||
--- a/ldso/ldso/sh64/dl-sysdep.h
|
||||
+++ b/ldso/ldso/sh64/dl-sysdep.h
|
||||
@@ -41,7 +41,7 @@ extern unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_ent
|
||||
/* Return the link-time address of _DYNAMIC. Conveniently, this is the
|
||||
first element of the GOT. This must be inlined in a function which
|
||||
uses global data. */
|
||||
-static __inline__ Elf32_Addr elf_machine_dynamic(void)
|
||||
+static __always_inline Elf32_Addr elf_machine_dynamic(void)
|
||||
{
|
||||
register Elf32_Addr *got;
|
||||
|
||||
@@ -69,7 +69,7 @@ static __inline__ Elf32_Addr elf_machine_dynamic(void)
|
||||
}
|
||||
|
||||
/* Return the run-time load address of the shared object. */
|
||||
-static __inline__ Elf32_Addr elf_machine_load_address(void)
|
||||
+static __always_inline Elf32_Addr elf_machine_load_address(void)
|
||||
{
|
||||
Elf32_Addr addr;
|
||||
|
||||
@@ -122,7 +122,7 @@ static __inline__ Elf32_Addr elf_machine_load_address(void)
|
||||
} \
|
||||
}
|
||||
|
||||
-static __inline__ void
|
||||
+static __always_inline void
|
||||
elf_machine_relative(Elf32_Addr load_off, const Elf32_Addr rel_addr,
|
||||
Elf32_Word relative_count)
|
||||
{
|
||||
diff --git a/ldso/ldso/sparc/dl-sysdep.h b/ldso/ldso/sparc/dl-sysdep.h
|
||||
index 7936517..ebfa268 100644
|
||||
--- a/ldso/ldso/sparc/dl-sysdep.h
|
||||
+++ b/ldso/ldso/sparc/dl-sysdep.h
|
||||
@@ -52,7 +52,7 @@ unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry);
|
||||
|
||||
#ifndef COMPILE_ASM
|
||||
/* Cheap modulo implementation, taken from arm/ld_sysdep.h. */
|
||||
-static __inline__ unsigned long
|
||||
+static __always_inline unsigned long
|
||||
sparc_mod(unsigned long m, unsigned long p)
|
||||
{
|
||||
unsigned long i, t, inc;
|
||||
@@ -118,7 +118,7 @@ do { register Elf32_Addr pc __asm__("o7"); \
|
||||
/* Return the link-time address of _DYNAMIC. Conveniently, this is the
|
||||
first element of the GOT. This must be inlined in a function which
|
||||
uses global data. */
|
||||
-static __inline__ Elf32_Addr
|
||||
+static __always_inline Elf32_Addr
|
||||
elf_machine_dynamic (void)
|
||||
{
|
||||
register Elf32_Addr *got __asm__ ("%l7");
|
||||
@@ -129,7 +129,7 @@ elf_machine_dynamic (void)
|
||||
}
|
||||
|
||||
/* Return the run-time load address of the shared object. */
|
||||
-static __inline__ Elf32_Addr
|
||||
+static __always_inline Elf32_Addr
|
||||
elf_machine_load_address (void)
|
||||
{
|
||||
register Elf32_Addr *pc __asm__ ("%o7"), *got __asm__ ("%l7");
|
||||
@@ -148,7 +148,7 @@ elf_machine_load_address (void)
|
||||
return (Elf32_Addr) got - *got + (pc[2] - pc[3]) * 4 - 4;
|
||||
}
|
||||
|
||||
-static __inline__ void
|
||||
+static __always_inline void
|
||||
elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
|
||||
Elf32_Word relative_count)
|
||||
{
|
||||
diff --git a/ldso/ldso/xtensa/dl-sysdep.h b/ldso/ldso/xtensa/dl-sysdep.h
|
||||
index daae428..07b9b79 100644
|
||||
--- a/ldso/ldso/xtensa/dl-sysdep.h
|
||||
+++ b/ldso/ldso/xtensa/dl-sysdep.h
|
||||
@@ -85,7 +85,7 @@ extern unsigned long _dl_linux_resolver (struct elf_resolve *, int);
|
||||
(((type) == R_XTENSA_JMP_SLOT) * ELF_RTYPE_CLASS_PLT)
|
||||
|
||||
/* Return the link-time address of _DYNAMIC. */
|
||||
-static __inline__ Elf32_Addr
|
||||
+static __always_inline Elf32_Addr
|
||||
elf_machine_dynamic (void)
|
||||
{
|
||||
/* This function is only used while bootstrapping the runtime linker.
|
||||
@@ -95,7 +95,7 @@ elf_machine_dynamic (void)
|
||||
}
|
||||
|
||||
/* Return the run-time load address of the shared object. */
|
||||
-static __inline__ Elf32_Addr
|
||||
+static __always_inline Elf32_Addr
|
||||
elf_machine_load_address (void)
|
||||
{
|
||||
Elf32_Addr addr, tmp;
|
||||
@@ -116,7 +116,7 @@ elf_machine_load_address (void)
|
||||
return addr - 3;
|
||||
}
|
||||
|
||||
-static __inline__ void
|
||||
+static __always_inline void
|
||||
elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
|
||||
Elf32_Word relative_count)
|
||||
{
|
||||
--
|
||||
1.6.3.3.444.g4ecbc
|
||||
|
|
@ -1,218 +0,0 @@
|
|||
Index: uClibc/libpthread/linuxthreads/sysdeps/unix/sysv/linux/arm/vfork.S
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ uClibc/libpthread/linuxthreads/sysdeps/unix/sysv/linux/arm/vfork.S 2008-08-28 00:22:06.278340855 +0200
|
||||
@@ -0,0 +1,78 @@
|
||||
+/* Copyright (C) 1999, 2002, 2003, 2005 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+ Contributed by Philip Blundell <philb@gnu.org>.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, write to the Free
|
||||
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
+ 02111-1307 USA. */
|
||||
+
|
||||
+#include <sysdep-cancel.h>
|
||||
+#define _ERRNO_H 1
|
||||
+#include <bits/errno.h>
|
||||
+#include <kernel-features.h>
|
||||
+
|
||||
+/* Clone the calling process, but without copying the whole address space.
|
||||
+ The calling process is suspended until the new process exits or is
|
||||
+ replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
|
||||
+ and the process ID of the new process to the old process. */
|
||||
+
|
||||
+ENTRY (__vfork)
|
||||
+
|
||||
+#ifdef __NR_vfork
|
||||
+
|
||||
+#ifdef SHARED
|
||||
+ ldr ip, 1f
|
||||
+ ldr r0, 2f
|
||||
+3: add ip, pc, ip
|
||||
+ ldr r0, [ip, r0]
|
||||
+#else
|
||||
+ ldr r0, 1f
|
||||
+#endif
|
||||
+ movs r0, r0
|
||||
+ bne HIDDEN_JUMPTARGET (__fork)
|
||||
+
|
||||
+ DO_CALL (vfork, 0)
|
||||
+ cmn a1, #4096
|
||||
+ RETINSTR(cc, lr)
|
||||
+
|
||||
+#ifndef __ASSUME_VFORK_SYSCALL
|
||||
+ /* Check if vfork syscall is known at all. */
|
||||
+ cmn a1, #ENOSYS
|
||||
+ bne PLTJMP(C_SYMBOL_NAME(__syscall_error))
|
||||
+#endif
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
+#ifndef __ASSUME_VFORK_SYSCALL
|
||||
+ /* If we don't have vfork, fork is close enough. */
|
||||
+ DO_CALL (fork, 0)
|
||||
+ cmn a1, #4096
|
||||
+ RETINSTR(cc, lr)
|
||||
+#elif !defined __NR_vfork
|
||||
+# error "__NR_vfork not available and __ASSUME_VFORK_SYSCALL defined"
|
||||
+#endif
|
||||
+ b PLTJMP(C_SYMBOL_NAME(__syscall_error))
|
||||
+
|
||||
+#ifdef SHARED
|
||||
+1: .word _GLOBAL_OFFSET_TABLE_ - 3b - 8
|
||||
+2: .word __libc_pthread_functions(GOTOFF)
|
||||
+#else
|
||||
+ .weak pthread_create
|
||||
+1: .word pthread_create
|
||||
+#endif
|
||||
+
|
||||
+PSEUDO_END (__vfork)
|
||||
+libc_hidden_def (__vfork)
|
||||
+
|
||||
+weak_alias (__vfork, vfork)
|
||||
Index: uClibc/libpthread/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ uClibc/libpthread/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h 2008-08-28 00:28:04.301636993 +0200
|
||||
@@ -0,0 +1,130 @@
|
||||
+/* Copyright (C) 2003, 2005 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+ Contributed by Phil Blundell <pb@nexus.co.uk>, 2003.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, write to the Free
|
||||
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
+ 02111-1307 USA. */
|
||||
+
|
||||
+#include <tls.h>
|
||||
+#include <pt-machine.h>
|
||||
+#ifndef __ASSEMBLER__
|
||||
+# include <linuxthreads/internals.h>
|
||||
+#endif
|
||||
+
|
||||
+#if !defined NOT_IN_libc || defined IS_IN_libpthread
|
||||
+
|
||||
+/* We push lr onto the stack, so we have to use ldmib instead of ldmia
|
||||
+ to find the saved arguments. */
|
||||
+# ifdef PIC
|
||||
+# undef DOARGS_5
|
||||
+# undef DOARGS_6
|
||||
+# undef DOARGS_7
|
||||
+# define DOARGS_5 str r4, [sp, $-4]!; ldr r4, [sp, $8];
|
||||
+# define DOARGS_6 mov ip, sp; stmfd sp!, {r4, r5}; ldmib ip, {r4, r5};
|
||||
+# define DOARGS_7 mov ip, sp; stmfd sp!, {r4, r5, r6}; ldmib ip, {r4, r5, r6};
|
||||
+# endif
|
||||
+
|
||||
+# undef PSEUDO_RET
|
||||
+# define PSEUDO_RET \
|
||||
+ ldrcc pc, [sp], $4; \
|
||||
+ ldr lr, [sp], $4; \
|
||||
+ b PLTJMP(SYSCALL_ERROR)
|
||||
+
|
||||
+# undef PSEUDO
|
||||
+# define PSEUDO(name, syscall_name, args) \
|
||||
+ .section ".text"; \
|
||||
+ PSEUDO_PROLOGUE; \
|
||||
+ ENTRY (name); \
|
||||
+ SINGLE_THREAD_P; \
|
||||
+ bne .Lpseudo_cancel; \
|
||||
+ DO_CALL (syscall_name, args); \
|
||||
+ cmn r0, $4096; \
|
||||
+ RETINSTR(cc, lr); \
|
||||
+ b PLTJMP(SYSCALL_ERROR); \
|
||||
+ .Lpseudo_cancel: \
|
||||
+ str lr, [sp, $-4]!; \
|
||||
+ DOCARGS_##args; /* save syscall args around CENABLE. */ \
|
||||
+ CENABLE; \
|
||||
+ mov ip, r0; /* put mask in safe place. */ \
|
||||
+ UNDOCARGS_##args; /* restore syscall args. */ \
|
||||
+ swi SYS_ify (syscall_name); /* do the call. */ \
|
||||
+ str r0, [sp, $-4]!; /* save syscall return value. */ \
|
||||
+ mov r0, ip; /* get mask back. */ \
|
||||
+ CDISABLE; \
|
||||
+ ldr r0, [sp], $4; /* retrieve return value. */ \
|
||||
+ UNDOC2ARGS_##args; /* fix register damage. */ \
|
||||
+ cmn r0, $4096;
|
||||
+
|
||||
+# define DOCARGS_0
|
||||
+# define UNDOCARGS_0
|
||||
+# define UNDOC2ARGS_0
|
||||
+
|
||||
+# define DOCARGS_1 str r0, [sp, #-4]!;
|
||||
+# define UNDOCARGS_1 ldr r0, [sp], #4;
|
||||
+# define UNDOC2ARGS_1
|
||||
+
|
||||
+# define DOCARGS_2 str r1, [sp, #-4]!; str r0, [sp, #-4]!;
|
||||
+# define UNDOCARGS_2 ldr r0, [sp], #4; ldr r1, [sp], #4;
|
||||
+# define UNDOC2ARGS_2
|
||||
+
|
||||
+# define DOCARGS_3 str r2, [sp, #-4]!; str r1, [sp, #-4]!; str r0, [sp, #-4]!;
|
||||
+# define UNDOCARGS_3 ldr r0, [sp], #4; ldr r1, [sp], #4; ldr r2, [sp], #4
|
||||
+# define UNDOC2ARGS_3
|
||||
+
|
||||
+# define DOCARGS_4 stmfd sp!, {r0-r3}
|
||||
+# define UNDOCARGS_4 ldmfd sp!, {r0-r3}
|
||||
+# define UNDOC2ARGS_4
|
||||
+
|
||||
+# define DOCARGS_5 stmfd sp!, {r0-r3}
|
||||
+# define UNDOCARGS_5 ldmfd sp, {r0-r3}; str r4, [sp, #-4]!; ldr r4, [sp, #24]
|
||||
+# define UNDOC2ARGS_5 ldr r4, [sp], #20
|
||||
+
|
||||
+# ifdef IS_IN_libpthread
|
||||
+# define CENABLE bl PLTJMP(__pthread_enable_asynccancel)
|
||||
+# define CDISABLE bl PLTJMP(__pthread_disable_asynccancel)
|
||||
+# define __local_multiple_threads __pthread_multiple_threads
|
||||
+# else
|
||||
+# define CENABLE bl PLTJMP(__libc_enable_asynccancel)
|
||||
+# define CDISABLE bl PLTJMP(__libc_disable_asynccancel)
|
||||
+# define __local_multiple_threads __libc_multiple_threads
|
||||
+# endif
|
||||
+
|
||||
+# ifndef __ASSEMBLER__
|
||||
+extern int __local_multiple_threads attribute_hidden;
|
||||
+# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
|
||||
+# else
|
||||
+# if !defined PIC
|
||||
+# define SINGLE_THREAD_P \
|
||||
+ ldr ip, =__local_multiple_threads; \
|
||||
+ ldr ip, [ip]; \
|
||||
+ teq ip, #0;
|
||||
+# define PSEUDO_PROLOGUE
|
||||
+# else
|
||||
+# define SINGLE_THREAD_P \
|
||||
+ ldr ip, 1b; \
|
||||
+2: \
|
||||
+ ldr ip, [pc, ip]; \
|
||||
+ teq ip, #0;
|
||||
+# define PSEUDO_PROLOGUE \
|
||||
+ 1: .word __local_multiple_threads - 2f - 8;
|
||||
+# endif
|
||||
+# endif
|
||||
+
|
||||
+#elif !defined __ASSEMBLER__
|
||||
+
|
||||
+/* This code should never be used but we define it anyhow. */
|
||||
+# define SINGLE_THREAD_P (1)
|
||||
+
|
||||
+#endif
|
|
@ -1,70 +0,0 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Sun May 13 11:16:02 2007
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
TARGET_arm=y
|
||||
# TARGET_bfin is not set
|
||||
# TARGET_cris is not set
|
||||
# TARGET_e1 is not set
|
||||
# TARGET_frv is not set
|
||||
# TARGET_h8300 is not set
|
||||
# TARGET_hppa is not set
|
||||
# TARGET_i386 is not set
|
||||
# TARGET_i960 is not set
|
||||
# TARGET_ia64 is not set
|
||||
# TARGET_m68k is not set
|
||||
# TARGET_microblaze is not set
|
||||
# TARGET_mips is not set
|
||||
# TARGET_nios is not set
|
||||
# TARGET_nios2 is not set
|
||||
# TARGET_powerpc is not set
|
||||
# TARGET_sh is not set
|
||||
# TARGET_sh64 is not set
|
||||
# TARGET_sparc is not set
|
||||
# TARGET_v850 is not set
|
||||
# TARGET_vax is not set
|
||||
# TARGET_x86_64 is not set
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
#
|
||||
TARGET_ARCH="arm"
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
# CONFIG_ARM_OABI is not set
|
||||
CONFIG_ARM_EABI=y
|
||||
USE_BX=y
|
||||
# CONFIG_GENERIC_ARM is not set
|
||||
# CONFIG_ARM610 is not set
|
||||
# CONFIG_ARM710 is not set
|
||||
# CONFIG_ARM7TDMI is not set
|
||||
# CONFIG_ARM720T is not set
|
||||
# CONFIG_ARM920T is not set
|
||||
# CONFIG_ARM922T is not set
|
||||
# CONFIG_ARM926T is not set
|
||||
# CONFIG_ARM10T is not set
|
||||
# CONFIG_ARM1136JF_S is not set
|
||||
# CONFIG_ARM1176JZ_S is not set
|
||||
# CONFIG_ARM1176JZF_S is not set
|
||||
# CONFIG_ARM_SA110 is not set
|
||||
# CONFIG_ARM_SA1100 is not set
|
||||
CONFIG_ARM_XSCALE=y
|
||||
# CONFIG_ARM_IWMMXT is not set
|
||||
TARGET_SUBARCH=""
|
||||
|
||||
#
|
||||
# Using ELF file format
|
||||
#
|
||||
ARCH_ANY_ENDIAN=y
|
||||
ARCH_LITTLE_ENDIAN=y
|
||||
# ARCH_WANTS_BIG_ENDIAN is not set
|
||||
ARCH_WANTS_LITTLE_ENDIAN=y
|
||||
ARCH_HAS_MMU=y
|
||||
ARCH_USE_MMU=y
|
||||
UCLIBC_HAS_FLOATS=y
|
||||
# UCLIBC_HAS_FPU is not set
|
||||
UCLIBC_HAS_SOFT_FLOAT=y
|
||||
DO_C99_MATH=y
|
||||
KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
|
||||
HAVE_DOT_CONFIG=y
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Sun May 13 11:16:02 2007
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
TARGET_arm=y
|
||||
# TARGET_bfin is not set
|
||||
# TARGET_cris is not set
|
||||
# TARGET_e1 is not set
|
||||
# TARGET_frv is not set
|
||||
# TARGET_h8300 is not set
|
||||
# TARGET_hppa is not set
|
||||
# TARGET_i386 is not set
|
||||
# TARGET_i960 is not set
|
||||
# TARGET_ia64 is not set
|
||||
# TARGET_m68k is not set
|
||||
# TARGET_microblaze is not set
|
||||
# TARGET_mips is not set
|
||||
# TARGET_nios is not set
|
||||
# TARGET_nios2 is not set
|
||||
# TARGET_powerpc is not set
|
||||
# TARGET_sh is not set
|
||||
# TARGET_sh64 is not set
|
||||
# TARGET_sparc is not set
|
||||
# TARGET_v850 is not set
|
||||
# TARGET_vax is not set
|
||||
# TARGET_x86_64 is not set
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
#
|
||||
TARGET_ARCH="arm"
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
# CONFIG_ARM_OABI is not set
|
||||
CONFIG_ARM_EABI=y
|
||||
USE_BX=y
|
||||
# CONFIG_GENERIC_ARM is not set
|
||||
# CONFIG_ARM610 is not set
|
||||
# CONFIG_ARM710 is not set
|
||||
# CONFIG_ARM7TDMI is not set
|
||||
# CONFIG_ARM720T is not set
|
||||
# CONFIG_ARM920T is not set
|
||||
# CONFIG_ARM922T is not set
|
||||
# CONFIG_ARM926T is not set
|
||||
# CONFIG_ARM10T is not set
|
||||
# CONFIG_ARM1136JF_S is not set
|
||||
# CONFIG_ARM1176JZ_S is not set
|
||||
# CONFIG_ARM1176JZF_S is not set
|
||||
# CONFIG_ARM_SA110 is not set
|
||||
# CONFIG_ARM_SA1100 is not set
|
||||
CONFIG_ARM_XSCALE=y
|
||||
# CONFIG_ARM_IWMMXT is not set
|
||||
TARGET_SUBARCH=""
|
||||
|
||||
#
|
||||
# Using ELF file format
|
||||
#
|
||||
ARCH_ANY_ENDIAN=y
|
||||
ARCH_LITTLE_ENDIAN=y
|
||||
# ARCH_WANTS_BIG_ENDIAN is not set
|
||||
ARCH_WANTS_LITTLE_ENDIAN=y
|
||||
ARCH_HAS_MMU=y
|
||||
ARCH_USE_MMU=y
|
||||
UCLIBC_HAS_FLOATS=y
|
||||
UCLIBC_HAS_FPU=y
|
||||
UCLIBC_HAS_SOFT_FLOAT=n
|
||||
DO_C99_MATH=y
|
||||
KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
|
||||
HAVE_DOT_CONFIG=y
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Sun May 13 11:16:02 2007
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
TARGET_arm=y
|
||||
# TARGET_bfin is not set
|
||||
# TARGET_cris is not set
|
||||
# TARGET_e1 is not set
|
||||
# TARGET_frv is not set
|
||||
# TARGET_h8300 is not set
|
||||
# TARGET_hppa is not set
|
||||
# TARGET_i386 is not set
|
||||
# TARGET_i960 is not set
|
||||
# TARGET_ia64 is not set
|
||||
# TARGET_m68k is not set
|
||||
# TARGET_microblaze is not set
|
||||
# TARGET_mips is not set
|
||||
# TARGET_nios is not set
|
||||
# TARGET_nios2 is not set
|
||||
# TARGET_powerpc is not set
|
||||
# TARGET_sh is not set
|
||||
# TARGET_sh64 is not set
|
||||
# TARGET_sparc is not set
|
||||
# TARGET_v850 is not set
|
||||
# TARGET_vax is not set
|
||||
# TARGET_x86_64 is not set
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
#
|
||||
TARGET_ARCH="arm"
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
# CONFIG_ARM_OABI is not set
|
||||
CONFIG_ARM_EABI=y
|
||||
USE_BX=y
|
||||
# CONFIG_GENERIC_ARM is not set
|
||||
# CONFIG_ARM610 is not set
|
||||
# CONFIG_ARM710 is not set
|
||||
# CONFIG_ARM7TDMI is not set
|
||||
# CONFIG_ARM720T is not set
|
||||
# CONFIG_ARM920T is not set
|
||||
# CONFIG_ARM922T is not set
|
||||
# CONFIG_ARM926T is not set
|
||||
# CONFIG_ARM10T is not set
|
||||
# CONFIG_ARM1136JF_S is not set
|
||||
# CONFIG_ARM1176JZ_S is not set
|
||||
# CONFIG_ARM1176JZF_S is not set
|
||||
# CONFIG_ARM_SA110 is not set
|
||||
# CONFIG_ARM_SA1100 is not set
|
||||
CONFIG_ARM_XSCALE=y
|
||||
# CONFIG_ARM_IWMMXT is not set
|
||||
TARGET_SUBARCH=""
|
||||
|
||||
#
|
||||
# Using ELF file format
|
||||
#
|
||||
ARCH_ANY_ENDIAN=y
|
||||
ARCH_LITTLE_ENDIAN=y
|
||||
# ARCH_WANTS_BIG_ENDIAN is not set
|
||||
ARCH_WANTS_LITTLE_ENDIAN=y
|
||||
ARCH_HAS_MMU=y
|
||||
ARCH_USE_MMU=y
|
||||
UCLIBC_HAS_FLOATS=y
|
||||
UCLIBC_HAS_FPU=y
|
||||
UCLIBC_HAS_SOFT_FLOAT=n
|
||||
DO_C99_MATH=y
|
||||
KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
|
||||
HAVE_DOT_CONFIG=y
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
Index: uClibc-0.9.30.1/extra/scripts/unifdef.c
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1.orig/extra/scripts/unifdef.c 2009-08-09 11:55:23.000000000 +0200
|
||||
+++ uClibc-0.9.30.1/extra/scripts/unifdef.c 2009-08-09 11:55:46.000000000 +0200
|
||||
@@ -206,7 +206,7 @@
|
||||
static void error(const char *);
|
||||
static int findsym(const char *);
|
||||
static void flushline(bool);
|
||||
-static Linetype getline(void);
|
||||
+static Linetype _getline(void);
|
||||
static Linetype ifeval(const char **);
|
||||
static void ignoreoff(void);
|
||||
static void ignoreon(void);
|
||||
@@ -512,7 +512,7 @@
|
||||
|
||||
for (;;) {
|
||||
linenum++;
|
||||
- lineval = getline();
|
||||
+ lineval = _getline();
|
||||
trans_table[ifstate[depth]][lineval]();
|
||||
debug("process %s -> %s depth %d",
|
||||
linetype_name[lineval],
|
||||
@@ -526,7 +526,7 @@
|
||||
* help from skipcomment().
|
||||
*/
|
||||
static Linetype
|
||||
-getline(void)
|
||||
+_getline(void)
|
||||
{
|
||||
const char *cp;
|
||||
int cursym;
|
|
@ -1,291 +0,0 @@
|
|||
Index: uClibc/libpthread/linuxthreads/descr.h
|
||||
===================================================================
|
||||
--- uClibc.orig/libpthread/linuxthreads/descr.h 2008-08-27 23:59:46.171809044 +0200
|
||||
+++ uClibc/libpthread/linuxthreads/descr.h 2008-08-28 00:00:35.435134759 +0200
|
||||
@@ -123,9 +123,9 @@
|
||||
union dtv *dtvp;
|
||||
pthread_descr self; /* Pointer to this structure */
|
||||
int multiple_threads;
|
||||
-# ifdef NEED_DL_SYSINFO
|
||||
uintptr_t sysinfo;
|
||||
-# endif
|
||||
+ uintptr_t stack_guard;
|
||||
+ uintptr_t pointer_guard;
|
||||
} data;
|
||||
void *__padding[16];
|
||||
} p_header;
|
||||
@@ -193,6 +193,13 @@
|
||||
size_t p_alloca_cutoff; /* Maximum size which should be allocated
|
||||
using alloca() instead of malloc(). */
|
||||
/* New elements must be added at the end. */
|
||||
+
|
||||
+ /* This member must be last. */
|
||||
+ char end_padding[];
|
||||
+
|
||||
+#define PTHREAD_STRUCT_END_PADDING \
|
||||
+ (sizeof (struct _pthread_descr_struct) \
|
||||
+ - offsetof (struct _pthread_descr_struct, end_padding))
|
||||
} __attribute__ ((aligned(32))); /* We need to align the structure so that
|
||||
doubles are aligned properly. This is 8
|
||||
bytes on MIPS and 16 bytes on MIPS64.
|
||||
Index: uClibc/libpthread/linuxthreads/manager.c
|
||||
===================================================================
|
||||
--- uClibc.orig/libpthread/linuxthreads/manager.c 2008-08-27 23:59:54.185140485 +0200
|
||||
+++ uClibc/libpthread/linuxthreads/manager.c 2008-08-28 00:00:35.435134759 +0200
|
||||
@@ -679,6 +679,17 @@
|
||||
new_thread->p_inheritsched = attr ? attr->__inheritsched : 0;
|
||||
new_thread->p_alloca_cutoff = stksize / 4 > __MAX_ALLOCA_CUTOFF
|
||||
? __MAX_ALLOCA_CUTOFF : stksize / 4;
|
||||
+
|
||||
+ /* Copy the stack guard canary. */
|
||||
+#ifdef THREAD_COPY_STACK_GUARD
|
||||
+ THREAD_COPY_STACK_GUARD (new_thread);
|
||||
+#endif
|
||||
+
|
||||
+ /* Copy the pointer guard value. */
|
||||
+#ifdef THREAD_COPY_POINTER_GUARD
|
||||
+ THREAD_COPY_POINTER_GUARD (new_thread);
|
||||
+#endif
|
||||
+
|
||||
/* Initialize the thread handle */
|
||||
__pthread_init_lock(&__pthread_handles[sseg].h_lock);
|
||||
__pthread_handles[sseg].h_descr = new_thread;
|
||||
@@ -742,15 +753,15 @@
|
||||
pid = __clone2(pthread_start_thread_event,
|
||||
(void **)new_thread_bottom,
|
||||
(char *)stack_addr - new_thread_bottom,
|
||||
- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND |
|
||||
+ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM |
|
||||
__pthread_sig_cancel, new_thread);
|
||||
#elif _STACK_GROWS_UP
|
||||
pid = __clone(pthread_start_thread_event, (void *) new_thread_bottom,
|
||||
- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND |
|
||||
+ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM |
|
||||
__pthread_sig_cancel, new_thread);
|
||||
#else
|
||||
pid = __clone(pthread_start_thread_event, stack_addr,
|
||||
- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND |
|
||||
+ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM |
|
||||
__pthread_sig_cancel, new_thread);
|
||||
#endif
|
||||
saved_errno = errno;
|
||||
@@ -783,15 +794,15 @@
|
||||
pid = __clone2(pthread_start_thread,
|
||||
(void **)new_thread_bottom,
|
||||
(char *)stack_addr - new_thread_bottom,
|
||||
- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND |
|
||||
+ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM |
|
||||
__pthread_sig_cancel, new_thread);
|
||||
#elif _STACK_GROWS_UP
|
||||
pid = __clone(pthread_start_thread, (void *) new_thread_bottom,
|
||||
- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND |
|
||||
+ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM |
|
||||
__pthread_sig_cancel, new_thread);
|
||||
#else
|
||||
pid = __clone(pthread_start_thread, stack_addr,
|
||||
- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND |
|
||||
+ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM |
|
||||
__pthread_sig_cancel, new_thread);
|
||||
#endif /* !NEED_SEPARATE_REGISTER_STACK */
|
||||
saved_errno = errno;
|
||||
@@ -892,10 +903,11 @@
|
||||
#ifdef _STACK_GROWS_UP
|
||||
# ifdef USE_TLS
|
||||
size_t stacksize = guardaddr - th->p_stackaddr;
|
||||
+ guardaddr = th->p_stackaddr;
|
||||
# else
|
||||
size_t stacksize = guardaddr - (char *)th;
|
||||
-# endif
|
||||
guardaddr = (char *)th;
|
||||
+# endif
|
||||
#else
|
||||
/* Guardaddr is always set, even if guardsize is 0. This allows
|
||||
us to compute everything else. */
|
||||
Index: uClibc/libpthread/linuxthreads/pthread.c
|
||||
===================================================================
|
||||
--- uClibc.orig/libpthread/linuxthreads/pthread.c 2008-08-28 00:00:00.825141935 +0200
|
||||
+++ uClibc/libpthread/linuxthreads/pthread.c 2008-08-28 00:00:35.438472147 +0200
|
||||
@@ -698,6 +698,16 @@
|
||||
mgr = &__pthread_manager_thread;
|
||||
#endif
|
||||
|
||||
+ /* Copy the stack guard canary. */
|
||||
+#ifdef THREAD_COPY_STACK_GUARD
|
||||
+ THREAD_COPY_STACK_GUARD (mgr);
|
||||
+#endif
|
||||
+
|
||||
+ /* Copy the pointer guard value. */
|
||||
+#ifdef THREAD_COPY_POINTER_GUARD
|
||||
+ THREAD_COPY_POINTER_GUARD (mgr);
|
||||
+#endif
|
||||
+
|
||||
__pthread_manager_request = manager_pipe[1]; /* writing end */
|
||||
__pthread_manager_reader = manager_pipe[0]; /* reading end */
|
||||
|
||||
@@ -738,17 +748,17 @@
|
||||
pid = __clone2(__pthread_manager_event,
|
||||
(void **) __pthread_manager_thread_bos,
|
||||
THREAD_MANAGER_STACK_SIZE,
|
||||
- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND,
|
||||
+ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM,
|
||||
mgr);
|
||||
#elif _STACK_GROWS_UP
|
||||
pid = __clone(__pthread_manager_event,
|
||||
(void **) __pthread_manager_thread_bos,
|
||||
- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND,
|
||||
+ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM,
|
||||
mgr);
|
||||
#else
|
||||
pid = __clone(__pthread_manager_event,
|
||||
(void **) __pthread_manager_thread_tos,
|
||||
- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND,
|
||||
+ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM,
|
||||
mgr);
|
||||
#endif
|
||||
|
||||
@@ -778,13 +788,13 @@
|
||||
#ifdef NEED_SEPARATE_REGISTER_STACK
|
||||
pid = __clone2(__pthread_manager, (void **) __pthread_manager_thread_bos,
|
||||
THREAD_MANAGER_STACK_SIZE,
|
||||
- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND, mgr);
|
||||
+ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM, mgr);
|
||||
#elif _STACK_GROWS_UP
|
||||
pid = __clone(__pthread_manager, (void **) __pthread_manager_thread_bos,
|
||||
- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND, mgr);
|
||||
+ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM, mgr);
|
||||
#else
|
||||
pid = __clone(__pthread_manager, (void **) __pthread_manager_thread_tos,
|
||||
- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND, mgr);
|
||||
+ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM, mgr);
|
||||
#endif
|
||||
}
|
||||
if (__builtin_expect (pid, 0) == -1) {
|
||||
@@ -971,6 +981,10 @@
|
||||
struct pthread_request request;
|
||||
pthread_descr self = thread_self();
|
||||
|
||||
+ /* Make sure we come back here after suspend(), in case we entered
|
||||
+ from a signal handler. */
|
||||
+ THREAD_SETMEM(self, p_signal_jmp, NULL);
|
||||
+
|
||||
request.req_thread = self;
|
||||
request.req_kind = REQ_PROCESS_EXIT;
|
||||
request.req_args.exit.code = retcode;
|
||||
@@ -1198,13 +1212,13 @@
|
||||
|
||||
void __pthread_restart_old(pthread_descr th)
|
||||
{
|
||||
- if (atomic_increment(&th->p_resume_count) == -1)
|
||||
+ if (pthread_atomic_increment(&th->p_resume_count) == -1)
|
||||
kill(th->p_pid, __pthread_sig_restart);
|
||||
}
|
||||
|
||||
void __pthread_suspend_old(pthread_descr self)
|
||||
{
|
||||
- if (atomic_decrement(&self->p_resume_count) <= 0)
|
||||
+ if (pthread_atomic_decrement(&self->p_resume_count) <= 0)
|
||||
__pthread_wait_for_restart_signal(self);
|
||||
}
|
||||
|
||||
@@ -1215,7 +1229,7 @@
|
||||
int was_signalled = 0;
|
||||
sigjmp_buf jmpbuf;
|
||||
|
||||
- if (atomic_decrement(&self->p_resume_count) == 0) {
|
||||
+ if (pthread_atomic_decrement(&self->p_resume_count) == 0) {
|
||||
/* Set up a longjmp handler for the restart signal, unblock
|
||||
the signal and sleep. */
|
||||
|
||||
@@ -1272,9 +1286,9 @@
|
||||
being delivered. */
|
||||
|
||||
if (!was_signalled) {
|
||||
- if (atomic_increment(&self->p_resume_count) != -1) {
|
||||
+ if (pthread_atomic_increment(&self->p_resume_count) != -1) {
|
||||
__pthread_wait_for_restart_signal(self);
|
||||
- atomic_decrement(&self->p_resume_count); /* should be zero now! */
|
||||
+ pthread_atomic_decrement(&self->p_resume_count); /* should be zero now! */
|
||||
/* woke spontaneously and consumed restart signal */
|
||||
return 1;
|
||||
}
|
||||
Index: uClibc/libpthread/linuxthreads/specific.c
|
||||
===================================================================
|
||||
--- uClibc.orig/libpthread/linuxthreads/specific.c 2008-08-28 00:00:07.595139286 +0200
|
||||
+++ uClibc/libpthread/linuxthreads/specific.c 2008-08-28 00:00:35.438472147 +0200
|
||||
@@ -104,13 +104,14 @@
|
||||
that if the key is reallocated later by pthread_key_create, its
|
||||
associated values will be NULL in all threads.
|
||||
|
||||
- If no threads have been created yet, clear it just in the
|
||||
- current thread. */
|
||||
+ If no threads have been created yet, or if we are exiting, clear
|
||||
+ it just in the current thread. */
|
||||
|
||||
struct pthread_key_delete_helper_args args;
|
||||
args.idx1st = key / PTHREAD_KEY_2NDLEVEL_SIZE;
|
||||
args.idx2nd = key % PTHREAD_KEY_2NDLEVEL_SIZE;
|
||||
- if (__pthread_manager_request != -1)
|
||||
+ if (__pthread_manager_request != -1
|
||||
+ && !(__builtin_expect (__pthread_exit_requested, 0)))
|
||||
{
|
||||
struct pthread_request request;
|
||||
|
||||
@@ -203,8 +204,9 @@
|
||||
__pthread_lock(THREAD_GETMEM(self, p_lock), self);
|
||||
for (i = 0; i < PTHREAD_KEY_1STLEVEL_SIZE; i++) {
|
||||
if (THREAD_GETMEM_NC(self, p_specific[i]) != NULL) {
|
||||
- free(THREAD_GETMEM_NC(self, p_specific[i]));
|
||||
+ void *p = THREAD_GETMEM_NC(self, p_specific[i]);
|
||||
THREAD_SETMEM_NC(self, p_specific[i], NULL);
|
||||
+ free(p);
|
||||
}
|
||||
}
|
||||
__pthread_unlock(THREAD_GETMEM(self, p_lock));
|
||||
Index: uClibc/libpthread/linuxthreads/spinlock.c
|
||||
===================================================================
|
||||
--- uClibc.orig/libpthread/linuxthreads/spinlock.c 2008-08-28 00:00:17.805140454 +0200
|
||||
+++ uClibc/libpthread/linuxthreads/spinlock.c 2008-08-28 00:00:35.438472147 +0200
|
||||
@@ -637,8 +637,20 @@
|
||||
#if defined HAS_COMPARE_AND_SWAP
|
||||
wait_node_dequeue(pp_head, pp_max_prio, p_max_prio);
|
||||
#endif
|
||||
+
|
||||
+ /* Release the spinlock before restarting. */
|
||||
+#if defined TEST_FOR_COMPARE_AND_SWAP
|
||||
+ if (!__pthread_has_cas)
|
||||
+#endif
|
||||
+#if !defined HAS_COMPARE_AND_SWAP || defined TEST_FOR_COMPARE_AND_SWAP
|
||||
+ {
|
||||
+ __pthread_release(&lock->__spinlock);
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
restart(p_max_prio->thr);
|
||||
- break;
|
||||
+
|
||||
+ return;
|
||||
}
|
||||
}
|
||||
|
||||
Index: uClibc/libpthread/linuxthreads/spinlock.h
|
||||
===================================================================
|
||||
--- uClibc.orig/libpthread/linuxthreads/spinlock.h 2008-08-28 00:00:24.768471655 +0200
|
||||
+++ uClibc/libpthread/linuxthreads/spinlock.h 2008-08-28 00:02:42.971786951 +0200
|
||||
@@ -172,7 +172,7 @@
|
||||
|
||||
/* Operations on pthread_atomic, which is defined in internals.h */
|
||||
|
||||
-static __inline__ long atomic_increment(struct pthread_atomic *pa)
|
||||
+static __inline__ long pthread_atomic_increment(struct pthread_atomic *pa)
|
||||
{
|
||||
long oldval;
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
}
|
||||
|
||||
|
||||
-static __inline__ long atomic_decrement(struct pthread_atomic *pa)
|
||||
+static __inline__ long pthread_atomic_decrement(struct pthread_atomic *pa)
|
||||
{
|
||||
long oldval;
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
Index: uClibc-0.9.30/libpthread/linuxthreads/Makefile.in
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.orig/libpthread/linuxthreads/Makefile.in 2009-01-11 01:09:27.008515954 +0100
|
||||
+++ uClibc-0.9.30/libpthread/linuxthreads/Makefile.in 2009-01-11 01:09:35.295181636 +0100
|
||||
@@ -45,7 +45,7 @@
|
||||
pthread_SRC := \
|
||||
attr barrier cancel condvar errno events join pthread \
|
||||
lockfile manager mutex pt-machine ptcleanup \
|
||||
- ptclock_gettime ptclock_settime ptfork pthandles \
|
||||
+ ptclock_gettime ptclock_settime ptfork pthandles pthread_atfork \
|
||||
pthread_setegid pthread_seteuid pthread_setgid pthread_setregid \
|
||||
pthread_setresgid pthread_setresuid pthread_setreuid pthread_setuid \
|
||||
rwlock semaphore sighandler signals specific spinlock
|
||||
Index: uClibc-0.9.30/libpthread/linuxthreads/pthread_atfork.c
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.orig/libpthread/linuxthreads/pthread_atfork.c 2009-01-11 01:09:44.931848926 +0100
|
||||
+++ uClibc-0.9.30/libpthread/linuxthreads/pthread_atfork.c 2009-01-11 01:12:49.926539743 +0100
|
||||
@@ -43,12 +43,8 @@
|
||||
|
||||
/* Hide the symbol so that no definition but the one locally in the
|
||||
executable or DSO is used. */
|
||||
-int
|
||||
-#ifndef __pthread_atfork
|
||||
-/* Don't mark the compatibility function as hidden. */
|
||||
-attribute_hidden
|
||||
-#endif
|
||||
-__pthread_atfork (prepare, parent, child)
|
||||
+
|
||||
+int attribute_hidden __pthread_atfork (prepare, parent, child)
|
||||
void (*prepare) (void);
|
||||
void (*parent) (void);
|
||||
void (*child) (void);
|
||||
@@ -56,8 +52,5 @@
|
||||
return __register_atfork (prepare, parent, child,
|
||||
&__dso_handle == NULL ? NULL : __dso_handle);
|
||||
}
|
||||
-#ifndef __pthread_atfork
|
||||
-extern int pthread_atfork (void (*prepare) (void), void (*parent) (void),
|
||||
- void (*child) (void)) attribute_hidden;
|
||||
+
|
||||
strong_alias (__pthread_atfork, pthread_atfork)
|
||||
-#endif
|
|
@ -1,69 +0,0 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Mon May 14 10:23:14 2007
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
TARGET_arm=y
|
||||
# TARGET_bfin is not set
|
||||
# TARGET_cris is not set
|
||||
# TARGET_e1 is not set
|
||||
# TARGET_frv is not set
|
||||
# TARGET_h8300 is not set
|
||||
# TARGET_hppa is not set
|
||||
# TARGET_i386 is not set
|
||||
# TARGET_i960 is not set
|
||||
# TARGET_ia64 is not set
|
||||
# TARGET_m68k is not set
|
||||
# TARGET_microblaze is not set
|
||||
# TARGET_mips is not set
|
||||
# TARGET_nios is not set
|
||||
# TARGET_nios2 is not set
|
||||
# TARGET_powerpc is not set
|
||||
# TARGET_sh is not set
|
||||
# TARGET_sh64 is not set
|
||||
# TARGET_sparc is not set
|
||||
# TARGET_v850 is not set
|
||||
# TARGET_vax is not set
|
||||
# TARGET_x86_64 is not set
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
#
|
||||
TARGET_ARCH="arm"
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
# CONFIG_ARM_OABI is not set
|
||||
CONFIG_ARM_EABI=y
|
||||
USE_BX=y
|
||||
# CONFIG_GENERIC_ARM is not set
|
||||
# CONFIG_ARM610 is not set
|
||||
# CONFIG_ARM710 is not set
|
||||
# CONFIG_ARM7TDMI is not set
|
||||
# CONFIG_ARM720T is not set
|
||||
CONFIG_ARM920T=y
|
||||
# CONFIG_ARM922T is not set
|
||||
# CONFIG_ARM926T is not set
|
||||
# CONFIG_ARM10T is not set
|
||||
# CONFIG_ARM1136JF_S is not set
|
||||
# CONFIG_ARM1176JZ_S is not set
|
||||
# CONFIG_ARM1176JZF_S is not set
|
||||
# CONFIG_ARM_SA110 is not set
|
||||
# CONFIG_ARM_SA1100 is not set
|
||||
# CONFIG_ARM_XSCALE is not set
|
||||
# CONFIG_ARM_IWMMXT is not set
|
||||
TARGET_SUBARCH=""
|
||||
|
||||
#
|
||||
# Using ELF file format
|
||||
#
|
||||
ARCH_ANY_ENDIAN=y
|
||||
ARCH_LITTLE_ENDIAN=y
|
||||
# ARCH_WANTS_BIG_ENDIAN is not set
|
||||
ARCH_WANTS_LITTLE_ENDIAN=y
|
||||
ARCH_HAS_MMU=y
|
||||
ARCH_USE_MMU=y
|
||||
UCLIBC_HAS_FLOATS=y
|
||||
# UCLIBC_HAS_FPU is not set
|
||||
UCLIBC_HAS_SOFT_FLOAT=y
|
||||
KERNEL_HEADERS="/usr/include"
|
||||
HAVE_DOT_CONFIG=y
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Sun May 13 11:16:02 2007
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
TARGET_arm=y
|
||||
# TARGET_bfin is not set
|
||||
# TARGET_cris is not set
|
||||
# TARGET_e1 is not set
|
||||
# TARGET_frv is not set
|
||||
# TARGET_h8300 is not set
|
||||
# TARGET_hppa is not set
|
||||
# TARGET_i386 is not set
|
||||
# TARGET_i960 is not set
|
||||
# TARGET_ia64 is not set
|
||||
# TARGET_m68k is not set
|
||||
# TARGET_microblaze is not set
|
||||
# TARGET_mips is not set
|
||||
# TARGET_nios is not set
|
||||
# TARGET_nios2 is not set
|
||||
# TARGET_powerpc is not set
|
||||
# TARGET_sh is not set
|
||||
# TARGET_sh64 is not set
|
||||
# TARGET_sparc is not set
|
||||
# TARGET_v850 is not set
|
||||
# TARGET_vax is not set
|
||||
# TARGET_x86_64 is not set
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
#
|
||||
TARGET_ARCH="arm"
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
# CONFIG_ARM_OABI is not set
|
||||
CONFIG_ARM_EABI=y
|
||||
USE_BX=y
|
||||
# CONFIG_GENERIC_ARM is not set
|
||||
# CONFIG_ARM610 is not set
|
||||
# CONFIG_ARM710 is not set
|
||||
# CONFIG_ARM7TDMI is not set
|
||||
# CONFIG_ARM720T is not set
|
||||
# CONFIG_ARM920T is not set
|
||||
# CONFIG_ARM922T is not set
|
||||
# CONFIG_ARM926T is not set
|
||||
# CONFIG_ARM10T is not set
|
||||
# CONFIG_ARM1136JF_S is not set
|
||||
# CONFIG_ARM1176JZ_S is not set
|
||||
# CONFIG_ARM1176JZF_S is not set
|
||||
# CONFIG_ARM_SA110 is not set
|
||||
# CONFIG_ARM_SA1100 is not set
|
||||
CONFIG_ARM_XSCALE=y
|
||||
# CONFIG_ARM_IWMMXT is not set
|
||||
TARGET_SUBARCH=""
|
||||
|
||||
#
|
||||
# Using ELF file format
|
||||
#
|
||||
ARCH_ANY_ENDIAN=y
|
||||
ARCH_LITTLE_ENDIAN=y
|
||||
# ARCH_WANTS_BIG_ENDIAN is not set
|
||||
ARCH_WANTS_LITTLE_ENDIAN=y
|
||||
ARCH_HAS_MMU=y
|
||||
ARCH_USE_MMU=y
|
||||
UCLIBC_HAS_FLOATS=y
|
||||
# UCLIBC_HAS_FPU is not set
|
||||
UCLIBC_HAS_SOFT_FLOAT=y
|
||||
DO_C99_MATH=y
|
||||
KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
|
||||
HAVE_DOT_CONFIG=y
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Sun May 13 11:29:51 2007
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
TARGET_arm=y
|
||||
# TARGET_bfin is not set
|
||||
# TARGET_cris is not set
|
||||
# TARGET_e1 is not set
|
||||
# TARGET_frv is not set
|
||||
# TARGET_h8300 is not set
|
||||
# TARGET_hppa is not set
|
||||
# TARGET_i386 is not set
|
||||
# TARGET_i960 is not set
|
||||
# TARGET_ia64 is not set
|
||||
# TARGET_m68k is not set
|
||||
# TARGET_microblaze is not set
|
||||
# TARGET_mips is not set
|
||||
# TARGET_nios is not set
|
||||
# TARGET_nios2 is not set
|
||||
# TARGET_powerpc is not set
|
||||
# TARGET_sh is not set
|
||||
# TARGET_sh64 is not set
|
||||
# TARGET_sparc is not set
|
||||
# TARGET_v850 is not set
|
||||
# TARGET_vax is not set
|
||||
# TARGET_x86_64 is not set
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
#
|
||||
TARGET_ARCH="arm"
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
CONFIG_ARM_OABI=y
|
||||
# CONFIG_ARM_EABI is not set
|
||||
# USE_BX is not set
|
||||
# CONFIG_GENERIC_ARM is not set
|
||||
# CONFIG_ARM610 is not set
|
||||
# CONFIG_ARM710 is not set
|
||||
# CONFIG_ARM7TDMI is not set
|
||||
# CONFIG_ARM720T is not set
|
||||
# CONFIG_ARM920T is not set
|
||||
# CONFIG_ARM922T is not set
|
||||
# CONFIG_ARM926T is not set
|
||||
# CONFIG_ARM10T is not set
|
||||
# CONFIG_ARM1136JF_S is not set
|
||||
# CONFIG_ARM1176JZ_S is not set
|
||||
# CONFIG_ARM1176JZF_S is not set
|
||||
# CONFIG_ARM_SA110 is not set
|
||||
CONFIG_ARM_SA1100=y
|
||||
# CONFIG_ARM_XSCALE is not set
|
||||
# CONFIG_ARM_IWMMXT is not set
|
||||
TARGET_SUBARCH=""
|
||||
|
||||
#
|
||||
# Using ELF file format
|
||||
#
|
||||
ARCH_ANY_ENDIAN=y
|
||||
ARCH_LITTLE_ENDIAN=y
|
||||
# ARCH_WANTS_BIG_ENDIAN is not set
|
||||
ARCH_WANTS_LITTLE_ENDIAN=y
|
||||
ARCH_HAS_MMU=y
|
||||
ARCH_USE_MMU=y
|
||||
UCLIBC_HAS_FLOATS=y
|
||||
# UCLIBC_HAS_FPU is not set
|
||||
UCLIBC_HAS_SOFT_FLOAT=y
|
||||
DO_C99_MATH=y
|
||||
KERNEL_HEADERS="/usr/include"
|
||||
HAVE_DOT_CONFIG=y
|
||||
|
|
@ -1,474 +0,0 @@
|
|||
Index: uClibc-0.9.30.1/libm/ldouble_wrappers.c
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libm/ldouble_wrappers.c (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libm/ldouble_wrappers.c (working copy)
|
||||
@@ -13,6 +13,16 @@
|
||||
#include "math.h"
|
||||
#include <complex.h>
|
||||
|
||||
+#if defined __NO_LONG_DOUBLE_MATH
|
||||
+# define int_WRAPPER_C99(func) /* not needed */
|
||||
+# else
|
||||
+# define int_WRAPPER_C99(func) \
|
||||
+int func##l(long double x) \
|
||||
+{ \
|
||||
+ return func((double) x); \
|
||||
+} \
|
||||
+libm_hidden_def(func##l)
|
||||
+#endif
|
||||
|
||||
/* Implement the following, as defined by SuSv3 */
|
||||
#if 0
|
||||
@@ -543,46 +553,28 @@ long double truncl (long double x)
|
||||
#endif
|
||||
|
||||
|
||||
-#ifdef __DO_C99_MATH__
|
||||
+#if defined __DO_C99_MATH__
|
||||
|
||||
#ifdef L_fpclassifyl
|
||||
-int __fpclassifyl (long double x)
|
||||
-{
|
||||
- return __fpclassify ( (double) x );
|
||||
-}
|
||||
-libm_hidden_def(__fpclassifyl)
|
||||
+int_WRAPPER_C99(__fpclassify)
|
||||
#endif
|
||||
|
||||
#ifdef L_finitel
|
||||
-int __finitel (long double x)
|
||||
-{
|
||||
- return __finite ( (double)x );
|
||||
-}
|
||||
-libm_hidden_def(__finitel)
|
||||
+int_WRAPPER_C99(__finite)
|
||||
#endif
|
||||
|
||||
#ifdef L_signbitl
|
||||
-int __signbitl (long double x)
|
||||
-{
|
||||
- return __signbitl ( (double)x );
|
||||
-}
|
||||
-libm_hidden_def(__signbitl)
|
||||
+int_WRAPPER_C99(__signbit)
|
||||
#endif
|
||||
|
||||
#ifdef L_isnanl
|
||||
-int __isnanl (long double x)
|
||||
-{
|
||||
- return __isnan ( (double)x );
|
||||
-}
|
||||
-libm_hidden_def(__isnanl)
|
||||
+int_WRAPPER_C99(__isnan)
|
||||
#endif
|
||||
|
||||
#ifdef L_isinfl
|
||||
-int __isinfl (long double x)
|
||||
-{
|
||||
- return __isinf ( (double)x );
|
||||
-}
|
||||
-libm_hidden_def(__isinfl)
|
||||
+int_WRAPPER_C99(__isinf)
|
||||
#endif
|
||||
|
||||
-#endif
|
||||
+#endif /* DO_C99_MATH */
|
||||
+
|
||||
+#undef int_WRAPPER_C99
|
||||
Index: uClibc-0.9.30.1/libm/nan.c
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libm/nan.c (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libm/nan.c (working copy)
|
||||
@@ -45,7 +45,7 @@ float nanf (const char *tagp)
|
||||
}
|
||||
libm_hidden_def(nanf)
|
||||
|
||||
-#if defined __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+#if defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ && !defined __NO_LONG_DOUBLE_MATH
|
||||
libm_hidden_proto(nanl)
|
||||
long double nanl (const char *tagp)
|
||||
{
|
||||
Index: uClibc-0.9.30.1/include/math.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/include/math.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/include/math.h (working copy)
|
||||
@@ -118,7 +118,7 @@ __BEGIN_DECLS
|
||||
# undef __MATH_PRECNAME
|
||||
|
||||
# if (__STDC__ - 0 || __GNUC__ - 0) \
|
||||
- && (defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ || defined __LDBL_COMPAT)
|
||||
+ && (!defined __NO_LONG_DOUBLE_MATH || defined __LDBL_COMPAT)
|
||||
# ifdef __LDBL_COMPAT
|
||||
|
||||
# ifdef __USE_ISOC99
|
||||
@@ -230,7 +230,7 @@ enum
|
||||
};
|
||||
|
||||
/* Return number of classification appropriate for X. */
|
||||
-# ifndef __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# ifdef __NO_LONG_DOUBLE_MATH
|
||||
# define fpclassify(x) \
|
||||
(sizeof (x) == sizeof (float) ? __fpclassifyf (x) : __fpclassify (x))
|
||||
# else
|
||||
@@ -242,7 +242,7 @@ enum
|
||||
# endif
|
||||
|
||||
/* Return nonzero value if sign of X is negative. */
|
||||
-# ifndef __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# ifdef __NO_LONG_DOUBLE_MATH
|
||||
# define signbit(x) \
|
||||
(sizeof (x) == sizeof (float) ? __signbitf (x) : __signbit (x))
|
||||
# else
|
||||
@@ -254,7 +254,7 @@ enum
|
||||
# endif
|
||||
|
||||
/* Return nonzero value if X is not +-Inf or NaN. */
|
||||
-# ifndef __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# ifdef __NO_LONG_DOUBLE_MATH
|
||||
# define isfinite(x) \
|
||||
(sizeof (x) == sizeof (float) ? __finitef (x) : __finite (x))
|
||||
# else
|
||||
@@ -270,7 +270,7 @@ enum
|
||||
|
||||
/* Return nonzero value if X is a NaN. We could use `fpclassify' but
|
||||
we already have this functions `__isnan' and it is faster. */
|
||||
-# ifndef __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# ifdef __NO_LONG_DOUBLE_MATH
|
||||
# define isnan(x) \
|
||||
(sizeof (x) == sizeof (float) ? __isnanf (x) : __isnan (x))
|
||||
# else
|
||||
@@ -282,7 +282,7 @@ enum
|
||||
# endif
|
||||
|
||||
/* Return nonzero value is X is positive or negative infinity. */
|
||||
-# ifndef __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# ifdef __NO_LONG_DOUBLE_MATH
|
||||
# define isinf(x) \
|
||||
(sizeof (x) == sizeof (float) ? __isinff (x) : __isinf (x))
|
||||
# else
|
||||
Index: uClibc-0.9.30.1/include/tgmath.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/include/tgmath.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/include/tgmath.h (working copy)
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
#if __GNUC_PREREQ (2, 7)
|
||||
|
||||
-# ifndef __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# ifdef __NO_LONG_DOUBLE_MATH
|
||||
# define __tgml(fct) fct
|
||||
# else
|
||||
# define __tgml(fct) fct ## l
|
||||
Index: uClibc-0.9.30.1/libc/sysdeps/linux/powerpc/bits/wordsize.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libc/sysdeps/linux/powerpc/bits/wordsize.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libc/sysdeps/linux/powerpc/bits/wordsize.h (working copy)
|
||||
@@ -7,13 +7,13 @@
|
||||
# define __WORDSIZE 32
|
||||
#endif
|
||||
|
||||
-#if defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ && !defined __LONG_DOUBLE_MATH_OPTIONAL
|
||||
+#if !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL
|
||||
|
||||
/* Signal the glibc ABI didn't used to have a `long double'.
|
||||
The changes all the `long double' function variants to be redirects
|
||||
to the double functions. */
|
||||
# define __LONG_DOUBLE_MATH_OPTIONAL 1
|
||||
# ifndef __LONG_DOUBLE_128__
|
||||
-# undef __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
# endif
|
||||
#endif
|
||||
Index: uClibc-0.9.30.1/libc/sysdeps/linux/powerpc/bits/mathdef.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libc/sysdeps/linux/powerpc/bits/mathdef.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libc/sysdeps/linux/powerpc/bits/mathdef.h (working copy)
|
||||
@@ -65,11 +65,13 @@ typedef double double_t;
|
||||
|
||||
#endif /* ISO C99 */
|
||||
|
||||
-#ifdef __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+#ifndef __NO_LONG_DOUBLE_MATH
|
||||
#include <bits/wordsize.h>
|
||||
/* Signal that we do not really have a `long double'. The disables the
|
||||
declaration of all the `long double' function variants. */
|
||||
# if __WORDSIZE == 32
|
||||
-# undef __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
+# elif !defined __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
# endif /* __WORDSIZE == 32 */
|
||||
-#endif /* __UCLIBC_HAS_LONG_DOUBLE_MATH__ */
|
||||
+#endif /* __NO_LONG_DOUBLE_MATH */
|
||||
Index: uClibc-0.9.30.1/libc/sysdeps/linux/arm/bits/mathdef.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libc/sysdeps/linux/arm/bits/mathdef.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libc/sysdeps/linux/arm/bits/mathdef.h (working copy)
|
||||
@@ -34,3 +34,11 @@ typedef double double_t; /* `double' exp
|
||||
# define FP_ILOGBNAN (2147483647)
|
||||
|
||||
#endif /* ISO C99 */
|
||||
+
|
||||
+#ifndef __NO_LONG_DOUBLE_MATH
|
||||
+/* Signal that we do not really have a `long double'. This disables the
|
||||
+ declaration of all the `long double' function variants. */
|
||||
+/* XXX The FPA does support this but the patterns in GCC are currently
|
||||
+ turned off. */
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
+#endif
|
||||
Index: uClibc-0.9.30.1/libc/sysdeps/linux/m68k/bits/mathdef.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libc/sysdeps/linux/m68k/bits/mathdef.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libc/sysdeps/linux/m68k/bits/mathdef.h (working copy)
|
||||
@@ -36,3 +36,7 @@ typedef long double double_t; /* `double
|
||||
# define FP_ILOGBNAN (2147483647)
|
||||
|
||||
#endif /* ISO C99 */
|
||||
+
|
||||
+#if !defined __NO_LONG_DOUBLE_MATH && !defined __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
+#endif
|
||||
Index: uClibc-0.9.30.1/libc/sysdeps/linux/alpha/bits/wordsize.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libc/sysdeps/linux/alpha/bits/wordsize.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libc/sysdeps/linux/alpha/bits/wordsize.h (working copy)
|
||||
@@ -18,13 +18,13 @@
|
||||
|
||||
#define __WORDSIZE 64
|
||||
|
||||
-#if defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ && !defined __LONG_DOUBLE_MATH_OPTIONAL
|
||||
+#if !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL
|
||||
|
||||
/* Signal that we didn't used to have a `long double'. The changes all
|
||||
the `long double' function variants to be redirects to the double
|
||||
functions. */
|
||||
# define __LONG_DOUBLE_MATH_OPTIONAL 1
|
||||
# ifndef __LONG_DOUBLE_128__
|
||||
-# undef __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
# endif
|
||||
#endif
|
||||
Index: uClibc-0.9.30.1/libc/sysdeps/linux/alpha/bits/mathdef.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libc/sysdeps/linux/alpha/bits/mathdef.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libc/sysdeps/linux/alpha/bits/mathdef.h (working copy)
|
||||
@@ -78,3 +78,7 @@ typedef double double_t;
|
||||
|
||||
# endif /* GNUC before 3.4 */
|
||||
#endif /* COMPLEX_H */
|
||||
+
|
||||
+#if !defined __NO_LONG_DOUBLE_MATH && !defined __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
+#endif
|
||||
Index: uClibc-0.9.30.1/libc/sysdeps/linux/common/bits/mathdef.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libc/sysdeps/linux/common/bits/mathdef.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libc/sysdeps/linux/common/bits/mathdef.h (working copy)
|
||||
@@ -35,3 +35,9 @@ typedef double double_t; /* `double' exp
|
||||
# define FP_ILOGBNAN 2147483647
|
||||
|
||||
#endif /* ISO C99 */
|
||||
+
|
||||
+#ifndef __NO_LONG_DOUBLE_MATH
|
||||
+/* Signal that we do not really have a `long double'. The disables the
|
||||
+ declaration of all the `long double' function variants. */
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
+#endif
|
||||
Index: uClibc-0.9.30.1/libc/sysdeps/linux/i386/bits/mathdef.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libc/sysdeps/linux/i386/bits/mathdef.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libc/sysdeps/linux/i386/bits/mathdef.h (working copy)
|
||||
@@ -44,3 +44,7 @@ typedef long double double_t; /* `double
|
||||
# define FP_ILOGBNAN (-2147483647 - 1)
|
||||
|
||||
#endif /* ISO C99 */
|
||||
+
|
||||
+#if !defined __NO_LONG_DOUBLE_MATH && !defined __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
+#endif
|
||||
Index: uClibc-0.9.30.1/libc/sysdeps/linux/nios2/bits/mathdef.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libc/sysdeps/linux/nios2/bits/mathdef.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libc/sysdeps/linux/nios2/bits/mathdef.h (working copy)
|
||||
@@ -34,3 +34,11 @@ typedef double double_t; /* `double' exp
|
||||
# define FP_ILOGBNAN (2147483647)
|
||||
|
||||
#endif /* ISO C99 */
|
||||
+
|
||||
+#ifndef __NO_LONG_DOUBLE_MATH
|
||||
+/* Signal that we do not really have a `long double'. This disables the
|
||||
+ declaration of all the `long double' function variants. */
|
||||
+/* XXX The FPA does support this but the patterns in GCC are currently
|
||||
+ turned off. */
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
+#endif
|
||||
Index: uClibc-0.9.30.1/libc/sysdeps/linux/x86_64/bits/mathdef.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libc/sysdeps/linux/x86_64/bits/mathdef.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libc/sysdeps/linux/x86_64/bits/mathdef.h (working copy)
|
||||
@@ -46,3 +46,7 @@ typedef long double double_t; /* `double
|
||||
# define FP_ILOGBNAN (-2147483647 - 1)
|
||||
|
||||
#endif /* ISO C99 */
|
||||
+
|
||||
+#if !defined __NO_LONG_DOUBLE_MATH && !defined __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
+#endif
|
||||
Index: uClibc-0.9.30.1/libc/sysdeps/linux/xtensa/bits/mathdef.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libc/sysdeps/linux/xtensa/bits/mathdef.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libc/sysdeps/linux/xtensa/bits/mathdef.h (working copy)
|
||||
@@ -36,8 +36,8 @@ typedef double double_t; /* `double' exp
|
||||
|
||||
#endif /* ISO C99 */
|
||||
|
||||
-#if defined __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+#ifndef __NO_LONG_DOUBLE_MATH
|
||||
/* Signal that we do not really have a `long double'. The disables the
|
||||
declaration of all the `long double' function variants. */
|
||||
-# undef __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
#endif
|
||||
Index: uClibc-0.9.30.1/libc/sysdeps/linux/ia64/bits/mathdef.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libc/sysdeps/linux/ia64/bits/mathdef.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libc/sysdeps/linux/ia64/bits/mathdef.h (working copy)
|
||||
@@ -35,3 +35,7 @@ typedef double double_t; /* `double' exp
|
||||
# define FP_ILOGBNAN 2147483647
|
||||
|
||||
#endif /* ISO C99 */
|
||||
+
|
||||
+#if !defined __NO_LONG_DOUBLE_MATH && !defined __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
+#endif
|
||||
Index: uClibc-0.9.30.1/libc/sysdeps/linux/mips/bits/mathdef.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libc/sysdeps/linux/mips/bits/mathdef.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libc/sysdeps/linux/mips/bits/mathdef.h (working copy)
|
||||
@@ -39,8 +39,10 @@ typedef double double_t; /* `double' exp
|
||||
|
||||
#endif /* ISO C99 */
|
||||
|
||||
-#if defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ && _MIPS_SIM == _ABIO32
|
||||
+#if ! defined __NO_LONG_DOUBLE_MATH && _MIPS_SIM == _ABIO32
|
||||
/* Signal that we do not really have a `long double'. This disables the
|
||||
declaration of all the `long double' function variants. */
|
||||
-# error defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ and _MIPS_SIM == _ABIO32
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
+#elif !defined __NO_LONG_DOUBLE_MATH && !defined __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
#endif
|
||||
Index: uClibc-0.9.30.1/libc/sysdeps/linux/nios/bits/mathdef.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libc/sysdeps/linux/nios/bits/mathdef.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libc/sysdeps/linux/nios/bits/mathdef.h (working copy)
|
||||
@@ -34,3 +34,11 @@ typedef double double_t; /* `double' exp
|
||||
# define FP_ILOGBNAN (2147483647)
|
||||
|
||||
#endif /* ISO C99 */
|
||||
+
|
||||
+#ifndef __NO_LONG_DOUBLE_MATH
|
||||
+/* Signal that we do not really have a `long double'. This disables the
|
||||
+ declaration of all the `long double' function variants. */
|
||||
+/* XXX The FPA does support this but the patterns in GCC are currently
|
||||
+ turned off. */
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
+#endif
|
||||
Index: uClibc-0.9.30.1/libc/sysdeps/linux/sparc/bits/wordsize.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libc/sysdeps/linux/sparc/bits/wordsize.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libc/sysdeps/linux/sparc/bits/wordsize.h (working copy)
|
||||
@@ -6,7 +6,7 @@
|
||||
# define __WORDSIZE 32
|
||||
#endif
|
||||
|
||||
-#if 0 /* uClibc: done in mathdefs.h: defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ && !defined __LONG_DOUBLE_MATH_OPTIONAL*/
|
||||
+#if 0 /* uClibc: done in mathdefs.h: !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL*/
|
||||
|
||||
# if __WORDSIZE == 32
|
||||
/* Signal that in 32bit ABI we didn't used to have a `long double'.
|
||||
@@ -14,7 +14,7 @@
|
||||
to the double functions. */
|
||||
# define __LONG_DOUBLE_MATH_OPTIONAL 1
|
||||
# ifndef __LONG_DOUBLE_128__
|
||||
-# undef __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
Index: uClibc-0.9.30.1/libc/sysdeps/linux/sparc/bits/mathdef.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libc/sysdeps/linux/sparc/bits/mathdef.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libc/sysdeps/linux/sparc/bits/mathdef.h (working copy)
|
||||
@@ -57,13 +57,15 @@ typedef double double_t;
|
||||
|
||||
#endif /* ISO C99 */
|
||||
|
||||
-#ifdef __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+#ifndef __NO_LONG_DOUBLE_MATH
|
||||
|
||||
# if __WORDSIZE == 32
|
||||
/* Signal that in 32bit ABI we do not really have a `long double'.
|
||||
The disables the declaration of all the `long double' function
|
||||
variants. */
|
||||
-# undef __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
+# elif !defined __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
# endif
|
||||
|
||||
#endif
|
||||
Index: uClibc-0.9.30.1/libc/sysdeps/linux/sparc/bits/mathinline.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libc/sysdeps/linux/sparc/bits/mathinline.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libc/sysdeps/linux/sparc/bits/mathinline.h (working copy)
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
# if __WORDSIZE == 32
|
||||
|
||||
-# ifdef __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# ifndef __NO_LONG_DOUBLE_MATH
|
||||
|
||||
# define __unordered_cmp(x, y) \
|
||||
(__extension__ \
|
||||
@@ -157,7 +157,7 @@ __NTH (__signbit (double __x))
|
||||
return __u.__i[0] < 0;
|
||||
}
|
||||
|
||||
-# ifdef __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# ifndef __NO_LONG_DOUBLE_MATH
|
||||
__MATH_INLINE int
|
||||
__NTH (__signbitl (long double __x))
|
||||
{
|
||||
@@ -219,7 +219,7 @@ __NTH (sqrtl (long double __x))
|
||||
_Qp_sqrt (&__r, &__x);
|
||||
return __r;
|
||||
}
|
||||
-# elif defined __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# elif !defined __NO_LONG_DOUBLE_MATH
|
||||
__MATH_INLINE long double
|
||||
sqrtl (long double __x) __THROW
|
||||
{
|
||||
@@ -257,7 +257,7 @@ __ieee754_sqrtl (long double __x)
|
||||
_Qp_sqrt(&__r, &__x);
|
||||
return __r;
|
||||
}
|
||||
-# elif defined __UCLIBC_HAS_LONG_DOUBLE_MATH__
|
||||
+# elif !defined __NO_LONG_DOUBLE_MATH
|
||||
__MATH_INLINE long double
|
||||
__ieee754_sqrtl (long double __x)
|
||||
{
|
||||
Index: uClibc-0.9.30.1/libc/sysdeps/linux/sh/bits/mathdef.h
|
||||
===================================================================
|
||||
--- uClibc-0.9.30.1/libc/sysdeps/linux/sh/bits/mathdef.h (revision 25552)
|
||||
+++ uClibc-0.9.30.1/libc/sysdeps/linux/sh/bits/mathdef.h (working copy)
|
||||
@@ -61,3 +61,9 @@ typedef double double_t;
|
||||
# define FP_ILOGBNAN 0x7fffffff
|
||||
|
||||
#endif /* ISO C99 */
|
||||
+
|
||||
+#ifndef __NO_LONG_DOUBLE_MATH
|
||||
+/* Signal that we do not really have a `long double'. The disables the
|
||||
+ declaration of all the `long double' function variants. */
|
||||
+# define __NO_LONG_DOUBLE_MATH 1
|
||||
+#endif
|
|
@ -1,13 +0,0 @@
|
|||
Index: uClibc/ldso/ldso/Makefile.in
|
||||
===================================================================
|
||||
--- uClibc.orig/ldso/ldso/Makefile.in 2009-02-03 17:27:55.000000000 -0800
|
||||
+++ uClibc/ldso/ldso/Makefile.in 2009-02-03 17:28:11.000000000 -0800
|
||||
@@ -8,7 +8,7 @@
|
||||
CFLAGS-ldso := -DNOT_IN_libc -DIS_IN_rtld $(SSP_DISABLE_FLAGS)
|
||||
|
||||
# This stuff will not work with -fomit-frame-pointer
|
||||
-CFLAGS-ldso += -fno-omit-frame-pointer
|
||||
+CFLAGS-ldso += -O0 -fno-omit-frame-pointer
|
||||
|
||||
CFLAGS-ldso += -I$(top_srcdir)ldso/ldso/$(TARGET_ARCH) -I$(top_srcdir)ldso/include -I$(top_srcdir)ldso/ldso
|
||||
CFLAGS-ldso += -DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" -DUCLIBC_LDSO=\"$(UCLIBC_LDSO)\"
|
|
@ -0,0 +1,116 @@
|
|||
#
|
||||
# Set the ARCH environment variable for uClibc compilation.
|
||||
# Return value must match one of the architectures known to uClibc:
|
||||
# libc/sysdeps/*/*
|
||||
#
|
||||
|
||||
valid_archs = "\
|
||||
alpha \
|
||||
arm \
|
||||
avr32 \
|
||||
bfin \
|
||||
cris \
|
||||
e1 \
|
||||
frv \
|
||||
h8300 \
|
||||
hppa \
|
||||
i386 \
|
||||
i960 \
|
||||
ia64 \
|
||||
m68k \
|
||||
microblaze \
|
||||
mips \
|
||||
nios \
|
||||
nios2 \
|
||||
powerpc \
|
||||
sh \
|
||||
sh64 \
|
||||
sparc \
|
||||
v850 \
|
||||
vax \
|
||||
x86_64 \
|
||||
xtensa \
|
||||
"
|
||||
def map_uclibc_arch(a, d):
|
||||
"""Return the uClibc architecture for the given TARGET_ARCH."""
|
||||
import re
|
||||
|
||||
valid_archs = bb.data.getVar('valid_archs', d, 1).split()
|
||||
|
||||
if re.match('^(arm|sa110).*', a): return 'arm'
|
||||
elif re.match('^(i.86|athlon)$', a): return 'i386'
|
||||
elif re.match('^mips.*', a): return 'mips'
|
||||
elif re.match('^parisc.*', a): return 'hppa'
|
||||
elif re.match('^ppc.*', a): return 'powerpc'
|
||||
elif re.match('^s390.*', a): return 's390'
|
||||
elif re.match('^sh.*', a): return 'sh'
|
||||
elif re.match('^(sun|sparc).*', a): return 'sparc'
|
||||
elif re.match('^xtensa.*', a): return 'xtensa'
|
||||
elif a in valid_archs: return a
|
||||
else:
|
||||
bb.error("cannot map '%s' to a uClibc architecture" % a)
|
||||
|
||||
export UCLIBC_ARCH = "${@map_uclibc_arch(bb.data.getVar('TARGET_ARCH', d, 1), d)}"
|
||||
|
||||
def map_uclibc_abi(o, d):
|
||||
"""Return the uClibc ABI for the given TARGET_OS."""
|
||||
import re
|
||||
|
||||
arch = bb.data.getVar('TARGET_ARCH', d, 1)
|
||||
if map_uclibc_arch(bb.data.getVar('TARGET_ARCH', d, 1), d) == "arm":
|
||||
if re.match('.*eabi$', o): return 'ARM_EABI'
|
||||
else: return 'ARM_OABI'
|
||||
# FIXME: This is inaccurate! Handle o32, n32, n64
|
||||
elif re.match('^mips.*64$', arch): return 'MIPS_N64_ABI'
|
||||
elif re.match('^mips.*', arch): return 'MIPS_O32_ABI'
|
||||
return ""
|
||||
|
||||
export UCLIBC_ABI = "${@map_uclibc_abi(bb.data.getVar('TARGET_OS', d, 1), d)}"
|
||||
|
||||
def map_uclibc_endian(a, d):
|
||||
"""Return the uClibc endianess for the given TARGET_ARCH."""
|
||||
import re
|
||||
|
||||
# Always BE
|
||||
if re.match('^(avr32|e1|frv|(parisc|hppa)|m68k|microblaze|powerpc.*|(sparc|sun).*)$', a):
|
||||
return 'BIG'
|
||||
# Possibly BE
|
||||
elif re.match('^((arm|sa110|arm.*eb)|h8300.*eb|(parisc|hppa).*eb|mips|sh.*eb|xtensa.*eb)$', a):
|
||||
return 'BIG'
|
||||
return 'LITTLE'
|
||||
|
||||
export UCLIBC_ENDIAN = "${@map_uclibc_endian(bb.data.getVar('TARGET_ARCH', d, 1), d)}"
|
||||
|
||||
# internal helper
|
||||
def uclibc_cfg(feature, features, tokens, cnf, rem):
|
||||
if type(tokens) == type(""):
|
||||
tokens = [tokens]
|
||||
rem.extend(['/^[# ]*' + token + '[ =]/d' for token in tokens])
|
||||
if type(features) == type([]) and feature in features:
|
||||
cnf.extend([token + '=y' for token in tokens])
|
||||
else:
|
||||
cnf.extend(['# ' + token + ' is not set' for token in tokens])
|
||||
|
||||
# Map distro and machine features to config settings
|
||||
def features_to_uclibc_settings(d):
|
||||
cnf, rem = ([], [])
|
||||
distro_features = bb.data.getVar('DISTRO_FEATURES', d, True).split()
|
||||
machine_features = bb.data.getVar('MACHINE_FEATURES', d, True).split()
|
||||
uclibc_cfg('ipv4', distro_features, 'UCLIBC_HAS_IPV4', cnf, rem)
|
||||
uclibc_cfg('ipv6', distro_features, 'UCLIBC_HAS_IPV6', cnf, rem)
|
||||
uclibc_cfg('largefile', distro_features, 'UCLIBC_HAS_LFS', cnf, rem)
|
||||
uclibc_cfg('nls', distro_features, 'UCLIBC_HAS_LOCALE', cnf, rem)
|
||||
uclibc_cfg('thumb-interwork', distro_features,'USE_BX', cnf, rem)
|
||||
uclibc_cfg('xattr', distro_features, 'UCLIBC_HAS_XATTR', cnf, rem)
|
||||
uclibc_cfg('ssp', distro_features, 'UCLIBC_HAS_SSP', cnf, rem)
|
||||
uclibc_cfg('argp', distro_features, 'UCLIBC_HAS_ARGP', cnf, rem)
|
||||
uclibc_cfg('kernel24', machine_features,'UCLIBC_LINUX_MODULE_24', cnf, rem)
|
||||
return "\n".join(cnf), "\n".join(rem)
|
||||
# X, Y = ${@features_to_uclibc_settings(d)}
|
||||
# unfortunately doesn't seem to work with bitbake, workaround:
|
||||
def features_to_uclibc_conf(d):
|
||||
cnf, rem = features_to_uclibc_settings(d)
|
||||
return cnf
|
||||
def features_to_uclibc_del(d):
|
||||
cnf, rem = features_to_uclibc_settings(d)
|
||||
return rem
|
|
@ -0,0 +1,581 @@
|
|||
Added headers file needed by argp sources.
|
||||
|
||||
Signed-off-by: Salvatore Cro <salvatore.cro at st.com>
|
||||
---
|
||||
include/argp.h | 566 ++++++++++++++++++++++++++++++++++++++++++++
|
||||
libc/argp/argp-fmtstream.h | 314 ++++++++++++++++++++++++
|
||||
2 files changed, 880 insertions(+), 0 deletions(-)
|
||||
create mode 100644 include/argp.h
|
||||
create mode 100644 libc/argp/argp-fmtstream.h
|
||||
|
||||
Index: git/include/argp.h
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ git/include/argp.h
|
||||
@@ -0,0 +1,566 @@
|
||||
+/* Hierarchial argument parsing, layered over getopt.
|
||||
+ Copyright (C) 1995-1999, 2003, 2004, 2005, 2006, 2007, 2009
|
||||
+ Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+ Written by Miles Bader <miles at gnu.ai.mit.edu>.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, write to the Free
|
||||
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
+ 02111-1307 USA.
|
||||
+
|
||||
+ Modified for uClibc by: Salvatore Cro <salvatore.cro at st.com>
|
||||
+*/
|
||||
+
|
||||
+#ifndef _ARGP_H
|
||||
+#define _ARGP_H
|
||||
+
|
||||
+#include <stdio.h>
|
||||
+#include <ctype.h>
|
||||
+#include <limits.h>
|
||||
+
|
||||
+#define __need_error_t
|
||||
+#include <errno.h>
|
||||
+
|
||||
+#ifndef __const
|
||||
+# define __const const
|
||||
+#endif
|
||||
+
|
||||
+#ifndef __THROW
|
||||
+# define __THROW
|
||||
+#endif
|
||||
+#ifndef __NTH
|
||||
+# define __NTH(fct) fct __THROW
|
||||
+#endif
|
||||
+
|
||||
+#ifndef __attribute__
|
||||
+/* This feature is available in gcc versions 2.5 and later. */
|
||||
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || defined(__STRICT_ANSI__)
|
||||
+# define __attribute__(Spec) /* empty */
|
||||
+# endif
|
||||
+/* The __-protected variants of `format' and `printf' attributes
|
||||
+ are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
|
||||
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) || defined(__STRICT_ANSI__)
|
||||
+# define __format__ format
|
||||
+# define __printf__ printf
|
||||
+# endif
|
||||
+#endif
|
||||
+
|
||||
+/* GCC 2.95 and later have "__restrict"; C99 compilers have
|
||||
+ "restrict", and "configure" may have defined "restrict". */
|
||||
+#ifndef __restrict
|
||||
+# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
|
||||
+# if defined restrict || 199901L <= __STDC_VERSION__
|
||||
+# define __restrict restrict
|
||||
+# else
|
||||
+# define __restrict
|
||||
+# endif
|
||||
+# endif
|
||||
+#endif
|
||||
+
|
||||
+#ifndef __error_t_defined
|
||||
+typedef int error_t;
|
||||
+# define __error_t_defined
|
||||
+#endif
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+/* A description of a particular option. A pointer to an array of
|
||||
+ these is passed in the OPTIONS field of an argp structure. Each option
|
||||
+ entry can correspond to one long option and/or one short option; more
|
||||
+ names for the same option can be added by following an entry in an option
|
||||
+ array with options having the OPTION_ALIAS flag set. */
|
||||
+struct argp_option
|
||||
+{
|
||||
+ /* The long option name. For more than one name for the same option, you
|
||||
+ can use following options with the OPTION_ALIAS flag set. */
|
||||
+ __const char *name;
|
||||
+
|
||||
+ /* What key is returned for this option. If > 0 and printable, then it's
|
||||
+ also accepted as a short option. */
|
||||
+ int key;
|
||||
+
|
||||
+ /* If non-NULL, this is the name of the argument associated with this
|
||||
+ option, which is required unless the OPTION_ARG_OPTIONAL flag is set. */
|
||||
+ __const char *arg;
|
||||
+
|
||||
+ /* OPTION_ flags. */
|
||||
+ int flags;
|
||||
+
|
||||
+ /* The doc string for this option. If both NAME and KEY are 0, This string
|
||||
+ will be printed outdented from the normal option column, making it
|
||||
+ useful as a group header (it will be the first thing printed in its
|
||||
+ group); in this usage, it's conventional to end the string with a `:'. */
|
||||
+ __const char *doc;
|
||||
+
|
||||
+ /* The group this option is in. In a long help message, options are sorted
|
||||
+ alphabetically within each group, and the groups presented in the order
|
||||
+ 0, 1, 2, ..., n, -m, ..., -2, -1. Every entry in an options array with
|
||||
+ if this field 0 will inherit the group number of the previous entry, or
|
||||
+ zero if it's the first one, unless its a group header (NAME and KEY both
|
||||
+ 0), in which case, the previous entry + 1 is the default. Automagic
|
||||
+ options such as --help are put into group -1. */
|
||||
+ int group;
|
||||
+};
|
||||
+
|
||||
+/* The argument associated with this option is optional. */
|
||||
+#define OPTION_ARG_OPTIONAL 0x1
|
||||
+
|
||||
+/* This option isn't displayed in any help messages. */
|
||||
+#define OPTION_HIDDEN 0x2
|
||||
+
|
||||
+/* This option is an alias for the closest previous non-alias option. This
|
||||
+ means that it will be displayed in the same help entry, and will inherit
|
||||
+ fields other than NAME and KEY from the aliased option. */
|
||||
+#define OPTION_ALIAS 0x4
|
||||
+
|
||||
+/* This option isn't actually an option (and so should be ignored by the
|
||||
+ actual option parser), but rather an arbitrary piece of documentation that
|
||||
+ should be displayed in much the same manner as the options. If this flag
|
||||
+ is set, then the option NAME field is displayed unmodified (e.g., no `--'
|
||||
+ prefix is added) at the left-margin (where a *short* option would normally
|
||||
+ be displayed), and the documentation string in the normal place. For
|
||||
+ purposes of sorting, any leading whitespace and punctuation is ignored,
|
||||
+ except that if the first non-whitespace character is not `-', this entry
|
||||
+ is displayed after all options (and OPTION_DOC entries with a leading `-')
|
||||
+ in the same group. */
|
||||
+#define OPTION_DOC 0x8
|
||||
+
|
||||
+/* This option shouldn't be included in `long' usage messages (but is still
|
||||
+ included in help messages). This is mainly intended for options that are
|
||||
+ completely documented in an argp's ARGS_DOC field, in which case including
|
||||
+ the option in the generic usage list would be redundant. For instance,
|
||||
+ if ARGS_DOC is "FOO BAR\n-x BLAH", and the `-x' option's purpose is to
|
||||
+ distinguish these two cases, -x should probably be marked
|
||||
+ OPTION_NO_USAGE. */
|
||||
+#define OPTION_NO_USAGE 0x10
|
||||
+
|
||||
+struct argp; /* fwd declare this type */
|
||||
+struct argp_state; /* " */
|
||||
+struct argp_child; /* " */
|
||||
+
|
||||
+/* The type of a pointer to an argp parsing function. */
|
||||
+typedef error_t (*argp_parser_t) (int __key, char *__arg,
|
||||
+ struct argp_state *__state);
|
||||
+
|
||||
+/* What to return for unrecognized keys. For special ARGP_KEY_ keys, such
|
||||
+ returns will simply be ignored. For user keys, this error will be turned
|
||||
+ into EINVAL (if the call to argp_parse is such that errors are propagated
|
||||
+ back to the user instead of exiting); returning EINVAL itself would result
|
||||
+ in an immediate stop to parsing in *all* cases. */
|
||||
+#define ARGP_ERR_UNKNOWN E2BIG /* Hurd should never need E2BIG. XXX */
|
||||
+
|
||||
+/* Special values for the KEY argument to an argument parsing function.
|
||||
+ ARGP_ERR_UNKNOWN should be returned if they aren't understood.
|
||||
+
|
||||
+ The sequence of keys to a parsing function is either (where each
|
||||
+ uppercased word should be prefixed by `ARGP_KEY_' and opt is a user key):
|
||||
+
|
||||
+ INIT opt... NO_ARGS END SUCCESS -- No non-option arguments at all
|
||||
+ or INIT (opt | ARG)... END SUCCESS -- All non-option args parsed
|
||||
+ or INIT (opt | ARG)... SUCCESS -- Some non-option arg unrecognized
|
||||
+
|
||||
+ The third case is where every parser returned ARGP_KEY_UNKNOWN for an
|
||||
+ argument, in which case parsing stops at that argument (returning the
|
||||
+ unparsed arguments to the caller of argp_parse if requested, or stopping
|
||||
+ with an error message if not).
|
||||
+
|
||||
+ If an error occurs (either detected by argp, or because the parsing
|
||||
+ function returned an error value), then the parser is called with
|
||||
+ ARGP_KEY_ERROR, and no further calls are made. */
|
||||
+
|
||||
+/* This is not an option at all, but rather a command line argument. If a
|
||||
+ parser receiving this key returns success, the fact is recorded, and the
|
||||
+ ARGP_KEY_NO_ARGS case won't be used. HOWEVER, if while processing the
|
||||
+ argument, a parser function decrements the NEXT field of the state it's
|
||||
+ passed, the option won't be considered processed; this is to allow you to
|
||||
+ actually modify the argument (perhaps into an option), and have it
|
||||
+ processed again. */
|
||||
+#define ARGP_KEY_ARG 0
|
||||
+/* There are remaining arguments not parsed by any parser, which may be found
|
||||
+ starting at (STATE->argv + STATE->next). If success is returned, but
|
||||
+ STATE->next left untouched, it's assumed that all arguments were consume,
|
||||
+ otherwise, the parser should adjust STATE->next to reflect any arguments
|
||||
+ consumed. */
|
||||
+#define ARGP_KEY_ARGS 0x1000006
|
||||
+/* There are no more command line arguments at all. */
|
||||
+#define ARGP_KEY_END 0x1000001
|
||||
+/* Because it's common to want to do some special processing if there aren't
|
||||
+ any non-option args, user parsers are called with this key if they didn't
|
||||
+ successfully process any non-option arguments. Called just before
|
||||
+ ARGP_KEY_END (where more general validity checks on previously parsed
|
||||
+ arguments can take place). */
|
||||
+#define ARGP_KEY_NO_ARGS 0x1000002
|
||||
+/* Passed in before any parsing is done. Afterwards, the values of each
|
||||
+ element of the CHILD_INPUT field, if any, in the state structure is
|
||||
+ copied to each child's state to be the initial value of the INPUT field. */
|
||||
+#define ARGP_KEY_INIT 0x1000003
|
||||
+/* Use after all other keys, including SUCCESS & END. */
|
||||
+#define ARGP_KEY_FINI 0x1000007
|
||||
+/* Passed in when parsing has successfully been completed (even if there are
|
||||
+ still arguments remaining). */
|
||||
+#define ARGP_KEY_SUCCESS 0x1000004
|
||||
+/* Passed in if an error occurs. */
|
||||
+#define ARGP_KEY_ERROR 0x1000005
|
||||
+
|
||||
+/* An argp structure contains a set of options declarations, a function to
|
||||
+ deal with parsing one, documentation string, a possible vector of child
|
||||
+ argp's, and perhaps a function to filter help output. When actually
|
||||
+ parsing options, getopt is called with the union of all the argp
|
||||
+ structures chained together through their CHILD pointers, with conflicts
|
||||
+ being resolved in favor of the first occurrence in the chain. */
|
||||
+struct argp
|
||||
+{
|
||||
+ /* An array of argp_option structures, terminated by an entry with both
|
||||
+ NAME and KEY having a value of 0. */
|
||||
+ __const struct argp_option *options;
|
||||
+
|
||||
+ /* What to do with an option from this structure. KEY is the key
|
||||
+ associated with the option, and ARG is any associated argument (NULL if
|
||||
+ none was supplied). If KEY isn't understood, ARGP_ERR_UNKNOWN should be
|
||||
+ returned. If a non-zero, non-ARGP_ERR_UNKNOWN value is returned, then
|
||||
+ parsing is stopped immediately, and that value is returned from
|
||||
+ argp_parse(). For special (non-user-supplied) values of KEY, see the
|
||||
+ ARGP_KEY_ definitions below. */
|
||||
+ argp_parser_t parser;
|
||||
+
|
||||
+ /* A string describing what other arguments are wanted by this program. It
|
||||
+ is only used by argp_usage to print the `Usage:' message. If it
|
||||
+ contains newlines, the strings separated by them are considered
|
||||
+ alternative usage patterns, and printed on separate lines (lines after
|
||||
+ the first are prefix by ` or: ' instead of `Usage:'). */
|
||||
+ __const char *args_doc;
|
||||
+
|
||||
+ /* If non-NULL, a string containing extra text to be printed before and
|
||||
+ after the options in a long help message (separated by a vertical tab
|
||||
+ `\v' character). */
|
||||
+ __const char *doc;
|
||||
+
|
||||
+ /* A vector of argp_children structures, terminated by a member with a 0
|
||||
+ argp field, pointing to child argps should be parsed with this one. Any
|
||||
+ conflicts are resolved in favor of this argp, or early argps in the
|
||||
+ CHILDREN list. This field is useful if you use libraries that supply
|
||||
+ their own argp structure, which you want to use in conjunction with your
|
||||
+ own. */
|
||||
+ __const struct argp_child *children;
|
||||
+
|
||||
+ /* If non-zero, this should be a function to filter the output of help
|
||||
+ messages. KEY is either a key from an option, in which case TEXT is
|
||||
+ that option's help text, or a special key from the ARGP_KEY_HELP_
|
||||
+ defines, below, describing which other help text TEXT is. The function
|
||||
+ should return either TEXT, if it should be used as-is, a replacement
|
||||
+ string, which should be malloced, and will be freed by argp, or NULL,
|
||||
+ meaning `print nothing'. The value for TEXT is *after* any translation
|
||||
+ has been done, so if any of the replacement text also needs translation,
|
||||
+ that should be done by the filter function. INPUT is either the input
|
||||
+ supplied to argp_parse, or NULL, if argp_help was called directly. */
|
||||
+ char *(*help_filter) (int __key, __const char *__text, void *__input);
|
||||
+
|
||||
+ /* If non-zero the strings used in the argp library are translated using
|
||||
+ the domain described by this string. Otherwise the currently installed
|
||||
+ default domain is used. */
|
||||
+ const char *argp_domain;
|
||||
+};
|
||||
+
|
||||
+/* Possible KEY arguments to a help filter function. */
|
||||
+#define ARGP_KEY_HELP_PRE_DOC 0x2000001 /* Help text preceeding options. */
|
||||
+#define ARGP_KEY_HELP_POST_DOC 0x2000002 /* Help text following options. */
|
||||
+#define ARGP_KEY_HELP_HEADER 0x2000003 /* Option header string. */
|
||||
+#define ARGP_KEY_HELP_EXTRA 0x2000004 /* After all other documentation;
|
||||
+ TEXT is NULL for this key. */
|
||||
+/* Explanatory note emitted when duplicate option arguments have been
|
||||
+ suppressed. */
|
||||
+#define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005
|
||||
+#define ARGP_KEY_HELP_ARGS_DOC 0x2000006 /* Argument doc string. */
|
||||
+
|
||||
+/* When an argp has a non-zero CHILDREN field, it should point to a vector of
|
||||
+ argp_child structures, each of which describes a subsidiary argp. */
|
||||
+struct argp_child
|
||||
+{
|
||||
+ /* The child parser. */
|
||||
+ __const struct argp *argp;
|
||||
+
|
||||
+ /* Flags for this child. */
|
||||
+ int flags;
|
||||
+
|
||||
+ /* If non-zero, an optional header to be printed in help output before the
|
||||
+ child options. As a side-effect, a non-zero value forces the child
|
||||
+ options to be grouped together; to achieve this effect without actually
|
||||
+ printing a header string, use a value of "". */
|
||||
+ __const char *header;
|
||||
+
|
||||
+ /* Where to group the child options relative to the other (`consolidated')
|
||||
+ options in the parent argp; the values are the same as the GROUP field
|
||||
+ in argp_option structs, but all child-groupings follow parent options at
|
||||
+ a particular group level. If both this field and HEADER are zero, then
|
||||
+ they aren't grouped at all, but rather merged with the parent options
|
||||
+ (merging the child's grouping levels with the parents). */
|
||||
+ int group;
|
||||
+};
|
||||
+
|
||||
+/* Parsing state. This is provided to parsing functions called by argp,
|
||||
+ which may examine and, as noted, modify fields. */
|
||||
+struct argp_state
|
||||
+{
|
||||
+ /* The top level ARGP being parsed. */
|
||||
+ __const struct argp *root_argp;
|
||||
+
|
||||
+ /* The argument vector being parsed. May be modified. */
|
||||
+ int argc;
|
||||
+ char **argv;
|
||||
+
|
||||
+ /* The index in ARGV of the next arg that to be parsed. May be modified. */
|
||||
+ int next;
|
||||
+
|
||||
+ /* The flags supplied to argp_parse. May be modified. */
|
||||
+ unsigned flags;
|
||||
+
|
||||
+ /* While calling a parsing function with a key of ARGP_KEY_ARG, this is the
|
||||
+ number of the current arg, starting at zero, and incremented after each
|
||||
+ such call returns. At all other times, this is the number of such
|
||||
+ arguments that have been processed. */
|
||||
+ unsigned arg_num;
|
||||
+
|
||||
+ /* If non-zero, the index in ARGV of the first argument following a special
|
||||
+ `--' argument (which prevents anything following being interpreted as an
|
||||
+ option). Only set once argument parsing has proceeded past this point. */
|
||||
+ int quoted;
|
||||
+
|
||||
+ /* An arbitrary pointer passed in from the user. */
|
||||
+ void *input;
|
||||
+ /* Values to pass to child parsers. This vector will be the same length as
|
||||
+ the number of children for the current parser. */
|
||||
+ void **child_inputs;
|
||||
+
|
||||
+ /* For the parser's use. Initialized to 0. */
|
||||
+ void *hook;
|
||||
+
|
||||
+ /* The name used when printing messages. This is initialized to ARGV[0],
|
||||
+ or PROGRAM_INVOCATION_NAME if that is unavailable. */
|
||||
+ char *name;
|
||||
+
|
||||
+ /* Streams used when argp prints something. */
|
||||
+ FILE *err_stream; /* For errors; initialized to stderr. */
|
||||
+ FILE *out_stream; /* For information; initialized to stdout. */
|
||||
+
|
||||
+ void *pstate; /* Private, for use by argp. */
|
||||
+};
|
||||
+
|
||||
+/* Flags for argp_parse (note that the defaults are those that are
|
||||
+ convenient for program command line parsing): */
|
||||
+
|
||||
+/* Don't ignore the first element of ARGV. Normally (and always unless
|
||||
+ ARGP_NO_ERRS is set) the first element of the argument vector is
|
||||
+ skipped for option parsing purposes, as it corresponds to the program name
|
||||
+ in a command line. */
|
||||
+#define ARGP_PARSE_ARGV0 0x01
|
||||
+
|
||||
+/* Don't print error messages for unknown options to stderr; unless this flag
|
||||
+ is set, ARGP_PARSE_ARGV0 is ignored, as ARGV[0] is used as the program
|
||||
+ name in the error messages. This flag implies ARGP_NO_EXIT (on the
|
||||
+ assumption that silent exiting upon errors is bad behaviour). */
|
||||
+#define ARGP_NO_ERRS 0x02
|
||||
+
|
||||
+/* Don't parse any non-option args. Normally non-option args are parsed by
|
||||
+ calling the parse functions with a key of ARGP_KEY_ARG, and the actual arg
|
||||
+ as the value. Since it's impossible to know which parse function wants to
|
||||
+ handle it, each one is called in turn, until one returns 0 or an error
|
||||
+ other than ARGP_ERR_UNKNOWN; if an argument is handled by no one, the
|
||||
+ argp_parse returns prematurely (but with a return value of 0). If all
|
||||
+ args have been parsed without error, all parsing functions are called one
|
||||
+ last time with a key of ARGP_KEY_END. This flag needn't normally be set,
|
||||
+ as the normal behavior is to stop parsing as soon as some argument can't
|
||||
+ be handled. */
|
||||
+#define ARGP_NO_ARGS 0x04
|
||||
+
|
||||
+/* Parse options and arguments in the same order they occur on the command
|
||||
+ line -- normally they're rearranged so that all options come first. */
|
||||
+#define ARGP_IN_ORDER 0x08
|
||||
+
|
||||
+/* Don't provide the standard long option --help, which causes usage and
|
||||
+ option help information to be output to stdout, and exit (0) called. */
|
||||
+#define ARGP_NO_HELP 0x10
|
||||
+
|
||||
+/* Don't exit on errors (they may still result in error messages). */
|
||||
+#define ARGP_NO_EXIT 0x20
|
||||
+
|
||||
+/* Use the gnu getopt `long-only' rules for parsing arguments. */
|
||||
+#define ARGP_LONG_ONLY 0x40
|
||||
+
|
||||
+/* Turns off any message-printing/exiting options. */
|
||||
+#define ARGP_SILENT (ARGP_NO_EXIT | ARGP_NO_ERRS | ARGP_NO_HELP)
|
||||
+
|
||||
+/* Parse the options strings in ARGC & ARGV according to the options in ARGP.
|
||||
+ FLAGS is one of the ARGP_ flags above. If ARG_INDEX is non-NULL, the
|
||||
+ index in ARGV of the first unparsed option is returned in it. If an
|
||||
+ unknown option is present, ARGP_ERR_UNKNOWN is returned; if some parser
|
||||
+ routine returned a non-zero value, it is returned; otherwise 0 is
|
||||
+ returned. This function may also call exit unless the ARGP_NO_HELP flag
|
||||
+ is set. INPUT is a pointer to a value to be passed in to the parser. */
|
||||
+extern error_t argp_parse (__const struct argp *__restrict __argp,
|
||||
+ int __argc, char **__restrict __argv,
|
||||
+ unsigned __flags, int *__restrict __arg_index,
|
||||
+ void *__restrict __input);
|
||||
+
|
||||
+/* Global variables. */
|
||||
+
|
||||
+/* If defined or set by the user program to a non-zero value, then a default
|
||||
+ option --version is added (unless the ARGP_NO_HELP flag is used), which
|
||||
+ will print this string followed by a newline and exit (unless the
|
||||
+ ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */
|
||||
+extern __const char *argp_program_version;
|
||||
+
|
||||
+/* If defined or set by the user program to a non-zero value, then a default
|
||||
+ option --version is added (unless the ARGP_NO_HELP flag is used), which
|
||||
+ calls this function with a stream to print the version to and a pointer to
|
||||
+ the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is
|
||||
+ used). This variable takes precedent over ARGP_PROGRAM_VERSION. */
|
||||
+extern void (*argp_program_version_hook) (FILE *__restrict __stream,
|
||||
+ struct argp_state *__restrict
|
||||
+ __state);
|
||||
+
|
||||
+/* If defined or set by the user program, it should point to string that is
|
||||
+ the bug-reporting address for the program. It will be printed by
|
||||
+ argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various
|
||||
+ standard help messages), embedded in a sentence that says something like
|
||||
+ `Report bugs to ADDR.'. */
|
||||
+extern __const char *argp_program_bug_address;
|
||||
+
|
||||
+/* The exit status that argp will use when exiting due to a parsing error.
|
||||
+ If not defined or set by the user program, this defaults to EX_USAGE from
|
||||
+ <sysexits.h>. */
|
||||
+extern error_t argp_err_exit_status;
|
||||
+
|
||||
+/* Flags for argp_help. */
|
||||
+#define ARGP_HELP_USAGE 0x01 /* a Usage: message. */
|
||||
+#define ARGP_HELP_SHORT_USAGE 0x02 /* " but don't actually print options. */
|
||||
+#define ARGP_HELP_SEE 0x04 /* a `Try ... for more help' message. */
|
||||
+#define ARGP_HELP_LONG 0x08 /* a long help message. */
|
||||
+#define ARGP_HELP_PRE_DOC 0x10 /* doc string preceding long help. */
|
||||
+#define ARGP_HELP_POST_DOC 0x20 /* doc string following long help. */
|
||||
+#define ARGP_HELP_DOC (ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC)
|
||||
+#define ARGP_HELP_BUG_ADDR 0x40 /* bug report address */
|
||||
+#define ARGP_HELP_LONG_ONLY 0x80 /* modify output appropriately to
|
||||
+ reflect ARGP_LONG_ONLY mode. */
|
||||
+
|
||||
+/* These ARGP_HELP flags are only understood by argp_state_help. */
|
||||
+#define ARGP_HELP_EXIT_ERR 0x100 /* Call exit(1) instead of returning. */
|
||||
+#define ARGP_HELP_EXIT_OK 0x200 /* Call exit(0) instead of returning. */
|
||||
+
|
||||
+/* The standard thing to do after a program command line parsing error, if an
|
||||
+ error message has already been printed. */
|
||||
+#define ARGP_HELP_STD_ERR \
|
||||
+ (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
|
||||
+/* The standard thing to do after a program command line parsing error, if no
|
||||
+ more specific error message has been printed. */
|
||||
+#define ARGP_HELP_STD_USAGE \
|
||||
+ (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
|
||||
+/* The standard thing to do in response to a --help option. */
|
||||
+#define ARGP_HELP_STD_HELP \
|
||||
+ (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \
|
||||
+ | ARGP_HELP_DOC | ARGP_HELP_BUG_ADDR)
|
||||
+
|
||||
+/* Output a usage message for ARGP to STREAM. FLAGS are from the set
|
||||
+ ARGP_HELP_*. */
|
||||
+extern void argp_help (__const struct argp *__restrict __argp,
|
||||
+ FILE *__restrict __stream,
|
||||
+ unsigned __flags, char *__restrict __name);
|
||||
+
|
||||
+/* The following routines are intended to be called from within an argp
|
||||
+ parsing routine (thus taking an argp_state structure as the first
|
||||
+ argument). They may or may not print an error message and exit, depending
|
||||
+ on the flags in STATE -- in any case, the caller should be prepared for
|
||||
+ them *not* to exit, and should return an appropiate error after calling
|
||||
+ them. [argp_usage & argp_error should probably be called argp_state_...,
|
||||
+ but they're used often enough that they should be short] */
|
||||
+
|
||||
+/* Output, if appropriate, a usage message for STATE to STREAM. FLAGS are
|
||||
+ from the set ARGP_HELP_*. */
|
||||
+extern void argp_state_help (__const struct argp_state *__restrict __state,
|
||||
+ FILE *__restrict __stream,
|
||||
+ unsigned int __flags);
|
||||
+/* Possibly output the standard usage message for ARGP to stderr and exit. */
|
||||
+extern void argp_usage (__const struct argp_state *__state);
|
||||
+
|
||||
+/* If appropriate, print the printf string FMT and following args, preceded
|
||||
+ by the program name and `:', to stderr, and followed by a `Try ... --help'
|
||||
+ message, then exit (1). */
|
||||
+extern void argp_error (__const struct argp_state *__restrict __state,
|
||||
+ __const char *__restrict __fmt, ...)
|
||||
+ __attribute__ ((__format__ (__printf__, 2, 3)));
|
||||
+/* Similar to the standard gnu error-reporting function error(), but will
|
||||
+ respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print
|
||||
+ to STATE->err_stream. This is useful for argument parsing code that is
|
||||
+ shared between program startup (when exiting is desired) and runtime
|
||||
+ option parsing (when typically an error code is returned instead). The
|
||||
+ difference between this function and argp_error is that the latter is for
|
||||
+ *parsing errors*, and the former is for other problems that occur during
|
||||
+ parsing but don't reflect a (syntactic) problem with the input. */
|
||||
+extern void argp_failure (__const struct argp_state *__restrict __state,
|
||||
+ int __status, int __errnum,
|
||||
+ __const char *__restrict __fmt, ...)
|
||||
+ __attribute__ ((__format__ (__printf__, 4, 5)));
|
||||
+/* Returns true if the option OPT is a valid short option. */
|
||||
+extern int _option_is_short (__const struct argp_option *__opt) __THROW;
|
||||
+extern int __option_is_short (__const struct argp_option *__opt) __THROW;
|
||||
+
|
||||
+/* Returns true if the option OPT is in fact the last (unused) entry in an
|
||||
+ options array. */
|
||||
+extern int _option_is_end (__const struct argp_option *__opt) __THROW;
|
||||
+extern int __option_is_end (__const struct argp_option *__opt) __THROW;
|
||||
+
|
||||
+/* Return the input field for ARGP in the parser corresponding to STATE; used
|
||||
+ by the help routines. */
|
||||
+/* We think this should not be exported */
|
||||
+extern void *__argp_input (__const struct argp *__restrict __argp,
|
||||
+ __const struct argp_state *__restrict __state)
|
||||
+ __THROW;
|
||||
+
|
||||
+#ifdef __USE_EXTERN_INLINES
|
||||
+
|
||||
+# ifndef ARGP_EI
|
||||
+# define ARGP_EI __extern_inline
|
||||
+# endif
|
||||
+
|
||||
+ARGP_EI void
|
||||
+argp_usage (__const struct argp_state *__state)
|
||||
+{
|
||||
+ argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE);
|
||||
+}
|
||||
+
|
||||
+ARGP_EI int
|
||||
+__NTH (__option_is_short (__const struct argp_option *__opt))
|
||||
+{
|
||||
+ if (__opt->flags & OPTION_DOC)
|
||||
+ return 0;
|
||||
+ else
|
||||
+ {
|
||||
+ int __key = __opt->key;
|
||||
+ return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+ARGP_EI int
|
||||
+__NTH (__option_is_end (__const struct argp_option *__opt))
|
||||
+{
|
||||
+ return !__opt->key && !__opt->name && !__opt->doc && !__opt->group;
|
||||
+}
|
||||
+#endif /* Use extern inlines. */
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#endif /* argp.h */
|
File diff suppressed because it is too large
Load Diff
|
@ -34,12 +34,12 @@ FORCE_OPTIONS_FOR_ARCH=y
|
|||
# CONFIG_ARM_OABI is not set
|
||||
CONFIG_ARM_EABI=y
|
||||
USE_BX=y
|
||||
# CONFIG_GENERIC_ARM is not set
|
||||
CONFIG_GENERIC_ARM=y
|
||||
# CONFIG_ARM610 is not set
|
||||
# CONFIG_ARM710 is not set
|
||||
# CONFIG_ARM7TDMI is not set
|
||||
# CONFIG_ARM720T is not set
|
||||
CONFIG_ARM920T=y
|
||||
# CONFIG_ARM920T is not set
|
||||
# CONFIG_ARM922T is not set
|
||||
# CONFIG_ARM926T is not set
|
||||
# CONFIG_ARM10T is not set
|
|
@ -1,6 +1,5 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Sat May 12 23:18:41 2007
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
TARGET_arm=y
|
||||
|
@ -12,7 +11,6 @@ TARGET_arm=y
|
|||
# TARGET_hppa is not set
|
||||
# TARGET_i386 is not set
|
||||
# TARGET_i960 is not set
|
||||
# TARGET_ia64 is not set
|
||||
# TARGET_m68k is not set
|
||||
# TARGET_microblaze is not set
|
||||
# TARGET_mips is not set
|
||||
|
@ -23,48 +21,33 @@ TARGET_arm=y
|
|||
# TARGET_sh64 is not set
|
||||
# TARGET_sparc is not set
|
||||
# TARGET_v850 is not set
|
||||
# TARGET_vax is not set
|
||||
# TARGET_x86_64 is not set
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
#
|
||||
TARGET_ARCH="arm"
|
||||
ARCH_SUPPORTS_BIG_ENDIAN=y
|
||||
ARCH_SUPPORTS_LITTLE_ENDIAN=y
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
# CONFIG_ARM_OABI is not set
|
||||
CONFIG_ARM_EABI=y
|
||||
USE_BX=y
|
||||
# CONFIG_GENERIC_ARM is not set
|
||||
CONFIG_GENERIC_ARM=y
|
||||
# CONFIG_ARM610 is not set
|
||||
# CONFIG_ARM710 is not set
|
||||
# CONFIG_ARM7TDMI is not set
|
||||
# CONFIG_ARM720T is not set
|
||||
# CONFIG_ARM920T is not set
|
||||
# CONFIG_ARM922T is not set
|
||||
# CONFIG_ARM926T is not set
|
||||
# CONFIG_ARM10T is not set
|
||||
# CONFIG_ARM1136JF_S is not set
|
||||
# CONFIG_ARM1176JZ_S is not set
|
||||
# CONFIG_ARM1176JZF_S is not set
|
||||
# CONFIG_ARM_SA110 is not set
|
||||
# CONFIG_ARM_SA1100 is not set
|
||||
# CONFIG_ARM_XSCALE is not set
|
||||
CONFIG_ARM_IWMMXT=y
|
||||
TARGET_SUBARCH=""
|
||||
|
||||
#
|
||||
# Using ELF file format
|
||||
#
|
||||
ARCH_ANY_ENDIAN=y
|
||||
ARCH_LITTLE_ENDIAN=y
|
||||
# ARCH_WANTS_BIG_ENDIAN is not set
|
||||
ARCH_WANTS_LITTLE_ENDIAN=y
|
||||
# ARCH_LITTLE_ENDIAN is not set
|
||||
ARCH_BIG_ENDIAN=y
|
||||
# ARCH_HAS_NO_MMU is not set
|
||||
ARCH_HAS_MMU=y
|
||||
ARCH_USE_MMU=y
|
||||
UCLIBC_HAS_FLOATS=y
|
||||
# UCLIBC_HAS_FPU is not set
|
||||
UCLIBC_HAS_SOFT_FLOAT=y
|
||||
UCLIBC_HAS_FPU=y
|
||||
DO_C99_MATH=y
|
||||
KERNEL_HEADERS="/usr/include"
|
||||
# UCLIBC_HAS_FENV is not set
|
||||
KERNEL_HEADERS="<path/to/kernel/headers>"
|
||||
HAVE_DOT_CONFIG=y
|
||||
|
|
@ -1,9 +1,11 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Sat May 12 23:18:41 2007
|
||||
# Version: 0.9.32-git
|
||||
# Mon Jul 19 01:34:29 2010
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
TARGET_arm=y
|
||||
# TARGET_avr32 is not set
|
||||
# TARGET_bfin is not set
|
||||
# TARGET_cris is not set
|
||||
# TARGET_e1 is not set
|
||||
|
@ -25,6 +27,7 @@ TARGET_arm=y
|
|||
# TARGET_v850 is not set
|
||||
# TARGET_vax is not set
|
||||
# TARGET_x86_64 is not set
|
||||
# TARGET_xtensa is not set
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
|
@ -34,7 +37,7 @@ FORCE_OPTIONS_FOR_ARCH=y
|
|||
# CONFIG_ARM_OABI is not set
|
||||
CONFIG_ARM_EABI=y
|
||||
USE_BX=y
|
||||
# CONFIG_GENERIC_ARM is not set
|
||||
CONFIG_GENERIC_ARM=y
|
||||
# CONFIG_ARM610 is not set
|
||||
# CONFIG_ARM710 is not set
|
||||
# CONFIG_ARM7TDMI is not set
|
||||
|
@ -46,10 +49,12 @@ USE_BX=y
|
|||
# CONFIG_ARM1136JF_S is not set
|
||||
# CONFIG_ARM1176JZ_S is not set
|
||||
# CONFIG_ARM1176JZF_S is not set
|
||||
# CONFIG_ARM_CORTEX_M3 is not set
|
||||
# CONFIG_ARM_CORTEX_M1 is not set
|
||||
# CONFIG_ARM_SA110 is not set
|
||||
# CONFIG_ARM_SA1100 is not set
|
||||
# CONFIG_ARM_XSCALE is not set
|
||||
CONFIG_ARM_IWMMXT=y
|
||||
# CONFIG_ARM_IWMMXT is not set
|
||||
TARGET_SUBARCH=""
|
||||
|
||||
#
|
||||
|
@ -65,6 +70,7 @@ UCLIBC_HAS_FLOATS=y
|
|||
# UCLIBC_HAS_FPU is not set
|
||||
UCLIBC_HAS_SOFT_FLOAT=y
|
||||
DO_C99_MATH=y
|
||||
# DO_XSI_MATH is not set
|
||||
# UCLIBC_HAS_FENV is not set
|
||||
KERNEL_HEADERS="/usr/include"
|
||||
HAVE_DOT_CONFIG=y
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
Delivered-To: raj.khem@gmail.com
|
||||
Received: by 10.90.86.4 with SMTP id j4cs313307agb;
|
||||
Sat, 8 Jan 2011 16:45:20 -0800 (PST)
|
||||
Received: by 10.227.141.78 with SMTP id l14mr16920947wbu.128.1294533919168;
|
||||
Sat, 08 Jan 2011 16:45:19 -0800 (PST)
|
||||
Return-Path: <yann.morin.1998@anciens.enib.fr>
|
||||
Received: from smtp.smtpout.orange.fr (smtp01.smtpout.orange.fr [80.12.242.123])
|
||||
by mx.google.com with ESMTP id w30si33755908wbd.17.2011.01.08.16.45.18;
|
||||
Sat, 08 Jan 2011 16:45:19 -0800 (PST)
|
||||
Received-SPF: neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) client-ip=80.12.242.123;
|
||||
Authentication-Results: mx.google.com; spf=neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) smtp.mail=yann.morin.1998@anciens.enib.fr
|
||||
Received: from roazhon.bzh.lan ([90.32.245.227])
|
||||
by mwinf5d24 with ME
|
||||
id tClC1f0024v5z3u03ClHDo; Sun, 09 Jan 2011 01:45:18 +0100
|
||||
From: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
To: uclibc@uclibc.org
|
||||
Cc: Khem Raj <raj.khem@gmail.com>,
|
||||
Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>,
|
||||
Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
Subject: [PATCH 6/7] ARM: detect BX availibility at build time
|
||||
Date: Sun, 9 Jan 2011 01:45:09 +0100
|
||||
Message-Id: <1294533910-19305-7-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
X-Mailer: git-send-email 1.7.1
|
||||
In-Reply-To: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
References: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
|
||||
The "use BX" option is now a suggestion that BX be used if available.
|
||||
Use a macro to detect if BX is available at build time. If so, and
|
||||
the user requested it be used, then use it. Otherwise, error out.
|
||||
|
||||
Macro courtesy Khem RAJ:
|
||||
http://lists.uclibc.org/pipermail/uclibc/2009-April/042301.html
|
||||
|
||||
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
Cc: Khem Raj <raj.khem@gmail.com>
|
||||
Cc: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
||||
Cc: Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
---
|
||||
extra/Configs/Config.arm | 4 +++-
|
||||
libc/sysdeps/linux/arm/bits/arm_asm.h | 9 ++++++++-
|
||||
2 files changed, 11 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/extra/Configs/Config.arm b/extra/Configs/Config.arm
|
||||
index 227b90c..9aa9e56 100644
|
||||
--- a/extra/Configs/Config.arm
|
||||
+++ b/extra/Configs/Config.arm
|
||||
@@ -33,4 +33,6 @@ config COMPILE_IN_THUMB_MODE
|
||||
config USE_BX
|
||||
bool "Use BX in function return"
|
||||
help
|
||||
- Use BX instruction for THUMB aware architectures.
|
||||
+ Say 'y' to use BX to return from functions on your thumb-aware
|
||||
+ processor. Say 'y' if you need to use interworking. Say 'n' if not.
|
||||
+ It is safe to say 'y' even if you're not doing interworking.
|
||||
diff --git a/libc/sysdeps/linux/arm/bits/arm_asm.h b/libc/sysdeps/linux/arm/bits/arm_asm.h
|
||||
index 1d87df6..921c9a3 100644
|
||||
--- a/libc/sysdeps/linux/arm/bits/arm_asm.h
|
||||
+++ b/libc/sysdeps/linux/arm/bits/arm_asm.h
|
||||
@@ -24,5 +24,12 @@
|
||||
#define THUMB1_ONLY 1
|
||||
#endif
|
||||
|
||||
-#endif /* _ARM_ASM_H */
|
||||
+#if defined(__USE_BX__)
|
||||
+# if ( defined (__ARM_ARCH_2__) || defined (__ARM_ARCH_3__) \
|
||||
+ || defined (__ARM_ARCH_3M__) || defined (__ARM_ARCH_4__) \
|
||||
+ )
|
||||
+# error Use of BX was requested, but is not available on the target processor.
|
||||
+# endif /* ARCH level */
|
||||
+#endif /* __USE_BX__ */
|
||||
|
||||
+#endif /* _ARM_ASM_H */
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Wed Dec 20 11:05:48 2006
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
# TARGET_arm is not set
|
||||
# TARGET_bfin is not set
|
||||
# TARGET_cris is not set
|
||||
# TARGET_e1 is not set
|
||||
# TARGET_frv is not set
|
||||
# TARGET_h8300 is not set
|
||||
# TARGET_hppa is not set
|
||||
# TARGET_i386 is not set
|
||||
# TARGET_i960 is not set
|
||||
# TARGET_ia64 is not set
|
||||
# TARGET_m68k is not set
|
||||
# TARGET_microblaze is not set
|
||||
# TARGET_mips is not set
|
||||
# TARGET_nios is not set
|
||||
# TARGET_nios2 is not set
|
||||
TARGET_powerpc=y
|
||||
# TARGET_sh is not set
|
||||
# TARGET_sh64 is not set
|
||||
# TARGET_sparc is not set
|
||||
# TARGET_v850 is not set
|
||||
# TARGET_vax is not set
|
||||
# TARGET_x86_64 is not set
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
#
|
||||
TARGET_ARCH="powerpc"
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
ARCH_BIG_ENDIAN=y
|
||||
|
||||
#
|
||||
# Using Big Endian
|
||||
#
|
||||
ARCH_HAS_MMU=y
|
||||
ARCH_USE_MMU=y
|
||||
UCLIBC_HAS_FLOATS=y
|
||||
UCLIBC_HAS_FPU=y
|
||||
DO_C99_MATH=y
|
||||
KERNEL_HEADERS="<path/to/kernel/headers>"
|
||||
HAVE_DOT_CONFIG=y
|
|
@ -1,11 +1,8 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Version: 0.9.30.1
|
||||
# Wed Jul 1 17:04:32 2009
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
# TARGET_arm is not set
|
||||
# TARGET_avr32 is not set
|
||||
# TARGET_bfin is not set
|
||||
# TARGET_cris is not set
|
||||
# TARGET_e1 is not set
|
||||
|
@ -14,7 +11,6 @@
|
|||
# TARGET_hppa is not set
|
||||
TARGET_i386=y
|
||||
# TARGET_i960 is not set
|
||||
# TARGET_ia64 is not set
|
||||
# TARGET_m68k is not set
|
||||
# TARGET_microblaze is not set
|
||||
# TARGET_mips is not set
|
||||
|
@ -25,16 +21,16 @@ TARGET_i386=y
|
|||
# TARGET_sh64 is not set
|
||||
# TARGET_sparc is not set
|
||||
# TARGET_v850 is not set
|
||||
# TARGET_vax is not set
|
||||
# TARGET_x86_64 is not set
|
||||
# TARGET_xtensa is not set
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
#
|
||||
TARGET_ARCH="i386"
|
||||
# ARCH_SUPPORTS_BIG_ENDIAN is not set
|
||||
ARCH_SUPPORTS_LITTLE_ENDIAN=y
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
CONFIG_GENERIC_386=y
|
||||
# CONFIG_GENERIC_386 is not set
|
||||
# CONFIG_386 is not set
|
||||
# CONFIG_486 is not set
|
||||
# CONFIG_586 is not set
|
||||
|
@ -42,7 +38,7 @@ CONFIG_GENERIC_386=y
|
|||
# CONFIG_686 is not set
|
||||
# CONFIG_PENTIUMII is not set
|
||||
# CONFIG_PENTIUMIII is not set
|
||||
# CONFIG_PENTIUM4 is not set
|
||||
CONFIG_PENTIUM4=y
|
||||
# CONFIG_K6 is not set
|
||||
# CONFIG_K7 is not set
|
||||
# CONFIG_ELAN is not set
|
||||
|
@ -51,22 +47,13 @@ CONFIG_GENERIC_386=y
|
|||
# CONFIG_WINCHIP2 is not set
|
||||
# CONFIG_CYRIXIII is not set
|
||||
# CONFIG_NEHEMIAH is not set
|
||||
TARGET_SUBARCH=""
|
||||
|
||||
#
|
||||
# Using ELF file format
|
||||
#
|
||||
ARCH_LITTLE_ENDIAN=y
|
||||
|
||||
#
|
||||
# Using Little Endian
|
||||
#
|
||||
# ARCH_BIG_ENDIAN is not set
|
||||
# ARCH_HAS_NO_MMU is not set
|
||||
ARCH_HAS_MMU=y
|
||||
ARCH_USE_MMU=y
|
||||
UCLIBC_HAS_FLOATS=y
|
||||
UCLIBC_HAS_FPU=y
|
||||
DO_C99_MATH=y
|
||||
# UCLIBC_HAS_FENV is not set
|
||||
UCLIBC_HAS_LONG_DOUBLE_MATH=y
|
||||
KERNEL_HEADERS="/bla"
|
||||
KERNEL_HEADERS="<path/to/kernel/headers>"
|
||||
HAVE_DOT_CONFIG=y
|
|
@ -1,6 +1,6 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Fri Nov 23 15:49:33 2007
|
||||
# Fri Dec 22 23:09:11 2006
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
# TARGET_arm is not set
|
||||
|
@ -31,9 +31,9 @@ TARGET_i386=y
|
|||
#
|
||||
TARGET_ARCH="i386"
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
CONFIG_GENERIC_386=y
|
||||
# CONFIG_GENERIC_386 is not set
|
||||
# CONFIG_386 is not set
|
||||
# CONFIG_486 is not set
|
||||
CONFIG_486=y
|
||||
# CONFIG_586 is not set
|
||||
# CONFIG_586MMX is not set
|
||||
# CONFIG_686 is not set
|
||||
|
@ -48,11 +48,6 @@ CONFIG_GENERIC_386=y
|
|||
# CONFIG_WINCHIP2 is not set
|
||||
# CONFIG_CYRIXIII is not set
|
||||
# CONFIG_NEHEMIAH is not set
|
||||
TARGET_SUBARCH=""
|
||||
|
||||
#
|
||||
# Using ELF file format
|
||||
#
|
||||
ARCH_LITTLE_ENDIAN=y
|
||||
|
||||
#
|
||||
|
@ -63,6 +58,5 @@ ARCH_USE_MMU=y
|
|||
UCLIBC_HAS_FLOATS=y
|
||||
UCLIBC_HAS_FPU=y
|
||||
DO_C99_MATH=y
|
||||
KERNEL_HEADERS="/usr/include"
|
||||
KERNEL_HEADERS="<path/to/kernel/headers>"
|
||||
HAVE_DOT_CONFIG=y
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Fri Nov 23 15:49:33 2007
|
||||
# Sat Feb 24 08:24:11 2007
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
# TARGET_arm is not set
|
||||
|
@ -31,14 +31,14 @@ TARGET_i386=y
|
|||
#
|
||||
TARGET_ARCH="i386"
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
CONFIG_GENERIC_386=y
|
||||
# CONFIG_GENERIC_386 is not set
|
||||
# CONFIG_386 is not set
|
||||
# CONFIG_486 is not set
|
||||
# CONFIG_586 is not set
|
||||
# CONFIG_586MMX is not set
|
||||
# CONFIG_686 is not set
|
||||
# CONFIG_PENTIUMII is not set
|
||||
# CONFIG_PENTIUMIII is not set
|
||||
CONFIG_PENTIUMIII=y
|
||||
# CONFIG_PENTIUM4 is not set
|
||||
# CONFIG_K6 is not set
|
||||
# CONFIG_K7 is not set
|
||||
|
@ -48,11 +48,6 @@ CONFIG_GENERIC_386=y
|
|||
# CONFIG_WINCHIP2 is not set
|
||||
# CONFIG_CYRIXIII is not set
|
||||
# CONFIG_NEHEMIAH is not set
|
||||
TARGET_SUBARCH=""
|
||||
|
||||
#
|
||||
# Using ELF file format
|
||||
#
|
||||
ARCH_LITTLE_ENDIAN=y
|
||||
|
||||
#
|
||||
|
@ -63,6 +58,5 @@ ARCH_USE_MMU=y
|
|||
UCLIBC_HAS_FLOATS=y
|
||||
UCLIBC_HAS_FPU=y
|
||||
DO_C99_MATH=y
|
||||
KERNEL_HEADERS="/usr/include"
|
||||
KERNEL_HEADERS="<path/to/kernel/headers>"
|
||||
HAVE_DOT_CONFIG=y
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
# TARGET_arm is not set
|
||||
# TARGET_bfin is not set
|
||||
# TARGET_cris is not set
|
||||
# TARGET_e1 is not set
|
||||
# TARGET_frv is not set
|
||||
# TARGET_h8300 is not set
|
||||
# TARGET_hppa is not set
|
||||
TARGET_i386=y
|
||||
# TARGET_i960 is not set
|
||||
# TARGET_m68k is not set
|
||||
# TARGET_microblaze is not set
|
||||
# TARGET_mips is not set
|
||||
# TARGET_nios is not set
|
||||
# TARGET_nios2 is not set
|
||||
# TARGET_powerpc is not set
|
||||
# TARGET_sh is not set
|
||||
# TARGET_sh64 is not set
|
||||
# TARGET_sparc is not set
|
||||
# TARGET_v850 is not set
|
||||
# TARGET_x86_64 is not set
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
#
|
||||
TARGET_ARCH="i386"
|
||||
# ARCH_SUPPORTS_BIG_ENDIAN is not set
|
||||
ARCH_SUPPORTS_LITTLE_ENDIAN=y
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
# CONFIG_GENERIC_386 is not set
|
||||
# CONFIG_386 is not set
|
||||
# CONFIG_486 is not set
|
||||
# CONFIG_586 is not set
|
||||
# CONFIG_586MMX is not set
|
||||
# CONFIG_686 is not set
|
||||
# CONFIG_PENTIUMII is not set
|
||||
# CONFIG_PENTIUMIII is not set
|
||||
CONFIG_PENTIUM4=y
|
||||
# CONFIG_K6 is not set
|
||||
# CONFIG_K7 is not set
|
||||
# CONFIG_ELAN is not set
|
||||
# CONFIG_CRUSOE is not set
|
||||
# CONFIG_WINCHIPC6 is not set
|
||||
# CONFIG_WINCHIP2 is not set
|
||||
# CONFIG_CYRIXIII is not set
|
||||
# CONFIG_NEHEMIAH is not set
|
||||
ARCH_LITTLE_ENDIAN=y
|
||||
# ARCH_BIG_ENDIAN is not set
|
||||
# ARCH_HAS_NO_MMU is not set
|
||||
ARCH_HAS_MMU=y
|
||||
UCLIBC_HAS_FLOATS=y
|
||||
UCLIBC_HAS_FPU=y
|
||||
DO_C99_MATH=y
|
||||
# UCLIBC_HAS_FENV is not set
|
||||
KERNEL_HEADERS="<path/to/kernel/headers>"
|
||||
HAVE_DOT_CONFIG=y
|
|
@ -0,0 +1,65 @@
|
|||
Delivered-To: raj.khem@gmail.com
|
||||
Received: by 10.90.86.4 with SMTP id j4cs313304agb;
|
||||
Sat, 8 Jan 2011 16:45:19 -0800 (PST)
|
||||
Received: by 10.227.155.75 with SMTP id r11mr17188266wbw.3.1294533918432;
|
||||
Sat, 08 Jan 2011 16:45:18 -0800 (PST)
|
||||
Return-Path: <yann.morin.1998@anciens.enib.fr>
|
||||
Received: from smtp.smtpout.orange.fr (smtp01.smtpout.orange.fr [80.12.242.123])
|
||||
by mx.google.com with ESMTP id k3si33753340wbx.29.2011.01.08.16.45.17;
|
||||
Sat, 08 Jan 2011 16:45:18 -0800 (PST)
|
||||
Received-SPF: neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) client-ip=80.12.242.123;
|
||||
Authentication-Results: mx.google.com; spf=neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) smtp.mail=yann.morin.1998@anciens.enib.fr
|
||||
Received: from roazhon.bzh.lan ([90.32.245.227])
|
||||
by mwinf5d24 with ME
|
||||
id tClC1f0024v5z3u03ClHDf; Sun, 09 Jan 2011 01:45:17 +0100
|
||||
From: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
To: uclibc@uclibc.org
|
||||
Cc: Khem Raj <raj.khem@gmail.com>,
|
||||
Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>,
|
||||
Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
Subject: [PATCH 5/7] ARM: #include <bits/arm_asm.h> where __USE_BX__ is used
|
||||
Date: Sun, 9 Jan 2011 01:45:08 +0100
|
||||
Message-Id: <1294533910-19305-6-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
X-Mailer: git-send-email 1.7.1
|
||||
In-Reply-To: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
References: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
|
||||
The check for __USE_BX__ will be available in bits/arm_asm.h,
|
||||
so the latter must be included wherever the former is used.
|
||||
|
||||
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
Cc: Khem Raj <raj.khem@gmail.com>
|
||||
Cc: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
||||
Cc: Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
---
|
||||
ldso/ldso/arm/dl-startup.h | 1 +
|
||||
libc/sysdeps/linux/arm/sysdep.h | 1 +
|
||||
2 files changed, 2 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/ldso/ldso/arm/dl-startup.h b/ldso/ldso/arm/dl-startup.h
|
||||
index a95389d..2dfdaff 100644
|
||||
--- a/ldso/ldso/arm/dl-startup.h
|
||||
+++ b/ldso/ldso/arm/dl-startup.h
|
||||
@@ -7,6 +7,7 @@
|
||||
*/
|
||||
|
||||
#include <features.h>
|
||||
+#include <bits/arm_asm.h>
|
||||
|
||||
#if !defined(__thumb__)
|
||||
__asm__(
|
||||
diff --git a/libc/sysdeps/linux/arm/sysdep.h b/libc/sysdeps/linux/arm/sysdep.h
|
||||
index 013f88c..e498695 100644
|
||||
--- a/libc/sysdeps/linux/arm/sysdep.h
|
||||
+++ b/libc/sysdeps/linux/arm/sysdep.h
|
||||
@@ -21,6 +21,7 @@
|
||||
#define _LINUX_ARM_SYSDEP_H 1
|
||||
|
||||
#include <common/sysdep.h>
|
||||
+#include <bits/arm_asm.h>
|
||||
|
||||
#include <sys/syscall.h>
|
||||
/* For Linux we can use the system call table in the header file
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Wed Jul 9 13:37:36 2008
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
# TARGET_arm is not set
|
||||
# TARGET_avr32 is not set
|
||||
# TARGET_bfin is not set
|
||||
# TARGET_cris is not set
|
||||
# TARGET_e1 is not set
|
||||
# TARGET_frv is not set
|
||||
# TARGET_h8300 is not set
|
||||
# TARGET_hppa is not set
|
||||
# TARGET_i386 is not set
|
||||
# TARGET_i960 is not set
|
||||
# TARGET_ia64 is not set
|
||||
# TARGET_m68k is not set
|
||||
# TARGET_microblaze is not set
|
||||
TARGET_mips=y
|
||||
# TARGET_nios is not set
|
||||
# TARGET_nios2 is not set
|
||||
# TARGET_powerpc is not set
|
||||
# TARGET_sh is not set
|
||||
# TARGET_sh64 is not set
|
||||
# TARGET_sparc is not set
|
||||
# TARGET_v850 is not set
|
||||
# TARGET_vax is not set
|
||||
# TARGET_x86_64 is not set
|
||||
# TARGET_xtensa is not set
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
#
|
||||
TARGET_ARCH="mips"
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
ARCH_CFLAGS="-mno-split-addresses"
|
||||
# CONFIG_MIPS_O32_ABI is not set
|
||||
# CONFIG_MIPS_N32_ABI is not set
|
||||
CONFIG_MIPS_N64_ABI=y
|
||||
# CONFIG_MIPS_ISA_1 is not set
|
||||
# CONFIG_MIPS_ISA_2 is not set
|
||||
# CONFIG_MIPS_ISA_3 is not set
|
||||
# CONFIG_MIPS_ISA_4 is not set
|
||||
# CONFIG_MIPS_ISA_MIPS32 is not set
|
||||
CONFIG_MIPS_ISA_MIPS64=y
|
||||
TARGET_SUBARCH=""
|
||||
|
||||
#
|
||||
# Using ELF file format
|
||||
#
|
||||
ARCH_ANY_ENDIAN=y
|
||||
# ARCH_BIG_ENDIAN is not set
|
||||
ARCH_WANTS_BIG_ENDIAN=y
|
||||
# ARCH_WANTS_LITTLE_ENDIAN=y
|
||||
ARCH_HAS_MMU=y
|
||||
ARCH_USE_MMU=y
|
||||
UCLIBC_HAS_FLOATS=y
|
||||
UCLIBC_HAS_FPU=y
|
||||
# DO_C99_MATH is not set
|
||||
# UCLIBC_HAS_FENV is not set
|
||||
KERNEL_HEADERS="/usr/include"
|
||||
HAVE_DOT_CONFIG=y
|
||||
|
|
@ -1,9 +1,10 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Mon May 14 10:23:14 2007
|
||||
# Wed Jul 9 13:37:36 2008
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
TARGET_arm=y
|
||||
# TARGET_arm is not set
|
||||
# TARGET_avr32 is not set
|
||||
# TARGET_bfin is not set
|
||||
# TARGET_cris is not set
|
||||
# TARGET_e1 is not set
|
||||
|
@ -15,7 +16,7 @@ TARGET_arm=y
|
|||
# TARGET_ia64 is not set
|
||||
# TARGET_m68k is not set
|
||||
# TARGET_microblaze is not set
|
||||
# TARGET_mips is not set
|
||||
TARGET_mips=y
|
||||
# TARGET_nios is not set
|
||||
# TARGET_nios2 is not set
|
||||
# TARGET_powerpc is not set
|
||||
|
@ -25,45 +26,38 @@ TARGET_arm=y
|
|||
# TARGET_v850 is not set
|
||||
# TARGET_vax is not set
|
||||
# TARGET_x86_64 is not set
|
||||
# TARGET_xtensa is not set
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
#
|
||||
TARGET_ARCH="arm"
|
||||
TARGET_ARCH="mips"
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
# CONFIG_ARM_OABI is not set
|
||||
CONFIG_ARM_EABI=y
|
||||
USE_BX=y
|
||||
# CONFIG_GENERIC_ARM is not set
|
||||
# CONFIG_ARM610 is not set
|
||||
# CONFIG_ARM710 is not set
|
||||
# CONFIG_ARM7TDMI is not set
|
||||
# CONFIG_ARM720T is not set
|
||||
CONFIG_ARM920T=y
|
||||
# CONFIG_ARM922T is not set
|
||||
# CONFIG_ARM926T is not set
|
||||
# CONFIG_ARM10T is not set
|
||||
# CONFIG_ARM1136JF_S is not set
|
||||
# CONFIG_ARM1176JZ_S is not set
|
||||
# CONFIG_ARM1176JZF_S is not set
|
||||
# CONFIG_ARM_SA110 is not set
|
||||
# CONFIG_ARM_SA1100 is not set
|
||||
# CONFIG_ARM_XSCALE is not set
|
||||
# CONFIG_ARM_IWMMXT is not set
|
||||
ARCH_CFLAGS="-mno-split-addresses"
|
||||
CONFIG_MIPS_O32_ABI=y
|
||||
# CONFIG_MIPS_N32_ABI is not set
|
||||
# CONFIG_MIPS_N64_ABI is not set
|
||||
# CONFIG_MIPS_ISA_1 is not set
|
||||
# CONFIG_MIPS_ISA_2 is not set
|
||||
# CONFIG_MIPS_ISA_3 is not set
|
||||
# CONFIG_MIPS_ISA_4 is not set
|
||||
CONFIG_MIPS_ISA_MIPS32=y
|
||||
# CONFIG_MIPS_ISA_MIPS64 is not set
|
||||
TARGET_SUBARCH=""
|
||||
|
||||
#
|
||||
# Using ELF file format
|
||||
#
|
||||
ARCH_ANY_ENDIAN=y
|
||||
ARCH_LITTLE_ENDIAN=y
|
||||
# ARCH_BIG_ENDIAN is not set
|
||||
# ARCH_WANTS_BIG_ENDIAN is not set
|
||||
ARCH_WANTS_LITTLE_ENDIAN=y
|
||||
ARCH_HAS_MMU=y
|
||||
ARCH_USE_MMU=y
|
||||
UCLIBC_HAS_FLOATS=y
|
||||
# UCLIBC_HAS_FPU is not set
|
||||
UCLIBC_HAS_SOFT_FLOAT=y
|
||||
UCLIBC_HAS_FPU=y
|
||||
# DO_C99_MATH is not set
|
||||
# UCLIBC_HAS_FENV is not set
|
||||
KERNEL_HEADERS="/usr/include"
|
||||
HAVE_DOT_CONFIG=y
|
||||
|
|
@ -49,6 +49,8 @@ USE_BX=y
|
|||
# CONFIG_ARM_SA110 is not set
|
||||
# CONFIG_ARM_SA1100 is not set
|
||||
CONFIG_ARM_XSCALE=y
|
||||
# CONFIG_ARM_CORTEX_M3 is not set
|
||||
# CONFIG_ARM_CORTEX_M1 is not set
|
||||
# CONFIG_ARM_IWMMXT is not set
|
||||
TARGET_SUBARCH=""
|
||||
|
||||
|
@ -65,6 +67,7 @@ UCLIBC_HAS_FLOATS=y
|
|||
# UCLIBC_HAS_FPU is not set
|
||||
UCLIBC_HAS_SOFT_FLOAT=y
|
||||
DO_C99_MATH=y
|
||||
# DO_XSI_MATH is not set
|
||||
# UCLIBC_HAS_FENV is not set
|
||||
KERNEL_HEADERS="/usr/include"
|
||||
HAVE_DOT_CONFIG=y
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Tue Feb 6 19:17:06 2007
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
# TARGET_arm is not set
|
||||
# TARGET_bfin is not set
|
||||
# TARGET_cris is not set
|
||||
# TARGET_e1 is not set
|
||||
# TARGET_frv is not set
|
||||
# TARGET_h8300 is not set
|
||||
# TARGET_hppa is not set
|
||||
# TARGET_i386 is not set
|
||||
# TARGET_i960 is not set
|
||||
# TARGET_ia64 is not set
|
||||
# TARGET_m68k is not set
|
||||
# TARGET_microblaze is not set
|
||||
# TARGET_mips is not set
|
||||
# TARGET_nios is not set
|
||||
# TARGET_nios2 is not set
|
||||
TARGET_powerpc=y
|
||||
# TARGET_sh is not set
|
||||
# TARGET_sh64 is not set
|
||||
# TARGET_sparc is not set
|
||||
# TARGET_v850 is not set
|
||||
# TARGET_vax is not set
|
||||
# TARGET_x86_64 is not set
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
#
|
||||
TARGET_ARCH="powerpc"
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
ARCH_BIG_ENDIAN=y
|
||||
|
||||
#
|
||||
# Using Big Endian
|
||||
#
|
||||
ARCH_HAS_MMU=y
|
||||
ARCH_USE_MMU=y
|
||||
UCLIBC_HAS_FLOATS=y
|
||||
UCLIBC_HAS_FPU=y
|
||||
DO_C99_MATH=y
|
||||
KERNEL_HEADERS="/usr/include"
|
||||
HAVE_DOT_CONFIG=y
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
Index: git/libc/sysdeps/linux/powerpc/Makefile.arch
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/powerpc/Makefile.arch
|
||||
+++ git/libc/sysdeps/linux/powerpc/Makefile.arch
|
||||
@@ -5,7 +5,7 @@
|
||||
# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
|
||||
#
|
||||
|
||||
-CSRC := __syscall_error.c pread_write.c ioctl.c
|
||||
+CSRC := __syscall_error.c pread_write.c ioctl.c copysignl.c
|
||||
|
||||
ifeq ($(UCLIBC_HAS_ADVANCED_REALTIME),y)
|
||||
CSRC += posix_fadvise.c posix_fadvise64.c
|
||||
Index: git/libc/sysdeps/linux/powerpc/copysignl.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ git/libc/sysdeps/linux/powerpc/copysignl.c
|
||||
@@ -0,0 +1,89 @@
|
||||
+/* s_copysignl.c -- long double version of s_copysign.c.
|
||||
+ * Conversion to long double by Ulrich Drepper,
|
||||
+ * Cygnus Support, drepper@cygnus.com.
|
||||
+ */
|
||||
+
|
||||
+/*
|
||||
+ * ====================================================
|
||||
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
+ *
|
||||
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
+ * Permission to use, copy, modify, and distribute this
|
||||
+ * software is freely granted, provided that this notice
|
||||
+ * is preserved.
|
||||
+ * ====================================================
|
||||
+ */
|
||||
+
|
||||
+/*
|
||||
+ * copysignl(long double x, long double y)
|
||||
+ * copysignl(x,y) returns a value with the magnitude of x and
|
||||
+ * with the sign bit of y.
|
||||
+ */
|
||||
+
|
||||
+#include <endian.h>
|
||||
+#include <stdint.h>
|
||||
+
|
||||
+#if __FLOAT_WORD_ORDER == BIG_ENDIAN
|
||||
+
|
||||
+typedef union
|
||||
+{
|
||||
+ long double value;
|
||||
+ struct
|
||||
+ {
|
||||
+ int sign_exponent:16;
|
||||
+ unsigned int empty:16;
|
||||
+ uint32_t msw;
|
||||
+ uint32_t lsw;
|
||||
+ } parts;
|
||||
+} ieee_long_double_shape_type;
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
+#if __FLOAT_WORD_ORDER == LITTLE_ENDIAN
|
||||
+
|
||||
+typedef union
|
||||
+{
|
||||
+ long double value;
|
||||
+ struct
|
||||
+ {
|
||||
+ uint32_t lsw;
|
||||
+ uint32_t msw;
|
||||
+ int sign_exponent:16;
|
||||
+ unsigned int empty:16;
|
||||
+ } parts;
|
||||
+} ieee_long_double_shape_type;
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
+/* Get int from the exponent of a long double. */
|
||||
+
|
||||
+#define GET_LDOUBLE_EXP(exp,d) \
|
||||
+do { \
|
||||
+ ieee_long_double_shape_type ge_u; \
|
||||
+ ge_u.value = (d); \
|
||||
+ (exp) = ge_u.parts.sign_exponent; \
|
||||
+} while (0)
|
||||
+
|
||||
+/* Set exponent of a long double from an int. */
|
||||
+
|
||||
+#define SET_LDOUBLE_EXP(d,exp) \
|
||||
+do { \
|
||||
+ ieee_long_double_shape_type se_u; \
|
||||
+ se_u.value = (d); \
|
||||
+ se_u.parts.sign_exponent = (exp); \
|
||||
+ (d) = se_u.value; \
|
||||
+} while (0)
|
||||
+
|
||||
+long double copysignl(long double x, long double y);
|
||||
+libc_hidden_proto(copysignl);
|
||||
+
|
||||
+long double copysignl(long double x, long double y)
|
||||
+{
|
||||
+ uint32_t es1,es2;
|
||||
+ GET_LDOUBLE_EXP(es1,x);
|
||||
+ GET_LDOUBLE_EXP(es2,y);
|
||||
+ SET_LDOUBLE_EXP(x,(es1&0x7fff)|(es2&0x8000));
|
||||
+ return x;
|
||||
+}
|
||||
+
|
||||
+libc_hidden_def(copysignl);
|
|
@ -1,9 +1,11 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Sun May 13 11:16:02 2007
|
||||
# Version: 0.9.32-git
|
||||
# Mon Jul 19 01:34:29 2010
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
TARGET_arm=y
|
||||
# TARGET_avr32 is not set
|
||||
# TARGET_bfin is not set
|
||||
# TARGET_cris is not set
|
||||
# TARGET_e1 is not set
|
||||
|
@ -25,6 +27,7 @@ TARGET_arm=y
|
|||
# TARGET_v850 is not set
|
||||
# TARGET_vax is not set
|
||||
# TARGET_x86_64 is not set
|
||||
# TARGET_xtensa is not set
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
|
@ -46,6 +49,8 @@ CONFIG_ARM926T=y
|
|||
# CONFIG_ARM1136JF_S is not set
|
||||
# CONFIG_ARM1176JZ_S is not set
|
||||
# CONFIG_ARM1176JZF_S is not set
|
||||
# CONFIG_ARM_CORTEX_M3 is not set
|
||||
# CONFIG_ARM_CORTEX_M1 is not set
|
||||
# CONFIG_ARM_SA110 is not set
|
||||
# CONFIG_ARM_SA1100 is not set
|
||||
# CONFIG_ARM_XSCALE is not set
|
||||
|
@ -65,6 +70,7 @@ UCLIBC_HAS_FLOATS=y
|
|||
# UCLIBC_HAS_FPU is not set
|
||||
UCLIBC_HAS_SOFT_FLOAT=y
|
||||
DO_C99_MATH=y
|
||||
KERNEL_HEADERS="/bad/path/to/include"
|
||||
# DO_XSI_MATH is not set
|
||||
# UCLIBC_HAS_FENV is not set
|
||||
KERNEL_HEADERS="/usr/include"
|
||||
HAVE_DOT_CONFIG=y
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Wed Jul 9 13:37:36 2008
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
# TARGET_arm is not set
|
||||
# TARGET_avr32 is not set
|
||||
# TARGET_bfin is not set
|
||||
# TARGET_cris is not set
|
||||
# TARGET_e1 is not set
|
||||
# TARGET_frv is not set
|
||||
# TARGET_h8300 is not set
|
||||
# TARGET_hppa is not set
|
||||
# TARGET_i386 is not set
|
||||
# TARGET_i960 is not set
|
||||
# TARGET_ia64 is not set
|
||||
# TARGET_m68k is not set
|
||||
# TARGET_microblaze is not set
|
||||
TARGET_mips=y
|
||||
# TARGET_nios is not set
|
||||
# TARGET_nios2 is not set
|
||||
# TARGET_powerpc is not set
|
||||
# TARGET_sh is not set
|
||||
# TARGET_sh64 is not set
|
||||
# TARGET_sparc is not set
|
||||
# TARGET_v850 is not set
|
||||
# TARGET_vax is not set
|
||||
# TARGET_x86_64 is not set
|
||||
# TARGET_xtensa is not set
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
#
|
||||
TARGET_ARCH="mips"
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
ARCH_CFLAGS="-mno-split-addresses"
|
||||
CONFIG_MIPS_O32_ABI=y
|
||||
# CONFIG_MIPS_N32_ABI is not set
|
||||
# CONFIG_MIPS_N64_ABI is not set
|
||||
# CONFIG_MIPS_ISA_1 is not set
|
||||
# CONFIG_MIPS_ISA_2 is not set
|
||||
# CONFIG_MIPS_ISA_3 is not set
|
||||
# CONFIG_MIPS_ISA_4 is not set
|
||||
CONFIG_MIPS_ISA_MIPS32=y
|
||||
# CONFIG_MIPS_ISA_MIPS64 is not set
|
||||
TARGET_SUBARCH=""
|
||||
|
||||
#
|
||||
# Using ELF file format
|
||||
#
|
||||
ARCH_ANY_ENDIAN=y
|
||||
# ARCH_BIG_ENDIAN is not set
|
||||
ARCH_WANTS_BIG_ENDIAN=y
|
||||
# ARCH_WANTS_LITTLE_ENDIAN=y
|
||||
ARCH_HAS_MMU=y
|
||||
ARCH_USE_MMU=y
|
||||
UCLIBC_HAS_FLOATS=y
|
||||
UCLIBC_HAS_FPU=y
|
||||
# DO_C99_MATH is not set
|
||||
# UCLIBC_HAS_FENV is not set
|
||||
KERNEL_HEADERS="/usr/include"
|
||||
HAVE_DOT_CONFIG=y
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
# TARGET_arm is not set
|
||||
# TARGET_bfin is not set
|
||||
# TARGET_cris is not set
|
||||
# TARGET_e1 is not set
|
||||
# TARGET_frv is not set
|
||||
# TARGET_h8300 is not set
|
||||
# TARGET_hppa is not set
|
||||
TARGET_i386=y
|
||||
# TARGET_i960 is not set
|
||||
# TARGET_m68k is not set
|
||||
# TARGET_microblaze is not set
|
||||
# TARGET_mips is not set
|
||||
# TARGET_nios is not set
|
||||
# TARGET_nios2 is not set
|
||||
# TARGET_powerpc is not set
|
||||
# TARGET_sh is not set
|
||||
# TARGET_sh64 is not set
|
||||
# TARGET_sparc is not set
|
||||
# TARGET_v850 is not set
|
||||
# TARGET_x86_64 is not set
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
#
|
||||
TARGET_ARCH="i386"
|
||||
# ARCH_SUPPORTS_BIG_ENDIAN is not set
|
||||
ARCH_SUPPORTS_LITTLE_ENDIAN=y
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
# CONFIG_GENERIC_386 is not set
|
||||
# CONFIG_386 is not set
|
||||
# CONFIG_486 is not set
|
||||
# CONFIG_586 is not set
|
||||
# CONFIG_586MMX is not set
|
||||
# CONFIG_686 is not set
|
||||
# CONFIG_PENTIUMII is not set
|
||||
# CONFIG_PENTIUMIII is not set
|
||||
CONFIG_PENTIUM4=y
|
||||
# CONFIG_K6 is not set
|
||||
# CONFIG_K7 is not set
|
||||
# CONFIG_ELAN is not set
|
||||
# CONFIG_CRUSOE is not set
|
||||
# CONFIG_WINCHIPC6 is not set
|
||||
# CONFIG_WINCHIP2 is not set
|
||||
# CONFIG_CYRIXIII is not set
|
||||
# CONFIG_NEHEMIAH is not set
|
||||
ARCH_LITTLE_ENDIAN=y
|
||||
# ARCH_BIG_ENDIAN is not set
|
||||
# ARCH_HAS_NO_MMU is not set
|
||||
ARCH_HAS_MMU=y
|
||||
UCLIBC_HAS_FLOATS=y
|
||||
UCLIBC_HAS_FPU=y
|
||||
DO_C99_MATH=y
|
||||
# UCLIBC_HAS_FENV is not set
|
||||
KERNEL_HEADERS="<path/to/kernel/headers>"
|
||||
HAVE_DOT_CONFIG=y
|
|
@ -0,0 +1,91 @@
|
|||
Delivered-To: raj.khem@gmail.com
|
||||
Received: by 10.90.86.4 with SMTP id j4cs313309agb;
|
||||
Sat, 8 Jan 2011 16:45:20 -0800 (PST)
|
||||
Received: by 10.216.173.7 with SMTP id u7mr612034wel.50.1294533919433;
|
||||
Sat, 08 Jan 2011 16:45:19 -0800 (PST)
|
||||
Return-Path: <yann.morin.1998@anciens.enib.fr>
|
||||
Received: from smtp.smtpout.orange.fr (smtp01.smtpout.orange.fr [80.12.242.123])
|
||||
by mx.google.com with ESMTP id e10si33752027wer.68.2011.01.08.16.45.19;
|
||||
Sat, 08 Jan 2011 16:45:19 -0800 (PST)
|
||||
Received-SPF: neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) client-ip=80.12.242.123;
|
||||
Authentication-Results: mx.google.com; spf=neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) smtp.mail=yann.morin.1998@anciens.enib.fr
|
||||
Received: from roazhon.bzh.lan ([90.32.245.227])
|
||||
by mwinf5d24 with ME
|
||||
id tClC1f0024v5z3u03ClJDu; Sun, 09 Jan 2011 01:45:18 +0100
|
||||
From: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
To: uclibc@uclibc.org
|
||||
Cc: Khem Raj <raj.khem@gmail.com>,
|
||||
Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>,
|
||||
Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
Subject: [PATCH 7/7] ARM: remove EABI/OABI selection
|
||||
Date: Sun, 9 Jan 2011 01:45:10 +0100
|
||||
Message-Id: <1294533910-19305-8-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
X-Mailer: git-send-email 1.7.1
|
||||
In-Reply-To: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
References: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
|
||||
Rely on the compiler to be properly setup for the default ABI.
|
||||
|
||||
When installing-headers, there are two cases:
|
||||
- NPTL: no issue, a cross-compiler is already expected
|
||||
- LinuxThreads: no issue, EABI/OABI has no impact on installed headers.
|
||||
|
||||
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
Cc: Khem Raj <raj.khem@gmail.com>
|
||||
Cc: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
||||
Cc: Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
---
|
||||
extra/Configs/Config.arm | 11 -----------
|
||||
libc/sysdeps/linux/arm/Makefile.arch | 9 +++++++--
|
||||
libc/sysdeps/linux/arm/bits/huge_val.h | 4 ++--
|
||||
3 files changed, 9 insertions(+), 15 deletions(-)
|
||||
|
||||
Index: git/libc/sysdeps/linux/arm/Makefile.arch
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/arm/Makefile.arch
|
||||
+++ git/libc/sysdeps/linux/arm/Makefile.arch
|
||||
@@ -24,7 +24,12 @@ ifeq ($(UCLIBC_HAS_ADVANCED_REALTIME),y)
|
||||
CSRC += posix_fadvise.c posix_fadvise64.c
|
||||
endif
|
||||
|
||||
-ifeq ($(CONFIG_ARM_EABI),y)
|
||||
+# Is our compiler set up for EABI ?
|
||||
+IS_EABI:=$(shell $(CC) $(CFLAGS) -x c - -E -dM </dev/null 2>/dev/null \
|
||||
+ |sed -r -e '/^\#[[:space:]]*define[[:space:]]+__ARM_EABI__([[:space:]]+1)?$$/!d; s/.+/y/;' \
|
||||
+ )
|
||||
+
|
||||
+ifeq ($(IS_EABI),y)
|
||||
CSRC += aeabi_assert.c aeabi_atexit.c aeabi_errno_addr.c \
|
||||
aeabi_localeconv.c aeabi_memclr.c aeabi_memcpy.c \
|
||||
aeabi_memmove.c aeabi_memset.c find_exidx.c
|
||||
@@ -37,7 +42,7 @@ else
|
||||
CSRC += syscall.c
|
||||
endif
|
||||
|
||||
-ifeq ($(CONFIG_ARM_EABI),y)
|
||||
+ifeq ($(IS_EABI),y)
|
||||
libc-static-y += $(ARCH_OUT)/aeabi_lcsts.o $(ARCH_OUT)/aeabi_math.o \
|
||||
$(ARCH_OUT)/aeabi_sighandlers.o
|
||||
libc-nonshared-y += $(ARCH_OUT)/aeabi_lcsts.os $(ARCH_OUT)/aeabi_math.os \
|
||||
Index: git/libc/sysdeps/linux/arm/bits/huge_val.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/arm/bits/huge_val.h
|
||||
+++ git/libc/sysdeps/linux/arm/bits/huge_val.h
|
||||
@@ -32,7 +32,7 @@
|
||||
# define HUGE_VAL (__extension__ 0x1.0p2047)
|
||||
#elif defined __GNUC__
|
||||
|
||||
-#ifndef __CONFIG_ARM_EABI__
|
||||
+#ifndef __ARM_EABI__
|
||||
# define HUGE_VAL \
|
||||
(__extension__ \
|
||||
((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; }) \
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
typedef union { unsigned char __c[8]; double __d; } __huge_val_t;
|
||||
|
||||
-#ifndef __CONFIG_ARM_EABI__
|
||||
+#ifndef __ARM_EABI__
|
||||
# if __BYTE_ORDER == __BIG_ENDIAN
|
||||
# define __HUGE_VAL_bytes { 0, 0, 0, 0, 0x7f, 0xf0, 0, 0 }
|
||||
# endif
|
|
@ -0,0 +1,215 @@
|
|||
Delivered-To: raj.khem@gmail.com
|
||||
Received: by 10.90.86.4 with SMTP id j4cs313303agb;
|
||||
Sat, 8 Jan 2011 16:45:18 -0800 (PST)
|
||||
Received: by 10.227.98.158 with SMTP id q30mr1255804wbn.151.1294533917314;
|
||||
Sat, 08 Jan 2011 16:45:17 -0800 (PST)
|
||||
Return-Path: <yann.morin.1998@anciens.enib.fr>
|
||||
Received: from smtp.smtpout.orange.fr (smtp01.smtpout.orange.fr [80.12.242.123])
|
||||
by mx.google.com with ESMTP id r3si33749838wbr.54.2011.01.08.16.45.16;
|
||||
Sat, 08 Jan 2011 16:45:17 -0800 (PST)
|
||||
Received-SPF: neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) client-ip=80.12.242.123;
|
||||
Authentication-Results: mx.google.com; spf=neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) smtp.mail=yann.morin.1998@anciens.enib.fr
|
||||
Received: from roazhon.bzh.lan ([90.32.245.227])
|
||||
by mwinf5d24 with ME
|
||||
id tClC1f0024v5z3u03ClGDS; Sun, 09 Jan 2011 01:45:16 +0100
|
||||
From: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
To: uclibc@uclibc.org
|
||||
Cc: Khem Raj <raj.khem@gmail.com>,
|
||||
Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>,
|
||||
Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
Subject: [PATCH 3/7] ARM: remove sub-arch/variants selection from menuconfig
|
||||
Date: Sun, 9 Jan 2011 01:45:06 +0100
|
||||
Message-Id: <1294533910-19305-4-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
X-Mailer: git-send-email 1.7.1
|
||||
In-Reply-To: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
References: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
|
||||
Rely on the compiler to be correctly set up to generate
|
||||
appropriate code for the target variant.
|
||||
|
||||
This exposes the Thumb option, as it is no longer auto-selected.
|
||||
The "Use BX" no longer depends on supported CPU to be selected,
|
||||
so it now defaults to 'n' as it shall work by default on CPUs
|
||||
that do not have BX.
|
||||
|
||||
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
Cc: Khem Raj <raj.khem@gmail.com>
|
||||
Cc: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
||||
Cc: Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
---
|
||||
Rules.mak | 19 -------
|
||||
extra/Configs/Config.arm | 125 ++--------------------------------------------
|
||||
2 files changed, 5 insertions(+), 139 deletions(-)
|
||||
|
||||
diff --git a/Rules.mak b/Rules.mak
|
||||
index 2a16908..09741a6 100644
|
||||
--- a/Rules.mak
|
||||
+++ b/Rules.mak
|
||||
@@ -332,25 +332,6 @@ ifeq ($(TARGET_ARCH),arm)
|
||||
OPTIMIZATION+=-fstrict-aliasing
|
||||
CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN)+=-mlittle-endian
|
||||
CPU_CFLAGS-$(ARCH_BIG_ENDIAN)+=-mbig-endian
|
||||
- CPU_CFLAGS-$(CONFIG_GENERIC_ARM)+=
|
||||
- CPU_CFLAGS-$(CONFIG_ARM610)+=-mtune=arm610 -march=armv3
|
||||
- CPU_CFLAGS-$(CONFIG_ARM710)+=-mtune=arm710 -march=armv3
|
||||
- CPU_CFLAGS-$(CONFIG_ARM7TDMI)+=-mtune=arm7tdmi -march=armv4t
|
||||
- CPU_CFLAGS-$(CONFIG_ARM720T)+=-mtune=arm7tdmi -march=armv4t
|
||||
- CPU_CFLAGS-$(CONFIG_ARM920T)+=-mtune=arm9tdmi -march=armv4t
|
||||
- CPU_CFLAGS-$(CONFIG_ARM922T)+=-mtune=arm9tdmi -march=armv4t
|
||||
- CPU_CFLAGS-$(CONFIG_ARM926T)+=-mtune=arm9e -march=armv5te
|
||||
- CPU_CFLAGS-$(CONFIG_ARM10T)+=-mtune=arm10tdmi -march=armv5t
|
||||
- CPU_CFLAGS-$(CONFIG_ARM1136JF_S)+=-mtune=arm1136jf-s -march=armv6
|
||||
- CPU_CFLAGS-$(CONFIG_ARM1176JZ_S)+=-mtune=arm1176jz-s -march=armv6
|
||||
- CPU_CFLAGS-$(CONFIG_ARM1176JZF_S)+=-mtune=arm1176jzf-s -march=armv6
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_SA110)+=-mtune=strongarm110 -march=armv4
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_SA1100)+=-mtune=strongarm1100 -march=armv4
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=$(call check_gcc,-mtune=xscale,-mtune=strongarm110)
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=-march=armv5te -Wa,-mcpu=xscale
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_IWMMXT)+=-march=iwmmxt -Wa,-mcpu=iwmmxt -mabi=iwmmxt
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_CORTEX_M3)+=-mcpu=cortex-m3
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_CORTEX_M1)+=-mcpu=cortex-m1
|
||||
CPU_CFLAGS-$(COMPILE_IN_THUMB_MODE)+=-mthumb
|
||||
endif
|
||||
|
||||
diff --git a/extra/Configs/Config.arm b/extra/Configs/Config.arm
|
||||
index c9c40d4..6c75a00 100644
|
||||
--- a/extra/Configs/Config.arm
|
||||
+++ b/extra/Configs/Config.arm
|
||||
@@ -30,129 +30,14 @@ config CONFIG_ARM_EABI
|
||||
|
||||
endchoice
|
||||
|
||||
-choice
|
||||
- prompt "Target Processor Type"
|
||||
- default CONFIG_GENERIC_ARM
|
||||
- help
|
||||
- This is the processor type of your CPU. This information is used for
|
||||
- optimizing purposes. To build a library that will run on all ARMCPU
|
||||
- types (albeit not optimally fast), you can specify "Generic Arm" here.
|
||||
- If you pick anything other than "Generic Arm", there is no guarantee
|
||||
- that uClibc will even run on anything other than the selected
|
||||
- processor type.
|
||||
-
|
||||
- Here are the settings recommended for greatest speed:
|
||||
- - "Generic Arm" select this if your compiler is already setup to
|
||||
- optimize things properly, or if you want to run on pretty much
|
||||
- everything, or you just don't much care.
|
||||
- - For anything else, pick the ARM core type that best matches the
|
||||
- cpu you will be using on your device.
|
||||
-
|
||||
- If you don't know what to do, choose "Generic Arm".
|
||||
-
|
||||
-config CONFIG_GENERIC_ARM
|
||||
- bool "Generic Arm"
|
||||
-
|
||||
-config CONFIG_ARM610
|
||||
- bool "Arm 610"
|
||||
- select ARCH_HAS_MMU
|
||||
-
|
||||
-config CONFIG_ARM710
|
||||
- bool "Arm 710"
|
||||
- select ARCH_HAS_MMU
|
||||
-
|
||||
-config CONFIG_ARM7TDMI
|
||||
- bool "Arm 7TDMI"
|
||||
- select ARCH_HAS_NO_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM720T
|
||||
- bool "Arm 720T"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM920T
|
||||
- bool "Arm 920T"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM922T
|
||||
- bool "Arm 922T"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM926T
|
||||
- bool "Arm 926T"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM10T
|
||||
- bool "Arm 10T"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM1136JF_S
|
||||
- bool "Arm 1136JF-S"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM1176JZ_S
|
||||
- bool "Arm 1176JZ-S"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM1176JZF_S
|
||||
- bool "Arm 1176JZF-S"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM_CORTEX_M3
|
||||
- bool "Arm Cortex-M3"
|
||||
- select ARCH_HAS_NO_MMU
|
||||
- select FORCE_THUMB
|
||||
-
|
||||
-config CONFIG_ARM_CORTEX_M1
|
||||
- bool "Arm Cortex-M1"
|
||||
- select ARCH_HAS_NO_MMU
|
||||
- select FORCE_THUMB
|
||||
-
|
||||
-config CONFIG_ARM_SA110
|
||||
- bool "Intel StrongArm SA-110"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM_SA1100
|
||||
- bool "Intel StrongArm SA-1100"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM_XSCALE
|
||||
- bool "Intel Xscale"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM_IWMMXT
|
||||
- bool "Intel Xscale With WMMX PXA27x"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-endchoice
|
||||
-
|
||||
-config HAS_THUMB
|
||||
- bool
|
||||
-
|
||||
-config FORCE_THUMB
|
||||
- bool
|
||||
- select HAS_THUMB
|
||||
- select COMPILE_IN_THUMB_MODE
|
||||
- select USE_BX
|
||||
-
|
||||
config COMPILE_IN_THUMB_MODE
|
||||
- bool
|
||||
+ bool "Build using Thumb mode"
|
||||
+ select USE_BX
|
||||
+ help
|
||||
+ Say 'y' here to force building uClibc in thumb mode.
|
||||
+ Say 'n' to use your compiler's default mode.
|
||||
|
||||
config USE_BX
|
||||
bool "Use BX in function return"
|
||||
- default y
|
||||
- depends on HAS_THUMB
|
||||
help
|
||||
Use BX instruction for THUMB aware architectures.
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -0,0 +1,186 @@
|
|||
Index: git/include/features.h
|
||||
===================================================================
|
||||
--- git.orig/include/features.h
|
||||
+++ git/include/features.h
|
||||
@@ -186,7 +186,6 @@
|
||||
# define __need_uClibc_config_h
|
||||
# include <bits/uClibc_config.h>
|
||||
# undef __need_uClibc_config_h
|
||||
-
|
||||
/* For uClibc, always optimize for size -- this should disable
|
||||
* a lot of expensive inlining...
|
||||
* TODO: this is wrong! __OPTIMIZE_SIZE__ is an indicator of
|
||||
Index: git/libpthread/nptl/pthread_mutex_timedlock.c
|
||||
===================================================================
|
||||
--- git.orig/libpthread/nptl/pthread_mutex_timedlock.c
|
||||
+++ git/libpthread/nptl/pthread_mutex_timedlock.c
|
||||
@@ -29,7 +29,9 @@
|
||||
* error: can't find a register in class ‘GENERAL_REGS’ while reloading ‘asm’
|
||||
*/
|
||||
int
|
||||
+#ifndef __OPTIMIZE__
|
||||
attribute_optimize("Os")
|
||||
+#endif
|
||||
pthread_mutex_timedlock (
|
||||
pthread_mutex_t *mutex,
|
||||
const struct timespec *abstime)
|
||||
Index: git/libc/sysdeps/linux/powerpc/bits/mathinline.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/powerpc/bits/mathinline.h
|
||||
+++ git/libc/sysdeps/linux/powerpc/bits/mathinline.h
|
||||
@@ -27,7 +27,7 @@
|
||||
#ifdef __cplusplus
|
||||
# define __MATH_INLINE __inline
|
||||
#else
|
||||
-# define __MATH_INLINE extern __inline
|
||||
+# define __MATH_INLINE __extern_inline
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#if defined __GNUC__ && !defined _SOFT_FLOAT
|
||||
Index: git/libc/sysdeps/linux/alpha/bits/mathinline.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/alpha/bits/mathinline.h
|
||||
+++ git/libc/sysdeps/linux/alpha/bits/mathinline.h
|
||||
@@ -25,7 +25,7 @@
|
||||
#ifdef __cplusplus
|
||||
# define __MATH_INLINE __inline
|
||||
#else
|
||||
-# define __MATH_INLINE extern __inline
|
||||
+# define __MATH_INLINE __extern_inline
|
||||
#endif
|
||||
|
||||
#if defined __USE_ISOC99 && defined __GNUC__ && !__GNUC_PREREQ(3,0)
|
||||
Index: git/libc/sysdeps/linux/common/bits/socket.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/common/bits/socket.h
|
||||
+++ git/libc/sysdeps/linux/common/bits/socket.h
|
||||
@@ -302,7 +302,7 @@ extern struct cmsghdr *__cmsg_nxthdr (st
|
||||
libc_hidden_proto(__cmsg_nxthdr)
|
||||
#ifdef __USE_EXTERN_INLINES
|
||||
# ifndef _EXTERN_INLINE
|
||||
-# define _EXTERN_INLINE extern __inline
|
||||
+# define _EXTERN_INLINE __extern_inline
|
||||
# endif
|
||||
_EXTERN_INLINE struct cmsghdr *
|
||||
__NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg))
|
||||
Index: git/libc/sysdeps/linux/i386/bits/mathinline.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/i386/bits/mathinline.h
|
||||
+++ git/libc/sysdeps/linux/i386/bits/mathinline.h
|
||||
@@ -26,7 +26,7 @@
|
||||
#ifdef __cplusplus
|
||||
# define __MATH_INLINE __inline
|
||||
#else
|
||||
-# define __MATH_INLINE extern __inline
|
||||
+# define __MATH_INLINE __extern_inline
|
||||
#endif
|
||||
|
||||
|
||||
Index: git/libc/sysdeps/linux/ia64/bits/mathinline.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/ia64/bits/mathinline.h
|
||||
+++ git/libc/sysdeps/linux/ia64/bits/mathinline.h
|
||||
@@ -24,7 +24,7 @@
|
||||
#ifdef __cplusplus
|
||||
# define __MATH_INLINE __inline
|
||||
#else
|
||||
-# define __MATH_INLINE extern __inline
|
||||
+# define __MATH_INLINE __extern_inline
|
||||
#endif
|
||||
|
||||
#if defined __USE_ISOC99 && defined __GNUC__ && __GNUC__ >= 2
|
||||
Index: git/libc/sysdeps/linux/m68k/bits/mathinline.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/m68k/bits/mathinline.h
|
||||
+++ git/libc/sysdeps/linux/m68k/bits/mathinline.h
|
||||
@@ -92,7 +92,7 @@
|
||||
# ifdef __cplusplus
|
||||
# define __m81_inline __inline
|
||||
# else
|
||||
-# define __m81_inline extern __inline
|
||||
+# define __m81_inline __extern_inline
|
||||
# endif
|
||||
# define __M81_MATH_INLINES 1
|
||||
#endif
|
||||
@@ -351,14 +351,14 @@ __inline_functions (long double,l)
|
||||
/* Note that there must be no whitespace before the argument passed for
|
||||
NAME, to make token pasting work correctly with -traditional. */
|
||||
# define __inline_forward_c(rettype, name, args1, args2) \
|
||||
-extern __inline rettype __attribute__((__const__)) \
|
||||
+__extern_inline rettype __attribute__((__const__)) \
|
||||
name args1 \
|
||||
{ \
|
||||
return __CONCAT(__,name) args2; \
|
||||
}
|
||||
|
||||
# define __inline_forward(rettype, name, args1, args2) \
|
||||
-extern __inline rettype name args1 \
|
||||
+__extern_inline rettype name args1 \
|
||||
{ \
|
||||
return __CONCAT(__,name) args2; \
|
||||
}
|
||||
Index: git/libc/sysdeps/linux/mips/bits/socket.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/mips/bits/socket.h
|
||||
+++ git/libc/sysdeps/linux/mips/bits/socket.h
|
||||
@@ -307,7 +307,7 @@ extern struct cmsghdr *__cmsg_nxthdr (st
|
||||
libc_hidden_proto(__cmsg_nxthdr)
|
||||
#ifdef __USE_EXTERN_INLINES
|
||||
# ifndef _EXTERN_INLINE
|
||||
-# define _EXTERN_INLINE extern __inline
|
||||
+# define _EXTERN_INLINE __extern_inline
|
||||
# endif
|
||||
_EXTERN_INLINE struct cmsghdr *
|
||||
__NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg))
|
||||
Index: git/libc/sysdeps/linux/mips/sys/tas.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/mips/sys/tas.h
|
||||
+++ git/libc/sysdeps/linux/mips/sys/tas.h
|
||||
@@ -30,7 +30,7 @@ extern int _test_and_set (int *p, int v)
|
||||
#ifdef __USE_EXTERN_INLINES
|
||||
|
||||
# ifndef _EXTERN_INLINE
|
||||
-# define _EXTERN_INLINE extern __inline
|
||||
+# define _EXTERN_INLINE __extern_inline
|
||||
# endif
|
||||
|
||||
_EXTERN_INLINE int
|
||||
Index: git/libc/sysdeps/linux/sparc/bits/mathinline.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/sparc/bits/mathinline.h
|
||||
+++ git/libc/sysdeps/linux/sparc/bits/mathinline.h
|
||||
@@ -131,7 +131,7 @@
|
||||
# ifdef __cplusplus
|
||||
# define __MATH_INLINE __inline
|
||||
# else
|
||||
-# define __MATH_INLINE extern __inline
|
||||
+# define __MATH_INLINE __extern_inline
|
||||
# endif /* __cplusplus */
|
||||
|
||||
/* The gcc, version 2.7 or below, has problems with all this inlining
|
||||
Index: git/libc/sysdeps/linux/sparc/bits/socket.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/sparc/bits/socket.h
|
||||
+++ git/libc/sysdeps/linux/sparc/bits/socket.h
|
||||
@@ -292,7 +292,7 @@ extern struct cmsghdr *__cmsg_nxthdr (st
|
||||
libc_hidden_proto(__cmsg_nxthdr)
|
||||
#ifdef __USE_EXTERN_INLINES
|
||||
# ifndef _EXTERN_INLINE
|
||||
-# define _EXTERN_INLINE extern __inline
|
||||
+# define _EXTERN_INLINE __extern_inline
|
||||
# endif
|
||||
_EXTERN_INLINE struct cmsghdr *
|
||||
__NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg))
|
||||
Index: git/libc/sysdeps/linux/x86_64/bits/mathinline.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/x86_64/bits/mathinline.h
|
||||
+++ git/libc/sysdeps/linux/x86_64/bits/mathinline.h
|
||||
@@ -25,7 +25,7 @@
|
||||
#ifdef __cplusplus
|
||||
# define __MATH_INLINE __inline
|
||||
#else
|
||||
-# define __MATH_INLINE extern __inline
|
||||
+# define __MATH_INLINE __extern_inline
|
||||
#endif
|
||||
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
Delivered-To: raj.khem@gmail.com
|
||||
Received: by 10.90.86.4 with SMTP id j4cs313299agb;
|
||||
Sat, 8 Jan 2011 16:45:16 -0800 (PST)
|
||||
Received: by 10.227.134.5 with SMTP id h5mr1312651wbt.75.1294533915992;
|
||||
Sat, 08 Jan 2011 16:45:15 -0800 (PST)
|
||||
Return-Path: <yann.morin.1998@anciens.enib.fr>
|
||||
Received: from smtp.smtpout.orange.fr (smtp01.smtpout.orange.fr [80.12.242.123])
|
||||
by mx.google.com with ESMTP id m42si33753731wej.65.2011.01.08.16.45.15;
|
||||
Sat, 08 Jan 2011 16:45:15 -0800 (PST)
|
||||
Received-SPF: neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) client-ip=80.12.242.123;
|
||||
Authentication-Results: mx.google.com; spf=neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) smtp.mail=yann.morin.1998@anciens.enib.fr
|
||||
Received: from roazhon.bzh.lan ([90.32.245.227])
|
||||
by mwinf5d24 with ME
|
||||
id tClC1f0024v5z3u03ClEDA; Sun, 09 Jan 2011 01:45:15 +0100
|
||||
From: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
To: uclibc@uclibc.org
|
||||
Cc: Khem Raj <raj.khem@gmail.com>,
|
||||
Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>,
|
||||
Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
Subject: [PATCH 1/7] ARM: reorder "Use BX" option
|
||||
Date: Sun, 9 Jan 2011 01:45:04 +0100
|
||||
Message-Id: <1294533910-19305-2-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
X-Mailer: git-send-email 1.7.1
|
||||
In-Reply-To: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
References: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
|
||||
"Use BX" is not available on all CPUs, so the option depends on
|
||||
a correct CPU to be chosen . It is weird that e BX" then appears
|
||||
_above_ the CPU selection, not below.
|
||||
|
||||
Move the "Use BX" after the CPU selection.
|
||||
|
||||
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
Cc: Khem Raj <raj.khem@gmail.com>
|
||||
Cc: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
||||
Cc: Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
---
|
||||
extra/Configs/Config.arm | 14 +++++++-------
|
||||
1 files changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/extra/Configs/Config.arm b/extra/Configs/Config.arm
|
||||
index b060ace..3b90e67 100644
|
||||
--- a/extra/Configs/Config.arm
|
||||
+++ b/extra/Configs/Config.arm
|
||||
@@ -30,13 +30,6 @@ config CONFIG_ARM_EABI
|
||||
|
||||
endchoice
|
||||
|
||||
-config USE_BX
|
||||
- bool "Use BX in function return"
|
||||
- default y
|
||||
- depends on !CONFIG_GENERIC_ARM && !CONFIG_ARM610 && !CONFIG_ARM710
|
||||
- help
|
||||
- Use BX instruction for THUMB aware architectures.
|
||||
-
|
||||
choice
|
||||
prompt "Target Processor Type"
|
||||
default CONFIG_GENERIC_ARM
|
||||
@@ -131,3 +124,10 @@ config CONFIG_ARM_IWMMXT
|
||||
select ARCH_HAS_MMU
|
||||
|
||||
endchoice
|
||||
+
|
||||
+config USE_BX
|
||||
+ bool "Use BX in function return"
|
||||
+ default y
|
||||
+ depends on !CONFIG_GENERIC_ARM && !CONFIG_ARM610 && !CONFIG_ARM710
|
||||
+ help
|
||||
+ Use BX instruction for THUMB aware architectures.
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -0,0 +1,172 @@
|
|||
Delivered-To: raj.khem@gmail.com
|
||||
Received: by 10.90.86.4 with SMTP id j4cs313301agb;
|
||||
Sat, 8 Jan 2011 16:45:17 -0800 (PST)
|
||||
Received: by 10.216.186.82 with SMTP id v60mr20017574wem.56.1294533916559;
|
||||
Sat, 08 Jan 2011 16:45:16 -0800 (PST)
|
||||
Return-Path: <yann.morin.1998@anciens.enib.fr>
|
||||
Received: from smtp.smtpout.orange.fr (smtp01.smtpout.orange.fr [80.12.242.123])
|
||||
by mx.google.com with ESMTP id o13si33755824wee.56.2011.01.08.16.45.16;
|
||||
Sat, 08 Jan 2011 16:45:16 -0800 (PST)
|
||||
Received-SPF: neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) client-ip=80.12.242.123;
|
||||
Authentication-Results: mx.google.com; spf=neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) smtp.mail=yann.morin.1998@anciens.enib.fr
|
||||
Received: from roazhon.bzh.lan ([90.32.245.227])
|
||||
by mwinf5d24 with ME
|
||||
id tClC1f0024v5z3u03ClFDL; Sun, 09 Jan 2011 01:45:16 +0100
|
||||
From: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
To: uclibc@uclibc.org
|
||||
Cc: Khem Raj <raj.khem@gmail.com>,
|
||||
Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>,
|
||||
Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
Subject: [PATCH 2/7] ARM: introduce blind options to select & force THUMB mode
|
||||
Date: Sun, 9 Jan 2011 01:45:05 +0100
|
||||
Message-Id: <1294533910-19305-3-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
X-Mailer: git-send-email 1.7.1
|
||||
In-Reply-To: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
References: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
|
||||
Add three new blind options to set use of Thumb mode:
|
||||
- COMPILE_IN_THUMB_MODE
|
||||
- if set, CFLAGS will contain -mthumb
|
||||
- if unset, the compiler's default is used
|
||||
- HAS_THUMB
|
||||
- CPUS with Thumb instruction set can select this
|
||||
- use of BX depends on this
|
||||
- FORCE_THUMB
|
||||
- CPUs that are Thumb-only must select this
|
||||
- this selects: HAS_THUMB, COMPILE_IN_THUMB_MODE and USE_BX
|
||||
|
||||
Also, remove leading space in Rules.mak.
|
||||
|
||||
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
Cc: Khem Raj <raj.khem@gmail.com>
|
||||
Cc: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
||||
Cc: Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
---
|
||||
Rules.mak | 7 ++++---
|
||||
extra/Configs/Config.arm | 31 ++++++++++++++++++++++++++++---
|
||||
2 files changed, 32 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/Rules.mak b/Rules.mak
|
||||
index eecdc64..2a16908 100644
|
||||
--- a/Rules.mak
|
||||
+++ b/Rules.mak
|
||||
@@ -348,9 +348,10 @@ ifeq ($(TARGET_ARCH),arm)
|
||||
CPU_CFLAGS-$(CONFIG_ARM_SA1100)+=-mtune=strongarm1100 -march=armv4
|
||||
CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=$(call check_gcc,-mtune=xscale,-mtune=strongarm110)
|
||||
CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=-march=armv5te -Wa,-mcpu=xscale
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_IWMMXT)+=-march=iwmmxt -Wa,-mcpu=iwmmxt -mabi=iwmmxt
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_CORTEX_M3)+=-mcpu=cortex-m3 -mthumb
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_CORTEX_M1)+=-mcpu=cortex-m1 -mthumb
|
||||
+ CPU_CFLAGS-$(CONFIG_ARM_IWMMXT)+=-march=iwmmxt -Wa,-mcpu=iwmmxt -mabi=iwmmxt
|
||||
+ CPU_CFLAGS-$(CONFIG_ARM_CORTEX_M3)+=-mcpu=cortex-m3
|
||||
+ CPU_CFLAGS-$(CONFIG_ARM_CORTEX_M1)+=-mcpu=cortex-m1
|
||||
+ CPU_CFLAGS-$(COMPILE_IN_THUMB_MODE)+=-mthumb
|
||||
endif
|
||||
|
||||
ifeq ($(TARGET_ARCH),mips)
|
||||
diff --git a/extra/Configs/Config.arm b/extra/Configs/Config.arm
|
||||
index 3b90e67..c9c40d4 100644
|
||||
--- a/extra/Configs/Config.arm
|
||||
+++ b/extra/Configs/Config.arm
|
||||
@@ -64,70 +64,95 @@ config CONFIG_ARM710
|
||||
config CONFIG_ARM7TDMI
|
||||
bool "Arm 7TDMI"
|
||||
select ARCH_HAS_NO_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM720T
|
||||
bool "Arm 720T"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM920T
|
||||
bool "Arm 920T"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM922T
|
||||
bool "Arm 922T"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM926T
|
||||
bool "Arm 926T"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM10T
|
||||
bool "Arm 10T"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM1136JF_S
|
||||
bool "Arm 1136JF-S"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM1176JZ_S
|
||||
bool "Arm 1176JZ-S"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM1176JZF_S
|
||||
bool "Arm 1176JZF-S"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM_CORTEX_M3
|
||||
bool "Arm Cortex-M3"
|
||||
select ARCH_HAS_NO_MMU
|
||||
- select USE_BX
|
||||
+ select FORCE_THUMB
|
||||
|
||||
config CONFIG_ARM_CORTEX_M1
|
||||
bool "Arm Cortex-M1"
|
||||
select ARCH_HAS_NO_MMU
|
||||
- select USE_BX
|
||||
+ select FORCE_THUMB
|
||||
|
||||
config CONFIG_ARM_SA110
|
||||
bool "Intel StrongArm SA-110"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM_SA1100
|
||||
bool "Intel StrongArm SA-1100"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM_XSCALE
|
||||
bool "Intel Xscale"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM_IWMMXT
|
||||
bool "Intel Xscale With WMMX PXA27x"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
endchoice
|
||||
|
||||
+config HAS_THUMB
|
||||
+ bool
|
||||
+
|
||||
+config FORCE_THUMB
|
||||
+ bool
|
||||
+ select HAS_THUMB
|
||||
+ select COMPILE_IN_THUMB_MODE
|
||||
+ select USE_BX
|
||||
+
|
||||
+config COMPILE_IN_THUMB_MODE
|
||||
+ bool
|
||||
+
|
||||
config USE_BX
|
||||
bool "Use BX in function return"
|
||||
default y
|
||||
- depends on !CONFIG_GENERIC_ARM && !CONFIG_ARM610 && !CONFIG_ARM710
|
||||
+ depends on HAS_THUMB
|
||||
help
|
||||
Use BX instruction for THUMB aware architectures.
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
# TARGET_arm is not set
|
||||
# TARGET_bfin is not set
|
||||
# TARGET_cris is not set
|
||||
# TARGET_e1 is not set
|
||||
# TARGET_frv is not set
|
||||
# TARGET_h8300 is not set
|
||||
# TARGET_hppa is not set
|
||||
# TARGET_i386 is not set
|
||||
# TARGET_i960 is not set
|
||||
# TARGET_m68k is not set
|
||||
# TARGET_microblaze is not set
|
||||
# TARGET_mips is not set
|
||||
# TARGET_nios is not set
|
||||
# TARGET_nios2 is not set
|
||||
# TARGET_powerpc is not set
|
||||
TARGET_sh=y
|
||||
# TARGET_sh64 is not set
|
||||
# TARGET_sparc is not set
|
||||
# TARGET_v850 is not set
|
||||
# TARGET_x86_64 is not set
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
#
|
||||
TARGET_ARCH="sh"
|
||||
ARCH_SUPPORTS_BIG_ENDIAN=y
|
||||
ARCH_SUPPORTS_LITTLE_ENDIAN=y
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
# CONFIG_SH2A is not set
|
||||
# CONFIG_SH2 is not set
|
||||
# CONFIG_SH3 is not set
|
||||
CONFIG_SH4=y
|
||||
ARCH_LITTLE_ENDIAN=y
|
||||
# ARCH_BIG_ENDIAN is not set
|
||||
ARCH_WANTS_LITTLE_ENDIAN=y
|
||||
# ARCH_WANTS_BIG_ENDIAN is not set
|
||||
# ARCH_HAS_NO_MMU is not set
|
||||
ARCH_HAS_MMU=y
|
||||
UCLIBC_HAS_FLOATS=y
|
||||
UCLIBC_HAS_FPU=y
|
||||
DO_C99_MATH=y
|
||||
# UCLIBC_HAS_FENV is not set
|
||||
KERNEL_HEADERS="<path/to/kernel/headers>"
|
||||
HAVE_DOT_CONFIG=y
|
|
@ -0,0 +1,71 @@
|
|||
Delivered-To: raj.khem@gmail.com
|
||||
Received: by 10.90.86.4 with SMTP id j4cs313305agb;
|
||||
Sat, 8 Jan 2011 16:45:19 -0800 (PST)
|
||||
Received: by 10.216.153.210 with SMTP id f60mr573848wek.114.1294533918335;
|
||||
Sat, 08 Jan 2011 16:45:18 -0800 (PST)
|
||||
Return-Path: <yann.morin.1998@anciens.enib.fr>
|
||||
Received: from smtp.smtpout.orange.fr (smtp01.smtpout.orange.fr [80.12.242.123])
|
||||
by mx.google.com with ESMTP id n4si33737071wej.152.2011.01.08.16.45.17;
|
||||
Sat, 08 Jan 2011 16:45:18 -0800 (PST)
|
||||
Received-SPF: neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) client-ip=80.12.242.123;
|
||||
Authentication-Results: mx.google.com; spf=neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) smtp.mail=yann.morin.1998@anciens.enib.fr
|
||||
Received: from roazhon.bzh.lan ([90.32.245.227])
|
||||
by mwinf5d24 with ME
|
||||
id tClC1f0024v5z3u03ClGDX; Sun, 09 Jan 2011 01:45:17 +0100
|
||||
From: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
To: uclibc@uclibc.org
|
||||
Cc: Khem Raj <raj.khem@gmail.com>,
|
||||
Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>,
|
||||
Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
Subject: [PATCH 4/7] ARM: transform the EABI/OABI choice into a boolean
|
||||
Date: Sun, 9 Jan 2011 01:45:07 +0100
|
||||
Message-Id: <1294533910-19305-5-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
X-Mailer: git-send-email 1.7.1
|
||||
In-Reply-To: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
References: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
|
||||
The CONFIG_ARM_OABI option is never used.
|
||||
|
||||
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
Cc: Khem Raj <raj.khem@gmail.com>
|
||||
Cc: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
||||
Cc: Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
---
|
||||
extra/Configs/Config.arm | 23 ++++++++---------------
|
||||
1 files changed, 8 insertions(+), 15 deletions(-)
|
||||
|
||||
Index: git/extra/Configs/Config.arm
|
||||
===================================================================
|
||||
--- git.orig/extra/Configs/Config.arm
|
||||
+++ git/extra/Configs/Config.arm
|
||||
@@ -12,23 +12,16 @@ config FORCE_OPTIONS_FOR_ARCH
|
||||
default y
|
||||
select ARCH_ANY_ENDIAN
|
||||
|
||||
-choice
|
||||
- prompt "Target ABI"
|
||||
- default CONFIG_ARM_EABI
|
||||
+config CONFIG_ARM_EABI
|
||||
+ bool "Build for EABI"
|
||||
help
|
||||
- If you choose "EABI" here, functions and constants required by the
|
||||
- ARM EABI will be built into the library. You should choose "EABI"
|
||||
+ If you say 'y' here, functions and constants required by the
|
||||
+ ARM EABI will be built into the library. You should say 'y'
|
||||
if your compiler uses the ARM EABI, in which case you will also
|
||||
- need a kernel supporting the EABI system call interface, or "OABI"
|
||||
- for a compiler using the old Linux ABI.
|
||||
-
|
||||
-config CONFIG_ARM_OABI
|
||||
- bool "OABI"
|
||||
-
|
||||
-config CONFIG_ARM_EABI
|
||||
- bool "EABI"
|
||||
+ need a kernel supporting the EABI system call interface.
|
||||
|
||||
-endchoice
|
||||
+ If you say 'n' here, then the library will be built for the
|
||||
+ old Linux ABI.
|
||||
|
||||
config COMPILE_IN_THUMB_MODE
|
||||
bool "Build using Thumb mode"
|
|
@ -0,0 +1,160 @@
|
|||
#
|
||||
# General Library Settings
|
||||
#
|
||||
# HAVE_NO_PIC is not set
|
||||
# DOPIC is not set
|
||||
# HAVE_NO_SHARED is not set
|
||||
# ARCH_HAS_NO_LDSO is not set
|
||||
HAVE_SHARED=y
|
||||
# FORCE_SHAREABLE_TEXT_SEGMENTS is not set
|
||||
LDSO_LDD_SUPPORT=y
|
||||
LDSO_CACHE_SUPPORT=y
|
||||
# LDSO_PRELOAD_FILE_SUPPORT is not set
|
||||
LDSO_BASE_FILENAME="ld.so"
|
||||
# UCLIBC_STATIC_LDCONFIG is not set
|
||||
LDSO_RUNPATH=y
|
||||
UCLIBC_CTOR_DTOR=y
|
||||
LDSO_GNU_HASH_SUPPORT=y
|
||||
# HAS_NO_THREADS is not set
|
||||
UCLIBC_HAS_THREADS=y
|
||||
UCLIBC_HAS_THREADS_NATIVE=y
|
||||
PTHREADS_DEBUG_SUPPORT=y
|
||||
# LINUXTHREADS_OLD is not set
|
||||
UCLIBC_HAS_LFS=y
|
||||
# MALLOC is not set
|
||||
# MALLOC_SIMPLE is not set
|
||||
MALLOC_STANDARD=y
|
||||
MALLOC_GLIBC_COMPAT=y
|
||||
UCLIBC_DYNAMIC_ATEXIT=y
|
||||
COMPAT_ATEXIT=y
|
||||
UCLIBC_SUSV3_LEGACY=y
|
||||
UCLIBC_SUSV3_LEGACY_MACROS=y
|
||||
UCLIBC_SUSV4_LEGACY=y
|
||||
UCLIBC_HAS_SHADOW=y
|
||||
UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y
|
||||
UCLIBC_HAS___PROGNAME=y
|
||||
UNIX98PTY_ONLY=y
|
||||
ASSUME_DEVPTS=y
|
||||
UCLIBC_HAS_LIBUTIL=y
|
||||
UCLIBC_HAS_TM_EXTENSIONS=y
|
||||
UCLIBC_HAS_TZ_CACHING=y
|
||||
UCLIBC_HAS_TZ_FILE=y
|
||||
UCLIBC_HAS_TZ_FILE_READ_MANY=y
|
||||
UCLIBC_TZ_FILE_PATH="/etc/TZ"
|
||||
|
||||
#
|
||||
# Advanced Library Settings
|
||||
#
|
||||
UCLIBC_PWD_BUFFER_SIZE=256
|
||||
UCLIBC_GRP_BUFFER_SIZE=256
|
||||
|
||||
#
|
||||
# Networking Support
|
||||
#
|
||||
UCLIBC_HAS_IPV6=y
|
||||
UCLIBC_HAS_RPC=y
|
||||
UCLIBC_HAS_FULL_RPC=y
|
||||
# UCLIBC_HAS_REENTRANT_RPC is not set
|
||||
UCLIBC_USE_NETLINK=y
|
||||
UCLIBC_SUPPORT_AI_ADDRCONFIG=y
|
||||
|
||||
UCLIBC_HAS_BSD_RES_CLOSE=y
|
||||
UCLIBC_HAS_LIBRESOLV_STUB=y
|
||||
UCLIBC_HAS_LIBNSL_STUB=y
|
||||
|
||||
#
|
||||
# String and Stdio Support
|
||||
#
|
||||
UCLIBC_HAS_STRING_GENERIC_OPT=y
|
||||
UCLIBC_HAS_STRING_ARCH_OPT=y
|
||||
UCLIBC_HAS_CTYPE_TABLES=y
|
||||
UCLIBC_HAS_CTYPE_SIGNED=y
|
||||
# UCLIBC_HAS_CTYPE_UNSAFE is not set
|
||||
UCLIBC_HAS_CTYPE_CHECKED=y
|
||||
# UCLIBC_HAS_CTYPE_ENFORCED is not set
|
||||
UCLIBC_HAS_WCHAR=y
|
||||
# UCLIBC_HAS_LOCALE is not set
|
||||
UCLIBC_HAS_HEXADECIMAL_FLOATS=y
|
||||
UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y
|
||||
UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9
|
||||
UCLIBC_HAS_SCANF_GLIBC_A_FLAG=y
|
||||
# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set
|
||||
UCLIBC_HAS_STDIO_BUFSIZ_256=y
|
||||
# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set
|
||||
# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set
|
||||
# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set
|
||||
# UCLIBC_HAS_STDIO_BUFSIZ_4096 is not set
|
||||
# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set
|
||||
UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y
|
||||
# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set
|
||||
# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set
|
||||
# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set
|
||||
UCLIBC_HAS_STDIO_GETC_MACRO=y
|
||||
UCLIBC_HAS_STDIO_PUTC_MACRO=y
|
||||
UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
|
||||
# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set
|
||||
UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y
|
||||
UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y
|
||||
UCLIBC_HAS_PRINTF_M_SPEC=y
|
||||
UCLIBC_HAS_ERRNO_MESSAGES=y
|
||||
# UCLIBC_HAS_SYS_ERRLIST is not set
|
||||
UCLIBC_HAS_SIGNUM_MESSAGES=y
|
||||
# UCLIBC_HAS_SYS_SIGLIST is not set
|
||||
UCLIBC_HAS_GNU_GETOPT=y
|
||||
UCLIBC_HAS_GNU_GETSUBOPT=y
|
||||
|
||||
#
|
||||
# Big and Tall
|
||||
#
|
||||
UCLIBC_HAS_REGEX=y
|
||||
# UCLIBC_HAS_REGEX_OLD is not set
|
||||
UCLIBC_HAS_FNMATCH=y
|
||||
# UCLIBC_HAS_FNMATCH_OLD is not set
|
||||
UCLIBC_HAS_WORDEXP=y
|
||||
UCLIBC_HAS_NFTW=y
|
||||
UCLIBC_HAS_FTW=y
|
||||
UCLIBC_HAS_FTS=y
|
||||
UCLIBC_HAS_GLOB=y
|
||||
UCLIBC_HAS_GNU_GLOB=y
|
||||
|
||||
#
|
||||
# Library Installation Options
|
||||
#
|
||||
SHARED_LIB_LOADER_PREFIX="/lib"
|
||||
RUNTIME_PREFIX="/"
|
||||
DEVEL_PREFIX="//usr"
|
||||
|
||||
#
|
||||
# Security options
|
||||
#
|
||||
# UCLIBC_BUILD_PIE is not set
|
||||
# UCLIBC_HAS_ARC4RANDOM is not set
|
||||
# HAVE_NO_SSP is not set
|
||||
# UCLIBC_HAS_SSP is not set
|
||||
UCLIBC_BUILD_RELRO=y
|
||||
UCLIBC_BUILD_NOW=y
|
||||
UCLIBC_BUILD_NOEXECSTACK=y
|
||||
|
||||
#
|
||||
# uClibc development/debugging options
|
||||
#
|
||||
CROSS_COMPILER_PREFIX=""
|
||||
UCLIBC_EXTRA_CFLAGS=""
|
||||
# DODEBUG is not set
|
||||
# DODEBUG_PT is not set
|
||||
# DOSTRIP is not set
|
||||
# DOASSERTS is not set
|
||||
# SUPPORT_LD_DEBUG is not set
|
||||
# SUPPORT_LD_DEBUG_EARLY is not set
|
||||
# UCLIBC_MALLOC_DEBUGGING is not set
|
||||
UCLIBC_HAS_BACKTRACE=y
|
||||
WARNINGS="-Wall"
|
||||
# EXTRA_WARNINGS is not set
|
||||
# DOMULTI is not set
|
||||
# UCLIBC_MJN3_ONLY is not set
|
||||
|
||||
# math stuff for perl
|
||||
DO_C99_MATH=y
|
||||
UCLIBC_HAS_LONG_DOUBLE_MATH=y
|
||||
UCLIBC_HAS_FENV=y
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
Index: uclibc-0.9.29/libc/sysdeps/linux/arm/bits/uClibc_arch_features.h
|
||||
===================================================================
|
||||
--- uclibc-0.9.29.orig/libc/sysdeps/linux/arm/bits/uClibc_arch_features.h
|
||||
+++ uclibc-0.9.29/libc/sysdeps/linux/arm/bits/uClibc_arch_features.h
|
||||
@@ -38,4 +38,8 @@
|
||||
/* define if target supports IEEE signed zero floats */
|
||||
#define __UCLIBC_HAVE_SIGNED_ZERO__
|
||||
|
||||
+#ifdef __ARM_EABI__
|
||||
+# define __UCLIBC_TRUNCATE64_HAS_4_ARGS__
|
||||
+#endif
|
||||
+
|
||||
#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
|
|
@ -0,0 +1,30 @@
|
|||
Index: uClibc/test/math/libm-test.inc
|
||||
===================================================================
|
||||
--- uClibc/test/math/libm-test.inc (revision 23784)
|
||||
+++ uClibc/test/math/libm-test.inc (working copy)
|
||||
@@ -3414,7 +3414,6 @@
|
||||
}
|
||||
|
||||
|
||||
-#if 0
|
||||
static void
|
||||
log2_test (void)
|
||||
{
|
||||
@@ -3444,7 +3443,6 @@
|
||||
|
||||
END (log2);
|
||||
}
|
||||
-#endif
|
||||
|
||||
|
||||
static void
|
||||
@@ -4967,9 +4965,7 @@
|
||||
log_test ();
|
||||
log10_test ();
|
||||
log1p_test ();
|
||||
-#if 0
|
||||
log2_test ();
|
||||
-#endif
|
||||
logb_test ();
|
||||
modf_test ();
|
||||
ilogb_test ();
|
|
@ -0,0 +1,42 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
#
|
||||
# TARGET_alpha is not set
|
||||
# TARGET_arm is not set
|
||||
# TARGET_bfin is not set
|
||||
# TARGET_cris is not set
|
||||
# TARGET_e1 is not set
|
||||
# TARGET_frv is not set
|
||||
# TARGET_h8300 is not set
|
||||
# TARGET_hppa is not set
|
||||
# TARGET_i386 is not set
|
||||
# TARGET_i960 is not set
|
||||
# TARGET_m68k is not set
|
||||
# TARGET_microblaze is not set
|
||||
# TARGET_mips is not set
|
||||
# TARGET_nios is not set
|
||||
# TARGET_nios2 is not set
|
||||
# TARGET_powerpc is not set
|
||||
# TARGET_sh is not set
|
||||
# TARGET_sh64 is not set
|
||||
# TARGET_sparc is not set
|
||||
# TARGET_v850 is not set
|
||||
TARGET_x86_64=y
|
||||
|
||||
#
|
||||
# Target Architecture Features and Options
|
||||
#
|
||||
TARGET_ARCH="x86_64"
|
||||
# ARCH_SUPPORTS_BIG_ENDIAN is not set
|
||||
ARCH_SUPPORTS_LITTLE_ENDIAN=y
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
ARCH_LITTLE_ENDIAN=y
|
||||
# ARCH_BIG_ENDIAN is not set
|
||||
# ARCH_HAS_NO_MMU is not set
|
||||
ARCH_HAS_MMU=y
|
||||
UCLIBC_HAS_FLOATS=y
|
||||
UCLIBC_HAS_FPU=y
|
||||
DO_C99_MATH=y
|
||||
# UCLIBC_HAS_FENV is not set
|
||||
KERNEL_HEADERS="<path/to/kernel/headers>"
|
||||
HAVE_DOT_CONFIG=y
|
|
@ -1,31 +0,0 @@
|
|||
SECTION = "base"
|
||||
require uclibc_${PV}.bb
|
||||
|
||||
DEPENDS = "linux-libc-headers ncurses-native virtual/${TARGET_PREFIX}gcc-initial"
|
||||
PROVIDES = "virtual/${TARGET_PREFIX}libc-initial"
|
||||
PACKAGES = ""
|
||||
|
||||
do_install() {
|
||||
# Install initial headers into the cross dir
|
||||
make V=1 CC="${CC}" PREFIX=${D} DEVEL_PREFIX=${prefix}/ RUNTIME_PREFIX=/ \
|
||||
install_headers
|
||||
#ln -sf include ${STAGING_DIR_NATIVE}${prefix_native}/${TARGET_SYS}/sys-include
|
||||
|
||||
# This conflicts with the c++ version of this header
|
||||
rm -f ${D}${includedir}/bits/atomicity.h
|
||||
install -d ${D}${libdir}/
|
||||
install -m 644 lib/crt[1in].o ${D}${libdir}/
|
||||
install -d ${D}${libdir}/
|
||||
install -m 644 lib/libc.so ${D}${libdir}/
|
||||
}
|
||||
|
||||
do_compile () {
|
||||
make V=1 CC="${CC}" PREFIX=${D} DEVEL_PREFIX=${prefix}/ RUNTIME_PREFIX=/ \
|
||||
lib/crt1.o lib/crti.o lib/crtn.o
|
||||
${CC} -nostdlib -nostartfiles -shared -x c /dev/null \
|
||||
-o lib/libc.so
|
||||
}
|
||||
|
||||
do_siteconfig () {
|
||||
:
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
SECTION = "base"
|
||||
require uclibc_git.bb
|
||||
|
||||
DEPENDS = "linux-libc-headers ncurses-native virtual/${TARGET_PREFIX}gcc-initial"
|
||||
PROVIDES = "virtual/${TARGET_PREFIX}libc-initial"
|
||||
|
||||
PACKAGES = ""
|
||||
PACKAGES_DYNAMIC = ""
|
||||
|
||||
STAGINGCC = "gcc-cross-initial"
|
||||
STAGINGCC_virtclass-nativesdk = "gcc-crosssdk-initial"
|
||||
|
||||
do_install() {
|
||||
# Install initial headers into the cross dir
|
||||
make PREFIX=${D} DEVEL_PREFIX=${prefix}/ RUNTIME_PREFIX=/ \
|
||||
install_headers install_startfiles
|
||||
${CC} -nostdlib -nostartfiles -shared -x c /dev/null \
|
||||
-o lib/libc.so
|
||||
${CC} -nostdlib -nostartfiles -shared -x c /dev/null \
|
||||
-o lib/libm.so
|
||||
install -d ${D}${libdir}
|
||||
install -m 755 lib/lib[cm].so ${D}${libdir}
|
||||
# add links to linux-libc-headers: gcc-{cross,crossdk}-intermediate need this.
|
||||
for t in linux asm asm-generic; do
|
||||
if [ -d ${D}${includedir}/$t ]; then
|
||||
rm -rf ${D}${includedir}/$t
|
||||
fi
|
||||
ln -sf ${STAGING_DIR_TARGET}${includedir}/$t ${D}${includedir}/
|
||||
done
|
||||
}
|
||||
do_compile() {
|
||||
:
|
||||
}
|
||||
|
||||
do_siteconfig () {
|
||||
:
|
||||
}
|
||||
|
||||
do_populate_sysroot[sstate-outputdirs] = "${STAGING_DIR_TCBOOTSTRAP}"
|
|
@ -1,6 +1,6 @@
|
|||
SUMMARY = "C library for embedded systems"
|
||||
DESCRIPTION = "The name uClibc is an abbreviation for 'the \
|
||||
microcontroller C library'. For simplicity, uClibc is pronounced \
|
||||
DESCRIPTION = "The name uClibc is an abbreviation for 'the \
|
||||
microcontroller C library'. For simplicity, uClibc is pronounced \
|
||||
'yew-see-lib-see'. The goal of uClibc is to provide as much \
|
||||
functionality as possible in a small amount of space, and it is intended \
|
||||
primarily for embedded use. It is also highly configurable in supported \
|
||||
|
@ -11,6 +11,30 @@ embedded Linux. It is NOT compatible with binaries linked against glibc."
|
|||
LICENSE = "LGPL"
|
||||
SECTION = "libs"
|
||||
PRIORITY = "required"
|
||||
LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=a6f89e2100d9b6cdffcea4f398e37343 \
|
||||
file://COPYING.LIB.boilerplate;md5=aaddeadcddeb918297e0e4afc52ce46f \
|
||||
file://${S}/test/regex/testregex.c;startline=1;endline=31;md5=234efb227d0a40677f895e4a1e26e960"
|
||||
INC_PR = "r2"
|
||||
|
||||
require uclibc-config.inc
|
||||
STAGINGCC = "gcc-cross-intermediate"
|
||||
STAGINGCC_virtclass-nativesdk = "gcc-crosssdk-intermediate"
|
||||
PATH_prepend = "${STAGING_BINDIR_TOOLCHAIN}.${STAGINGCC}:"
|
||||
|
||||
TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_TCBOOTSTRAP}"
|
||||
|
||||
# siteconfig.bbclass runs configure which needs a working compiler
|
||||
# For the compiler to work we need a working libc yet libc isn't
|
||||
# in the sysroots directory at this point. This means the libc.so
|
||||
# linker script won't work as the --sysroot setting isn't correct.
|
||||
# Here we create a hacked up libc linker script and pass in the right
|
||||
# flags to let configure work. Ugly.
|
||||
EXTRASITECONFIG = "CFLAGS='${CFLAGS} -Wl,-L${WORKDIR}/site_config_libc -L${WORKDIR}/site_config_libc -L${SYSROOT_DESTDIR}${libdir} -L${SYSROOT_DESTDIR}${base_libdir} -Wl,-L${SYSROOT_DESTDIR}${libdir} -Wl,-L${SYSROOT_DESTDIR}${base_libdir}'"
|
||||
siteconfig_do_siteconfig_gencache_prepend = " \
|
||||
mkdir -p ${WORKDIR}/site_config_libc; \
|
||||
cp ${SYSROOT_DESTDIR}${libdir}/libc.so ${WORKDIR}/site_config_libc; \
|
||||
sed -i -e 's# ${base_libdir}# ${SYSROOT_DESTDIR}${base_libdir}#g' -e 's# ${libdir}# ${SYSROOT_DESTDIR}${libdir}#g' ${WORKDIR}/site_config_libc/libc.so; \
|
||||
"
|
||||
|
||||
#
|
||||
# For now, we will skip building of a gcc package if it is a uclibc one
|
||||
|
@ -27,165 +51,165 @@ python __anonymous () {
|
|||
raise bb.parse.SkipPackage("incompatible with target %s" %
|
||||
bb.data.getVar('TARGET_OS', d, 1))
|
||||
}
|
||||
|
||||
PROVIDES += "virtual/libc virtual/${TARGET_PREFIX}libc-for-gcc"
|
||||
PROVIDES += "${@['virtual/libiconv', ''][bb.data.getVar('USE_NLS', d, 1) != 'yes']}"
|
||||
DEPENDS = "virtual/${TARGET_PREFIX}binutils \
|
||||
virtual/${TARGET_PREFIX}gcc-intermediate linux-libc-headers ncurses-native pax-utils-native"
|
||||
virtual/${TARGET_PREFIX}gcc-intermediate \
|
||||
linux-libc-headers ncurses-native"
|
||||
RDEPENDS_${PN}-dev = "linux-libc-headers-dev"
|
||||
|
||||
# Blackfin needs a wrapper around ld
|
||||
#DEPENDS_append_bfin = " elf2flt "
|
||||
|
||||
INHIBIT_DEFAULT_DEPS = "1"
|
||||
PARALLEL_MAKE = ""
|
||||
|
||||
PACKAGES =+ "ldd uclibc-utils-dbg uclibc-utils uclibc-gconv uclibc-thread-db"
|
||||
PACKAGES =+ "ldd uclibc-utils-dbg uclibc-utils uclibc-gconv uclibc-thread-db uclibc-argp uclibc-backtrace"
|
||||
|
||||
LEAD_SONAME = "libc.so"
|
||||
|
||||
# The last line (gdb and lib1) is for uclinux-uclibc builds
|
||||
# The last line (gdb and lib1) is for uclinux-uclibc builds
|
||||
uclibc_baselibs = "${base_libdir}/libcrypt*.so.* ${base_libdir}/libcrypt-*.so \
|
||||
${base_libdir}/libintl*.so.* ${base_libdir}/libintl-*.so \
|
||||
${base_libdir}/libnsl*.so.* ${base_libdir}/libnsl-*.so \
|
||||
${base_libdir}/libresolv*.so.* ${base_libdir}/libresolv-*.so \
|
||||
${base_libdir}/ld*.so.* ${base_libdir}/ld-*.so \
|
||||
${base_libdir}/libc*.so.* ${base_libdir}/libuClibc-*.so \
|
||||
${base_libdir}/libintl*.so.* ${base_libdir}/libintl-*.so \
|
||||
${base_libdir}/libnsl*.so.* ${base_libdir}/libnsl-*.so \
|
||||
${base_libdir}/libresolv*.so.* ${base_libdir}/libresolv-*.so \
|
||||
${base_libdir}/ld*.so.* ${base_libdir}/ld*.so \
|
||||
${base_libdir}/libc*.so.* ${base_libdir}/libuClibc-*.so \
|
||||
${base_libdir}/libdl*.so.* ${base_libdir}/libdl-*.so \
|
||||
${base_libdir}/libm*.so.* ${base_libdir}/libm-*.so \
|
||||
${base_libdir}/libm*.so.* ${base_libdir}/libm-*.so \
|
||||
${base_libdir}/libutil*.so.* ${base_libdir}/libutil-*.so \
|
||||
${base_libdir}/libpthread*.so.* ${base_libdir}/libpthread-*.so \
|
||||
${base_libdir}/libpthread*.so.* ${base_libdir}/libpthread-*.so \
|
||||
${base_libdir}/librt*.so.* ${base_libdir}/librt-*.so \
|
||||
${libdir}/libc.gdb ${libdir}/libc ${base_libdir}/lib1.so \
|
||||
"
|
||||
"
|
||||
FILES_${PN} = "${sysconfdir} ${uclibc_baselibs} /sbin/ldconfig \
|
||||
${libexecdir} ${datadir}/zoneinfo ${libdir}/locale"
|
||||
${libexecdir} ${datadir}/zoneinfo ${libdir}/locale"
|
||||
FILES_ldd = "${bindir}/ldd"
|
||||
FILES_uclibc-dev += "${libdir}/*.o"
|
||||
FILES_uclibc-dev_append = "\
|
||||
${libdir}/lib*.so \
|
||||
${libdir}/*_nonshared.a \
|
||||
${libdir}/[S]*crt[1in].o \
|
||||
${libdir}/crtreloc*.o \
|
||||
${libdir}/lib*.a \
|
||||
${includedir}/*.h ${includedir}/*/*.h \
|
||||
"
|
||||
FILES_uclibc-utils = "${bindir} ${sbindir}"
|
||||
FILES_uclibc-utils-dbg += "${bindir}/.debug ${sbindir}/.debug"
|
||||
FILES_uclibc-gconv = "${libdir}/gconv"
|
||||
FILES_uclibc-thread-db = "/lib/libthread_db*"
|
||||
RPROVIDES_uclibc-dev += "libc-dev"
|
||||
FILES_uclibc-thread-db = "${base_libdir}/libthread_db*"
|
||||
FILES_uclibc-argp = "${base_libdir}/libuargp-*.so ${base_libdir}/libuargp*.so.*"
|
||||
FILES_uclibc-backtrace = "${base_libdir}/libubacktrace-*.so ${base_libdir}/libubacktrace*.so.*"
|
||||
|
||||
#
|
||||
# This locale file gets copied into uClibc-${PV}/extra/locale/ prior to
|
||||
# build, it does not need to be unpacked, but we can't inhibit the unpacking
|
||||
# in the current build system.
|
||||
#
|
||||
UCLIBC_LOCALE_FILE = "uClibc-locale-030818.tgz"
|
||||
UCLIBC_LOCALE_FILE_arm = "uClibc-locale-030818.arm.tgz"
|
||||
UCLIBC_LOCALE_URI = "http://www.uclibc.org/downloads/${UCLIBC_LOCALE_FILE}"
|
||||
UCLIBC_LOCALE_URI_arm = "http://wiki.openembedded.net/dl/uclibc-locale/${UCLIBC_LOCALE_FILE}"
|
||||
RPROVIDES_uclibc-dev += "libc-dev virtual-libc-dev"
|
||||
# uclibc does not really have libsegfault but then using the one from glibc is also not
|
||||
# going to work. So we pretend that we have it to make bitbake not pull other recipes
|
||||
# to satisfy this dependency for the images/tasks
|
||||
RPROVIDES_${PN} += "libsegfault"
|
||||
|
||||
SRC_URI = "${@['${UCLIBC_LOCALE_URI}', ''][bb.data.getVar('USE_NLS', d, 1) != 'yes']} \
|
||||
file://uClibc.config \
|
||||
http://www.uclibc.org/downloads/uClibc-${PV}.tar.bz2 \
|
||||
"
|
||||
SRC_URI = "\
|
||||
http://www.uclibc.org/downloads/uClibc-${PV}.tar.bz2;name=uClibc-${PV} \
|
||||
"
|
||||
|
||||
# do_stage barfs on a CC with whitespace, therefore put the 'HOST_CC_ARCH' in
|
||||
# the CFLAGS (when building the utils).
|
||||
OEMAKE_NO_CC = "'STRIPTOOL=true' 'LD=${LD}'"
|
||||
EXTRA_OEMAKE = "${OEMAKE_NO_CC} \
|
||||
'HOSTCC=${BUILD_CC}' \
|
||||
'HOST_CFLAGS=${BUILD_CFLAGS}' \
|
||||
'CC=${CC}' \
|
||||
ARCH=${UCLIBC_ARCH}"
|
||||
|
||||
# do_stage barfs on a CC with whitepspace, therefore put the 'HOST_CC_ARCH' in
|
||||
# the CFLAGS (for when building the utils).
|
||||
OEMAKE_NO_CC = "'STRIPTOOL=true' 'LD=${LD}' \
|
||||
'LOCALE_DATA_FILENAME=${UCLIBC_LOCALE_FILE}'"
|
||||
EXTRA_OEMAKE = "${OEMAKE_NO_CC} 'CC=${CC}' \
|
||||
'HOSTCFLAGS=-I${STAGING_INCDIR_NATIVE}' \
|
||||
ARCH=`grep TARGET_ARCH ${S}/.config|sed -e 's/TARGET_ARCH=//g'`"
|
||||
EXTRA_OEMAKE_task_do_package = "${OEMAKE_NO_CC}"
|
||||
|
||||
KERNEL_SOURCE = "${STAGING_INCDIR}"
|
||||
KERNEL_HEADERS = "${STAGING_INCDIR}"
|
||||
# enable verbose output:
|
||||
export V="2"
|
||||
|
||||
# Lets munge this via siteinfo.bbclass as well:
|
||||
# ARCH_BIG_ENDIAN=y
|
||||
# ARCH_WANTS_BIG_ENDIAN=y
|
||||
# ARCH_WANTS_LITTLE_ENDIAN is not set
|
||||
# -O<n> -fno-omit-frame-pointer ends up with GCC ICE on thumb as reported
|
||||
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44860
|
||||
#
|
||||
CFLAGS_arm := "${@oe_filter_out('-fno-omit-frame-pointer', '${CFLAGS}', d)}"
|
||||
UCLIBC_EXTRA_CFLAGS := "${@oe_filter_out('(-I\S+|-i\S+)', '${CFLAGS}', d)}"
|
||||
UCLIBC_EXTRA_LDFLAGS := "${@oe_filter_out('(-L\S+|-l\S+)', '${LDFLAGS}', d)}"
|
||||
do_compile_prepend () {
|
||||
unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
|
||||
}
|
||||
|
||||
# How to enable verbose logs:
|
||||
#export VERBOSE="1"
|
||||
|
||||
configmangle = 's,^KERNEL_SOURCE=.*,KERNEL_SOURCE="${KERNEL_SOURCE}",g; \
|
||||
s,^KERNEL_HEADERS=.*,KERNEL_HEADERS="${KERNEL_HEADERS}",g; \
|
||||
s,^RUNTIME_PREFIX=.*,RUNTIME_PREFIX="/",g; \
|
||||
s,^DEVEL_PREFIX=.*,DEVEL_PREFIX="/${prefix}",g; \
|
||||
s,^SHARED_LIB_LOADER_PATH=.*,SHARED_LIB_LOADER_PATH="/lib",; \
|
||||
s,^SHARED_LIB_LOADER_PREFIX=.*,SHARED_LIB_LOADER_PREFIX="/lib",; \
|
||||
s,.*UCLIBC_HAS_WCHAR.*,UCLIBC_HAS_WCHAR=y,g; \
|
||||
${@["","s,.*UCLIBC_HAS_LOCALE.*,UCLIBC_HAS_LOCALE=y,;"][bb.data.getVar("USE_NLS", d, 1) == "yes"]} \
|
||||
${@["","s,.*LDSO_GNU_HASH_SUPPORT.*,# LDSO_GNU_HASH_SUPPORT is not set,;"][bb.data.getVar("TARGET_ARCH", d, 1) in ['mips', 'mipsel', 'avr32']]} \
|
||||
configmangle = '/^KERNEL_HEADERS/d; \
|
||||
/^RUNTIME_PREFIX/d; \
|
||||
/^DEVEL_PREFIX/d; \
|
||||
/^SHARED_LIB_LOADER_PREFIX/d; \
|
||||
/^UCLIBC_EXTRA_CFLAGS/d; \
|
||||
s,.*UCLIBC_HAS_WCHAR.*,UCLIBC_HAS_WCHAR=y,g; \
|
||||
${@["","s,.*UCLIBC_HAS_LOCALE.*,UCLIBC_HAS_LOCALE=y,;"][bb.data.getVar("USE_NLS", d, 1) == "yes"]} \
|
||||
${@["","s,.*LDSO_GNU_HASH_SUPPORT.*,# LDSO_GNU_HASH_SUPPORT is not set,;"][bb.data.getVar("TARGET_ARCH", d, 1) in ['mips', 'mipsel', 'mips64', 'mips64el', 'avr32']]} \
|
||||
/^CROSS/d; \
|
||||
/^TARGET_ARCH=/d; \
|
||||
/^TARGET_/s,^\([^=]*\).*,# \1 is not set,g; \
|
||||
s,^DOSTRIP.*,# DOSTRIP is not set,g; \
|
||||
/_[EO]*ABI/d; \
|
||||
/HAS_FPU/d; \
|
||||
'
|
||||
|
||||
CFLAGS := "${@oe_filter_out('-I\S+', '${CFLAGS}', d)}"
|
||||
|
||||
OE_FEATURES := "${@features_to_uclibc_conf(d)}"
|
||||
OE_DEL := "${@features_to_uclibc_del(d)}"
|
||||
python () {
|
||||
if bb.data.getVar('TARGET_FPU', d, 1) in [ 'soft' ]:
|
||||
bb.data.setVar('configmangle_append', ' s,^HAS_FPU=y,# HAS_FPU is not set,;', d)
|
||||
if "${OE_DEL}":
|
||||
bb.data.setVar('configmangle_append', "${OE_DEL}" + "\n", d)
|
||||
if "${OE_FEATURES}":
|
||||
bb.data.setVar('configmangle_append',
|
||||
"/^### DISTRO FEATURES$/a\\\n%s\n\n" %
|
||||
("\\n".join((bb.data.expand("${OE_FEATURES}", d).split("\n")))),
|
||||
d)
|
||||
bb.data.setVar('configmangle_append',
|
||||
"/^### CROSS$/a\\\n%s\n" %
|
||||
("\\n".join(["CROSS_COMPILER_PREFIX=\"${TARGET_PREFIX}\"",
|
||||
"UCLIBC_EXTRA_CFLAGS=\"${UCLIBC_EXTRA_CFLAGS}\"",
|
||||
"KERNEL_HEADERS=\"${STAGING_INCDIR}\"",
|
||||
"RUNTIME_PREFIX=\"/\"",
|
||||
"DEVEL_PREFIX=\"/${prefix}\"",
|
||||
"SHARED_LIB_LOADER_PREFIX=\"/lib\"",
|
||||
])
|
||||
),
|
||||
d)
|
||||
bb.data.setVar('configmangle_append',
|
||||
"/^### TGT$/a\\\nTARGET_ARCH=\"%s\"\\nTARGET_%s=y\n" %
|
||||
("${UCLIBC_ARCH}", "${UCLIBC_ARCH}"),
|
||||
d)
|
||||
bb.data.setVar('configmangle_append',
|
||||
"/^### FPU$/a\\\n%s\n\n" % (["UCLIBC_HAS_FPU=y","# UCLIBC_HAS_FPU is not set"][bb.data.getVar('TARGET_FPU', d, 1) in [ 'soft' ]]), d)
|
||||
if "${UCLIBC_ENDIAN}":
|
||||
bb.data.setVar('configmangle_append',
|
||||
"/^### ABI$/a\\\nARCH_%s_ENDIAN=y\n\n" % ("${UCLIBC_ENDIAN}"),
|
||||
d)
|
||||
if "${UCLIBC_ABI}":
|
||||
bb.data.setVar('configmangle_append',
|
||||
"/^### ABI$/a\\\nCONFIG_%s=y\n\n" % ("${UCLIBC_ABI}"),
|
||||
d)
|
||||
}
|
||||
|
||||
uclibcbuild_do_patch() {
|
||||
ln -sf ${STAGING_INCDIR}/linux ${S}/include/linux
|
||||
ln -sf ${STAGING_INCDIR}/asm ${S}/include/asm
|
||||
|
||||
${@['cp %s/%s extra/locale' % (bb.data.getVar('DL_DIR', d, 1) or '', bb.data.getVar('UCLIBC_LOCALE_FILE', d, 1) or ''), ''][bb.data.getVar('USE_NLS', d, 1) != 'yes']}
|
||||
}
|
||||
|
||||
python do_patch () {
|
||||
bb.build.exec_func('base_do_patch', d)
|
||||
bb.build.exec_func('uclibcbuild_do_patch', d)
|
||||
do_patch_append() {
|
||||
os.system("ln -sf ${STAGING_INCDIR}/linux ${S}/include/linux")
|
||||
os.system("ln -sf ${STAGING_INCDIR}/asm ${S}/include/asm")
|
||||
}
|
||||
|
||||
do_configure() {
|
||||
rm -f ${S}/.config
|
||||
rm -f ${S}/.config
|
||||
|
||||
# For uClibc 0.9.29, OpenEmbedded splits the uClibc.config in two parts:
|
||||
# uClibc.machine and uClibc.distro. So, if they exist use them, otherwise
|
||||
# use a uClibc.config
|
||||
if [ -f ${WORKDIR}/uClibc.machine -a -f ${WORKDIR}/uClibc.distro ]; then
|
||||
echo "### uClibc.machine ###" >${S}/merged.config
|
||||
cat ${WORKDIR}/uClibc.machine >>${S}/merged.config
|
||||
echo "### uClibc.distro ###" >>${S}/merged.config
|
||||
cat ${WORKDIR}/uClibc.distro >>${S}/merged.config
|
||||
else
|
||||
echo "### uClibc.config ###" >${S}/merged.config
|
||||
cat ${WORKDIR}/uClibc.config >>${S}/merged.config
|
||||
fi
|
||||
cp ${S}/merged.config ${S}/.config
|
||||
# OpenEmbedded splits the uClibc.config in two parts:
|
||||
# uClibc.machine, uClibc.distro
|
||||
echo "### uClibc.machine ###" >${S}/merged.config
|
||||
cat ${WORKDIR}/uClibc.machine >>${S}/merged.config
|
||||
echo "### uClibc.distro ###" >>${S}/merged.config
|
||||
cat ${WORKDIR}/uClibc.distro >>${S}/merged.config
|
||||
echo "### CROSS" >>${S}/merged.config
|
||||
echo "### TGT" >>${S}/merged.config
|
||||
echo "### MMU" >>${S}/merged.config
|
||||
echo "### FPU" >>${S}/merged.config
|
||||
echo "### ABI" >>${S}/merged.config
|
||||
echo "### DISTRO FEATURES" >>${S}/merged.config
|
||||
cp ${S}/merged.config ${S}/.config
|
||||
|
||||
# Mangle the resulting .config depending on OE variables
|
||||
perl -i -p -e 's,^CROSS=.*,TARGET_ARCH=${TARGET_ARCH}\nCROSS=${TARGET_PREFIX},g' ${S}/Rules.mak
|
||||
sed -i -e s:'$(CROSS)strip':true: ${S}/Rules.mak
|
||||
perl -i -p -e '${configmangle}' ${S}/.config
|
||||
# Mangle the resulting .config depending on OE variables
|
||||
sed -i -e '${configmangle}' ${S}/.config
|
||||
|
||||
sed -i -e '/CONFIG_ARM_EABI/d' ${S}/.config
|
||||
|
||||
if [ `echo ${TARGET_ARCH} | grep -e '^arm'` ]; then
|
||||
if [ `echo ${TARGET_OS} | grep -e 'eabi$'` ]; then
|
||||
echo "CONFIG_ARM_EABI=y" >> ${S}/.config
|
||||
else
|
||||
echo "# CONFIG_ARM_EABI is not set" >> ${S}/.config
|
||||
fi
|
||||
fi
|
||||
yes '' | oe_runmake oldconfig
|
||||
oe_runmake oldconfig
|
||||
}
|
||||
|
||||
do_install() {
|
||||
oe_runmake PREFIX=${D} DEVEL_PREFIX=${prefix}/ RUNTIME_PREFIX=/ \
|
||||
install_dev install_runtime
|
||||
|
||||
# Need to overwrite the version from -initial
|
||||
if [ ! -e ${D}${libdir}/libc.so ]; then
|
||||
ln -s ../../lib/libc.so.0 ${D}${libdir}/libc.so
|
||||
fi
|
||||
|
||||
# We don't really need this in ${includedir}
|
||||
rm -f ${D}${prefix}/include/.cvsignore
|
||||
|
||||
# This conflicts with the c++ version of this header
|
||||
rm -f ${D}${prefix}/include/bits/atomicity.h
|
||||
|
||||
oe_runmake "SSP_ALL_CFLAGS=${TARGET_LINK_HASH_STYLE}" utils
|
||||
oe_runmake STRIPTOOL=true PREFIX=${D} DEVEL_PREFIX=${prefix}/ RUNTIME_PREFIX=/ \
|
||||
install_utils
|
||||
|
||||
# oe_runstrip needs +x on files
|
||||
chmod +x ${D}/${base_libdir}/*
|
||||
oe_runmake PREFIX=${D} install
|
||||
oe_runmake PREFIX=${D} "SSP_ALL_CFLAGS=${TARGET_LINK_HASH_STYLE}" install_utils
|
||||
}
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
# UCLIBC_BASE should be the latest released revision of uclibc (that way
|
||||
# the config files will typically be correct!) uclibc-cvs takes precedence
|
||||
# over uclibc-${UCLIBC_BASE}, if a config file in uclibc-cvs is out of date
|
||||
# try removing it
|
||||
#
|
||||
# UCLIBC_BASE can be set in a distro file, but whether this works depends
|
||||
# on whether the base patches apply to the selected (SRCDATE) svn release.
|
||||
#
|
||||
UCLIBC_BASE ?= "0.9.30.1"
|
||||
|
||||
require uclibc.inc
|
||||
PR = "r1"
|
||||
|
||||
PROVIDES += "virtual/${TARGET_PREFIX}libc-for-gcc"
|
||||
|
||||
SRC_URI += "file://uClibc.machine file://uClibc.distro \
|
||||
file://arm-linuxthreads.patch;patch=1 \
|
||||
file://linuxthreads-changes.patch;patch=1 \
|
||||
file://pthread_atfork.patch;patch=1 \
|
||||
file://uclibc_ldso_use_O0.patch;patch=1 \
|
||||
file://ldso_use_arm_dl_linux_resolve_in_thumb_mode.patch;patch=1 \
|
||||
file://gcc-4.4-fixlet.patch;patch=1 \
|
||||
file://uclibc-c99-ldbl-math.patch;patch=1 \
|
||||
file://Use-__always_inline-instead-of-__inline__.patch;patch=1 \
|
||||
"
|
||||
#recent versions uclibc require real kernel headers
|
||||
PACKAGE_ARCH = "${MACHINE_ARCH}"
|
||||
|
||||
#as stated above, uclibc needs real kernel-headers
|
||||
#however: we can't depend on virtual/kernel when nptl hits due to depends deadlocking ....
|
||||
KERNEL_SOURCE = "${STAGING_DIR_HOST}/${exec_prefix}"
|
||||
|
||||
S = "${WORKDIR}/uClibc-${UCLIBC_BASE}"
|
|
@ -0,0 +1,31 @@
|
|||
SRCREV="71d63ed75648da9b0b71afabb9c60aaad792c55c"
|
||||
|
||||
require uclibc.inc
|
||||
PV = "0.9.31+0.9.32rc3"
|
||||
PR = "${INC_PR}.1"
|
||||
PROVIDES += "virtual/${TARGET_PREFIX}libc-for-gcc"
|
||||
|
||||
#recent versions uclibc require real kernel headers
|
||||
PACKAGE_ARCH = "${MACHINE_ARCH}"
|
||||
FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/uclibc-git' ], d)}"
|
||||
|
||||
SRC_URI = "git://uclibc.org/uClibc.git;branch=master;protocol=git \
|
||||
file://uClibc.config \
|
||||
file://uClibc.machine \
|
||||
file://uClibc.distro \
|
||||
file://uclibc-arm-ftruncate64.patch \
|
||||
file://uclibc_enable_log2_test.patch \
|
||||
file://ldso_use_arm_dl_linux_resolve_in_thumb_mode.patch \
|
||||
file://reorder-use-BX.patch \
|
||||
file://select-force-thumb.patch \
|
||||
file://remove-sub-arch-variants.patch \
|
||||
file://transform-eabi-oabi-choice.patch \
|
||||
file://include-arm-asm.h.patch \
|
||||
file://detect-bx-availibility.patch \
|
||||
file://remove-eabi-oabi-selection.patch \
|
||||
file://powerpc_copysignl.patch \
|
||||
file://argp-support.patch \
|
||||
file://argp-headers.patch \
|
||||
file://remove_attribute_optimize_Os.patch \
|
||||
"
|
||||
S = "${WORKDIR}/git"
|
Loading…
Reference in New Issue