|
From: <sv...@va...> - 2009-06-06 08:48:32
|
Author: bart
Date: 2009-06-06 09:48:27 +0100 (Sat, 06 Jun 2009)
New Revision: 10257
Log:
- Replaced calls to DRD_(vc_snprint)() by calls to DRD_(vc_aprint)(),
and removed the implementation of DRD_(vc_snprint)().
- When segment tracing is enabled, information about updates of segment
vector clocks due to synchronization actions is now traced.
- Added command-line option --trace-conflict-set-bm.
Modified:
branches/DRDDEV/drd/drd_load_store.c
branches/DRDDEV/drd/drd_main.c
branches/DRDDEV/drd/drd_segment.c
branches/DRDDEV/drd/drd_semaphore.c
branches/DRDDEV/drd/drd_thread.c
branches/DRDDEV/drd/drd_thread.h
branches/DRDDEV/drd/drd_vc.c
branches/DRDDEV/drd/drd_vc.h
branches/DRDDEV/drd/tests/annotate_trace_memory.stderr.exp
Modified: branches/DRDDEV/drd/drd_load_store.c
===================================================================
--- branches/DRDDEV/drd/drd_load_store.c 2009-06-05 18:11:08 UTC (rev 10256)
+++ branches/DRDDEV/drd/drd_load_store.c 2009-06-06 08:48:27 UTC (rev 10257)
@@ -86,9 +86,9 @@
{
if (DRD_(is_any_traced)(addr, addr + size))
{
- char vc[80];
- DRD_(vc_snprint)(vc, sizeof(vc),
- DRD_(thread_get_vc)(DRD_(thread_get_running_tid)()));
+ char* vc;
+
+ vc = DRD_(vc_aprint)(DRD_(thread_get_vc)(DRD_(thread_get_running_tid)()));
VG_(message)(Vg_UserMsg,
"%s 0x%lx size %ld (vg %d / drd %d / vc %s)",
access_type == eLoad
@@ -105,6 +105,7 @@
VG_(get_running_tid)(),
DRD_(thread_get_running_tid)(),
vc);
+ VG_(free)(vc);
VG_(get_and_pp_StackTrace)(VG_(get_running_tid)(),
VG_(clo_backtrace_size));
tl_assert(DRD_(DrdThreadIdToVgThreadId)(DRD_(thread_get_running_tid)())
Modified: branches/DRDDEV/drd/drd_main.c
===================================================================
--- branches/DRDDEV/drd/drd_main.c 2009-06-05 18:11:08 UTC (rev 10256)
+++ branches/DRDDEV/drd/drd_main.c 2009-06-06 08:48:27 UTC (rev 10257)
@@ -79,6 +79,7 @@
int trace_csw = -1;
int trace_fork_join = -1;
int trace_conflict_set = -1;
+ int trace_conflict_set_bm = -1;
int trace_mutex = -1;
int trace_rwlock = -1;
int trace_segment = -1;
@@ -101,6 +102,7 @@
else if VG_BOOL_CLO(arg, "--trace-clientobj", trace_clientobj) {}
else if VG_BOOL_CLO(arg, "--trace-cond", trace_cond) {}
else if VG_BOOL_CLO(arg, "--trace-conflict-set", trace_conflict_set) {}
+ else if VG_BOOL_CLO(arg, "--trace-conflict-set-bm", trace_conflict_set_bm){}
else if VG_BOOL_CLO(arg, "--trace-csw", trace_csw) {}
else if VG_BOOL_CLO(arg, "--trace-fork-join", trace_fork_join) {}
else if VG_BOOL_CLO(arg, "--trace-mutex", trace_mutex) {}
@@ -157,6 +159,8 @@
DRD_(thread_set_trace_fork_join)(trace_fork_join);
if (trace_conflict_set != -1)
DRD_(thread_trace_conflict_set)(trace_conflict_set);
+ if (trace_conflict_set_bm != -1)
+ DRD_(thread_trace_conflict_set_bm)(trace_conflict_set_bm);
if (trace_mutex != -1)
DRD_(mutex_set_trace)(trace_mutex);
if (trace_rwlock != -1)
@@ -222,6 +226,9 @@
" --trace-clientobj=yes|no Trace all client object activity [no].\n"
" --trace-csw=yes|no Trace all scheduler context switches [no].\n"
" --trace-conflict-set=yes|no Trace all conflict set updates [no].\n"
+" --trace-conflict-set-bm=yes|no Trace all conflict set bitmap\n"
+" updates [no]. Note: enabling this option\n"
+" will generate a lot of output !\n"
" --trace-segment=yes|no Trace segment actions [no].\n"
" --trace-suppr=yes|no Trace all address suppression actions [no].\n"
);
Modified: branches/DRDDEV/drd/drd_segment.c
===================================================================
--- branches/DRDDEV/drd/drd_segment.c 2009-06-05 18:11:08 UTC (rev 10256)
+++ branches/DRDDEV/drd/drd_segment.c 2009-06-06 08:48:27 UTC (rev 10257)
@@ -89,16 +89,15 @@
if (s_trace_segment)
{
- char msg[256];
- VG_(snprintf)(msg, sizeof(msg),
- "New segment for thread %d/%d with vc ",
- created != VG_INVALID_THREADID
- ? DRD_(DrdThreadIdToVgThreadId)(created)
- : DRD_INVALID_THREADID,
- created);
- DRD_(vc_snprint)(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
- &sg->vc);
- VG_(message)(Vg_UserMsg, "%s", msg);
+ char* vc;
+
+ vc = DRD_(vc_aprint)(&sg->vc);
+ VG_(message)(Vg_DebugMsg, "New segment for thread %d/%d with vc %s",
+ created != VG_INVALID_THREADID
+ ? DRD_(DrdThreadIdToVgThreadId)(created)
+ : DRD_INVALID_THREADID,
+ created, vc);
+ VG_(free)(vc);
}
}
@@ -130,17 +129,15 @@
static void DRD_(sg_delete)(Segment* const sg)
{
-#if 1
if (DRD_(sg_get_trace)())
{
- char msg[256];
- VG_(snprintf)(msg, sizeof(msg),
- "Discarding the segment with vector clock ");
- DRD_(vc_snprint)(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
- &sg->vc);
- VG_(message)(Vg_UserMsg, "%s", msg);
+ char* vc;
+
+ vc = DRD_(vc_aprint)(&sg->vc);
+ VG_(message)(Vg_DebugMsg, "Discarding the segment with vector clock %s",
+ vc);
+ VG_(free)(vc);
}
-#endif
s_segments_alive_count--;
@@ -169,13 +166,13 @@
if (s_trace_segment)
{
- char msg[256];
- VG_(snprintf)(msg, sizeof(msg),
- "Decrementing segment reference count %d -> %d with vc ",
- sg->refcnt, sg->refcnt - 1);
- DRD_(vc_snprint)(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
- &sg->vc);
- VG_(message)(Vg_UserMsg, "%s", msg);
+ char* vc;
+
+ vc = DRD_(vc_aprint)(&sg->vc);
+ VG_(message)(Vg_DebugMsg,
+ "Decrementing segment reference count %d -> %d with vc %s",
+ sg->refcnt, sg->refcnt - 1, vc);
+ VG_(free)(vc);
}
tl_assert(sg->refcnt >= 1);
@@ -196,16 +193,15 @@
if (s_trace_segment)
{
- char msg[256];
+ char *vc1, *vc2;
- VG_(snprintf)(msg, sizeof(msg), "Merging segments with vector clocks ");
- DRD_(vc_snprint)(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
- &sg1->vc);
- VG_(snprintf)(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
- " and ");
- DRD_(vc_snprint)(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
- &sg2->vc);
- VG_(message)(Vg_UserMsg, "%s", msg);
+ vc1 = DRD_(vc_aprint)(&sg1->vc);
+ vc2 = DRD_(vc_aprint)(&sg2->vc);
+
+ VG_(message)(Vg_DebugMsg, "Merging segments with vector clocks %s and %s",
+ vc1, vc2);
+ VG_(free)(vc1);
+ VG_(free)(vc2);
}
s_segment_merge_count++;
Modified: branches/DRDDEV/drd/drd_semaphore.c
===================================================================
--- branches/DRDDEV/drd/drd_semaphore.c 2009-06-05 18:11:08 UTC (rev 10256)
+++ branches/DRDDEV/drd/drd_semaphore.c 2009-06-06 08:48:27 UTC (rev 10257)
@@ -332,11 +332,11 @@
}
p->last_sem_post_tid = tid;
- DRD_(thread_new_segment)(tid);
sg = 0;
DRD_(thread_get_latest_segment)(&sg, tid);
tl_assert(sg);
DRD_(segment_push)(p, sg);
+ DRD_(thread_new_segment)(tid);
s_semaphore_segment_creation_count++;
}
Modified: branches/DRDDEV/drd/drd_thread.c
===================================================================
--- branches/DRDDEV/drd/drd_thread.c 2009-06-05 18:11:08 UTC (rev 10256)
+++ branches/DRDDEV/drd/drd_thread.c 2009-06-06 08:48:27 UTC (rev 10257)
@@ -70,6 +70,7 @@
struct bitmap* DRD_(g_conflict_set);
static Bool s_trace_context_switches = False;
static Bool s_trace_conflict_set = False;
+static Bool s_trace_conflict_set_bm = False;
static Bool s_trace_fork_join = False;
static Bool s_segment_merging = True;
static Bool s_new_segments_since_last_merge;
@@ -92,6 +93,13 @@
s_trace_conflict_set = t;
}
+/** Enables/disables conflict set bitmap tracing. */
+void DRD_(thread_trace_conflict_set_bm)(const Bool t)
+{
+ tl_assert(t == False || t == True);
+ s_trace_conflict_set_bm = t;
+}
+
/** Report whether fork/join tracing is enabled. */
Bool DRD_(thread_get_trace_fork_join)(void)
{
@@ -334,10 +342,12 @@
joiner, drd_joiner, joinee, drd_joinee);
if (joiner)
{
+ char* vc;
+
+ vc = DRD_(vc_aprint)(DRD_(thread_get_vc)(drd_joiner));
VG_(snprintf)(msg + VG_(strlen)(msg), msg_size - VG_(strlen)(msg),
- ", new vc: ");
- DRD_(vc_snprint)(msg + VG_(strlen)(msg), msg_size - VG_(strlen)(msg),
- DRD_(thread_get_vc)(drd_joiner));
+ ", new vc: %s", vc);
+ VG_(free)(vc);
}
VG_(message)(Vg_DebugMsg, "%s", msg);
VG_(free)(msg);
@@ -505,13 +515,7 @@
&& tid != DRD_INVALID_THREADID);
tl_assert(!! joinable == joinable);
tl_assert(DRD_(g_threadinfo)[tid].pt_threadid != INVALID_POSIX_THREADID);
-#if 0
- VG_(message)(Vg_DebugMsg,
- "thread_set_joinable(%d/%d, %s)",
- tid,
- DRD_(g_threadinfo)[tid].vg_threadid,
- joinable ? "joinable" : "detached");
-#endif
+
DRD_(g_threadinfo)[tid].detached_posix_thread = ! joinable;
}
@@ -769,20 +773,18 @@
DRD_(thread_compute_minimum_vc)(&thread_vc_min);
if (DRD_(sg_get_trace)())
{
- char msg[256];
+ char *vc_min, *vc_max;
VectorClock thread_vc_max;
DRD_(vc_init)(&thread_vc_max, 0, 0);
DRD_(thread_compute_maximum_vc)(&thread_vc_max);
- VG_(snprintf)(msg, sizeof(msg),
- "Discarding ordered segments -- min vc is ");
- DRD_(vc_snprint)(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
- &thread_vc_min);
- VG_(snprintf)(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
- ", max vc is ");
- DRD_(vc_snprint)(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
- &thread_vc_max);
- VG_(message)(Vg_UserMsg, "%s", msg);
+ vc_min = DRD_(vc_aprint)(&thread_vc_min);
+ vc_max = DRD_(vc_aprint)(&thread_vc_max);
+ VG_(message)(Vg_DebugMsg,
+ "Discarding ordered segments -- min vc is %s, max vc is %s",
+ vc_min, vc_max);
+ VG_(free)(vc_min);
+ VG_(free)(vc_max);
DRD_(vc_cleanup)(&thread_vc_max);
}
@@ -960,8 +962,26 @@
&& joinee != DRD_INVALID_THREADID);
tl_assert(DRD_(g_threadinfo)[joiner].last);
tl_assert(DRD_(g_threadinfo)[joinee].last);
+
+ if (DRD_(sg_get_trace)())
+ {
+ char *str1, *str2;
+ str1 = DRD_(vc_aprint)(&DRD_(g_threadinfo)[joiner].last->vc);
+ str2 = DRD_(vc_aprint)(&DRD_(g_threadinfo)[joinee].last->vc);
+ VG_(message)(Vg_DebugMsg, "Before join: joiner %s, joinee %s",
+ str1, str2);
+ VG_(free)(str1);
+ VG_(free)(str2);
+ }
DRD_(vc_combine)(&DRD_(g_threadinfo)[joiner].last->vc,
&DRD_(g_threadinfo)[joinee].last->vc);
+ if (DRD_(sg_get_trace)())
+ {
+ char* str;
+ str = DRD_(vc_aprint)(&DRD_(g_threadinfo)[joiner].last->vc);
+ VG_(message)(Vg_DebugMsg, "After join: %s", str);
+ VG_(free)(str);
+ }
thread_discard_ordered_segments();
if (joiner == DRD_(g_drd_running_tid))
@@ -992,6 +1012,15 @@
DRD_(vc_copy)(&old_vc, &DRD_(g_threadinfo)[tid].last->vc);
DRD_(vc_combine)(&DRD_(g_threadinfo)[tid].last->vc, vc);
+ if (DRD_(sg_get_trace)())
+ {
+ char *str1, *str2;
+ str1 = DRD_(vc_aprint)(&old_vc);
+ str2 = DRD_(vc_aprint)(&DRD_(g_threadinfo)[tid].last->vc);
+ VG_(message)(Vg_DebugMsg, "thread %d: vc %s -> %s", tid, str1, str2);
+ VG_(free)(str1);
+ VG_(free)(str2);
+ }
thread_discard_ordered_segments();
DRD_(thread_update_conflict_set)(tid, &old_vc);
DRD_(vc_cleanup)(&old_vc);
@@ -1248,15 +1277,13 @@
if (s_trace_conflict_set)
{
- char msg[256];
+ char* str;
- VG_(snprintf)(msg, sizeof(msg),
- "computing conflict set for thread %d/%d with vc ",
- DRD_(DrdThreadIdToVgThreadId)(tid), tid);
- DRD_(vc_snprint)(msg + VG_(strlen)(msg),
- sizeof(msg) - VG_(strlen)(msg),
- &DRD_(g_threadinfo)[tid].last->vc);
- VG_(message)(Vg_UserMsg, "%s", msg);
+ str = DRD_(vc_aprint)(&DRD_(g_threadinfo)[tid].last->vc);
+ VG_(message)(Vg_DebugMsg,
+ "computing conflict set for thread %d/%d with vc %s",
+ DRD_(DrdThreadIdToVgThreadId)(tid), tid, str);
+ VG_(free)(str);
}
p = DRD_(g_threadinfo)[tid].last;
@@ -1265,15 +1292,12 @@
if (s_trace_conflict_set)
{
- char msg[256];
+ char* vc;
- VG_(snprintf)(msg, sizeof(msg),
- "conflict set: thread [%d] at vc ",
- tid);
- DRD_(vc_snprint)(msg + VG_(strlen)(msg),
- sizeof(msg) - VG_(strlen)(msg),
- &p->vc);
- VG_(message)(Vg_UserMsg, "%s", msg);
+ vc = DRD_(vc_aprint)(&p->vc);
+ VG_(message)(Vg_DebugMsg, "conflict set: thread [%d] at vc %s",
+ tid, vc);
+ VG_(free)(vc);
}
for (j = 0; j < DRD_N_THREADS; j++)
@@ -1288,13 +1312,13 @@
{
if (s_trace_conflict_set)
{
- char msg[256];
- VG_(snprintf)(msg, sizeof(msg),
- "conflict set: [%d] merging segment ", j);
- DRD_(vc_snprint)(msg + VG_(strlen)(msg),
- sizeof(msg) - VG_(strlen)(msg),
- &q->vc);
- VG_(message)(Vg_UserMsg, "%s", msg);
+ char* str;
+
+ str = DRD_(vc_aprint)(&q->vc);
+ VG_(message)(Vg_DebugMsg,
+ "conflict set: [%d] merging segment %s",
+ j, str);
+ VG_(free)(str);
}
DRD_(bm_merge2)(*conflict_set, DRD_(sg_bm)(q));
}
@@ -1302,13 +1326,13 @@
{
if (s_trace_conflict_set)
{
- char msg[256];
- VG_(snprintf)(msg, sizeof(msg),
- "conflict set: [%d] ignoring segment ", j);
- DRD_(vc_snprint)(msg + VG_(strlen)(msg),
- sizeof(msg) - VG_(strlen)(msg),
- &q->vc);
- VG_(message)(Vg_UserMsg, "%s", msg);
+ char* str;
+
+ str = DRD_(vc_aprint)(&q->vc);
+ VG_(message)(Vg_DebugMsg,
+ "conflict set: [%d] ignoring segment %s",
+ j, str);
+ VG_(free)(str);
}
}
}
@@ -1321,11 +1345,11 @@
s_conflict_set_bitmap2_creation_count
+= DRD_(bm_get_bitmap2_creation_count)();
- if (0 && s_trace_conflict_set)
+ if (s_trace_conflict_set_bm)
{
- VG_(message)(Vg_UserMsg, "[%d] new conflict set:", tid);
+ VG_(message)(Vg_DebugMsg, "[%d] new conflict set:", tid);
DRD_(bm_print)(*conflict_set);
- VG_(message)(Vg_UserMsg, "[%d] end of new conflict set.", tid);
+ VG_(message)(Vg_DebugMsg, "[%d] end of new conflict set.", tid);
}
}
@@ -1347,6 +1371,17 @@
tl_assert(tid == DRD_(g_drd_running_tid));
tl_assert(DRD_(g_conflict_set));
+ if (s_trace_conflict_set)
+ {
+ char* str;
+
+ str = DRD_(vc_aprint)(&DRD_(g_threadinfo)[tid].last->vc);
+ VG_(message)(Vg_DebugMsg,
+ "updating conflict set for thread %d/%d with vc %s",
+ DRD_(DrdThreadIdToVgThreadId)(tid), tid, str);
+ VG_(free)(str);
+ }
+
new_vc = &DRD_(g_threadinfo)[tid].last->vc;
DRD_(bm_unmark)(DRD_(g_conflict_set));
@@ -1368,8 +1403,29 @@
&& ! DRD_(vc_lte)(new_vc, &q->vc);
if (included_in_old_conflict_set != included_in_new_conflict_set)
{
+ if (s_trace_conflict_set)
+ {
+ char* str;
+
+ str = DRD_(vc_aprint)(&q->vc);
+ VG_(message)(Vg_DebugMsg,
+ "conflict set: [%d] merging segment %s", j, str);
+ VG_(free)(str);
+ }
DRD_(bm_mark)(DRD_(g_conflict_set), DRD_(sg_bm)(q));
}
+ else
+ {
+ if (s_trace_conflict_set)
+ {
+ char* str;
+
+ str = DRD_(vc_aprint)(&q->vc);
+ VG_(message)(Vg_DebugMsg,
+ "conflict set: [%d] ignoring segment %s", j, str);
+ VG_(free)(str);
+ }
+ }
}
}
@@ -1398,6 +1454,13 @@
s_conflict_set_combine_vc_count++;
+ if (s_trace_conflict_set_bm)
+ {
+ VG_(message)(Vg_DebugMsg, "[%d] updated conflict set:", tid);
+ DRD_(bm_print)(DRD_(g_conflict_set));
+ VG_(message)(Vg_DebugMsg, "[%d] end of updated conflict set.", tid);
+ }
+
tl_assert(thread_conflict_set_up_to_date(DRD_(g_drd_running_tid)));
}
Modified: branches/DRDDEV/drd/drd_thread.h
===================================================================
--- branches/DRDDEV/drd/drd_thread.h 2009-06-05 18:11:08 UTC (rev 10256)
+++ branches/DRDDEV/drd/drd_thread.h 2009-06-06 08:48:27 UTC (rev 10257)
@@ -116,6 +116,7 @@
void DRD_(thread_trace_context_switches)(const Bool t);
void DRD_(thread_trace_conflict_set)(const Bool t);
+void DRD_(thread_trace_conflict_set_bm)(const Bool t);
Bool DRD_(thread_get_trace_fork_join)(void);
void DRD_(thread_set_trace_fork_join)(const Bool t);
void DRD_(thread_set_segment_merging)(const Bool m);
Modified: branches/DRDDEV/drd/drd_vc.c
===================================================================
--- branches/DRDDEV/drd/drd_vc.c 2009-06-05 18:11:08 UTC (rev 10256)
+++ branches/DRDDEV/drd/drd_vc.c 2009-06-06 08:48:27 UTC (rev 10257)
@@ -253,61 +253,37 @@
char* DRD_(vc_aprint)(const VectorClock* const vc)
{
unsigned i;
- unsigned len;
+ unsigned reserved;
+ unsigned size;
char* str = 0;
tl_assert(vc);
- len = 64;
- str = VG_(realloc)("drd.vc.aprint.1", str, len);
+ reserved = 64;
+ size = 0;
+ str = VG_(realloc)("drd.vc.aprint.1", str, reserved);
if (! str)
return str;
- VG_(snprintf)(str, len, "[");
+ size += VG_(snprintf)(str, reserved, "[");
for (i = 0; i < vc->size; i++)
{
tl_assert(vc->vc);
- if (VG_(strlen)(str) + 32 > len)
+ if (VG_(strlen)(str) + 32 > reserved)
{
- len *= 2;
- str = VG_(realloc)("drd.vc.aprint.2", str, len);
+ reserved *= 2;
+ str = VG_(realloc)("drd.vc.aprint.2", str, reserved);
if (! str)
return str;
}
- VG_(snprintf)(str + VG_(strlen)(str), len - VG_(strlen)(str),
- "%s %d: %d", i > 0 ? "," : "",
- vc->vc[i].threadid, vc->vc[i].count);
+ size += VG_(snprintf)(str + size, reserved - size,
+ "%s %d: %d", i > 0 ? "," : "",
+ vc->vc[i].threadid, vc->vc[i].count);
}
- VG_(snprintf)(str + VG_(strlen)(str), len - VG_(strlen)(str), " ]");
+ size += VG_(snprintf)(str + size, reserved - size, " ]");
return str;
}
/**
- * Print the contents of vector clock 'vc' to the character array 'str' that
- * has 'size' elements.
- */
-void DRD_(vc_snprint)(Char* const str, const Int size,
- const VectorClock* const vc)
-{
- unsigned i;
- unsigned j = 1;
-
- tl_assert(vc);
- VG_(snprintf)(str, size, "[");
- for (i = 0; i < vc->size; i++)
- {
- tl_assert(vc->vc);
- for ( ; j <= vc->vc[i].threadid; j++)
- {
- VG_(snprintf)(str + VG_(strlen)(str), size - VG_(strlen)(str),
- "%s %d",
- i > 0 ? "," : "",
- (j == vc->vc[i].threadid) ? vc->vc[i].count : 0);
- }
- }
- VG_(snprintf)(str + VG_(strlen)(str), size - VG_(strlen)(str), " ]");
-}
-
-/**
* Invariant test.
*
* The function below tests whether the following two conditions are
Modified: branches/DRDDEV/drd/drd_vc.h
===================================================================
--- branches/DRDDEV/drd/drd_vc.h 2009-06-05 18:11:08 UTC (rev 10256)
+++ branches/DRDDEV/drd/drd_vc.h 2009-06-06 08:48:27 UTC (rev 10257)
@@ -89,8 +89,6 @@
const VectorClock* const rhs);
void DRD_(vc_print)(const VectorClock* const vc);
char* DRD_(vc_aprint)(const VectorClock* const vc);
-void DRD_(vc_snprint)(Char* const str, const Int size,
- const VectorClock* const vc);
void DRD_(vc_check)(const VectorClock* const vc);
void DRD_(vc_test)(void);
Modified: branches/DRDDEV/drd/tests/annotate_trace_memory.stderr.exp
===================================================================
--- branches/DRDDEV/drd/tests/annotate_trace_memory.stderr.exp 2009-06-05 18:11:08 UTC (rev 10256)
+++ branches/DRDDEV/drd/tests/annotate_trace_memory.stderr.exp 2009-06-06 08:48:27 UTC (rev 10257)
@@ -1,17 +1,17 @@
FLAGS [phb=1, fm=0]
test01: positive
-store 0x........ size 4 (vg 2 / drd 2 / vc ...)
+store 0x........ size 4 (vg 2 / drd 2 / vc [ 1: 5, 2: 1 ])
at 0x........: test01::Worker() (tsan_unittest.cpp:?)
by 0x........: MyThread::ThreadBody(MyThread*) (tsan_thread_wrappers_pthread.h:?)
-store 0x........ size 4 (vg 1 / drd 1 / vc ...)
+store 0x........ size 4 (vg 1 / drd 1 / vc [ 1: 7 ])
at 0x........: test01::Parent() (tsan_unittest.cpp:?)
by 0x........: test01::Run() (tsan_unittest.cpp:?)
Conflicting store by thread x/x at 0x........ size 4
at 0x........: test01::Parent() (tsan_unittest.cpp:?)
by 0x........: test01::Run() (tsan_unittest.cpp:?)
Allocation context: BSS section of tsan_unittest
-load 0x........ size 4 (vg 1 / drd 1 / vc ...)
+load 0x........ size 4 (vg 1 / drd 1 / vc [ 1: 8, 2: 2 ])
at 0x........: test01::Run() (tsan_unittest.cpp:?)
by 0x........: main (tsan_unittest.cpp:?)
GLOB=2
|