static void drd_report_race(const Addr addr, const SizeT size,
const BmAccessTypeT access_type)
{
- DataRaceErrInfo drei;
-
- drei.tid = DRD_(thread_get_running_tid)();
- drei.addr = addr;
- drei.size = size;
- drei.access_type = access_type;
- VG_(maybe_record_error)(VG_(get_running_tid)(),
- DataRaceErr,
- VG_(get_IP)(VG_(get_running_tid)()),
- "Conflicting access",
- &drei);
-
- if (s_first_race_only)
- {
- DRD_(start_suppression)(addr, addr + size, "first race only");
+ ThreadId vg_tid;
+
+ vg_tid = VG_(get_running_tid)();
+ if (DRD_(thread_address_on_any_stack)(addr)) {
+#if 0
+ GenericErrInfo GEI = {
+ .tid = DRD_(thread_get_running_tid)(),
+ .addr = addr,
+ };
+ VG_(maybe_record_error)(vg_tid, GenericErr, VG_(get_IP)(vg_tid),
+ "--check-stack-var=no skips checking stack"
+ " variables shared over threads",
+ &GEI);
+#endif
+ } else {
+ DataRaceErrInfo drei = {
+ .tid = DRD_(thread_get_running_tid)(),
+ .addr = addr,
+ .size = size,
+ .access_type = access_type,
+ };
+ VG_(maybe_record_error)(vg_tid, DataRaceErr, VG_(get_IP)(vg_tid),
+ "Conflicting access", &drei);
+
+ if (s_first_race_only)
+ DRD_(start_suppression)(addr, addr + size, "first race only");
}
}
-Thread 3:
-Conflicting load by thread 3 at 0x........ size 4
- at 0x........: th (hg05_race2.c:17)
- by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
-Location 0x........ is 0 bytes inside foo.poot[5].plop[11],
-declared at hg05_race2.c:24, in frame #? of thread 1
-Other segment start (thread 2)
- (thread finished, call stack no longer available)
-Other segment end (thread 2)
- (thread finished, call stack no longer available)
-Conflicting store by thread 3 at 0x........ size 4
- at 0x........: th (hg05_race2.c:17)
- by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
-Location 0x........ is 0 bytes inside foo.poot[5].plop[11],
-declared at hg05_race2.c:24, in frame #? of thread 1
-Other segment start (thread 2)
- (thread finished, call stack no longer available)
-Other segment end (thread 2)
- (thread finished, call stack no longer available)
-
-
-ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
+++ /dev/null
-
-Thread 3:
-Conflicting load by thread 3 at 0x........ size 4
- at 0x........: th (hg05_race2.c:17)
- by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
-Allocation context: unknown.
-Other segment start (thread 2)
- (thread finished, call stack no longer available)
-Other segment end (thread 2)
- (thread finished, call stack no longer available)
-
-Conflicting store by thread 3 at 0x........ size 4
- at 0x........: th (hg05_race2.c:17)
- by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
-Allocation context: unknown.
-Other segment start (thread 2)
- (thread finished, call stack no longer available)
-Other segment end (thread 2)
- (thread finished, call stack no longer available)
-
-
-ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)