#include "pub_tool_tooliface.h" // VG_(needs_tool_errors)()
+/* Local type definitions. */
+
typedef enum {
ConflictingAccessSupp
} DRD_SuppKind;
+/* Local variables. */
+
+static Bool s_drd_show_conflicting_segments = True;
+
+
+void set_show_conflicting_segments(const Bool scs)
+{
+ s_drd_show_conflicting_segments = scs;
+}
+
/* Describe a data address range [a,a+len[ as good as possible, for error */
/* messages, putting the result in ai. */
static
{
VG_(message)(Vg_UserMsg, "Allocation context: unknown.");
}
- thread_report_conflicting_segments(dri->tid,
- dri->addr, dri->size, dri->access_type);
+ if (s_drd_show_conflicting_segments)
+ {
+ thread_report_conflicting_segments(dri->tid,
+ dri->addr, dri->size, dri->access_type);
+ }
}
static Bool drd_tool_error_eq(VgRes res, Error* e1, Error* e2)
typedef struct {
} GenericErrInfo;
-void describe_addr(Addr const a, SizeT const len, AddrInfo* const ai);
-Char* describe_addr_text(Addr const a, SizeT const len, AddrInfo* const ai,
- Char* const buf, UInt const n_buf);
+
+void set_show_conflicting_segments(const Bool scs);
void drd_register_error_handlers(void);
static Bool drd_process_cmd_line_option(Char* arg)
{
+ Bool show_confl_seg = True;
Bool trace_barrier = False;
Bool trace_clientobj = False;
Bool trace_cond = False;
Char* trace_address = 0;
VG_BOOL_CLO (arg, "--drd-stats", drd_print_stats)
+ else VG_BOOL_CLO(arg, "--show-confl-seg", show_confl_seg)
else VG_BOOL_CLO(arg, "--trace-barrier", trace_barrier)
else VG_BOOL_CLO(arg, "--trace-clientobj", trace_clientobj)
else VG_BOOL_CLO(arg, "--trace-cond", trace_cond)
else
return False;
+ if (! show_confl_seg)
+ set_show_conflicting_segments(show_confl_seg);
if (trace_address)
{
drd_trace_address = VG_(strtoll16)(trace_address, 0);