summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenning Heinold <heinold@inf.fu-berlin.de>2008-05-07 19:57:32 +0000
committerHenning Heinold <heinold@inf.fu-berlin.de>2008-05-07 19:57:32 +0000
commitc3e353c30dfb7467721aabc9b03c348a53e1e7f6 (patch)
tree5e3e196ffd1efe126eb0f45cd414993e02b50c6e
parent287d816e5c2adfa726db9cd4025189b97f57dd9f (diff)
gmp: update to version 4.2.2
* seems to work * add patches 02_noexec-stack.diff and 03_gnu89-inline.diff from debian * add mpf_set_str_c.diff from the gmp-website
-rw-r--r--packages/gmp/gmp-4.2.2/.mtn2git_empty0
-rw-r--r--packages/gmp/gmp-4.2.2/02_noexec-stack.diff74
-rw-r--r--packages/gmp/gmp-4.2.2/03_gnu89-inline.diff23
-rw-r--r--packages/gmp/gmp-4.2.2/amd64.patch14
-rw-r--r--packages/gmp/gmp-4.2.2/configure.patch207
-rw-r--r--packages/gmp/gmp-4.2.2/mpf_set_str_c.diff38
-rw-r--r--packages/gmp/gmp-4.2.2/sh4-asmfix.patch26
-rw-r--r--packages/gmp/gmp-4.2.2/x86-fat.diff122
-rw-r--r--packages/gmp/gmp-native_4.2.2.bb2
-rw-r--r--packages/gmp/gmp_4.2.2.bb8
10 files changed, 514 insertions, 0 deletions
diff --git a/packages/gmp/gmp-4.2.2/.mtn2git_empty b/packages/gmp/gmp-4.2.2/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/gmp/gmp-4.2.2/.mtn2git_empty
diff --git a/packages/gmp/gmp-4.2.2/02_noexec-stack.diff b/packages/gmp/gmp-4.2.2/02_noexec-stack.diff
new file mode 100644
index 0000000000..613589e347
--- /dev/null
+++ b/packages/gmp/gmp-4.2.2/02_noexec-stack.diff
@@ -0,0 +1,74 @@
+Index: acinclude.m4
+===================================================================
+RCS file: /cvsroot/pkg-gmp/gmp/acinclude.m4,v
+retrieving revision 1.3
+diff -u -b -B -r1.3 acinclude.m4
+--- gmp-4.2.2.orig/acinclude.m4 14 Apr 2006 22:48:55 -0000 1.3
++++ gmp-4.2.2/acinclude.m4 15 Apr 2006 06:11:48 -0000
+@@ -1613,6 +1613,34 @@
+ ])
+
+
++dnl Checks whether the stack can be marked nonexecutable by passing an option
++dnl to the C-compiler when acting on .s files. Appends that option to ASFLAGS.
++dnl This macro is adapted from one found in GLIBC-2.3.5.
++AC_DEFUN([CL_AS_NOEXECSTACK],[
++dnl AC_REQUIRE([AC_PROG_CC]) GMP uses something else
++AC_CACHE_CHECK([whether assembler supports --noexecstack option],
++cl_cv_as_noexecstack, [dnl
++ cat > conftest.c <<EOF
++void foo() {}
++EOF
++ if AC_TRY_COMMAND([${CC} $CFLAGS $CPPFLAGS
++ -S -o conftest.s conftest.c >/dev/null]) \
++ && grep -q .note.GNU-stack conftest.s \
++ && AC_TRY_COMMAND([${CC} $CFLAGS $CPPFLAGS -Wa,--noexecstack
++ -c -o conftest.o conftest.s >/dev/null])
++ then
++ cl_cv_as_noexecstack=yes
++ else
++ cl_cv_as_noexecstack=no
++ fi
++ rm -f conftest*])
++ if test "$cl_cv_as_noexecstack" = yes; then
++ ASMFLAGS="$ASMFLAGS -Wa,--noexecstack"
++ fi
++ AC_SUBST(ASMFLAGS)
++])
++
++
+ dnl GMP_ASM_LABEL_SUFFIX
+ dnl --------------------
+ dnl : - is usual.
+Index: configure.in
+===================================================================
+RCS file: /cvsroot/pkg-gmp/gmp/configure.in,v
+retrieving revision 1.3
+diff -u -b -B -r1.3 configure.in
+--- gmp-4.2.2.orig/configure.in 14 Apr 2006 22:48:55 -0000 1.3
++++ gmp-4.2.2/configure.in 15 Apr 2006 06:11:49 -0000
+@@ -2024,6 +2024,8 @@
+ # Automake ansi2knr support.
+ AM_C_PROTOTYPES
+
++CL_AS_NOEXECSTACK
++
+ GMP_PROG_AR
+ GMP_PROG_NM
+
+Index: mpn/Makeasm.am
+===================================================================
+RCS file: /cvsroot/pkg-gmp/gmp/mpn/Makeasm.am,v
+retrieving revision 1.5
+diff -u -b -B -r1.5 Makeasm.am
+--- gmp-4.2.2.orig/mpn/Makeasm.am 14 Apr 2006 22:48:59 -0000 1.5
++++ gmp-4.2.2/mpn/Makeasm.am 15 Apr 2006 06:11:49 -0000
+@@ -24,7 +24,7 @@
+ # COMPILE minus CC.
+ #
+ COMPILE_FLAGS = $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
++ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(ASMFLAGS)
+
+ # Flags used for preprocessing (in ansi2knr rules).
+ #
diff --git a/packages/gmp/gmp-4.2.2/03_gnu89-inline.diff b/packages/gmp/gmp-4.2.2/03_gnu89-inline.diff
new file mode 100644
index 0000000000..17e8915fbb
--- /dev/null
+++ b/packages/gmp/gmp-4.2.2/03_gnu89-inline.diff
@@ -0,0 +1,23 @@
+Index: gmp-h.in
+===================================================================
+RCS file: /cvsroot/pkg-gmp/gmp/gmp-h.in,v
+retrieving revision 1.4
+diff -u -b -B -r1.4 gmp-h.in
+--- gmp-4.2.2.orig/gmp-h.in 15 Sep 2007 23:05:28 -0000 1.4
++++ gmp-4.2.2/gmp-h.in 9 Apr 2008 05:30:42 -0000
+@@ -418,9 +418,13 @@
+ for an inline too, so as to correctly specify "dllimport" on windows, in
+ case the function is called rather than inlined.
+ GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
+- inline semantics, unless -fgnu89-inline is used. */
++ inline semantics, unless -fgnu89-inline is used.
++
++ With GCC 4.2, `__GNUC_STDC_INLINE__' is never defined (because C99 inline
++ semantics are not supported), but a warning is issued in C99 mode if
++ `__gnu_inline__' is not used. */
+ #ifdef __GNUC__
+-#ifdef __GNUC_STDC_INLINE__
++#if (defined __GNUC_STDC_INLINE__) || (__GNUC__ == 4 && __GNUC_MINOR__ == 2)
+ #define __GMP_EXTERN_INLINE extern __inline__ __attribute__ ((__gnu_inline__))
+ #else
+ #define __GMP_EXTERN_INLINE extern __inline__
diff --git a/packages/gmp/gmp-4.2.2/amd64.patch b/packages/gmp/gmp-4.2.2/amd64.patch
new file mode 100644
index 0000000000..67be9dd350
--- /dev/null
+++ b/packages/gmp/gmp-4.2.2/amd64.patch
@@ -0,0 +1,14 @@
+--- gmp-4.1.4/longlong.h.orig 2004-04-22 00:34:28.000000000 +0200
++++ gmp-4.1.4/longlong.h 2005-07-18 01:13:06.000000000 +0200
+@@ -738,8 +738,10 @@
+ count is only an int. */
+ #define count_trailing_zeros(count, x) \
+ do { \
++ UDItype __cbtmp; \
+ ASSERT ((x) != 0); \
+- __asm__ ("bsfq %1,%q0" : "=r" (count) : "rm" ((UDItype)(x))); \
++ __asm__ ("bsfq %1,%0" : "=r" (__cbtmp) : "rm" ((UDItype)(x))); \
++ (count) = __cbtmp; \
+ } while (0)
+ #endif /* x86_64 */
+
diff --git a/packages/gmp/gmp-4.2.2/configure.patch b/packages/gmp/gmp-4.2.2/configure.patch
new file mode 100644
index 0000000000..2a3b0e6fc1
--- /dev/null
+++ b/packages/gmp/gmp-4.2.2/configure.patch
@@ -0,0 +1,207 @@
+ acinclude.m4 | 26 ++++++++++++++------------
+ configure.in | 24 +++++++++---------------
+ 2 files changed, 23 insertions(+), 27 deletions(-)
+
+Index: gmp-4.2.2/acinclude.m4
+===================================================================
+--- gmp-4.2.2.orig/acinclude.m4 2008-05-01 11:07:43.000000000 +0200
++++ gmp-4.2.2/acinclude.m4 2008-05-01 11:07:48.000000000 +0200
+@@ -30,20 +30,20 @@
+ dnl conftest.exe - various DOS compilers
+
+
+-define(IA64_PATTERN,
++define([IA64_PATTERN],
+ [[ia64*-*-* | itanium-*-* | itanium2-*-*]])
+
+ dnl Need to be careful not to match m6811, m6812, m68hc11 and m68hc12, all
+ dnl of which config.sub accepts. (Though none of which are likely to work
+ dnl with GMP.)
+ dnl
+-define(M68K_PATTERN,
++define([M68K_PATTERN],
+ [[m68k-*-* | m68[0-9][0-9][0-9]-*-*]])
+
+-define(POWERPC64_PATTERN,
++define([POWERPC64_PATTERN],
+ [[powerpc64-*-* | powerpc64le-*-* | powerpc620-*-* | powerpc630-*-* | powerpc970-*-* | power[3-9]-*-*]])
+
+-define(X86_PATTERN,
++define([X86_PATTERN],
+ [[i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-* | viac3*-*-*]])
+
+
+@@ -62,7 +62,7 @@
+ dnl x86/k6 -> k6
+ dnl x86/k6/mmx -> k6_mmx
+
+-define(GMP_FAT_SUFFIX,
++define([GMP_FAT_SUFFIX],
+ [[$1=`echo $2 | sed -e '/\//s:^[^/]*/::' -e 's:[\\/]:_:g'`]])
+
+
+@@ -71,7 +71,7 @@
+ dnl Emit code to remove any occurance of ITEM from $LISTVAR. ITEM can be a
+ dnl shell expression like $foo if desired.
+
+-define(GMP_REMOVE_FROM_LIST,
++define([GMP_REMOVE_FROM_LIST],
+ [remove_from_list_tmp=
+ for remove_from_list_i in $[][$1]; do
+ if test $remove_from_list_i = [$2]; then :;
+@@ -87,12 +87,12 @@
+ dnl ----------------------
+ dnl Strip entries subdir from $path and $fat_path.
+
+-define(GMP_STRIP_PATH,
++define([GMP_STRIP_PATH],
+ [GMP_STRIP_PATH_VAR(path, [$1])
+ GMP_STRIP_PATH_VAR(fat_path, [$1])
+ ])
+
+-define(GMP_STRIP_PATH_VAR,
++define([GMP_STRIP_PATH_VAR],
+ [tmp_path=
+ for i in $[][$1]; do
+ case $i in
+@@ -113,7 +113,7 @@
+ dnl Dummy values for __GMP_BITS_PER_MP_LIMB and GMP_LIMB_BITS are enough
+ dnl for all current configure-time uses of gmp.h.
+
+-define(GMP_INCLUDE_GMP_H,
++define([GMP_INCLUDE_GMP_H],
+ [[#define __GMP_WITHIN_CONFIGURE 1 /* ignore template stuff */
+ #define GMP_NAIL_BITS $GMP_NAIL_BITS
+ #define __GMP_BITS_PER_MP_LIMB 123 /* dummy for GMP_NUMB_BITS etc */
+@@ -129,7 +129,7 @@
+ dnl FILE. The regexps here aren't very rugged, but are enough for gmp.
+ dnl /dev/null as a parameter prevents a hang if $2 is accidentally omitted.
+
+-define(GMP_HEADER_GETVAL,
++define([GMP_HEADER_GETVAL],
+ [patsubst(patsubst(
+ esyscmd([grep "^#define $1 " $2 /dev/null 2>/dev/null]),
+ [^.*$1[ ]+],[]),
+@@ -143,7 +143,7 @@
+ dnl autoconf time. Two digits like 3.0 if patchlevel <= 0, or three digits
+ dnl like 3.0.1 if patchlevel > 0.
+
+-define(GMP_VERSION,
++define([GMP_VERSION],
+ [GMP_HEADER_GETVAL(__GNU_MP_VERSION,gmp-h.in)[]dnl
+ .GMP_HEADER_GETVAL(__GNU_MP_VERSION_MINOR,gmp-h.in)[]dnl
+ ifelse(m4_eval(GMP_HEADER_GETVAL(__GNU_MP_VERSION_PATCHLEVEL,gmp-h.in) > 0),1,
+@@ -1489,7 +1489,9 @@
+ echo ["define(<CONFIG_TOP_SRCDIR>,<\`$tmp'>)"] >>$gmp_tmpconfigm4
+
+ # All CPUs use asm-defs.m4
+-echo ["include][(CONFIG_TOP_SRCDIR\`/mpn/asm-defs.m4')"] >>$gmp_tmpconfigm4i
++echo -n ["include("] >>$gmp_tmpconfigm4i
++echo -n ["CONFIG_TOP_SRCDIR\`/mpn/asm-defs.m4'"] >>$gmp_tmpconfigm4i
++echo [")"] >>$gmp_tmpconfigm4i
+ ])
+
+
+Index: gmp-4.2.2/configure.in
+===================================================================
+--- gmp-4.2.2.orig/configure.in 2008-05-01 11:07:43.000000000 +0200
++++ gmp-4.2.2/configure.in 2008-05-01 11:07:48.000000000 +0200
+@@ -29,12 +29,6 @@
+ AC_PREREQ(2.59)
+ AC_INIT(GNU MP, GMP_VERSION, gmp-bugs@swox.com, gmp)
+ AC_CONFIG_SRCDIR(gmp-impl.h)
+-m4_pattern_forbid([^[ \t]*GMP_])
+-m4_pattern_allow(GMP_LDFLAGS)
+-m4_pattern_allow(GMP_LIMB_BITS)
+-m4_pattern_allow(GMP_MPARAM_H_SUGGEST)
+-m4_pattern_allow(GMP_NAIL_BITS)
+-m4_pattern_allow(GMP_NUMB_BITS)
+
+ # If --target is not used then $target_alias is empty, but if say
+ # "./configure athlon-pc-freebsd3.5" is used, then all three of
+@@ -275,7 +269,7 @@
+ # After GMP specific searches and tests, the standard autoconf AC_PROG_CC is
+ # called. User selections of CC etc are respected.
+ #
+-# Care is taken not to use macros like AC_TRY_COMPILE during the GMP
++# Care is taken not to use macros like AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[],[]) during the GMP
+ # pre-testing, since they of course depend on AC_PROG_CC, and also some of
+ # them cache their results, which is not wanted.
+ #
+@@ -367,7 +361,7 @@
+ # FIXME: We'd like to prefer an ANSI compiler, perhaps by preferring
+ # c89 over cc here. But note that on HP-UX c89 provides a castrated
+ # environment, and would want to be excluded somehow. Maybe
+-# AC_PROG_CC_STDC already does enough to stick cc into ANSI mode and
++# already does enough to stick cc into ANSI mode and
+ # we don't need to worry.
+ #
+ cclist="gcc cc"
+@@ -1518,7 +1512,7 @@
+ CFLAGS_or_unset=${CFLAGS-'(unset)'}
+ CPPFLAGS_or_unset=${CPPFLAGS-'(unset)'}
+
+-cat >&AC_FD_CC <<EOF
++cat >&AS_MESSAGE_LOG_FD() <<EOF
+ User:
+ ABI=$ABI
+ CC=$CC
+@@ -1889,7 +1883,6 @@
+
+ # The C compiler and preprocessor, put into ANSI mode if possible.
+ AC_PROG_CC
+-AC_PROG_CC_STDC
+ AC_PROG_CPP
+ GMP_H_ANSI
+
+@@ -1912,11 +1905,11 @@
+
+ # The C++ compiler, if desired.
+ want_cxx=no
++AC_PROG_CXX
+ if test $enable_cxx != no; then
+ test_CXXFLAGS=${CXXFLAGS+set}
+- AC_PROG_CXX
+
+- echo "CXXFLAGS chosen by autoconf: $CXXFLAGS" >&AC_FD_CC
++ echo "CXXFLAGS chosen by autoconf: $CXXFLAGS" >&AS_MESSAGE_LOG_FD()
+ cxxflags_ac_prog_cxx=$CXXFLAGS
+ cxxflags_list=ac_prog_cxx
+
+@@ -2022,7 +2015,7 @@
+ esac
+
+
+-cat >&AC_FD_CC <<EOF
++cat >&AS_MESSAGE_LOG_FD() <<EOF
+ Decided:
+ ABI=$ABI
+ CC=$CC
+@@ -3199,7 +3192,7 @@
+ # FIXME: Upcoming version of autoconf/automake may not like broken lines.
+ # Right now automake isn't accepting the new AC_CONFIG_FILES scheme.
+
+-AC_OUTPUT(Makefile \
++AC_CONFIG_FILES([Makefile \
+ mpbsd/Makefile mpf/Makefile mpn/Makefile mpq/Makefile \
+ mpz/Makefile printf/Makefile scanf/Makefile cxx/Makefile \
+ tests/Makefile tests/devel/Makefile tests/mpbsd/Makefile \
+@@ -3208,4 +3201,5 @@
+ tests/cxx/Makefile \
+ doc/Makefile tune/Makefile \
+ demos/Makefile demos/calc/Makefile demos/expr/Makefile \
+- gmp.h:gmp-h.in mp.h:mp-h.in)
++ gmp.h:gmp-h.in mp.h:mp-h.in])
++AC_OUTPUT
+Index: gmp-4.2.2/gmp-h.in
+===================================================================
+--- gmp-4.2.2.orig/gmp-h.in 2007-09-03 18:05:40.000000000 +0200
++++ gmp-4.2.2/gmp-h.in 2008-05-01 11:10:42.000000000 +0200
+@@ -516,6 +516,7 @@
+
+ #if defined (__cplusplus)
+ extern "C" {
++#include <cstdio>
+ #ifdef _GMP_H_HAVE_FILE
+ using std::FILE;
+ #endif
diff --git a/packages/gmp/gmp-4.2.2/mpf_set_str_c.diff b/packages/gmp/gmp-4.2.2/mpf_set_str_c.diff
new file mode 100644
index 0000000000..1924611640
--- /dev/null
+++ b/packages/gmp/gmp-4.2.2/mpf_set_str_c.diff
@@ -0,0 +1,38 @@
+*** gmp-4.2.2.orig/mpf/set_str.c 30 Aug 2007 18:19:41 -0000
+--- gmp-4.2.2/mpf/set_str.c 10 Dec 2007 04:47:18 -0000
+*************** mpf_set_str (mpf_ptr x, const char *str,
+*** 272,277 ****
+
+ if (expptr != 0)
+! /* FIXME: Should do some error checking here. */
+! exp_in_base = strtol (expptr, (char **) 0, exp_base);
+ else
+ exp_in_base = 0;
+--- 272,298 ----
+
+ if (expptr != 0)
+! {
+! /* Scan and convert the exponent, in base exp_base. */
+! long dig, neg = -(long) ('-' == expptr[0]);
+! expptr -= neg; /* conditional increment */
+! c = (unsigned char) *expptr++;
+! dig = digit_value[c];
+! if (dig >= exp_base)
+! {
+! TMP_FREE;
+! return -1;
+! }
+! exp_in_base = dig;
+! c = (unsigned char) *expptr++;
+! dig = digit_value[c];
+! while (dig < exp_base)
+! {
+! exp_in_base = exp_in_base * exp_base;
+! exp_in_base += dig;
+! c = (unsigned char) *expptr++;
+! dig = digit_value[c];
+! }
+! exp_in_base = (exp_in_base ^ neg) - neg; /* conditional negation */
+! }
+ else
+ exp_in_base = 0;
diff --git a/packages/gmp/gmp-4.2.2/sh4-asmfix.patch b/packages/gmp/gmp-4.2.2/sh4-asmfix.patch
new file mode 100644
index 0000000000..1a01f61533
--- /dev/null
+++ b/packages/gmp/gmp-4.2.2/sh4-asmfix.patch
@@ -0,0 +1,26 @@
+--- gmp-4.1.4/mpn/sh/add_n.s 2005/11/17 08:44:00 1.1
++++ gmp-4.1.4/mpn/sh/add_n.s 2005/11/17 08:18:57
+@@ -29,8 +29,8 @@
+
+ .text
+ .align 2
+- .global ___gmpn_add_n
+-___gmpn_add_n:
++ .global __gmpn_add_n
++__gmpn_add_n:
+ mov #0,r3 ! clear cy save reg
+
+ Loop: mov.l @r5+,r1
+--- gmp-4.1.4/mpn/sh/sub_n.s 2005/11/17 08:44:04 1.1
++++ gmp-4.1.4/mpn/sh/sub_n.s 2005/11/17 08:18:59
+@@ -29,8 +29,8 @@
+
+ .text
+ .align 2
+- .global ___gmpn_sub_n
+-___gmpn_sub_n:
++ .global __gmpn_sub_n
++__gmpn_sub_n:
+ mov #0,r3 ! clear cy save reg
+
+ Loop: mov.l @r5+,r1
diff --git a/packages/gmp/gmp-4.2.2/x86-fat.diff b/packages/gmp/gmp-4.2.2/x86-fat.diff
new file mode 100644
index 0000000000..2a54622a26
--- /dev/null
+++ b/packages/gmp/gmp-4.2.2/x86-fat.diff
@@ -0,0 +1,122 @@
+See:
+
+ http://gmplib.org/patches/x86-fat.diff
+ http://gmplib.org/list-archives/gmp-bugs/2006-October/000579.html
+ http://gmplib.org/#BUGREPORTS
+
+Removed the configure part of the patch since we patch configure.in. It was
+only needed for FAT binaries anyway and this is being included to fix
+linking errors.
+
+Index: mpn/generic/addsub_n.c
+===================================================================
+RCS file: /home/cvsfiles/gmp42/mpn/generic/addsub_n.c,v
+retrieving revision 1.1
+retrieving revision 1.2
+diff -p -2 -r1.1 -r1.2
+*** mpn/generic/addsub_n.c 14 Mar 2006 15:57:54 -0000 1.1
+--- mpn/generic/addsub_n.c 15 May 2006 22:38:42 -0000 1.2
+***************
+*** 1,5 ****
+ /* mpn_addsub_n -- Add and Subtract two limb vectors of equal, non-zero length.
+
+! Copyright 1999, 2000, 2001 Free Software Foundation, Inc.
+
+ This file is part of the GNU MP Library.
+--- 1,5 ----
+ /* mpn_addsub_n -- Add and Subtract two limb vectors of equal, non-zero length.
+
+! Copyright 1999, 2000, 2001, 2006 Free Software Foundation, Inc.
+
+ This file is part of the GNU MP Library.
+*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
+*** 59,63 ****
+ {
+ this_n = MIN (n - off, PART_SIZE);
+! #if HAVE_NATIVE_mpn_add_nc || !HAVE_NATIVE_mpn_add_n
+ acyo = mpn_add_nc (r1p + off, s1p + off, s2p + off, this_n, acyo);
+ #else
+--- 59,63 ----
+ {
+ this_n = MIN (n - off, PART_SIZE);
+! #if HAVE_NATIVE_mpn_add_nc
+ acyo = mpn_add_nc (r1p + off, s1p + off, s2p + off, this_n, acyo);
+ #else
+*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
+*** 65,69 ****
+ acyo = acyn + mpn_add_1 (r1p + off, r1p + off, this_n, acyo);
+ #endif
+! #if HAVE_NATIVE_mpn_sub_nc || !HAVE_NATIVE_mpn_sub_n
+ scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo);
+ #else
+--- 65,69 ----
+ acyo = acyn + mpn_add_1 (r1p + off, r1p + off, this_n, acyo);
+ #endif
+! #if HAVE_NATIVE_mpn_sub_nc
+ scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo);
+ #else
+*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
+*** 82,86 ****
+ {
+ this_n = MIN (n - off, PART_SIZE);
+! #if HAVE_NATIVE_mpn_sub_nc || !HAVE_NATIVE_mpn_sub_n
+ scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo);
+ #else
+--- 82,86 ----
+ {
+ this_n = MIN (n - off, PART_SIZE);
+! #if HAVE_NATIVE_mpn_sub_nc
+ scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo);
+ #else
+*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
+*** 88,92 ****
+ scyo = scyn + mpn_sub_1 (r2p + off, r2p + off, this_n, scyo);
+ #endif
+! #if HAVE_NATIVE_mpn_add_nc || !HAVE_NATIVE_mpn_add_n
+ acyo = mpn_add_nc (r1p + off, s1p + off, s2p + off, this_n, acyo);
+ #else
+--- 88,92 ----
+ scyo = scyn + mpn_sub_1 (r2p + off, r2p + off, this_n, scyo);
+ #endif
+! #if HAVE_NATIVE_mpn_add_nc
+ acyo = mpn_add_nc (r1p + off, s1p + off, s2p + off, this_n, acyo);
+ #else
+*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
+*** 98,102 ****
+ else
+ {
+! /* r1 and r2 are identical to s1 and s2 (r1==s1 and r2=s2 or vice versa)
+ Need temporary storage. */
+ mp_limb_t tp[PART_SIZE];
+--- 98,102 ----
+ else
+ {
+! /* r1 and r2 are identical to s1 and s2 (r1==s1 and r2==s2 or vice versa)
+ Need temporary storage. */
+ mp_limb_t tp[PART_SIZE];
+*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
+*** 106,110 ****
+ {
+ this_n = MIN (n - off, PART_SIZE);
+! #if HAVE_NATIVE_mpn_add_nc || !HAVE_NATIVE_mpn_add_n
+ acyo = mpn_add_nc (tp, s1p + off, s2p + off, this_n, acyo);
+ #else
+--- 106,110 ----
+ {
+ this_n = MIN (n - off, PART_SIZE);
+! #if HAVE_NATIVE_mpn_add_nc
+ acyo = mpn_add_nc (tp, s1p + off, s2p + off, this_n, acyo);
+ #else
+*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
+*** 112,116 ****
+ acyo = acyn + mpn_add_1 (tp, tp, this_n, acyo);
+ #endif
+! #if HAVE_NATIVE_mpn_sub_nc || !HAVE_NATIVE_mpn_sub_n
+ scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo);
+ #else
+--- 112,116 ----
+ acyo = acyn + mpn_add_1 (tp, tp, this_n, acyo);
+ #endif
+! #if HAVE_NATIVE_mpn_sub_nc
+ scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo);
+ #else
diff --git a/packages/gmp/gmp-native_4.2.2.bb b/packages/gmp/gmp-native_4.2.2.bb
new file mode 100644
index 0000000000..af85db61f2
--- /dev/null
+++ b/packages/gmp/gmp-native_4.2.2.bb
@@ -0,0 +1,2 @@
+PV = "4.2.2"
+require gmp-native.inc
diff --git a/packages/gmp/gmp_4.2.2.bb b/packages/gmp/gmp_4.2.2.bb
new file mode 100644
index 0000000000..295237f0f3
--- /dev/null
+++ b/packages/gmp/gmp_4.2.2.bb
@@ -0,0 +1,8 @@
+PR = "r1"
+
+SRC_URI_append += "file://02_noexec-stack.diff;patch=1 \
+ file://03_gnu89-inline.diff;patch=1 \
+ file://mpf_set_str_c.diff;patch=1 \
+ file://sh4-asmfix.patch;patch=1 \
+ "
+require gmp.inc