mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 18:13:01 +00:00
Introduced more DRD_ prefixes.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9158
This commit is contained in:
parent
6b47103529
commit
498c9afeb5
@ -858,7 +858,7 @@ int bm_has_races(struct bitmap* const lhs,
|
||||
| ((bm1r->bm0_r[k] & bm0_mask(b)) ? RHS_R : 0)
|
||||
| ((bm1r->bm0_w[k] & bm0_mask(b)) ? RHS_W : 0);
|
||||
Addr const a = MAKE_ADDRESS(bm2l->addr, k * BITS_PER_UWORD | b);
|
||||
if (HAS_RACE(access_mask) && ! drd_is_suppressed(a, a + 1))
|
||||
if (HAS_RACE(access_mask) && ! DRD_(is_suppressed)(a, a + 1))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -134,7 +134,7 @@ clientobj_add(const Addr a1, const ObjType t)
|
||||
p->any.first_observed_at = VG_(record_ExeContext)(VG_(get_running_tid)(), 0);
|
||||
VG_(OSetGen_Insert)(s_clientobj, p);
|
||||
tl_assert(VG_(OSetGen_Lookup)(s_clientobj, &a1) == p);
|
||||
drd_start_suppression(a1, a1 + 1, "clientobj");
|
||||
DRD_(start_suppression)(a1, a1 + 1, "clientobj");
|
||||
return p;
|
||||
}
|
||||
|
||||
@ -173,7 +173,7 @@ void clientobj_stop_using_mem(const Addr a1, const Addr a2)
|
||||
|
||||
tl_assert(s_clientobj);
|
||||
|
||||
if (! drd_is_any_suppressed(a1, a2))
|
||||
if (! DRD_(is_any_suppressed)(a1, a2))
|
||||
return;
|
||||
|
||||
VG_(OSetGen_ResetIter)(s_clientobj);
|
||||
|
||||
@ -115,11 +115,11 @@ Bool DRD_(handle_client_request)(ThreadId vg_tid, UWord* arg, UWord* ret)
|
||||
break;
|
||||
|
||||
case VG_USERREQ__DRD_START_SUPPRESSION:
|
||||
drd_start_suppression(arg[1], arg[1] + arg[2], "client");
|
||||
DRD_(start_suppression)(arg[1], arg[1] + arg[2], "client");
|
||||
break;
|
||||
|
||||
case VG_USERREQ__DRD_FINISH_SUPPRESSION:
|
||||
drd_finish_suppression(arg[1], arg[1] + arg[2]);
|
||||
DRD_(finish_suppression)(arg[1], arg[1] + arg[2]);
|
||||
break;
|
||||
|
||||
case VG_USERREQ__DRD_SUPPRESS_CURRENT_STACK:
|
||||
@ -143,8 +143,8 @@ Bool DRD_(handle_client_request)(ThreadId vg_tid, UWord* arg, UWord* ret)
|
||||
}
|
||||
#endif
|
||||
thread_set_stack_startup(drd_tid, VG_(get_SP)(vg_tid));
|
||||
drd_start_suppression(topmost_sp, VG_(thread_get_stack_max)(vg_tid),
|
||||
"stack top");
|
||||
DRD_(start_suppression)(topmost_sp, VG_(thread_get_stack_max)(vg_tid),
|
||||
"stack top");
|
||||
break;
|
||||
}
|
||||
|
||||
@ -153,11 +153,11 @@ Bool DRD_(handle_client_request)(ThreadId vg_tid, UWord* arg, UWord* ret)
|
||||
break;
|
||||
|
||||
case VG_USERREQ__DRD_START_TRACE_ADDR:
|
||||
drd_start_tracing_address_range(arg[1], arg[1] + arg[2]);
|
||||
DRD_(start_tracing_address_range)(arg[1], arg[1] + arg[2]);
|
||||
break;
|
||||
|
||||
case VG_USERREQ__DRD_STOP_TRACE_ADDR:
|
||||
drd_stop_tracing_address_range(arg[1], arg[1] + arg[2]);
|
||||
DRD_(stop_tracing_address_range)(arg[1], arg[1] + arg[2]);
|
||||
break;
|
||||
|
||||
case VG_USERREQ__DRD_STOP_RECORDING:
|
||||
|
||||
@ -22,6 +22,7 @@
|
||||
The GNU General Public License is contained in the file COPYING.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* This header file contains the tool-internal interface for the code that
|
||||
* processes client requests.
|
||||
|
||||
@ -413,7 +413,7 @@ static void drd_tool_error_print_extra(Error* e)
|
||||
}
|
||||
}
|
||||
|
||||
void drd_register_error_handlers(void)
|
||||
void DRD_(register_error_handlers)(void)
|
||||
{
|
||||
// Tool error reporting.
|
||||
VG_(needs_tool_errors)(drd_tool_error_eq,
|
||||
|
||||
@ -148,7 +148,7 @@ typedef struct {
|
||||
|
||||
|
||||
void set_show_conflicting_segments(const Bool scs);
|
||||
void drd_register_error_handlers(void);
|
||||
void DRD_(register_error_handlers)(void);
|
||||
|
||||
|
||||
#endif /* __DRD_ERROR_H */
|
||||
|
||||
@ -67,10 +67,10 @@ void DRD_(set_check_stack_accesses)(const Bool c)
|
||||
s_drd_check_stack_accesses = c;
|
||||
}
|
||||
|
||||
void drd_trace_mem_access(const Addr addr, const SizeT size,
|
||||
void DRD_(trace_mem_access)(const Addr addr, const SizeT size,
|
||||
const BmAccessTypeT access_type)
|
||||
{
|
||||
if (drd_is_any_traced(addr, addr + size))
|
||||
if (DRD_(is_any_traced)(addr, addr + size))
|
||||
{
|
||||
char vc[80];
|
||||
vc_snprint(vc, sizeof(vc), thread_get_vc(thread_get_running_tid()));
|
||||
@ -99,12 +99,12 @@ void drd_trace_mem_access(const Addr addr, const SizeT size,
|
||||
|
||||
static VG_REGPARM(2) void drd_trace_mem_load(const Addr addr, const SizeT size)
|
||||
{
|
||||
return drd_trace_mem_access(addr, size, eLoad);
|
||||
return DRD_(trace_mem_access)(addr, size, eLoad);
|
||||
}
|
||||
|
||||
static VG_REGPARM(2) void drd_trace_mem_store(const Addr addr,const SizeT size)
|
||||
{
|
||||
return drd_trace_mem_access(addr, size, eStore);
|
||||
return DRD_(trace_mem_access)(addr, size, eStore);
|
||||
}
|
||||
|
||||
static void drd_report_race(const Addr addr, const SizeT size,
|
||||
@ -134,7 +134,7 @@ VG_REGPARM(2) void drd_trace_load(Addr addr, SizeT size)
|
||||
if (running_thread_is_recording()
|
||||
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
|
||||
&& bm_access_load_triggers_conflict(addr, addr + size)
|
||||
&& ! drd_is_suppressed(addr, addr + size))
|
||||
&& ! DRD_(is_suppressed)(addr, addr + size))
|
||||
{
|
||||
drd_report_race(addr, size, eLoad);
|
||||
}
|
||||
@ -145,7 +145,7 @@ static VG_REGPARM(1) void drd_trace_load_1(Addr addr)
|
||||
if (running_thread_is_recording()
|
||||
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
|
||||
&& bm_access_load_1_triggers_conflict(addr)
|
||||
&& ! drd_is_suppressed(addr, addr + 1))
|
||||
&& ! DRD_(is_suppressed)(addr, addr + 1))
|
||||
{
|
||||
drd_report_race(addr, 1, eLoad);
|
||||
}
|
||||
@ -156,7 +156,7 @@ static VG_REGPARM(1) void drd_trace_load_2(Addr addr)
|
||||
if (running_thread_is_recording()
|
||||
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
|
||||
&& bm_access_load_2_triggers_conflict(addr)
|
||||
&& ! drd_is_suppressed(addr, addr + 2))
|
||||
&& ! DRD_(is_suppressed)(addr, addr + 2))
|
||||
{
|
||||
drd_report_race(addr, 2, eLoad);
|
||||
}
|
||||
@ -167,7 +167,7 @@ static VG_REGPARM(1) void drd_trace_load_4(Addr addr)
|
||||
if (running_thread_is_recording()
|
||||
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
|
||||
&& bm_access_load_4_triggers_conflict(addr)
|
||||
&& ! drd_is_suppressed(addr, addr + 4))
|
||||
&& ! DRD_(is_suppressed)(addr, addr + 4))
|
||||
{
|
||||
drd_report_race(addr, 4, eLoad);
|
||||
}
|
||||
@ -178,7 +178,7 @@ static VG_REGPARM(1) void drd_trace_load_8(Addr addr)
|
||||
if (running_thread_is_recording()
|
||||
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
|
||||
&& bm_access_load_8_triggers_conflict(addr)
|
||||
&& ! drd_is_suppressed(addr, addr + 8))
|
||||
&& ! DRD_(is_suppressed)(addr, addr + 8))
|
||||
{
|
||||
drd_report_race(addr, 8, eLoad);
|
||||
}
|
||||
@ -195,7 +195,7 @@ VG_REGPARM(2) void drd_trace_store(Addr addr, SizeT size)
|
||||
if (running_thread_is_recording()
|
||||
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
|
||||
&& bm_access_store_triggers_conflict(addr, addr + size)
|
||||
&& ! drd_is_suppressed(addr, addr + size))
|
||||
&& ! DRD_(is_suppressed)(addr, addr + size))
|
||||
{
|
||||
drd_report_race(addr, size, eStore);
|
||||
}
|
||||
@ -206,7 +206,7 @@ static VG_REGPARM(1) void drd_trace_store_1(Addr addr)
|
||||
if (running_thread_is_recording()
|
||||
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
|
||||
&& bm_access_store_1_triggers_conflict(addr)
|
||||
&& ! drd_is_suppressed(addr, addr + 1))
|
||||
&& ! DRD_(is_suppressed)(addr, addr + 1))
|
||||
{
|
||||
drd_report_race(addr, 1, eStore);
|
||||
}
|
||||
@ -217,7 +217,7 @@ static VG_REGPARM(1) void drd_trace_store_2(Addr addr)
|
||||
if (running_thread_is_recording()
|
||||
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
|
||||
&& bm_access_store_2_triggers_conflict(addr)
|
||||
&& ! drd_is_suppressed(addr, addr + 2))
|
||||
&& ! DRD_(is_suppressed)(addr, addr + 2))
|
||||
{
|
||||
drd_report_race(addr, 2, eStore);
|
||||
}
|
||||
@ -228,7 +228,7 @@ static VG_REGPARM(1) void drd_trace_store_4(Addr addr)
|
||||
if (running_thread_is_recording()
|
||||
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
|
||||
&& bm_access_store_4_triggers_conflict(addr)
|
||||
&& ! drd_is_suppressed(addr, addr + 4))
|
||||
&& ! DRD_(is_suppressed)(addr, addr + 4))
|
||||
{
|
||||
drd_report_race(addr, 4, eStore);
|
||||
}
|
||||
@ -239,7 +239,7 @@ static VG_REGPARM(1) void drd_trace_store_8(Addr addr)
|
||||
if (running_thread_is_recording()
|
||||
&& (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
|
||||
&& bm_access_store_8_triggers_conflict(addr)
|
||||
&& ! drd_is_suppressed(addr, addr + 8))
|
||||
&& ! DRD_(is_suppressed)(addr, addr + 8))
|
||||
{
|
||||
drd_report_race(addr, 8, eStore);
|
||||
}
|
||||
@ -285,7 +285,7 @@ static void instrument_load(IRSB* const bb,
|
||||
IRExpr** argv;
|
||||
IRDirty* di;
|
||||
|
||||
if (UNLIKELY(drd_any_address_is_traced()))
|
||||
if (UNLIKELY(DRD_(any_address_is_traced)()))
|
||||
{
|
||||
addStmtToIRSB(bb,
|
||||
IRStmt_Dirty(
|
||||
@ -350,7 +350,7 @@ static void instrument_store(IRSB* const bb,
|
||||
IRExpr** argv;
|
||||
IRDirty* di;
|
||||
|
||||
if (UNLIKELY(drd_any_address_is_traced()))
|
||||
if (UNLIKELY(DRD_(any_address_is_traced)()))
|
||||
{
|
||||
addStmtToIRSB(bb,
|
||||
IRStmt_Dirty(
|
||||
@ -407,7 +407,7 @@ static void instrument_store(IRSB* const bb,
|
||||
addStmtToIRSB(bb, IRStmt_Dirty(di));
|
||||
}
|
||||
|
||||
IRSB* drd_instrument(VgCallbackClosure* const closure,
|
||||
IRSB* DRD_(instrument)(VgCallbackClosure* const closure,
|
||||
IRSB* const bb_in,
|
||||
VexGuestLayout* const layout,
|
||||
VexGuestExtents* const vge,
|
||||
|
||||
@ -37,14 +37,14 @@
|
||||
|
||||
Bool DRD_(get_check_stack_accesses)(void);
|
||||
void DRD_(set_check_stack_accesses)(const Bool c);
|
||||
IRSB* drd_instrument(VgCallbackClosure* const closure,
|
||||
IRSB* const bb_in,
|
||||
VexGuestLayout* const layout,
|
||||
VexGuestExtents* const vge,
|
||||
IRType const gWordTy,
|
||||
IRType const hWordTy);
|
||||
void drd_trace_mem_access(const Addr addr, const SizeT size,
|
||||
const BmAccessTypeT access_type);
|
||||
IRSB* DRD_(instrument)(VgCallbackClosure* const closure,
|
||||
IRSB* const bb_in,
|
||||
VexGuestLayout* const layout,
|
||||
VexGuestExtents* const vge,
|
||||
IRType const gWordTy,
|
||||
IRType const hWordTy);
|
||||
void DRD_(trace_mem_access)(const Addr addr, const SizeT size,
|
||||
const BmAccessTypeT access_type);
|
||||
VG_REGPARM(2) void drd_trace_load(Addr addr, SizeT size);
|
||||
VG_REGPARM(2) void drd_trace_store(Addr addr, SizeT size);
|
||||
|
||||
|
||||
107
drd/drd_main.c
107
drd/drd_main.c
@ -53,23 +53,17 @@
|
||||
#include "pub_tool_tooliface.h"
|
||||
|
||||
|
||||
// Function declarations.
|
||||
/* Local variables. */
|
||||
|
||||
static void drd_start_client_code(const ThreadId tid, const ULong bbs_done);
|
||||
static Bool DRD_(s_print_stats) = False;
|
||||
static Bool DRD_(s_var_info) = False;
|
||||
static Bool DRD_(s_show_stack_usage) = False;
|
||||
|
||||
|
||||
// Local variables.
|
||||
|
||||
static Bool s_drd_print_stats = False;
|
||||
static Bool s_drd_var_info = False;
|
||||
static Bool s_show_stack_usage = False;
|
||||
|
||||
|
||||
//
|
||||
// Implement the needs_command_line_options for drd.
|
||||
//
|
||||
|
||||
static Bool drd_process_cmd_line_option(Char* arg)
|
||||
/**
|
||||
* Implement the needs_command_line_options for drd.
|
||||
*/
|
||||
static Bool DRD_(process_cmd_line_option)(Char* arg)
|
||||
{
|
||||
int check_stack_accesses = -1;
|
||||
int exclusive_threshold_ms = -1;
|
||||
@ -90,11 +84,11 @@ static Bool drd_process_cmd_line_option(Char* arg)
|
||||
Char* trace_address = 0;
|
||||
|
||||
VG_BOOL_CLO (arg, "--check-stack-var", check_stack_accesses)
|
||||
else VG_BOOL_CLO(arg, "--drd-stats", s_drd_print_stats)
|
||||
else VG_BOOL_CLO(arg, "--drd-stats", DRD_(s_print_stats))
|
||||
else VG_BOOL_CLO(arg,"--report-signal-unlocked",s_drd_report_signal_unlocked)
|
||||
else VG_BOOL_CLO(arg, "--segment-merging", segment_merging)
|
||||
else VG_BOOL_CLO(arg, "--show-confl-seg", show_confl_seg)
|
||||
else VG_BOOL_CLO(arg, "--show-stack-usage", s_show_stack_usage)
|
||||
else VG_BOOL_CLO(arg, "--show-stack-usage", DRD_(s_show_stack_usage))
|
||||
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)
|
||||
@ -106,7 +100,7 @@ static Bool drd_process_cmd_line_option(Char* arg)
|
||||
else VG_BOOL_CLO(arg, "--trace-segment", trace_segment)
|
||||
else VG_BOOL_CLO(arg, "--trace-semaphore", trace_semaphore)
|
||||
else VG_BOOL_CLO(arg, "--trace-suppr", trace_suppression)
|
||||
else VG_BOOL_CLO(arg, "--var-info", s_drd_var_info)
|
||||
else VG_BOOL_CLO(arg, "--var-info", DRD_(s_var_info))
|
||||
else VG_NUM_CLO (arg, "--exclusive-threshold", exclusive_threshold_ms)
|
||||
else VG_NUM_CLO (arg, "--shared-threshold", shared_threshold_ms)
|
||||
else VG_STR_CLO (arg, "--trace-addr", trace_address)
|
||||
@ -131,7 +125,7 @@ static Bool drd_process_cmd_line_option(Char* arg)
|
||||
if (trace_address)
|
||||
{
|
||||
const Addr addr = VG_(strtoll16)(trace_address, 0);
|
||||
drd_start_tracing_address_range(addr, addr + 1);
|
||||
DRD_(start_tracing_address_range)(addr, addr + 1);
|
||||
}
|
||||
if (trace_barrier != -1)
|
||||
barrier_set_trace(trace_barrier);
|
||||
@ -154,12 +148,12 @@ static Bool drd_process_cmd_line_option(Char* arg)
|
||||
if (trace_semaphore != -1)
|
||||
semaphore_set_trace(trace_semaphore);
|
||||
if (trace_suppression != -1)
|
||||
suppression_set_trace(trace_suppression);
|
||||
DRD_(suppression_set_trace)(trace_suppression);
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
static void drd_print_usage(void)
|
||||
static void DRD_(print_usage)(void)
|
||||
{
|
||||
VG_(printf)(
|
||||
" --check-stack-var=yes|no Whether or not to report data races on\n"
|
||||
@ -198,7 +192,7 @@ static void drd_print_usage(void)
|
||||
VG_(replacement_malloc_print_usage)();
|
||||
}
|
||||
|
||||
static void drd_print_debug_usage(void)
|
||||
static void DRD_(print_debug_usage)(void)
|
||||
{
|
||||
VG_(printf)(
|
||||
" --drd-stats=yes|no Print statistics about DRD activity [no].\n"
|
||||
@ -268,9 +262,9 @@ void drd_start_using_mem(const Addr a1, const SizeT len)
|
||||
{
|
||||
tl_assert(a1 < a1 + len);
|
||||
|
||||
if (UNLIKELY(drd_any_address_is_traced()))
|
||||
if (UNLIKELY(DRD_(any_address_is_traced)()))
|
||||
{
|
||||
drd_trace_mem_access(a1, len, eStart);
|
||||
DRD_(trace_mem_access)(a1, len, eStart);
|
||||
}
|
||||
}
|
||||
|
||||
@ -296,15 +290,15 @@ void drd_stop_using_mem(const Addr a1, const SizeT len,
|
||||
|
||||
tl_assert(a1 < a2);
|
||||
|
||||
if (UNLIKELY(drd_any_address_is_traced()))
|
||||
if (UNLIKELY(DRD_(any_address_is_traced)()))
|
||||
{
|
||||
drd_trace_mem_access(a1, len, eEnd);
|
||||
DRD_(trace_mem_access)(a1, len, eEnd);
|
||||
}
|
||||
if (! is_stack_mem || DRD_(get_check_stack_accesses)())
|
||||
{
|
||||
thread_stop_using_mem(a1, a2);
|
||||
clientobj_stop_using_mem(a1, a2);
|
||||
drd_suppression_stop_using_mem(a1, a2);
|
||||
DRD_(suppression_stop_using_mem)(a1, a2);
|
||||
}
|
||||
}
|
||||
|
||||
@ -314,16 +308,17 @@ void drd_stop_using_nonstack_mem(const Addr a1, const SizeT len)
|
||||
drd_stop_using_mem(a1, len, False);
|
||||
}
|
||||
|
||||
/** Suppress data race reports on all addresses contained in .plt and
|
||||
* .got.plt sections inside the address range [ a, a + len [. The data in
|
||||
* these sections is modified by _dl_relocate_object() every time a function
|
||||
* in a shared library is called for the first time. Since the first call
|
||||
* to a function in a shared library can happen from a multithreaded context,
|
||||
* such calls can cause conflicting accesses. See also Ulrich Drepper's
|
||||
* paper "How to Write Shared Libraries" for more information about relocation
|
||||
* (http://people.redhat.com/drepper/dsohowto.pdf).
|
||||
/**
|
||||
* Suppress data race reports on all addresses contained in .plt and
|
||||
* .got.plt sections inside the address range [ a, a + len [. The data in
|
||||
* these sections is modified by _dl_relocate_object() every time a function
|
||||
* in a shared library is called for the first time. Since the first call
|
||||
* to a function in a shared library can happen from a multithreaded context,
|
||||
* such calls can cause conflicting accesses. See also Ulrich Drepper's
|
||||
* paper "How to Write Shared Libraries" for more information about relocation
|
||||
* (http://people.redhat.com/drepper/dsohowto.pdf).
|
||||
*/
|
||||
static void suppress_relocation_conflicts(const Addr a, const SizeT len)
|
||||
static void DRD_(suppress_relocation_conflicts)(const Addr a, const SizeT len)
|
||||
{
|
||||
const DebugInfo* di;
|
||||
|
||||
@ -345,7 +340,7 @@ static void suppress_relocation_conflicts(const Addr a, const SizeT len)
|
||||
VG_(printf)("Suppressing .plt @ 0x%lx size %ld\n", avma, size);
|
||||
#endif
|
||||
tl_assert(VG_(seginfo_sect_kind)(NULL, 0, avma) == Vg_SectPLT);
|
||||
drd_start_suppression(avma, avma + size, ".plt");
|
||||
DRD_(start_suppression)(avma, avma + size, ".plt");
|
||||
}
|
||||
|
||||
avma = VG_(seginfo_get_gotplt_avma)(di);
|
||||
@ -357,7 +352,7 @@ static void suppress_relocation_conflicts(const Addr a, const SizeT len)
|
||||
VG_(printf)("Suppressing .got.plt @ 0x%lx size %ld\n", avma, size);
|
||||
#endif
|
||||
tl_assert(VG_(seginfo_sect_kind)(NULL, 0, avma) == Vg_SectGOTPLT);
|
||||
drd_start_suppression(avma, avma + size, ".gotplt");
|
||||
DRD_(start_suppression)(avma, avma + size, ".gotplt");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -371,7 +366,7 @@ void drd_start_using_mem_w_perms(const Addr a, const SizeT len,
|
||||
|
||||
drd_start_using_mem(a, len);
|
||||
|
||||
suppress_relocation_conflicts(a, len);
|
||||
DRD_(suppress_relocation_conflicts)(a, len);
|
||||
}
|
||||
|
||||
/* Called by the core when the stack of a thread grows, to indicate that */
|
||||
@ -447,10 +442,10 @@ void drd_post_thread_create(const ThreadId vg_created)
|
||||
}
|
||||
if (! DRD_(get_check_stack_accesses)())
|
||||
{
|
||||
drd_start_suppression(thread_get_stack_max(drd_created)
|
||||
- thread_get_stack_size(drd_created),
|
||||
thread_get_stack_max(drd_created),
|
||||
"stack");
|
||||
DRD_(start_suppression)(thread_get_stack_max(drd_created)
|
||||
- thread_get_stack_size(drd_created),
|
||||
thread_get_stack_max(drd_created),
|
||||
"stack");
|
||||
}
|
||||
}
|
||||
|
||||
@ -472,7 +467,7 @@ static void drd_thread_finished(ThreadId vg_tid)
|
||||
? ""
|
||||
: " (which is a detached thread)");
|
||||
}
|
||||
if (s_show_stack_usage)
|
||||
if (DRD_(s_show_stack_usage))
|
||||
{
|
||||
const SizeT stack_size = thread_get_stack_size(drd_tid);
|
||||
const SizeT used_stack
|
||||
@ -502,8 +497,7 @@ static void drd_thread_finished(ThreadId vg_tid)
|
||||
// Implementation of the tool interface.
|
||||
//
|
||||
|
||||
static
|
||||
void drd_post_clo_init(void)
|
||||
static void DRD_(post_clo_init)(void)
|
||||
{
|
||||
# if defined(VGP_x86_linux) || defined(VGP_amd64_linux) \
|
||||
|| defined(VGP_ppc32_linux) || defined(VGP_ppc64_linux)
|
||||
@ -512,7 +506,7 @@ void drd_post_clo_init(void)
|
||||
VG_(printf)("\nWARNING: DRD has only been tested on Linux.\n\n");
|
||||
# endif
|
||||
|
||||
if (s_drd_var_info)
|
||||
if (DRD_(s_var_info))
|
||||
{
|
||||
VG_(needs_var_info)();
|
||||
}
|
||||
@ -524,11 +518,10 @@ static void drd_start_client_code(const ThreadId tid, const ULong bbs_done)
|
||||
thread_set_vg_running_tid(tid);
|
||||
}
|
||||
|
||||
static
|
||||
void drd_fini(Int exitcode)
|
||||
static void DRD_(fini)(Int exitcode)
|
||||
{
|
||||
// thread_print_all();
|
||||
if (VG_(clo_verbosity) > 1 || s_drd_print_stats)
|
||||
if (VG_(clo_verbosity) > 1 || DRD_(s_print_stats))
|
||||
{
|
||||
ULong update_conflict_set_count;
|
||||
ULong dsnsc;
|
||||
@ -585,17 +578,17 @@ void drd_pre_clo_init(void)
|
||||
" by Bart Van Assche.");
|
||||
VG_(details_bug_reports_to) (VG_BUGS_TO);
|
||||
|
||||
VG_(basic_tool_funcs) (drd_post_clo_init,
|
||||
drd_instrument,
|
||||
drd_fini);
|
||||
VG_(basic_tool_funcs) (DRD_(post_clo_init),
|
||||
DRD_(instrument),
|
||||
DRD_(fini));
|
||||
|
||||
// Command line stuff.
|
||||
VG_(needs_command_line_options)(drd_process_cmd_line_option,
|
||||
drd_print_usage,
|
||||
drd_print_debug_usage);
|
||||
VG_(needs_command_line_options)(DRD_(process_cmd_line_option),
|
||||
DRD_(print_usage),
|
||||
DRD_(print_debug_usage));
|
||||
|
||||
// Error handling.
|
||||
drd_register_error_handlers();
|
||||
DRD_(register_error_handlers)();
|
||||
|
||||
// Core event tracking.
|
||||
VG_(track_pre_mem_read) (drd_pre_mem_read);
|
||||
@ -621,7 +614,7 @@ void drd_pre_clo_init(void)
|
||||
|
||||
DRD_(clientreq_init)();
|
||||
|
||||
drd_suppression_init();
|
||||
DRD_(suppression_init)();
|
||||
|
||||
clientobj_init();
|
||||
}
|
||||
|
||||
@ -31,31 +31,35 @@
|
||||
#include "pub_tool_libcprint.h" // Vg_DebugMsg
|
||||
|
||||
|
||||
// Local variables.
|
||||
/* Global variables. */
|
||||
|
||||
static struct bitmap* s_suppressed;
|
||||
static Bool s_trace_suppression;
|
||||
Bool g_any_address_traced = False;
|
||||
Bool DRD_(g_any_address_traced) = False;
|
||||
|
||||
|
||||
// Function definitions.
|
||||
/* Local variables. */
|
||||
|
||||
void suppression_set_trace(const Bool trace_suppression)
|
||||
static struct bitmap* DRD_(s_suppressed);
|
||||
static Bool DRD_(s_trace_suppression);
|
||||
|
||||
|
||||
/* Function definitions. */
|
||||
|
||||
void DRD_(suppression_set_trace)(const Bool trace_suppression)
|
||||
{
|
||||
s_trace_suppression = trace_suppression;
|
||||
DRD_(s_trace_suppression) = trace_suppression;
|
||||
}
|
||||
|
||||
void drd_suppression_init(void)
|
||||
void DRD_(suppression_init)(void)
|
||||
{
|
||||
tl_assert(s_suppressed == 0);
|
||||
s_suppressed = bm_new();
|
||||
tl_assert(s_suppressed);
|
||||
tl_assert(DRD_(s_suppressed) == 0);
|
||||
DRD_(s_suppressed) = bm_new();
|
||||
tl_assert(DRD_(s_suppressed));
|
||||
}
|
||||
|
||||
void drd_start_suppression(const Addr a1, const Addr a2,
|
||||
const char* const reason)
|
||||
void DRD_(start_suppression)(const Addr a1, const Addr a2,
|
||||
const char* const reason)
|
||||
{
|
||||
if (s_trace_suppression)
|
||||
if (DRD_(s_trace_suppression))
|
||||
{
|
||||
VG_(message)(Vg_DebugMsg, "start suppression of 0x%lx sz %ld (%s)",
|
||||
a1, a2 - a1, reason);
|
||||
@ -63,12 +67,12 @@ void drd_start_suppression(const Addr a1, const Addr a2,
|
||||
|
||||
tl_assert(a1 < a2);
|
||||
// tl_assert(! drd_is_any_suppressed(a1, a2));
|
||||
bm_access_range_store(s_suppressed, a1, a2);
|
||||
bm_access_range_store(DRD_(s_suppressed), a1, a2);
|
||||
}
|
||||
|
||||
void drd_finish_suppression(const Addr a1, const Addr a2)
|
||||
void DRD_(finish_suppression)(const Addr a1, const Addr a2)
|
||||
{
|
||||
if (s_trace_suppression)
|
||||
if (DRD_(s_trace_suppression))
|
||||
{
|
||||
VG_(message)(Vg_DebugMsg, "finish suppression of 0x%lx sz %ld",
|
||||
a1, a2 - a1);
|
||||
@ -76,13 +80,13 @@ void drd_finish_suppression(const Addr a1, const Addr a2)
|
||||
}
|
||||
|
||||
tl_assert(a1 < a2);
|
||||
if (! drd_is_suppressed(a1, a2))
|
||||
if (! DRD_(is_suppressed)(a1, a2))
|
||||
{
|
||||
VG_(message)(Vg_DebugMsg, "?? [0x%lx,0x%lx[ not suppressed ??", a1, a2);
|
||||
VG_(get_and_pp_StackTrace)(VG_(get_running_tid)(), 12);
|
||||
tl_assert(False);
|
||||
}
|
||||
bm_clear_store(s_suppressed, a1, a2);
|
||||
bm_clear_store(DRD_(s_suppressed), a1, a2);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -90,9 +94,9 @@ void drd_finish_suppression(const Addr a1, const Addr a2)
|
||||
* bytes in the range a1 .. a2 - 1 inclusive. Return false in case the range
|
||||
* is only partially suppressed or not suppressed at all.
|
||||
*/
|
||||
Bool drd_is_suppressed(const Addr a1, const Addr a2)
|
||||
Bool DRD_(is_suppressed)(const Addr a1, const Addr a2)
|
||||
{
|
||||
return bm_has(s_suppressed, a1, a2, eStore);
|
||||
return bm_has(DRD_(s_suppressed), a1, a2, eStore);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -100,46 +104,47 @@ Bool drd_is_suppressed(const Addr a1, const Addr a2)
|
||||
* of the bytes in the range a1 .. a2 - 1 inclusive. Return false in case none
|
||||
* of the bytes in the specified range is suppressed.
|
||||
*/
|
||||
Bool drd_is_any_suppressed(const Addr a1, const Addr a2)
|
||||
Bool DRD_(is_any_suppressed)(const Addr a1, const Addr a2)
|
||||
{
|
||||
return bm_has_any_store(s_suppressed, a1, a2);
|
||||
return bm_has_any_store(DRD_(s_suppressed), a1, a2);
|
||||
}
|
||||
|
||||
void drd_start_tracing_address_range(const Addr a1, const Addr a2)
|
||||
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)
|
||||
bm_access_range_load(DRD_(s_suppressed), a1, a2);
|
||||
if (! DRD_(g_any_address_traced))
|
||||
{
|
||||
g_any_address_traced = True;
|
||||
DRD_(g_any_address_traced) = True;
|
||||
}
|
||||
}
|
||||
|
||||
void drd_stop_tracing_address_range(const Addr a1, const Addr a2)
|
||||
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)
|
||||
bm_clear_load(DRD_(s_suppressed), a1, a2);
|
||||
if (DRD_(g_any_address_traced))
|
||||
{
|
||||
g_any_address_traced = bm_has_any_load(s_suppressed, 0, ~(Addr)0);
|
||||
DRD_(g_any_address_traced)
|
||||
= bm_has_any_load(DRD_(s_suppressed), 0, ~(Addr)0);
|
||||
}
|
||||
}
|
||||
|
||||
Bool drd_is_any_traced(const Addr a1, const Addr a2)
|
||||
Bool DRD_(is_any_traced)(const Addr a1, const Addr a2)
|
||||
{
|
||||
return bm_has_any_load(s_suppressed, a1, a2);
|
||||
return bm_has_any_load(DRD_(s_suppressed), a1, a2);
|
||||
}
|
||||
|
||||
void drd_suppression_stop_using_mem(const Addr a1, const Addr a2)
|
||||
void DRD_(suppression_stop_using_mem)(const Addr a1, const Addr a2)
|
||||
{
|
||||
if (s_trace_suppression)
|
||||
if (DRD_(s_trace_suppression))
|
||||
{
|
||||
Addr b;
|
||||
for (b = a1; b < a2; b++)
|
||||
{
|
||||
if (bm_has_1(s_suppressed, b, eStore))
|
||||
if (bm_has_1(DRD_(s_suppressed), b, eStore))
|
||||
{
|
||||
VG_(message)(Vg_DebugMsg,
|
||||
"stop_using_mem(0x%lx, %ld) finish suppression of 0x%lx",
|
||||
@ -149,5 +154,5 @@ void drd_suppression_stop_using_mem(const Addr a1, const Addr a2)
|
||||
}
|
||||
tl_assert(a1);
|
||||
tl_assert(a1 < a2);
|
||||
bm_clear(s_suppressed, a1, a2);
|
||||
bm_clear(DRD_(s_suppressed), a1, a2);
|
||||
}
|
||||
|
||||
@ -2,28 +2,29 @@
|
||||
#define __PUB_CORE_DRD_H
|
||||
|
||||
|
||||
#include "drd_basics.h"
|
||||
#include "pub_tool_basics.h"
|
||||
|
||||
|
||||
extern Bool g_any_address_traced;
|
||||
extern Bool DRD_(g_any_address_traced);
|
||||
|
||||
|
||||
void suppression_set_trace(const Bool trace_suppression);
|
||||
void drd_suppression_init(void);
|
||||
void drd_start_suppression(const Addr a1, const Addr a2,
|
||||
void DRD_(suppression_set_trace)(const Bool trace_suppression);
|
||||
void DRD_(suppression_init)(void);
|
||||
void DRD_(start_suppression)(const Addr a1, const Addr a2,
|
||||
const char* const reason);
|
||||
void drd_finish_suppression(const Addr a1, const Addr a2);
|
||||
Bool drd_is_suppressed(const Addr a1, const Addr a2);
|
||||
Bool drd_is_any_suppressed(const Addr a1, const Addr a2);
|
||||
void drd_start_tracing_address_range(const Addr a1, const Addr a2);
|
||||
void drd_stop_tracing_address_range(const Addr a1, const Addr a2);
|
||||
Bool drd_is_any_traced(const Addr a1, const Addr a2);
|
||||
void drd_suppression_stop_using_mem(const Addr a1, const Addr a2);
|
||||
void DRD_(finish_suppression)(const Addr a1, const Addr a2);
|
||||
Bool DRD_(is_suppressed)(const Addr a1, const Addr a2);
|
||||
Bool DRD_(is_any_suppressed)(const Addr a1, const Addr a2);
|
||||
void DRD_(start_tracing_address_range)(const Addr a1, const Addr a2);
|
||||
void DRD_(stop_tracing_address_range)(const Addr a1, const Addr a2);
|
||||
Bool DRD_(is_any_traced)(const Addr a1, const Addr a2);
|
||||
void DRD_(suppression_stop_using_mem)(const Addr a1, const Addr a2);
|
||||
|
||||
|
||||
static __inline__ Bool drd_any_address_is_traced(void)
|
||||
static __inline__ Bool DRD_(any_address_is_traced)(void)
|
||||
{
|
||||
return g_any_address_traced;
|
||||
return DRD_(g_any_address_traced);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -266,9 +266,9 @@ void DRD_(thread_post_join)(DrdThreadId drd_joiner, DrdThreadId drd_joinee)
|
||||
|
||||
if (! DRD_(get_check_stack_accesses)())
|
||||
{
|
||||
drd_finish_suppression(thread_get_stack_max(drd_joinee)
|
||||
- thread_get_stack_size(drd_joinee),
|
||||
thread_get_stack_max(drd_joinee));
|
||||
DRD_(finish_suppression)(thread_get_stack_max(drd_joinee)
|
||||
- thread_get_stack_size(drd_joinee),
|
||||
thread_get_stack_max(drd_joinee));
|
||||
}
|
||||
thread_delete(drd_joinee);
|
||||
mutex_thread_delete(drd_joinee);
|
||||
|
||||
@ -39,7 +39,7 @@ UInt VG_(printf)(const HChar *format, ...)
|
||||
{ UInt ret; va_list vargs; va_start(vargs, format); ret = vprintf(format, vargs); va_end(vargs); return ret; }
|
||||
UInt VG_(message)(VgMsgKind kind, const HChar* format, ...)
|
||||
{ UInt ret; va_list vargs; va_start(vargs, format); ret = vprintf(format, vargs); va_end(vargs); printf("\n"); return ret; }
|
||||
Bool drd_is_suppressed(const Addr a1, const Addr a2)
|
||||
Bool DRD_(is_suppressed)(const Addr a1, const Addr a2)
|
||||
{ assert(0); }
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user