|
From: <sv...@va...> - 2009-05-25 01:18:15
|
Author: njn
Date: 2009-05-25 02:18:07 +0100 (Mon, 25 May 2009)
New Revision: 10141
Log:
Merge r9063 (Helgrind fixes) from the trunk.
Modified:
branches/DARWIN/helgrind/hg_main.c
Modified: branches/DARWIN/helgrind/hg_main.c
===================================================================
--- branches/DARWIN/helgrind/hg_main.c 2009-05-25 01:17:40 UTC (rev 10140)
+++ branches/DARWIN/helgrind/hg_main.c 2009-05-25 01:18:07 UTC (rev 10141)
@@ -2869,6 +2869,21 @@
/* end EXPOSITION ONLY */
+__attribute__((noinline))
+static void laog__init ( void )
+{
+ tl_assert(!laog);
+ tl_assert(!laog_exposition);
+
+ laog = VG_(newFM)( HG_(zalloc), "hg.laog__init.1",
+ HG_(free), NULL/*unboxedcmp*/ );
+
+ laog_exposition = VG_(newFM)( HG_(zalloc), "hg.laog__init.2", HG_(free),
+ cmp_LAOGLinkExposition );
+ tl_assert(laog);
+ tl_assert(laog_exposition);
+}
+
static void laog__show ( Char* who ) {
Word i, ws_size;
UWord* ws_words;
@@ -3035,8 +3050,8 @@
UWord* ws_words;
Lock* me;
LAOGLinks* links;
- if ( !laog )
- return; /* nothing much we can do */
+ if (UNLIKELY(!laog || !laog_exposition))
+ laog__init();
VG_(initIterFM)( laog );
me = NULL;
links = NULL;
@@ -3148,12 +3163,8 @@
if (HG_(elemWS)( univ_lsets, thr->locksetA, (Word)lk ))
return;
- if (!laog)
- laog = VG_(newFM)( HG_(zalloc), "hg.lptal.1",
- HG_(free), NULL/*unboxedcmp*/ );
- if (!laog_exposition)
- laog_exposition = VG_(newFM)( HG_(zalloc), "hg.lptal.2", HG_(free),
- cmp_LAOGLinkExposition );
+ if (UNLIKELY(!laog || !laog_exposition))
+ laog__init();
/* First, the check. Complain if there is any path in laog from lk
to any of the locks already held by thr, since if any such path
@@ -3226,6 +3237,9 @@
Word preds_size, succs_size, i, j;
UWord *preds_words, *succs_words;
+ if (UNLIKELY(!laog || !laog_exposition))
+ laog__init();
+
preds = laog__preds( lk );
succs = laog__succs( lk );
@@ -3257,11 +3271,8 @@
// Word i, ws_size;
// UWord* ws_words;
//
-// if (!laog)
-// laog = VG_(newFM)( HG_(zalloc), "hg.lhld.1", HG_(free), NULL/*unboxedcmp*/ );
-// if (!laog_exposition)
-// laog_exposition = VG_(newFM)( HG_(zalloc), "hg.lhld.2", HG_(free),
-// cmp_LAOGLinkExposition );
+// if (UNLIKELY(!laog || !laog_exposition))
+// laog__init();
//
// HG_(getPayloadWS)( &ws_words, &ws_size, univ_lsets, locksToDelete );
// for (i = 0; i < ws_size; i++)
|