summaryrefslogtreecommitdiff
path: root/patches/uClibc/0.9.30.1
diff options
context:
space:
mode:
Diffstat (limited to 'patches/uClibc/0.9.30.1')
-rw-r--r--patches/uClibc/0.9.30.1/150-64bit-strtouq.patch48
-rw-r--r--patches/uClibc/0.9.30.1/160-c99-ldbl-math.patch474
-rw-r--r--patches/uClibc/0.9.30.1/170-dl-sysdep-inline.patch371
3 files changed, 893 insertions, 0 deletions
diff --git a/patches/uClibc/0.9.30.1/150-64bit-strtouq.patch b/patches/uClibc/0.9.30.1/150-64bit-strtouq.patch
new file mode 100644
index 0000000..bd4ecaa
--- /dev/null
+++ b/patches/uClibc/0.9.30.1/150-64bit-strtouq.patch
@@ -0,0 +1,48 @@
+[PATCH]: Add strtouq alias (to strtoul) for 64bit
+
+The strtouq alias was only available on 32bit, breaking compilation of stuff
+using strtouq on 64bit machines. At the same time use the correct return
+type (u_quad_t).
+
+Signed-of-by: Peter Korsgaard <jacmet@sunsite.dk>
+---
+ include/stdlib.h | 4 +++-
+ libc/stdlib/stdlib.c | 1 +
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+Index: uClibc-0.9.30.1/libc/stdlib/stdlib.c
+===================================================================
+--- uClibc-0.9.30.1.orig/libc/stdlib/stdlib.c
++++ uClibc-0.9.30.1/libc/stdlib/stdlib.c
+@@ -401,6 +401,9 @@
+ libc_hidden_proto(__XL_NPP(strtoull))
+ strong_alias(__XL_NPP(strtoul),__XL_NPP(strtoull))
+ libc_hidden_def(__XL_NPP(strtoull))
++#if !defined(L_strtoul_l)
++strong_alias(strtoul,strtouq)
++#endif
+ #endif
+
+
+Index: uClibc-0.9.30.1/include/stdlib.h
+===================================================================
+--- uClibc-0.9.30.1.orig/include/stdlib.h
++++ uClibc-0.9.30.1/include/stdlib.h
+@@ -203,6 +203,8 @@
+ __END_NAMESPACE_STD
+
+ #ifdef __USE_BSD
++#include <sys/types.h> /* for u_quad_t */
++
+ /* Convert a string to a quadword integer. */
+ __extension__
+ extern long long int strtoq (__const char *__restrict __nptr,
+@@ -210,7 +212,7 @@
+ __THROW __nonnull ((1)) __wur;
+ /* Convert a string to an unsigned quadword integer. */
+ __extension__
+-extern unsigned long long int strtouq (__const char *__restrict __nptr,
++extern u_quad_t strtouq (__const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1)) __wur;
+ #endif /* GCC and use BSD. */
diff --git a/patches/uClibc/0.9.30.1/160-c99-ldbl-math.patch b/patches/uClibc/0.9.30.1/160-c99-ldbl-math.patch
new file mode 100644
index 0000000..f44f32c
--- /dev/null
+++ b/patches/uClibc/0.9.30.1/160-c99-ldbl-math.patch
@@ -0,0 +1,474 @@
+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
diff --git a/patches/uClibc/0.9.30.1/170-dl-sysdep-inline.patch b/patches/uClibc/0.9.30.1/170-dl-sysdep-inline.patch
new file mode 100644
index 0000000..460d66a
--- /dev/null
+++ b/patches/uClibc/0.9.30.1/170-dl-sysdep-inline.patch
@@ -0,0 +1,371 @@
+Index: uClibc-0.9.30.1/ldso/ldso/arm/dl-sysdep.h
+===================================================================
+--- uClibc-0.9.30.1/ldso/ldso/arm/dl-sysdep.h (revision 25503)
++++ uClibc-0.9.30.1/ldso/ldso/arm/dl-sysdep.h (working copy)
+@@ -17,7 +17,7 @@
+
+ #define DL_MALLOC_ALIGN 8 /* EABI needs 8 byte alignment for STRD LDRD*/
+
+-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;
+@@ -74,7 +74,7 @@ unsigned long _dl_linux_resolver(struct
+ 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;
+@@ -106,7 +106,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");
+@@ -130,7 +130,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)
+ {
+Index: uClibc-0.9.30.1/ldso/ldso/powerpc/dl-sysdep.h
+===================================================================
+--- uClibc-0.9.30.1/ldso/ldso/powerpc/dl-sysdep.h (revision 25503)
++++ uClibc-0.9.30.1/ldso/ldso/powerpc/dl-sysdep.h (working copy)
+@@ -90,7 +90,7 @@ void _dl_init_got(unsigned long *lpnt,st
+ #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;
+@@ -109,14 +109,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;
+@@ -164,7 +164,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)
+ {
+Index: uClibc-0.9.30.1/ldso/ldso/sh64/dl-sysdep.h
+===================================================================
+--- uClibc-0.9.30.1/ldso/ldso/sh64/dl-sysdep.h (revision 25503)
++++ uClibc-0.9.30.1/ldso/ldso/sh64/dl-sysdep.h (working copy)
+@@ -42,7 +42,7 @@ extern unsigned long _dl_linux_resolver(
+ /* 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;
+
+@@ -70,7 +70,7 @@ static __inline__ Elf32_Addr elf_machine
+ }
+
+ /* 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;
+
+@@ -123,7 +123,7 @@ static __inline__ Elf32_Addr elf_machine
+ } \
+ }
+
+-static __inline__ void
++static __always_inline void
+ elf_machine_relative(Elf32_Addr load_off, const Elf32_Addr rel_addr,
+ Elf32_Word relative_count)
+ {
+Index: uClibc-0.9.30.1/ldso/ldso/m68k/dl-sysdep.h
+===================================================================
+--- uClibc-0.9.30.1/ldso/ldso/m68k/dl-sysdep.h (revision 25503)
++++ uClibc-0.9.30.1/ldso/ldso/m68k/dl-sysdep.h (working copy)
+@@ -41,7 +41,7 @@ extern unsigned long _dl_linux_resolver
+ /* 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");
+@@ -50,7 +50,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;
+@@ -60,7 +60,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)
+ {
+Index: uClibc-0.9.30.1/ldso/ldso/i386/dl-sysdep.h
+===================================================================
+--- uClibc-0.9.30.1/ldso/ldso/i386/dl-sysdep.h (revision 25503)
++++ uClibc-0.9.30.1/ldso/ldso/i386/dl-sysdep.h (working copy)
+@@ -42,8 +42,8 @@ extern unsigned long _dl_linux_resolver(
+ /* 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");
+@@ -52,8 +52,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
+@@ -66,7 +66,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)
+ {
+Index: uClibc-0.9.30.1/ldso/ldso/cris/dl-sysdep.h
+===================================================================
+--- uClibc-0.9.30.1/ldso/ldso/cris/dl-sysdep.h (revision 25503)
++++ uClibc-0.9.30.1/ldso/ldso/cris/dl-sysdep.h (working copy)
+@@ -39,7 +39,7 @@ extern unsigned long _dl_linux_resolver(
+ || ((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
+@@ -61,7 +61,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;
+@@ -95,7 +95,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)
+ {
+Index: uClibc-0.9.30.1/ldso/ldso/xtensa/dl-sysdep.h
+===================================================================
+--- uClibc-0.9.30.1/ldso/ldso/xtensa/dl-sysdep.h (revision 25503)
++++ uClibc-0.9.30.1/ldso/ldso/xtensa/dl-sysdep.h (working copy)
+@@ -87,7 +87,7 @@ extern unsigned long _dl_linux_resolver
+ (((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.
+@@ -97,7 +97,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;
+@@ -118,7 +118,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)
+ {
+Index: uClibc-0.9.30.1/ldso/ldso/sparc/dl-sysdep.h
+===================================================================
+--- uClibc-0.9.30.1/ldso/ldso/sparc/dl-sysdep.h (revision 25503)
++++ uClibc-0.9.30.1/ldso/ldso/sparc/dl-sysdep.h (working copy)
+@@ -49,7 +49,7 @@ unsigned long _dl_linux_resolver(struct
+
+ #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;
+@@ -127,7 +127,7 @@ do { register Elf32_Addr pc __asm__("
+ /* 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");
+@@ -138,7 +138,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");
+@@ -157,7 +157,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)
+ {
+Index: uClibc-0.9.30.1/ldso/ldso/mips/dl-sysdep.h
+===================================================================
+--- uClibc-0.9.30.1/ldso/ldso/mips/dl-sysdep.h (revision 25503)
++++ uClibc-0.9.30.1/ldso/ldso/mips/dl-sysdep.h (working copy)
+@@ -163,7 +163,7 @@ void _dl_perform_mips_global_got_relocat
+
+ #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. */
+@@ -173,7 +173,7 @@ elf_mips_got_from_gpreg (ElfW(Addr) gpre
+ /* 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");
+@@ -192,7 +192,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;
+@@ -208,7 +208,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)
+ {
+Index: uClibc-0.9.30.1/ldso/ldso/sh/dl-sysdep.h
+===================================================================
+--- uClibc-0.9.30.1/ldso/ldso/sh/dl-sysdep.h (revision 25503)
++++ uClibc-0.9.30.1/ldso/ldso/sh/dl-sysdep.h (working copy)
+@@ -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;
+@@ -100,7 +100,7 @@ _dl_urem(unsigned int n, unsigned int ba
+ /* 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;
+@@ -109,7 +109,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;
+@@ -151,7 +151,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)
+ {
+Index: uClibc-0.9.30.1/ldso/ldso/bfin/dl-sysdep.h
+===================================================================
+--- uClibc-0.9.30.1/ldso/ldso/bfin/dl-sysdep.h (revision 25503)
++++ uClibc-0.9.30.1/ldso/ldso/bfin/dl-sysdep.h (working copy)
+@@ -213,7 +213,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)
+ {