|
From: <sv...@va...> - 2008-02-22 01:19:50
|
Author: sewardj
Date: 2008-02-22 01:19:49 +0000 (Fri, 22 Feb 2008)
New Revision: 7434
Log:
Connect Helgrind up to the new address-describing machinery.
Modified:
branches/DATASYMS/coregrind/m_debuginfo/debuginfo.c
branches/DATASYMS/helgrind/hg_main.c
Modified: branches/DATASYMS/coregrind/m_debuginfo/debuginfo.c
===================================================================
--- branches/DATASYMS/coregrind/m_debuginfo/debuginfo.c 2008-02-21 20:32:57 UTC (rev 7433)
+++ branches/DATASYMS/coregrind/m_debuginfo/debuginfo.c 2008-02-22 01:19:49 UTC (rev 7434)
@@ -1678,12 +1678,12 @@
if ( frameNo >= 0 && (!have_srcloc) && (!have_descr) ) {
/* no srcloc, no description:
- Address 0x7fefff6cf is 543 bytes inside local var "a",
+ Location 0x7fefff6cf is 543 bytes inside local var "a",
in frame #1 of thread 1
*/
VG_(snprintf)(
dname1, n_dname,
- "Address 0x%lx is %lu byte%s inside local var \"%s\",",
+ "Location 0x%lx is %lu byte%s inside local var \"%s\",",
data_addr, var_offset, vo_plural, var->name );
VG_(snprintf)(
dname2, n_dname,
@@ -1692,12 +1692,12 @@
else
if ( frameNo >= 0 && have_srcloc && (!have_descr) ) {
/* no description:
- Address 0x7fefff6cf is 543 bytes inside local var "a"
+ Location 0x7fefff6cf is 543 bytes inside local var "a"
declared at dsyms7.c:17, in frame #1 of thread 1
*/
VG_(snprintf)(
dname1, n_dname,
- "Address 0x%lx is %lu byte%s inside local var \"%s\"",
+ "Location 0x%lx is %lu byte%s inside local var \"%s\"",
data_addr, var_offset, vo_plural, var->name );
VG_(snprintf)(
dname2, n_dname,
@@ -1707,12 +1707,12 @@
else
if ( frameNo >= 0 && (!have_srcloc) && have_descr ) {
/* no srcloc:
- Address 0x7fefff6cf is 2 bytes inside a[3].xyzzy[21].c2
+ Location 0x7fefff6cf is 2 bytes inside a[3].xyzzy[21].c2
in frame #1 of thread 1
*/
VG_(snprintf)(
dname1, n_dname,
- "Address 0x%lx is %lu byte%s inside %s%s",
+ "Location 0x%lx is %lu byte%s inside %s%s",
data_addr, residual_offset, ro_plural, var->name,
VG_(indexXA)(described,0) );
VG_(snprintf)(
@@ -1721,11 +1721,11 @@
}
else
if ( frameNo >= 0 && have_srcloc && have_descr ) {
- /* Address 0x7fefff6cf is 2 bytes inside a[3].xyzzy[21].c2,
+ /* Location 0x7fefff6cf is 2 bytes inside a[3].xyzzy[21].c2,
declared at dsyms7.c:17, in frame #1 of thread 1 */
VG_(snprintf)(
dname1, n_dname,
- "Address 0x%lx is %lu byte%s inside %s%s,",
+ "Location 0x%lx is %lu byte%s inside %s%s,",
data_addr, residual_offset, ro_plural, var->name,
VG_(indexXA)(described,0) );
VG_(snprintf)(
@@ -1737,22 +1737,22 @@
/* ------ global cases ------ */
if ( frameNo >= -1 && (!have_srcloc) && (!have_descr) ) {
/* no srcloc, no description:
- Address 0x7fefff6cf is 543 bytes inside global var "a"
+ Location 0x7fefff6cf is 543 bytes inside global var "a"
*/
VG_(snprintf)(
dname1, n_dname,
- "Address 0x%lx is %lu byte%s inside global var \"%s\"",
+ "Location 0x%lx is %lu byte%s inside global var \"%s\"",
data_addr, var_offset, vo_plural, var->name );
}
else
if ( frameNo >= -1 && have_srcloc && (!have_descr) ) {
/* no description:
- Address 0x7fefff6cf is 543 bytes inside global var "a"
+ Location 0x7fefff6cf is 543 bytes inside global var "a"
declared at dsyms7.c:17
*/
VG_(snprintf)(
dname1, n_dname,
- "Address 0x%lx is %lu byte%s inside global var \"%s\"",
+ "Location 0x%lx is %lu byte%s inside global var \"%s\"",
data_addr, var_offset, vo_plural, var->name );
VG_(snprintf)(
dname2, n_dname,
@@ -1762,12 +1762,12 @@
else
if ( frameNo >= -1 && (!have_srcloc) && have_descr ) {
/* no srcloc:
- Address 0x7fefff6cf is 2 bytes inside a[3].xyzzy[21].c2,
+ Location 0x7fefff6cf is 2 bytes inside a[3].xyzzy[21].c2,
a global variable
*/
VG_(snprintf)(
dname1, n_dname,
- "Address 0x%lx is %lu byte%s inside %s%s,",
+ "Location 0x%lx is %lu byte%s inside %s%s,",
data_addr, residual_offset, ro_plural, var->name,
VG_(indexXA)(described,0) );
VG_(snprintf)(
@@ -1776,11 +1776,11 @@
}
else
if ( frameNo >= -1 && have_srcloc && have_descr ) {
- /* Address 0x7fefff6cf is 2 bytes inside a[3].xyzzy[21].c2,
+ /* Location 0x7fefff6cf is 2 bytes inside a[3].xyzzy[21].c2,
a global variable declared at dsyms7.c:17 */
VG_(snprintf)(
dname1, n_dname,
- "Address 0x%lx is %lu byte%s inside %s%s,",
+ "Location 0x%lx is %lu byte%s inside %s%s,",
data_addr, residual_offset, ro_plural, var->name,
VG_(indexXA)(described,0) );
VG_(snprintf)(
Modified: branches/DATASYMS/helgrind/hg_main.c
===================================================================
--- branches/DATASYMS/helgrind/hg_main.c 2008-02-21 20:32:57 UTC (rev 7433)
+++ branches/DATASYMS/helgrind/hg_main.c 2008-02-22 01:19:49 UTC (rev 7434)
@@ -48,6 +48,7 @@
#include "pub_tool_options.h"
#include "pub_tool_xarray.h"
#include "pub_tool_stacktrace.h"
+#include "pub_tool_debuginfo.h" /* VG_(get_data_description) */
#include "helgrind.h"
@@ -7823,6 +7824,8 @@
SVal old_state;
ExeContext* mb_lastlock;
Thread* thr;
+ Char descr1[96];
+ Char descr2[96];
} Race;
struct {
Thread* thr; /* doing the freeing */
@@ -7912,6 +7915,20 @@
// FIXME: tid vs thr
tl_assert(isWrite == False || isWrite == True);
tl_assert(szB == 8 || szB == 4 || szB == 2 || szB == 1);
+
+ tl_assert(sizeof(xe.XE.Race.descr1) == sizeof(xe.XE.Race.descr2));
+ xe.XE.Race.descr1[0] = xe.XE.Race.descr2[0] = 0;
+ if (VG_(get_data_description)(
+ &xe.XE.Race.descr1[0],
+ &xe.XE.Race.descr2[0],
+ sizeof(xe.XE.Race.descr1)-1,
+ data_addr )) {
+ tl_assert( xe.XE.Race.descr1
+ [ sizeof(xe.XE.Race.descr1)-1 ] == 0);
+ tl_assert( xe.XE.Race.descr2
+ [ sizeof(xe.XE.Race.descr2)-1 ] == 0);
+ }
+
VG_(maybe_record_error)( map_threads_reverse_lookup_SLOW(thr),
XE_Race, data_addr, NULL, &xe );
}
@@ -8447,6 +8464,12 @@
old_state, old_buf, new_state, new_buf);
}
+ /* If we have a better description of the address, show it. */
+ if (xe->XE.Race.descr1[0] != 0)
+ VG_(message)(Vg_UserMsg, " %s", &xe->XE.Race.descr1);
+ if (xe->XE.Race.descr2[0] != 0)
+ VG_(message)(Vg_UserMsg, " %s", &xe->XE.Race.descr2);
+
break; /* case XE_Race */
} /* case XE_Race */
|