]> code.ossystems Code Review - openembedded-core.git/commitdiff
gmp: fix the recipe for x32 target
authorNitin A Kamble <nitin.a.kamble@intel.com>
Fri, 2 Dec 2011 20:20:02 +0000 (12:20 -0800)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Mon, 5 Dec 2011 22:42:48 +0000 (22:42 +0000)
Add support for building with x32 toolchain.

Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/recipes-support/gmp/gmp/gmp_bugfix.patch [new file with mode: 0644]
meta/recipes-support/gmp/gmp/gmp_fix_for_x32.patch [new file with mode: 0644]
meta/recipes-support/gmp/gmp_5.0.2.bb

diff --git a/meta/recipes-support/gmp/gmp/gmp_bugfix.patch b/meta/recipes-support/gmp/gmp/gmp_bugfix.patch
new file mode 100644 (file)
index 0000000..a96136f
--- /dev/null
@@ -0,0 +1,94 @@
+UpstreamStatus: Pending
+
+When LONG_MIN is passed to val, -val is undefined.  This patch fixes
+it.  See for details: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50066
+
+Received this patch from H.J. Lu <hjl.tools@gmail.com>
+
+Signed-Off-By: Nitin A Kamble <nitin.a.kamble@intel.com> 2011/12/01
+
+--- gmp-4.3.2/mpf/iset_si.c.ll 2010-01-07 12:09:03.000000000 -0800
++++ gmp-4.3.2/mpf/iset_si.c    2011-11-30 16:42:35.827944358 -0800
+@@ -31,7 +31,7 @@ mpf_init_set_si (mpf_ptr r, long int val
+   r->_mp_prec = prec;
+   r->_mp_d = (mp_ptr) (*__gmp_allocate_func) ((prec + 1) * BYTES_PER_MP_LIMB);
+-  vl = (mp_limb_t) (unsigned long int) (val >= 0 ? val : -val);
++  vl = (mp_limb_t) (val >= 0 ? (unsigned long int) val : -(unsigned long int) val);
+   r->_mp_d[0] = vl & GMP_NUMB_MASK;
+   size = vl != 0;
+--- gmp-4.3.2/mpf/set_si.c.ll  2010-01-07 12:09:03.000000000 -0800
++++ gmp-4.3.2/mpf/set_si.c     2011-11-30 16:42:47.823878367 -0800
+@@ -27,7 +27,7 @@ mpf_set_si (mpf_ptr dest, long val)
+   mp_size_t size;
+   mp_limb_t vl;
+-  vl = (mp_limb_t) (unsigned long int) (val >= 0 ? val : -val);
++  vl = (mp_limb_t) (val >= 0 ? (unsigned long int) val : -(unsigned long int) val);
+   dest->_mp_d[0] = vl & GMP_NUMB_MASK;
+   size = vl != 0;
+--- gmp-4.3.2/mpz/cmp_si.c.ll  2010-01-07 12:09:03.000000000 -0800
++++ gmp-4.3.2/mpz/cmp_si.c     2011-11-30 13:44:25.923319700 -0800
+@@ -27,7 +27,7 @@ _mpz_cmp_si (mpz_srcptr u, signed long i
+ {
+   mp_size_t usize = u->_mp_size;
+   mp_size_t vsize;
+-  mp_limb_t u_digit;
++  mp_limb_t u_digit, vl_digit;
+ #if GMP_NAIL_BITS != 0
+   /* FIXME.  This isn't very pretty.  */
+@@ -41,11 +41,14 @@ _mpz_cmp_si (mpz_srcptr u, signed long i
+   vsize = 0;
+   if (v_digit > 0)
+-    vsize = 1;
++    {
++      vsize = 1;
++      vl_digit = (mp_limb_t) (unsigned long) v_digit;
++    }
+   else if (v_digit < 0)
+     {
+       vsize = -1;
+-      v_digit = -v_digit;
++      vl_digit = (mp_limb_t) -(unsigned long) v_digit;
+     }
+   if (usize != vsize)
+@@ -56,10 +59,10 @@ _mpz_cmp_si (mpz_srcptr u, signed long i
+   u_digit = u->_mp_d[0];
+-  if (u_digit == (mp_limb_t) (unsigned long) v_digit)
++  if (u_digit == vl_digit)
+     return 0;
+-  if (u_digit > (mp_limb_t) (unsigned long) v_digit)
++  if (u_digit > vl_digit)
+     return usize;
+   else
+     return -usize;
+--- gmp-4.3.2/mpz/iset_si.c.ll 2010-01-07 12:09:03.000000000 -0800
++++ gmp-4.3.2/mpz/iset_si.c    2011-11-30 13:44:25.924319695 -0800
+@@ -31,7 +31,7 @@ mpz_init_set_si (mpz_ptr dest, signed lo
+   dest->_mp_alloc = 1;
+   dest->_mp_d = (mp_ptr) (*__gmp_allocate_func) (BYTES_PER_MP_LIMB);
+-  vl = (mp_limb_t) (unsigned long int) (val >= 0 ? val : -val);
++  vl = (mp_limb_t) (val >= 0 ? (unsigned long int) val : -(unsigned long int) val);
+   dest->_mp_d[0] = vl & GMP_NUMB_MASK;
+   size = vl != 0;
+--- gmp-4.3.2/mpz/set_si.c.ll  2010-01-07 12:09:03.000000000 -0800
++++ gmp-4.3.2/mpz/set_si.c     2011-11-30 13:44:25.947319574 -0800
+@@ -27,7 +27,7 @@ mpz_set_si (mpz_ptr dest, signed long in
+   mp_size_t size;
+   mp_limb_t vl;
+-  vl = (mp_limb_t) (unsigned long int) (val >= 0 ? val : -val);
++  vl = (mp_limb_t) (val >= 0 ? (unsigned long int) val : -(unsigned long int) val);
+   dest->_mp_d[0] = vl & GMP_NUMB_MASK;
+   size = vl != 0;
diff --git a/meta/recipes-support/gmp/gmp/gmp_fix_for_x32.patch b/meta/recipes-support/gmp/gmp/gmp_fix_for_x32.patch
new file mode 100644 (file)
index 0000000..b8e22aa
--- /dev/null
@@ -0,0 +1,45 @@
+Upstream-Status: Pending
+
+Add X32 support in gmp configure.
+
+Patch Originator: H J Lu @ Intel
+Patch modified for Yocto by Nitin Kamble
+Signed Off By: Nitin A Kamble <nitin.a.kamble@intel.com> 2011/11/21
+
+--- gmp-4.3.2/configure.in.x32 2011-08-12 15:03:06.143548291 -0700
++++ gmp-4.3.2/configure.in     2011-08-12 15:06:20.580595316 -0700
+@@ -1499,6 +1499,25 @@ case $host in
+           path_64="x86_64/atom x86_64"
+           ;;
+       esac
++
++      # X32 support.
++      case x"$path_64" in
++        xx86_64*)
++          case x"$CC $CFLAGS" in
++            x*-mx32*)
++              abilist="x32 64 32"
++              path_x32="$path_64"
++              limb_x32=longlong
++              cclist_x32="gcc"
++              gcc_x32_cflags="-O2 -mx32"
++              any_x32_testlist="sizeof-long-4"
++              CALLING_CONVENTIONS_OBJS_x32='amd64call.lo amd64check$U.lo'
++              SPEED_CYCLECOUNTER_OBJ_x32=x86_64.lo
++              cyclecounter_size_x32=2
++              ;;
++          esac
++          ;;
++      esac
+       ;;
+     esac
+     ;;
+@@ -3039,7 +3058,7 @@ if test "$gmp_asm_syntax_testing" != no;
+             GMP_INCLUDE_MPN(x86/darwin.m4) ;;
+         esac
+           ;;
+-        64)
++        64|x32)
+           GMP_INCLUDE_MPN(x86_64/x86_64-defs.m4)
+         case $host in
+           *-*-darwin*)
index 873fc3ea0ee47d4bac5b2e86228f5e8cbd64e943..c28e745dc9a218c10220c9ecba14dea97d7c6474 100644 (file)
@@ -2,10 +2,12 @@ require gmp.inc
 LICENSE="LGPLv3&GPLv3"
 LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
                    file://version.c;endline=18;md5=d8c56b52b9092346b9f93b4da65ef790"
-PR = "r2"
+PR = "r3"
 
 SRC_URI_append += "file://sh4-asmfix.patch \
-                   file://use-includedir.patch "
+                   file://gmp_bugfix.patch \
+                   file://use-includedir.patch \
+                   file://gmp_fix_for_x32.patch"
 
 export CC_FOR_BUILD = "${BUILD_CC}"