diff options
author | Frans Meulenbroeks <fransmeulenbroeks@yahoo.com> | 2006-08-14 16:27:13 +0000 |
---|---|---|
committer | Frans Meulenbroeks <fransmeulenbroeks@yahoo.com> | 2006-08-14 16:27:13 +0000 |
commit | a56e9d6dbf40d037a4858354916a27371e2f3434 (patch) | |
tree | 22e0ff8d57e853904009d395335de214038d78d4 /packages/uclibc | |
parent | 6932da52694d0795d22166b1182b7208fa0a67b3 (diff) |
uclibc: patches to compile with gcc 4.1.1 with thumb instruction set
(patches derived from busybox mailing list)
Diffstat (limited to 'packages/uclibc')
-rw-r--r-- | packages/uclibc/uclibc-0.9.28/dl-string.h.patch | 225 | ||||
-rw-r--r-- | packages/uclibc/uclibc-0.9.28/dl-sysdep.h.patch | 10 | ||||
-rw-r--r-- | packages/uclibc/uclibc_0.9.28.bb | 4 |
3 files changed, 238 insertions, 1 deletions
diff --git a/packages/uclibc/uclibc-0.9.28/dl-string.h.patch b/packages/uclibc/uclibc-0.9.28/dl-string.h.patch new file mode 100644 index 0000000000..a2bdb81907 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/dl-string.h.patch @@ -0,0 +1,225 @@ +--- uClibc-0.9.28/ldso/include/dl-string.h.orig 2006-08-14 17:20:02.000000000 +0200 ++++ uClibc-0.9.28/ldso/include/dl-string.h 2006-08-14 17:19:38.000000000 +0200 +@@ -1,9 +1,24 @@ ++/* vi: set sw=4 ts=4: */ ++/* ++ * Copyright (C) 2000-2005 by Erik Andersen <andersen@codepoet.org> ++ * ++ * GNU Lesser General Public License version 2.1 or later. ++ */ ++ + #ifndef _LINUX_STRING_H_ + #define _LINUX_STRING_H_ + +-#include <dl-sysdep.h> // for do_rem ++#include <dl-sysdep.h> /* for do_rem */ + #include <features.h> + ++/* provide some sane defaults */ ++#ifndef do_rem ++# define do_rem(result, n, base) ((result) = (n) % (base)) ++#endif ++#ifndef do_div_10 ++# define do_div_10(result, remain) ((result) /= 10) ++#endif ++ + static size_t _dl_strlen(const char * str); + static char *_dl_strcat(char *dst, const char *src); + static char * _dl_strcpy(char * dst,const char *src); +@@ -26,8 +41,8 @@ + static __always_inline size_t _dl_strlen(const char * str) + { + register const char *ptr = (char *) str-1; +- +- while (*++ptr); ++ while (*++ptr) ++ ;/* empty */ + return (ptr - str); + } + +@@ -49,7 +64,8 @@ + register char *ptr = dst; + + dst--;src--; +- while ((*++dst = *++src) != 0); ++ while ((*++dst = *++src) != 0) ++ ;/* empty */ + + return ptr; + } +@@ -63,8 +79,7 @@ + c2 = (unsigned char) *++s2; + if (c1 == '\0') + return c1 - c2; +- } +- while (c1 == c2); ++ } while (c1 == c2); + + return c1 - c2; + } +@@ -98,43 +113,41 @@ + return 0; + } + +-static inline char * _dl_strrchr(const char *str, int c) ++static __always_inline char * _dl_strrchr(const char *str, int c) + { +- register char *prev = 0; +- register char *ptr = (char *) str-1; ++ register char *prev = 0; ++ register char *ptr = (char *) str-1; + +- while (*++ptr != '\0') { +- if (*ptr == c) +- prev = ptr; +- } +- if (c == '\0') +- return(ptr); +- return(prev); ++ while (*++ptr != '\0') { ++ if (*ptr == c) ++ prev = ptr; ++ } ++ if (c == '\0') ++ return(ptr); ++ return(prev); + } + +-static inline char * _dl_strstr(const char *s1, const char *s2) ++static __always_inline char * _dl_strstr(const char *s1, const char *s2) + { +- register const char *s = s1; +- register const char *p = s2; ++ register const char *s = s1; ++ register const char *p = s2; + +- do { +- if (!*p) { +- return (char *) s1;; +- } +- if (*p == *s) { +- ++p; +- ++s; +- } else { +- p = s2; +- if (!*s) { +- return NULL; +- } +- s = ++s1; +- } +- } while (1); ++ do { ++ if (!*p) ++ return (char *) s1;; ++ if (*p == *s) { ++ ++p; ++ ++s; ++ } else { ++ p = s2; ++ if (!*s) ++ return NULL; ++ s = ++s1; ++ } ++ } while (1); + } + +-static inline void * _dl_memcpy(void * dst, const void * src, size_t len) ++static __always_inline void * _dl_memcpy(void * dst, const void * src, size_t len) + { + register char *a = dst-1; + register const char *b = src-1; +@@ -163,27 +176,28 @@ + /* Will generate smaller and faster code due to loop unrolling.*/ + static __always_inline void * _dl_memset(void *to, int c, size_t n) + { +- unsigned long chunks; +- unsigned long *tmp_to; ++ unsigned long chunks; ++ unsigned long *tmp_to; + unsigned char *tmp_char; + +- chunks = n / 4; +- tmp_to = to + n; +- c = c << 8 | c; +- c = c << 16 | c; +- if (!chunks) +- goto lessthan4; +- do { +- *--tmp_to = c; +- } while (--chunks); +- lessthan4: +- n = n % 4; +- if (!n ) return to; +- tmp_char = (unsigned char *)tmp_to; +- do { +- *--tmp_char = c; +- } while (--n); +- return to; ++ chunks = n / 4; ++ tmp_to = to + n; ++ c = c << 8 | c; ++ c = c << 16 | c; ++ if (!chunks) ++ goto lessthan4; ++ do { ++ *--tmp_to = c; ++ } while (--chunks); ++lessthan4: ++ n = n % 4; ++ if (!n) ++ return to; ++ tmp_char = (unsigned char *)tmp_to; ++ do { ++ *--tmp_char = c; ++ } while (--n); ++ return to; + } + #else + static __always_inline void * _dl_memset(void * str,int c,size_t len) +@@ -225,10 +239,10 @@ + char *p = &local[22]; + *--p = '\0'; + do { +- char temp; +- do_rem(temp, i, 10); +- *--p = '0' + temp; +- i /= 10; ++ char temp; ++ do_rem(temp, i, 10); ++ *--p = '0' + temp; ++ do_div_10(i, temp); + } while (i > 0); + return p; + } +@@ -242,9 +256,9 @@ + do { + char temp = i & 0xf; + if (temp <= 0x09) +- *--p = '0' + temp; ++ *--p = '0' + temp; + else +- *--p = 'a' - 0x0a + temp; ++ *--p = 'a' - 0x0a + temp; + i >>= 4; + } while (i > 0); + *--p = 'x'; +@@ -270,8 +284,8 @@ + + /* On some arches constant strings are referenced through the GOT. + * This requires that load_addr must already be defined... */ +-#if defined(mc68000) || defined(__arm__) || defined(__thumb__) || defined(__mips__) \ +- || defined(__sh__) || defined(__powerpc__) ++#if defined(mc68000) || defined(__arm__) || defined(__thumb__) || \ ++ defined(__mips__) || defined(__sh__) || defined(__powerpc__) + # define CONSTANT_STRING_GOT_FIXUP(X) \ + if ((X) < (const char *) load_addr) (X) += load_addr + # define NO_EARLY_SEND_STDERR +@@ -318,7 +332,7 @@ + do { \ + do_rem(v, (X), 10); \ + *--tmp2 = '0' + v; \ +- (X) /= 10; \ ++ do_div_10((X), v); \ + } while ((X) > 0); \ + _dl_write(2, tmp2, tmp1 - tmp2 + sizeof(tmp) - 1); \ + } diff --git a/packages/uclibc/uclibc-0.9.28/dl-sysdep.h.patch b/packages/uclibc/uclibc-0.9.28/dl-sysdep.h.patch new file mode 100644 index 0000000000..0d271a9ca0 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/dl-sysdep.h.patch @@ -0,0 +1,10 @@ +--- uClibc-0.9.28/ldso/ldso/arm/dl-sysdep.h.orig 2006-08-14 17:22:50.000000000 +0200 ++++ uClibc-0.9.28/ldso/ldso/arm/dl-sysdep.h 2006-08-14 17:23:45.000000000 +0200 +@@ -43,6 +43,7 @@ + return m; + } + #define do_rem(result, n, base) ((result) = arm_modulus(n, base)) ++#define do_div_10(result, remain) ((result) = (((result) - (remain)) / 2) * -(-1ul / 5ul)) + + /* Here we define the magic numbers that this dynamic loader should accept */ + #define MAGIC1 EM_ARM diff --git a/packages/uclibc/uclibc_0.9.28.bb b/packages/uclibc/uclibc_0.9.28.bb index a5d4095a64..1801af2861 100644 --- a/packages/uclibc/uclibc_0.9.28.bb +++ b/packages/uclibc/uclibc_0.9.28.bb @@ -1,5 +1,5 @@ DEFAULT_PREFERENCE = "1" -PR = "r4" +PR = "r5" require uclibc.inc @@ -31,6 +31,8 @@ SRC_URI += " file://thumb-sysnum-h.patch;patch=1" SRC_URI += " file://thumb-asm-swi.patch;patch=1" SRC_URI += " file://thumb-call-via-rx.patch;patch=1" SRC_URI += " file://dl-startup.h.patch;patch=1" +SRC_URI += " file://dl-string.h.patch;patch=1" +SRC_URI += " file://dl-sysdep.h.patch;patch=1" # # This is a core change and is controversial, maybe even wrong # on some architectures |