summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorNicolás Reynolds <fauno@endefensadelsl.org>2014-05-10 03:49:37 +0000
committerNicolás Reynolds <fauno@endefensadelsl.org>2014-05-10 03:49:37 +0000
commitbf8ca82240123cfd3e65739dc2318f5f1d145d12 (patch)
treeb8320743e13c3a3de7a54a217ec30970c6336706 /core
parent66018e3cb2f893ec3add478fcd86ed3334e46fa9 (diff)
Sat May 10 03:41:34 UTC 2014
Diffstat (limited to 'core')
-rw-r--r--core/gcc/PKGBUILD25
-rw-r--r--core/gcc/gcc-4.9-tree-ssa-threadedge.patch38
2 files changed, 54 insertions, 9 deletions
diff --git a/core/gcc/PKGBUILD b/core/gcc/PKGBUILD
index fa27b2680..5839c520e 100644
--- a/core/gcc/PKGBUILD
+++ b/core/gcc/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 211960 2014-05-02 08:39:39Z allan $
+# $Id: PKGBUILD 212143 2014-05-09 01:21:38Z allan $
# Maintainer: Allan McRae <allan@archlinux.org>
# toolchain build order: linux-api-headers->glibc->binutils->gcc->binutils->glibc
@@ -7,8 +7,8 @@
pkgname=('gcc' 'gcc-libs' 'gcc-fortran' 'gcc-objc' 'gcc-ada' 'gcc-go')
pkgver=4.9.0
_pkgver=4.9
-pkgrel=1
-#_snapshot=4.9.0-RC-20140411
+pkgrel=2
+_snapshot=4.9-20140507
pkgdesc="The GNU Compiler Collection"
arch=('i686' 'x86_64')
license=('GPL' 'LGPL' 'FDL' 'custom')
@@ -16,11 +16,13 @@ url="http://gcc.gnu.org"
makedepends=('binutils>=2.24' 'libmpc' 'cloog' 'gcc-ada' 'doxygen')
checkdepends=('dejagnu' 'inetutils')
options=('!emptydirs')
-source=(ftp://gcc.gnu.org/pub/gcc/releases/gcc-${pkgver}/gcc-${pkgver}.tar.bz2
- #ftp://gcc.gnu.org/pub/gcc/snapshots/${_snapshot}/gcc-${_snapshot}.tar.bz2
- gcc-4.8-filename-output.patch)
-md5sums=('9709b49ae0e904cbb0a6a1b62853b556'
- '40cb437805e2f7a006aa0d0c3098ab0f')
+source=(#ftp://gcc.gnu.org/pub/gcc/releases/gcc-${pkgver}/gcc-${pkgver}.tar.bz2
+ ftp://gcc.gnu.org/pub/gcc/snapshots/${_snapshot}/gcc-${_snapshot}.tar.bz2
+ gcc-4.8-filename-output.patch
+ gcc-4.9-tree-ssa-threadedge.patch)
+md5sums=('47dc2b91d2876daff53c20c30164c38f'
+ '40cb437805e2f7a006aa0d0c3098ab0f'
+ '311ece7f5446d550e84e28692d2fb823')
if [ -n "${_snapshot}" ]; then
_basedir=gcc-${_snapshot}
@@ -47,6 +49,9 @@ prepare() {
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57653
patch -p0 -i ${srcdir}/gcc-4.8-filename-output.patch
+ # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60902
+ patch -p1 -i ${srcdir}/gcc-4.9-tree-ssa-threadedge.patch
+
mkdir ${srcdir}/gcc-build
}
@@ -177,6 +182,8 @@ package_gcc()
make -C $CHOST/libsanitizer/asan DESTDIR=${pkgdir} install-nodist_toolexeclibHEADERS
make -C libiberty DESTDIR=${pkgdir} install
+ # install PIC version of libiberty
+ install -m644 ${srcdir}/gcc-build/libiberty/pic/libiberty.a ${pkgdir}/usr/lib
make -C gcc DESTDIR=${pkgdir} install-man install-info
rm ${pkgdir}/usr/share/man/man1/{gccgo,gfortran}.1
@@ -185,7 +192,7 @@ package_gcc()
make -C libcpp DESTDIR=${pkgdir} install
make -C gcc DESTDIR=${pkgdir} install-po
- # many packages expect this symlinks
+ # many packages expect this symlink
ln -s gcc ${pkgdir}/usr/bin/cc
# POSIX conformance launcher scripts for c89 and c99
diff --git a/core/gcc/gcc-4.9-tree-ssa-threadedge.patch b/core/gcc/gcc-4.9-tree-ssa-threadedge.patch
new file mode 100644
index 000000000..8827427e4
--- /dev/null
+++ b/core/gcc/gcc-4.9-tree-ssa-threadedge.patch
@@ -0,0 +1,38 @@
+--- trunk/gcc/tree-ssa-threadedge.c 2014/04/23 17:53:56 209715
++++ trunk/gcc/tree-ssa-threadedge.c 2014/04/23 18:04:46 209716
+@@ -387,7 +387,34 @@
+ && (gimple_code (stmt) != GIMPLE_CALL
+ || gimple_call_lhs (stmt) == NULL_TREE
+ || TREE_CODE (gimple_call_lhs (stmt)) != SSA_NAME))
+- continue;
++ {
++ /* STMT might still have DEFS and we need to invalidate any known
++ equivalences for them.
++
++ Consider if STMT is a GIMPLE_ASM with one or more outputs that
++ feeds a conditional inside a loop. We might derive an equivalence
++ due to the conditional. */
++ tree op;
++ ssa_op_iter iter;
++
++ if (backedge_seen)
++ FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_DEF)
++ {
++ /* This call only invalidates equivalences created by
++ PHI nodes. This is by design to keep the cost of
++ of invalidation reasonable. */
++ invalidate_equivalences (op, stack, src_map, dst_map);
++
++ /* However, conditionals can imply values for real
++ operands as well. And those won't be recorded in the
++ maps. In fact, those equivalences may be recorded totally
++ outside the threading code. We can just create a new
++ temporary NULL equivalence here. */
++ record_temporary_equivalence (op, NULL_TREE, stack);
++ }
++
++ continue;
++ }
+
+ /* The result of __builtin_object_size depends on all the arguments
+ of a phi node. Temporarily using only one edge produces invalid