gmp: update to latest stable upstream

This brings us a bug fix or two and x32 support.

BUG=chromium-os:25655
TEST=`emerge gmp` works
TEST=build_packages+build_image for x86-alex boots

Change-Id: I7117e9a9e7a4dca7ad081efa727ca72be75e503f
CQ-DEPENDS=Iaab88d2c2736fccc696ab0c950bb8e7391f975df
Reviewed-on: https://gerrit.chromium.org/gerrit/15054
Reviewed-by: Matt Tennant <mtennant@chromium.org>
Commit-Ready: Mike Frysinger <vapier@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
This commit is contained in:
Mike Frysinger 2012-01-30 16:21:14 -05:00 committed by Gerrit
parent c0168afc2c
commit 40847edb13
4 changed files with 186 additions and 14 deletions

View File

@ -0,0 +1,21 @@
# HG changeset patch
# User Torbjorn Granlund <tege@gmplib.org>
# Date 1310730221 -7200
# Node ID 538dfce27f410b910d5e2f011119269e224d16a3
# Parent 03ed209dd7efd4f4fff0ce297bb3a8f7e7ba2366
(mpn_dcpi1_bdiv_q): Get mpn_sub_1 size argument right.
diff -r 03ed209dd7ef -r 538dfce27f41 mpn/generic/dcpi1_bdiv_q.c
--- a/mpn/generic/dcpi1_bdiv_q.c Thu Jun 16 12:22:24 2011 +0200
+++ b/mpn/generic/dcpi1_bdiv_q.c Fri Jul 15 13:43:41 2011 +0200
@@ -130,7 +129,7 @@
qn = nn - qn;
while (qn > dn)
{
- mpn_sub_1 (np + dn, np + dn, qn, cy);
+ mpn_sub_1 (np + dn, np + dn, qn - dn, cy);
cy = mpn_dcpi1_bdiv_qr_n (qp, np, dp, dn, dinv, tp);
qp += dn;
np += dn;

View File

@ -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;

View File

@ -0,0 +1,41 @@
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
+++ gmp-4.3.2/configure
@@ -1499,6 +1499,21 @@
path_64="x86_64/atom x86_64"
;;
esac
+
+ # X32 support.
+ case x"$path_64" in
+ xx86_64*)
+ 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
;;
@@ -3039,7 +3058,7 @@
;;
esac
;;
- 64)
+ 64|x32)
echo "include_mpn(\`x86_64/x86_64-defs.m4')" >> $gmp_tmpconfigm4i

View File

@ -1,28 +1,35 @@
# Copyright 1999-2011 Gentoo Foundation
# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/dev-libs/gmp/gmp-5.0.2.ebuild,v 1.5 2011/09/04 21:01:37 maekke Exp $
# $Header: /var/cvsroot/gentoo-x86/dev-libs/gmp/gmp-5.0.2_p1.ebuild,v 1.10 2012/01/03 10:21:17 vapier Exp $
inherit flag-o-matic eutils libtool flag-o-matic toolchain-funcs
inherit flag-o-matic eutils libtool toolchain-funcs
MY_PV=${PV/_p*}
MY_P=${PN}-${MY_PV}
PLEVEL=${PV/*p}
DESCRIPTION="Library for arithmetic on arbitrary precision integers, rational numbers, and floating-point numbers"
HOMEPAGE="http://gmplib.org/"
SRC_URI="mirror://gnu/${PN}/${P}.tar.bz2"
# doc? ( http://www.nada.kth.se/~tege/${PN}-man-${PV}.pdf )"
SRC_URI="mirror://gnu/${PN}/${MY_P}.tar.bz2
doc? ( http://gmplib.org/${PN}-man-${MY_PV}.pdf )"
LICENSE="LGPL-3"
SLOT="0"
KEYWORDS="~alpha amd64 arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc x86 ~sparc-fbsd ~x86-fbsd"
IUSE="nocxx" #doc
KEYWORDS="alpha amd64 arm hppa ia64 m68k ~mips ~ppc ~ppc64 s390 sh sparc x86 ~sparc-fbsd ~x86-fbsd"
IUSE="doc cxx static-libs"
DEPEND="sys-devel/m4"
RDEPEND=""
S=${WORKDIR}/${MY_P}
src_unpack() {
unpack ${A}
unpack ${MY_P}.tar.bz2
cd "${S}"
[[ -d ${FILESDIR}/${PV} ]] && EPATCH_SUFFIX="diff" EPATCH_FORCE="yes" epatch "${FILESDIR}"/${PV}
epatch "${FILESDIR}"/${PN}-4.1.4-noexecstack.patch
epatch "${FILESDIR}"/${PN}-5.0.0-s390.diff
epatch "${FILESDIR}"/${MY_P}-unnormalised-dividends.patch
has x32 $(get_all_abis) && epatch "${FILESDIR}"/${PN}-5.0.2*x32*.patch
# disable -fPIE -pie in the tests for x86 #236054
if use x86 && gcc-specs-pie ; then
@ -53,7 +60,7 @@ src_compile() {
case ${ABI} in
32|x86) GMPABI=32;;
64|amd64|n64) GMPABI=64;;
o32|n32) GMPABI=${ABI};;
[onx]32) GMPABI=${ABI};;
esac
export GMPABI
@ -61,20 +68,29 @@ src_compile() {
econf \
--localstatedir=/var/state/gmp \
--disable-mpbsd \
$(use_enable !nocxx cxx) \
|| die "configure failed"
$(use_enable cxx) \
$(use_enable static-libs static) \
|| die
emake || die "emake failed"
emake || die
}
src_install() {
emake DESTDIR="${D}" install || die "make install failed"
emake DESTDIR="${D}" install || die
# should be a standalone lib
rm -f "${D}"/usr/$(get_libdir)/libgmp.la
# this requires libgmp
local la="${D}/usr/$(get_libdir)/libgmpxx.la"
use static-libs \
&& sed -i 's:/[^ ]*/libgmp.la:-lgmp:' "${la}" \
|| rm -f "${la}"
dodoc AUTHORS ChangeLog NEWS README
dodoc doc/configuration doc/isa_abi_headache
dohtml -r doc
#use doc && cp "${DISTDIR}"/gmp-man-${PV}.pdf "${D}"/usr/share/doc/${PF}/
use doc && cp "${DISTDIR}"/gmp-man-${MY_PV}.pdf "${D}"/usr/share/doc/${PF}/
}
pkg_preinst() {