Switched to VG_(get_data_description)() for descriptions of addresses in error reports.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7585 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/exp-drd/drd_error.c b/exp-drd/drd_error.c
index 05bf4a4..20d3aff 100644
--- a/exp-drd/drd_error.c
+++ b/exp-drd/drd_error.c
@@ -220,13 +220,20 @@
void drd_report_data_race2(Error* const err, const DataRaceErrInfo* const dri)
{
AddrInfo ai;
- Char descr[256];
+ Char descr1[256];
+ Char descr2[256];
tl_assert(dri);
tl_assert(dri->addr);
tl_assert(dri->size > 0);
- describe_addr_text(dri->addr, dri->size,
- &ai, descr, sizeof(descr));
+
+ descr1[0] = 0;
+ descr2[0] = 0;
+ VG_(get_data_description)(descr1, descr2, sizeof(descr1), dri->addr);
+ if (descr1[0] == 0)
+ {
+ describe_addr(dri->addr, dri->size, &ai);
+ }
VG_(message)(Vg_UserMsg,
"Conflicting %s by %s at 0x%08lx size %ld",
dri->access_type == eStore ? "store" : "load",
@@ -234,11 +241,19 @@
dri->addr,
dri->size);
VG_(pp_ExeContext)(VG_(get_error_where)(err));
- VG_(message)(Vg_UserMsg, "Allocation context: %s", descr);
- if (ai.akind == eMallocd && ai.lastchange)
+ if (descr1[0])
+ {
+ VG_(message)(Vg_UserMsg, "%s", descr1);
+ VG_(message)(Vg_UserMsg, "%s", descr2);
+ }
+ else if (ai.akind == eMallocd && ai.lastchange)
{
VG_(pp_ExeContext)(ai.lastchange);
}
+ else
+ {
+ VG_(message)(Vg_UserMsg, "Allocation context: unknown.\n");
+ }
thread_report_conflicting_segments(VgThreadIdToDrdThreadId(dri->tid),
dri->addr, dri->size, dri->access_type);
}