summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortron <tron>2012-06-18 22:18:35 +0000
committertron <tron>2012-06-18 22:18:35 +0000
commit9c991d0af0607b8af02134b96e2b3f7a3700fd35 (patch)
tree9fb077dfaf90e84e8229b7b17cc662fe9957208d
parent8e77066bf0d0c6bc0dbaf07678e695367b127fd0 (diff)
downloadpkgsrc-9c991d0af0607b8af02134b96e2b3f7a3700fd35.tar.gz
Pullup ticket #3835 - requested by dholland
devel/electric-fence: build fix Revisions pulled up: - devel/electric-fence/Makefile 1.4 - devel/electric-fence/distinfo 1.2 - devel/electric-fence/patches/patch-efence_c 1.1 --- Module Name: pkgsrc Committed By: dholland Date: Sat Jun 16 07:46:55 UTC 2012 Modified Files: pkgsrc/devel/electric-fence: Makefile distinfo Added Files: pkgsrc/devel/electric-fence/patches: patch-efence_c Log Message: Add gcc memory barriers after the manner of emacs20's patch-bm, for the same reason: gcc "knows" that malloc has no side effects and reorders code around it, only it's wrong. Fixes SIGSEGV during build seen in some environments. Bump package revision as a precaution, because I don't understand why this sometimes doesn't fail and sometimes does with the same gcc version.
-rw-r--r--devel/electric-fence/Makefile3
-rw-r--r--devel/electric-fence/distinfo3
-rw-r--r--devel/electric-fence/patches/patch-efence_c46
3 files changed, 50 insertions, 2 deletions
diff --git a/devel/electric-fence/Makefile b/devel/electric-fence/Makefile
index 440642ac632..55c89543e86 100644
--- a/devel/electric-fence/Makefile
+++ b/devel/electric-fence/Makefile
@@ -1,7 +1,8 @@
-# $NetBSD: Makefile,v 1.3 2010/11/13 21:08:56 shattered Exp $
+# $NetBSD: Makefile,v 1.3.12.1 2012/06/18 22:18:35 tron Exp $
DISTNAME= electric-fence_2.1.13-0.1
PKGNAME= electric-fence-2.1.13.0.1
+PKGREVISION= 1
CATEGORIES= devel
MASTER_SITES= http://perens.com/works/software/ElectricFence/
diff --git a/devel/electric-fence/distinfo b/devel/electric-fence/distinfo
index ea952a1a9fe..d1a6470b700 100644
--- a/devel/electric-fence/distinfo
+++ b/devel/electric-fence/distinfo
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.1.1.1 2010/02/14 00:06:16 reed Exp $
+$NetBSD: distinfo,v 1.1.1.1.18.1 2012/06/18 22:18:35 tron Exp $
SHA1 (electric-fence_2.1.13-0.1.tar.gz) = e6765bcb1543272040b806eea706fc7ae9b60524
RMD160 (electric-fence_2.1.13-0.1.tar.gz) = 75e41de7bef263007f24a1053528959f9f7fe1fa
@@ -6,3 +6,4 @@ Size (electric-fence_2.1.13-0.1.tar.gz) = 29991 bytes
SHA1 (patch-aa) = 9b2f1720a92c805d8d4b36631317493124c2f2d7
SHA1 (patch-ab) = 64c503ce8d2ea9b55432d59a187e644af38e257b
SHA1 (patch-ac) = 4c56eeea0b8e53cdf260b61aa8fdef16f601b186
+SHA1 (patch-efence_c) = 2d97cf8a643b2b1c63c0a039267f4cf63b1a854a
diff --git a/devel/electric-fence/patches/patch-efence_c b/devel/electric-fence/patches/patch-efence_c
new file mode 100644
index 00000000000..911c26ed24f
--- /dev/null
+++ b/devel/electric-fence/patches/patch-efence_c
@@ -0,0 +1,46 @@
+$NetBSD: patch-efence_c,v 1.1.2.2 2012/06/18 22:18:35 tron Exp $
+
+Add memory barriers for gcc around recursive calls to malloc and free
+with "internalUse" set to 1. gcc fervently believes that malloc and
+free do not interact with anything else, and so it freely reorders code
+around calls to malloc. This causes internalUse to not be set to 1
+during the recursive call, which results in an infinite recursion.
+
+Compare patch-bm in editors/emacs20.
+
+--- efence.c~ 2002-02-19 22:10:46.000000000 +0000
++++ efence.c
+@@ -377,7 +377,16 @@ allocateMoreSlots(void)
+ noAllocationListProtection = 1;
+ internalUse = 1;
+
++#ifdef __GNUC__
++ __asm __volatile("":::"memory");
++#endif
++
+ newAllocation = malloc(newSize);
++
++#ifdef __GNUC__
++ __asm __volatile("":::"memory");
++#endif
++
+ memcpy(newAllocation, allocationList, allocationListSize);
+ memset(&(((char *)newAllocation)[allocationListSize]), 0, bytesPerPage);
+
+@@ -386,8 +395,16 @@ allocateMoreSlots(void)
+ slotCount += slotsPerPage;
+ unUsedSlots += slotsPerPage;
+
++#ifdef __GNUC__
++ __asm __volatile("":::"memory");
++#endif
++
+ free(oldAllocation);
+
++#ifdef __GNUC__
++ __asm __volatile("":::"memory");
++#endif
++
+ /*
+ * Keep access to the allocation list open at this point, because
+ * I am returning to memalign(), which needs that access.