svn merge -r9818:10278 svn://svn.valgrind.org/valgrind/branches/DRDDEV
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10279 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/drd/drd_main.c b/drd/drd_main.c
index 219318c..4752748 100644
--- a/drd/drd_main.c
+++ b/drd/drd_main.c
@@ -70,6 +70,7 @@
int first_race_only = -1;
int report_signal_unlocked = -1;
int segment_merging = -1;
+ int segment_merge_interval = -1;
int shared_threshold_ms = -1;
int show_confl_seg = -1;
int trace_barrier = -1;
@@ -78,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;
@@ -88,8 +90,11 @@
if VG_BOOL_CLO(arg, "--check-stack-var", check_stack_accesses) {}
else if VG_BOOL_CLO(arg, "--drd-stats", DRD_(s_print_stats)) {}
else if VG_BOOL_CLO(arg, "--first-race-only", first_race_only) {}
- else if VG_BOOL_CLO(arg,"--report-signal-unlocked",report_signal_unlocked) {}
+ else if VG_BOOL_CLO(arg,"--report-signal-unlocked",report_signal_unlocked)
+ {}
else if VG_BOOL_CLO(arg, "--segment-merging", segment_merging) {}
+ else if VG_INT_CLO (arg, "--segment-merging-interval", segment_merge_interval)
+ {}
else if VG_BOOL_CLO(arg, "--show-confl-seg", show_confl_seg) {}
else if VG_BOOL_CLO(arg, "--show-stack-usage",
DRD_(s_show_stack_usage)) {}
@@ -97,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) {}
@@ -132,6 +138,8 @@
}
if (segment_merging != -1)
DRD_(thread_set_segment_merging)(segment_merging);
+ if (segment_merge_interval != 1)
+ DRD_(thread_set_segment_merge_interval)(segment_merge_interval);
if (show_confl_seg != -1)
DRD_(set_show_conflicting_segments)(show_confl_seg);
if (trace_address)
@@ -151,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)
@@ -183,6 +193,8 @@
" data race detection algorithm. Disabling segment merging may\n"
" improve the accuracy of the so-called 'other segments' displayed\n"
" in race reports but can also trigger an out of memory error.\n"
+" --segment-merging-interval=<n> Perform segment merging every time n new\n"
+" segments have been created. Default: %d.\n"
" --shared-threshold=<n> Print an error message if a reader lock\n"
" is held longer than the specified time (in milliseconds).\n"
" --show-confl-seg=yes|no Show conflicting segments in race reports [yes].\n"
@@ -201,7 +213,8 @@
" --trace-fork-join=yes|no Trace all thread fork/join activity [no].\n"
" --trace-mutex=yes|no Trace all mutex activity [no].\n"
" --trace-rwlock=yes|no Trace all reader-writer lock activity[no].\n"
-" --trace-semaphore=yes|no Trace all semaphore activity [no].\n"
+" --trace-semaphore=yes|no Trace all semaphore activity [no].\n",
+DRD_(thread_get_segment_merge_interval)()
);
VG_(replacement_malloc_print_usage)();
}
@@ -213,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"
);
@@ -583,20 +599,19 @@
DRD_(sg_get_max_segments_alive_count)(),
DRD_(thread_get_discard_ordered_segments_count)());
VG_(message)(Vg_UserMsg,
- " %lld merges.",
+ " %lld merges",
DRD_(sg_get_segment_merge_count)());
VG_(message)(Vg_UserMsg,
- " (%lld m, %lld rw, %lld s, %lld b)",
+ " (%lld mutex, %lld rwlock, %lld semaphore,"
+ " %lld barrier).",
DRD_(get_mutex_segment_creation_count)(),
DRD_(get_rwlock_segment_creation_count)(),
DRD_(get_semaphore_segment_creation_count)(),
DRD_(get_barrier_segment_creation_count)());
VG_(message)(Vg_UserMsg,
- " bitmaps: %lld level 1 / %lld level 2 bitmap refs",
+ " bitmaps: %lld level 1"
+ " and %lld level 2 bitmaps were allocated.",
DRD_(bm_get_bitmap_creation_count)(),
- DRD_(bm_get_bitmap2_node_creation_count)());
- VG_(message)(Vg_UserMsg,
- " and %lld level 2 bitmaps were allocated.",
DRD_(bm_get_bitmap2_creation_count)());
VG_(message)(Vg_UserMsg,
" mutex: %lld non-recursive lock/unlock events.",