Removed --trace-mem which traced all memory accesses. Added support for multiple --trace-address options. A range size can now be specified to the VG_USERREQ__DRD_START_TRACE_ADDR client request. Added VG_USERREQ__DRD_STOP_TRACE_ADDR client request.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7814 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/exp-drd/drd_suppression.c b/exp-drd/drd_suppression.c
index 91fcbde..63c7251 100644
--- a/exp-drd/drd_suppression.c
+++ b/exp-drd/drd_suppression.c
@@ -35,6 +35,7 @@
static struct bitmap* s_suppressed;
static Bool s_trace_suppression;
+Bool g_any_address_traced = False;
// Function definitions.
@@ -81,7 +82,7 @@
VG_(get_and_pp_StackTrace)(VG_(get_running_tid)(), 12);
tl_assert(False);
}
- bm_clear(s_suppressed, a1, a2);
+ bm_clear_store(s_suppressed, a1, a2);
}
/**
@@ -104,6 +105,33 @@
return bm_has_any(s_suppressed, a1, a2, eStore);
}
+void drd_start_tracing_address_range(const Addr a1, const Addr a2)
+{
+ tl_assert(a1 < a2);
+
+ bm_access_range_load(s_suppressed, a1, a2);
+ if (! g_any_address_traced)
+ {
+ g_any_address_traced = True;
+ }
+}
+
+void drd_stop_tracing_address_range(const Addr a1, const Addr a2)
+{
+ tl_assert(a1 < a2);
+
+ bm_clear_load(s_suppressed, a1, a2);
+ if (g_any_address_traced)
+ {
+ g_any_address_traced = bm_has_any(s_suppressed, 0, ~(Addr)0, eLoad);
+ }
+}
+
+Bool drd_is_any_traced(const Addr a1, const Addr a2)
+{
+ return bm_has_any(s_suppressed, a1, a2, eLoad);
+}
+
void drd_suppression_stop_using_mem(const Addr a1, const Addr a2)
{
if (s_trace_suppression)