You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
1
(11) |
2
(9) |
3
(14) |
4
(18) |
5
(13) |
|
6
(4) |
7
(12) |
8
(16) |
9
(14) |
10
(8) |
11
(9) |
12
(7) |
|
13
(12) |
14
(6) |
15
(14) |
16
(5) |
17
(10) |
18
(8) |
19
(5) |
|
20
(10) |
21
(16) |
22
(5) |
23
(14) |
24
(10) |
25
(11) |
26
(6) |
|
27
(9) |
28
(8) |
29
(11) |
30
(9) |
31
(18) |
|
|
|
From: Robert W. <rj...@du...> - 2008-01-10 21:47:53
|
Hi Julian, Just out of curiosity, when do you expect to have this branch ready to merge over to trunk? Seems pretty cool. Regards, Robert. On Jan 10, 2008, at 1:08 PM, Nicholas Nethercote wrote: > On Thu, 10 Jan 2008 sv...@va... wrote: > >> Log: >> Push data-symbol awareness through to the debuginfo query machinery >> in >> debuginfo.c, and connect Memcheck's describe-an-address device to it. >> This makes Memcheck able to issue errors like this >> >> Uninitialised byte(s) found during client check request >> at 0x4005FE: croak (dsyms2.c:23) >> by 0x40066D: main (dsyms2.c:49) >> Address 0x601043 is 7 bytes inside global var "global_i2" >> >> Not terribly useful, but it's a start. > > I think it's quite useful... > > N > > ------------------------------------------------------------------------- > Check out the new SourceForge.net Marketplace. > It's the best place to buy or sell services for > just about anything Open Source. > http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace > _______________________________________________ > Valgrind-developers mailing list > Val...@li... > https://lists.sourceforge.net/lists/listinfo/valgrind-developers |
|
From: Nicholas N. <nj...@cs...> - 2008-01-10 21:08:08
|
On Thu, 10 Jan 2008 sv...@va... wrote: > Log: > Push data-symbol awareness through to the debuginfo query machinery in > debuginfo.c, and connect Memcheck's describe-an-address device to it. > This makes Memcheck able to issue errors like this > > Uninitialised byte(s) found during client check request > at 0x4005FE: croak (dsyms2.c:23) > by 0x40066D: main (dsyms2.c:49) > Address 0x601043 is 7 bytes inside global var "global_i2" > > Not terribly useful, but it's a start. I think it's quite useful... N |
|
From: Ashley P. <api...@co...> - 2008-01-10 18:04:35
|
On Thu, 2008-01-10 at 17:54 +0000, sv...@va... wrote: > This makes Memcheck able to issue errors like this > > Uninitialised byte(s) found during client check request > at 0x4005FE: croak (dsyms2.c:23) > by 0x40066D: main (dsyms2.c:49) > Address 0x601043 is 7 bytes inside global var "global_i2" > > Not terribly useful, but it's a start. Looks pretty useful to me, if that's the start what are you aiming for at the end? Ashley, |
|
From: <sv...@va...> - 2008-01-10 17:54:57
|
Author: sewardj
Date: 2008-01-10 17:54:50 +0000 (Thu, 10 Jan 2008)
New Revision: 7337
Log:
Push data-symbol awareness through to the debuginfo query machinery in
debuginfo.c, and connect Memcheck's describe-an-address device to it.
This makes Memcheck able to issue errors like this
Uninitialised byte(s) found during client check request
at 0x4005FE: croak (dsyms2.c:23)
by 0x40066D: main (dsyms2.c:49)
Address 0x601043 is 7 bytes inside global var "global_i2"
Not terribly useful, but it's a start.
Modified:
branches/DATASYMS/coregrind/m_debuginfo/debuginfo.c
branches/DATASYMS/coregrind/m_debuginfo/priv_storage.h
branches/DATASYMS/coregrind/m_debuginfo/storage.c
branches/DATASYMS/coregrind/m_redir.c
branches/DATASYMS/exp-drd/drd_error.c
branches/DATASYMS/include/pub_tool_debuginfo.h
branches/DATASYMS/memcheck/mc_main.c
Modified: branches/DATASYMS/coregrind/m_debuginfo/debuginfo.c
===================================================================
--- branches/DATASYMS/coregrind/m_debuginfo/debuginfo.c 2008-01-10 14:31:54 UTC (rev 7336)
+++ branches/DATASYMS/coregrind/m_debuginfo/debuginfo.c 2008-01-10 17:54:50 UTC (rev 7337)
@@ -680,22 +680,42 @@
/* Search all symtabs that we know about to locate ptr. If found, set
*pdi to the relevant DebugInfo, and *symno to the symtab entry
- *number within that. If not found, *psi is set to NULL. */
+ *number within that. If not found, *psi is set to NULL.
+ If findText==True, only text symbols are searched for.
+ If findText==False, only data symbols are searched for.
+*/
static void search_all_symtabs ( Addr ptr, /*OUT*/DebugInfo** pdi,
/*OUT*/Int* symno,
- Bool match_anywhere_in_fun )
+ Bool match_anywhere_in_sym,
+ Bool findText )
{
Int sno;
DebugInfo* di;
+ Bool inRange;
+
for (di = debugInfo_list; di != NULL; di = di->next) {
- if (di->text_avma <= ptr
- && ptr < di->text_avma + di->text_size) {
- sno = ML_(search_one_symtab) ( di, ptr, match_anywhere_in_fun );
- if (sno == -1) goto not_found;
- *symno = sno;
- *pdi = di;
- return;
+
+ if (findText) {
+ inRange = di->text_size > 0
+ && di->text_avma <= ptr
+ && ptr < di->text_avma + di->text_size;
+ } else {
+ inRange = di->data_size > 0
+ && di->data_avma <= ptr
+ && ptr < di->data_avma + di->data_size + di->bss_size;
}
+
+ /* Note this short-circuit check relies on the assumption that
+ .bss is mapped immediately after .data. */
+ if (!inRange) continue;
+
+ sno = ML_(search_one_symtab) (
+ di, ptr, match_anywhere_in_sym, findText );
+ if (sno == -1) goto not_found;
+ *symno = sno;
+ *pdi = di;
+ return;
+
}
not_found:
*pdi = NULL;
@@ -729,16 +749,19 @@
plausible symbol name. Returns False if no idea; otherwise True.
Caller supplies buf and nbuf. If demangle is False, don't do
demangling, regardless of VG_(clo_demangle) -- probably because the
- call has come from VG_(get_fnname_nodemangle)(). */
+ call has come from VG_(get_fnname_nodemangle)(). findText
+ indicates whether we're looking for a text symbol or a data symbol
+ -- caller must choose one kind or the other. */
static
-Bool get_fnname ( Bool demangle, Addr a, Char* buf, Int nbuf,
- Bool match_anywhere_in_fun, Bool show_offset)
+Bool get_sym_name ( Bool demangle, Addr a, Char* buf, Int nbuf,
+ Bool match_anywhere_in_sym, Bool show_offset,
+ Bool findText, /*OUT*/OffT* offsetP )
{
DebugInfo* di;
Int sno;
Int offset;
- search_all_symtabs ( a, &di, &sno, match_anywhere_in_fun );
+ search_all_symtabs ( a, &di, &sno, match_anywhere_in_sym, findText );
if (di == NULL)
return False;
if (demangle) {
@@ -749,6 +772,8 @@
}
offset = a - di->symtab[sno].addr;
+ if (offsetP) *offsetP = (OffT)offset;
+
if (show_offset && offset != 0) {
Char buf2[12];
Char* symend = buf + VG_(strlen)(buf);
@@ -777,7 +802,9 @@
DebugInfo* si;
Int sno;
search_all_symtabs ( guest_code_addr,
- &si, &sno, True/*match_anywhere_in_fun*/ );
+ &si, &sno,
+ True/*match_anywhere_in_fun*/,
+ True/*consider text symbols only*/ );
if (si == NULL)
return 0;
else
@@ -788,18 +815,22 @@
match anywhere in function, but don't show offsets. */
Bool VG_(get_fnname) ( Addr a, Char* buf, Int nbuf )
{
- return get_fnname ( /*demangle*/True, a, buf, nbuf,
- /*match_anywhere_in_fun*/True,
- /*show offset?*/False );
+ return get_sym_name ( /*demangle*/True, a, buf, nbuf,
+ /*match_anywhere_in_fun*/True,
+ /*show offset?*/False,
+ /*text syms only*/True,
+ /*offsetP*/NULL );
}
/* This is available to tools... always demangle C++ names,
match anywhere in function, and show offset if nonzero. */
Bool VG_(get_fnname_w_offset) ( Addr a, Char* buf, Int nbuf )
{
- return get_fnname ( /*demangle*/True, a, buf, nbuf,
- /*match_anywhere_in_fun*/True,
- /*show offset?*/True );
+ return get_sym_name ( /*demangle*/True, a, buf, nbuf,
+ /*match_anywhere_in_fun*/True,
+ /*show offset?*/True,
+ /*text syms only*/True,
+ /*offsetP*/NULL );
}
/* This is available to tools... always demangle C++ names,
@@ -807,18 +838,22 @@
and don't show offsets. */
Bool VG_(get_fnname_if_entry) ( Addr a, Char* buf, Int nbuf )
{
- return get_fnname ( /*demangle*/True, a, buf, nbuf,
- /*match_anywhere_in_fun*/False,
- /*show offset?*/False );
+ return get_sym_name ( /*demangle*/True, a, buf, nbuf,
+ /*match_anywhere_in_fun*/False,
+ /*show offset?*/False,
+ /*text syms only*/True,
+ /*offsetP*/NULL );
}
/* This is only available to core... don't demangle C++ names,
match anywhere in function, and don't show offsets. */
Bool VG_(get_fnname_nodemangle) ( Addr a, Char* buf, Int nbuf )
{
- return get_fnname ( /*demangle*/False, a, buf, nbuf,
- /*match_anywhere_in_fun*/True,
- /*show offset?*/False );
+ return get_sym_name ( /*demangle*/False, a, buf, nbuf,
+ /*match_anywhere_in_fun*/True,
+ /*show offset?*/False,
+ /*text syms only*/True,
+ /*offsetP*/NULL );
}
/* This is only available to core... don't demangle C++ names, but do
@@ -830,9 +865,11 @@
Char tmpbuf[N_TMPBUF];
Bool ok;
vg_assert(nbuf > 0);
- ok = get_fnname ( /*demangle*/False, a, tmpbuf, N_TMPBUF,
- /*match_anywhere_in_fun*/True,
- /*show offset?*/False );
+ ok = get_sym_name ( /*demangle*/False, a, tmpbuf, N_TMPBUF,
+ /*match_anywhere_in_fun*/True,
+ /*show offset?*/False,
+ /*text syms only*/True,
+ /*offsetP*/NULL );
tmpbuf[N_TMPBUF-1] = 0; /* paranoia */
if (!ok)
return False;
@@ -845,6 +882,28 @@
# undef N_TMPBUF
}
+/* Looks up 'a' in the collection of data symbols, and if found puts
+ its name (or as much as will fit) into dname[0 .. n_dname-1]
+ including zero terminator. Also the 'a's offset from the symbol
+ start is put into *offset. */
+Bool VG_(get_dataname_and_offset)( Addr a,
+ /*OUT*/Char* dname, Int n_dname,
+ /*OUT*/OffT* offset )
+{
+ Bool ok;
+ vg_assert(n_dname > 1);
+ ok = get_sym_name ( /*demangle*/False, a, dname, n_dname,
+ /*match_anywhere_in_sym*/True,
+ /*show offset?*/False,
+ /*data syms only please*/False,
+ offset );
+ if (!ok)
+ return False;
+ dname[n_dname-1] = 0;
+ return True;
+}
+
+
/* Map a code address to the name of a shared object file or the
executable. Returns False if no idea; otherwise True. Doesn't
require debug info. Caller supplies buf and nbuf. */
@@ -1537,13 +1596,15 @@
/*OUT*/Addr* addr,
/*OUT*/Addr* tocptr,
/*OUT*/UInt* size,
- /*OUT*/HChar** name )
+ /*OUT*/HChar** name,
+ /*OUT*/Bool* isText )
{
vg_assert(idx >= 0 && idx < si->symtab_used);
if (addr) *addr = si->symtab[idx].addr;
if (tocptr) *tocptr = si->symtab[idx].tocptr;
if (size) *size = si->symtab[idx].size;
if (name) *name = (HChar*)si->symtab[idx].name;
+ if (isText) *isText = si->symtab[idx].isText;
}
Modified: branches/DATASYMS/coregrind/m_debuginfo/priv_storage.h
===================================================================
--- branches/DATASYMS/coregrind/m_debuginfo/priv_storage.h 2008-01-10 14:31:54 UTC (rev 7336)
+++ branches/DATASYMS/coregrind/m_debuginfo/priv_storage.h 2008-01-10 17:54:50 UTC (rev 7337)
@@ -359,7 +359,8 @@
/* Find a symbol-table index containing the specified pointer, or -1
if not found. Binary search. */
extern Int ML_(search_one_symtab) ( struct _DebugInfo* di, Addr ptr,
- Bool match_anywhere_in_fun );
+ Bool match_anywhere_in_sym,
+ Bool findText );
/* Find a location-table index containing the specified pointer, or -1
if not found. Binary search. */
Modified: branches/DATASYMS/coregrind/m_debuginfo/storage.c
===================================================================
--- branches/DATASYMS/coregrind/m_debuginfo/storage.c 2008-01-10 14:31:54 UTC (rev 7336)
+++ branches/DATASYMS/coregrind/m_debuginfo/storage.c 2008-01-10 17:54:50 UTC (rev 7337)
@@ -915,10 +915,11 @@
if not found. Binary search. */
Int ML_(search_one_symtab) ( struct _DebugInfo* di, Addr ptr,
- Bool match_anywhere_in_fun )
+ Bool match_anywhere_in_sym,
+ Bool findText )
{
Addr a_mid_lo, a_mid_hi;
- Int mid, size,
+ Word mid, size,
lo = 0,
hi = di->symtab_used-1;
while (True) {
@@ -926,7 +927,7 @@
if (lo > hi) return -1; /* not found */
mid = (lo + hi) / 2;
a_mid_lo = di->symtab[mid].addr;
- size = ( match_anywhere_in_fun
+ size = ( match_anywhere_in_sym
? di->symtab[mid].size
: 1);
a_mid_hi = ((Addr)di->symtab[mid].addr) + size - 1;
@@ -934,7 +935,11 @@
if (ptr < a_mid_lo) { hi = mid-1; continue; }
if (ptr > a_mid_hi) { lo = mid+1; continue; }
vg_assert(ptr >= a_mid_lo && ptr <= a_mid_hi);
- return mid;
+ /* Found a symbol with the correct address range. But is it
+ of the right kind (text vs data) ? */
+ if ( findText && di->symtab[mid].isText ) return mid;
+ if ( (!findText) && (!di->symtab[mid].isText) ) return mid;
+ return -1;
}
}
@@ -945,7 +950,7 @@
Int ML_(search_one_loctab) ( struct _DebugInfo* di, Addr ptr )
{
Addr a_mid_lo, a_mid_hi;
- Int mid,
+ Word mid,
lo = 0,
hi = di->loctab_used-1;
while (True) {
Modified: branches/DATASYMS/coregrind/m_redir.c
===================================================================
--- branches/DATASYMS/coregrind/m_redir.c 2008-01-10 14:31:54 UTC (rev 7336)
+++ branches/DATASYMS/coregrind/m_redir.c 2008-01-10 17:54:50 UTC (rev 7337)
@@ -327,6 +327,7 @@
HChar demangled_sopatt[N_DEMANGLED];
HChar demangled_fnpatt[N_DEMANGLED];
Bool check_ppcTOCs = False;
+ Bool isText;
const UChar* newsi_soname;
# if defined(VG_PLAT_USES_PPCTOC)
@@ -349,9 +350,12 @@
nsyms = VG_(seginfo_syms_howmany)( newsi );
for (i = 0; i < nsyms; i++) {
VG_(seginfo_syms_getidx)( newsi, i, &sym_addr, &sym_toc,
- NULL, &sym_name );
+ NULL, &sym_name, &isText );
ok = VG_(maybe_Z_demangle)( sym_name, demangled_sopatt, N_DEMANGLED,
demangled_fnpatt, N_DEMANGLED, &isWrap );
+ /* ignore data symbols */
+ if (!isText)
+ continue;
if (!ok) {
/* It's not a full-scale redirect, but perhaps it is a load-notify
fn? Let the load-notify department see it. */
@@ -384,9 +388,11 @@
if (check_ppcTOCs) {
for (i = 0; i < nsyms; i++) {
VG_(seginfo_syms_getidx)( newsi, i, &sym_addr, &sym_toc,
- NULL, &sym_name );
- ok = VG_(maybe_Z_demangle)( sym_name, demangled_sopatt, N_DEMANGLED,
- demangled_fnpatt, N_DEMANGLED, &isWrap );
+ NULL, &sym_name, &isText );
+ ok = isText
+ && VG_(maybe_Z_demangle)(
+ sym_name, demangled_sopatt, N_DEMANGLED,
+ demangled_fnpatt, N_DEMANGLED, &isWrap );
if (!ok)
/* not a redirect. Ignore. */
continue;
@@ -480,7 +486,7 @@
)
{
Spec* sp;
- Bool anyMark;
+ Bool anyMark, isText;
Active act;
Int nsyms, i;
Addr sym_addr;
@@ -505,8 +511,13 @@
of trashing the caches less. */
nsyms = VG_(seginfo_syms_howmany)( di );
for (i = 0; i < nsyms; i++) {
- VG_(seginfo_syms_getidx)( di, i, &sym_addr, NULL, NULL, &sym_name );
+ VG_(seginfo_syms_getidx)( di, i,
+ &sym_addr, NULL, NULL, &sym_name, &isText );
+ /* ignore data symbols */
+ if (!isText)
+ continue;
+
/* On AIX, we cannot redirect calls to a so-called glink
function for reasons which are not obvious - something to do
with saving r2 across the call. Not a problem, as we don't
Modified: branches/DATASYMS/exp-drd/drd_error.c
===================================================================
--- branches/DATASYMS/exp-drd/drd_error.c 2008-01-10 14:31:54 UTC (rev 7336)
+++ branches/DATASYMS/exp-drd/drd_error.c 2008-01-10 17:54:50 UTC (rev 7337)
@@ -103,9 +103,10 @@
HChar* name;
Char filename[256];
Int linenum;
+ Bool isText;
- VG_(seginfo_syms_getidx)(sg, i, &addr, &tocptr, &size, &name);
- if (addr <= a && a < addr + size)
+ VG_(seginfo_syms_getidx)(sg, i, &addr, &tocptr, &size, &name, &isText);
+ if (isText && addr <= a && a < addr + size)
{
ai->size = size;
ai->rwoffset = a - addr;
Modified: branches/DATASYMS/include/pub_tool_debuginfo.h
===================================================================
--- branches/DATASYMS/include/pub_tool_debuginfo.h 2008-01-10 14:31:54 UTC (rev 7336)
+++ branches/DATASYMS/include/pub_tool_debuginfo.h 2008-01-10 17:54:50 UTC (rev 7337)
@@ -74,6 +74,14 @@
entry points within it. */
extern Bool VG_(get_fnname_if_entry) ( Addr a, Char* fnname, Int n_fnname );
+/* Looks up 'a' in the collection of data symbols, and if found puts
+ its name (or as much as will fit) into dname[0 .. n_dname-1]
+ including zero terminator. Also the 'a's offset from the symbol
+ start is put into *offset. */
+extern Bool VG_(get_dataname_and_offset)( Addr a,
+ /*OUT*/Char* dname, Int n_dname,
+ /*OUT*/OffT* offset );
+
/* Succeeds if the address is within a shared object or the main executable.
It doesn't matter if debug info is present or not. */
extern Bool VG_(get_objname) ( Addr a, Char* objname, Int n_objname );
@@ -87,7 +95,6 @@
*/
extern Char* VG_(describe_IP)(Addr eip, Char* buf, Int n_buf);
-
/*====================================================================*/
/*=== Obtaining segment information ===*/
/*====================================================================*/
@@ -121,8 +128,8 @@
/*OUT*/Addr* addr,
/*OUT*/Addr* tocptr,
/*OUT*/UInt* size,
- /*OUT*/HChar** name );
-
+ /*OUT*/HChar** name,
+ /*OUT*/Bool* isText );
typedef
enum {
Vg_SectUnknown,
Modified: branches/DATASYMS/memcheck/mc_main.c
===================================================================
--- branches/DATASYMS/memcheck/mc_main.c 2008-01-10 14:31:54 UTC (rev 7336)
+++ branches/DATASYMS/memcheck/mc_main.c 2008-01-10 17:54:50 UTC (rev 7337)
@@ -44,6 +44,7 @@
#include "pub_tool_tooliface.h"
#include "pub_tool_threadstate.h"
#include "pub_tool_oset.h"
+#include "pub_tool_debuginfo.h" // VG_(get_dataname_and_offset)
#include "mc_include.h"
#include "memcheck.h" /* for client requests */
@@ -2629,6 +2630,7 @@
Addr_Unknown, // classification yielded nothing useful
Addr_Stack,
Addr_Block,
+ Addr_GlobalData
}
AddrTag;
@@ -2657,6 +2659,13 @@
ExeContext* lastchange;
} Block;
+ // In a global .data symbol. This holds the first 63 chars of
+ // the variable's (zero terminated), plus an offset.
+ struct {
+ Char name[64];
+ OffT offset;
+ } GlobalData;
+
// Classification yielded nothing useful.
struct { } Unknown;
@@ -2833,6 +2842,17 @@
break;
}
+ case Addr_GlobalData:
+ VG_(message)(Vg_UserMsg,
+ "%sAddress 0x%llx is %llu bytes "
+ "inside global var \"%t\"%s",
+ xpre,
+ (ULong)a,
+ (ULong)ai->Addr.GlobalData.offset,
+ ai->Addr.GlobalData.name,
+ xpost);
+ break;
+
default:
VG_(tool_panic)("mc_pp_AddrInfo");
}
@@ -3330,9 +3350,9 @@
tl_assert(Addr_Undescribed == ai->tag);
/* Perhaps it's a user-def'd block? */
- if (client_perm_maybe_describe( a, ai ))
+ if (client_perm_maybe_describe( a, ai )) {
return;
-
+ }
/* Perhaps it's on a thread's stack? */
VG_(thread_stack_reset_iter)();
while ( VG_(thread_stack_next)(&tid, &stack_min, &stack_max) ) {
@@ -3369,6 +3389,17 @@
return;
}
}
+ /* Perhaps it's in global data? */
+ VG_(memset)( &ai->Addr.GlobalData.name, 0, sizeof(ai->Addr.GlobalData.name));
+ if (VG_(get_dataname_and_offset)(
+ a, &ai->Addr.GlobalData.name[0],
+ sizeof(ai->Addr.GlobalData.name)-1,
+ &ai->Addr.GlobalData.offset )) {
+ ai->tag = Addr_GlobalData;
+ tl_assert( ai->Addr.GlobalData.name
+ [ sizeof(ai->Addr.GlobalData.name)-1 ] == 0);
+ return;
+ }
/* Clueless ... */
ai->tag = Addr_Unknown;
return;
|
|
From: <sv...@va...> - 2008-01-10 14:31:56
|
Author: sewardj
Date: 2008-01-10 14:31:54 +0000 (Thu, 10 Jan 2008)
New Revision: 7336
Log:
* enable reading of ELF data symbols by default
* add new field .isText to DiSym structure
* improve debug printing
Modified:
branches/DATASYMS/coregrind/m_debuginfo/priv_storage.h
branches/DATASYMS/coregrind/m_debuginfo/readelf.c
branches/DATASYMS/coregrind/m_debuginfo/readxcoff.c
Modified: branches/DATASYMS/coregrind/m_debuginfo/priv_storage.h
===================================================================
--- branches/DATASYMS/coregrind/m_debuginfo/priv_storage.h 2008-01-09 22:53:42 UTC (rev 7335)
+++ branches/DATASYMS/coregrind/m_debuginfo/priv_storage.h 2008-01-10 14:31:54 UTC (rev 7336)
@@ -50,8 +50,9 @@
struct {
Addr addr; /* lowest address of entity */
Addr tocptr; /* ppc64-linux only: value that R2 should have */
+ UChar *name; /* name */
UInt size; /* size in bytes */
- UChar *name; /* name */
+ Bool isText;
}
DiSym;
Modified: branches/DATASYMS/coregrind/m_debuginfo/readelf.c
===================================================================
--- branches/DATASYMS/coregrind/m_debuginfo/readelf.c 2008-01-09 22:53:42 UTC (rev 7335)
+++ branches/DATASYMS/coregrind/m_debuginfo/readelf.c 2008-01-10 14:31:54 UTC (rev 7336)
@@ -139,7 +139,7 @@
static
void show_raw_elf_symbol ( Int i,
- ElfXX_Sym* sym, Char* sym_name, Addr sym_addr,
+ ElfXX_Sym* sym, Char* sym_name, Addr sym_svma,
Bool ppc64_linux_format )
{
HChar* space = ppc64_linux_format ? " " : "";
@@ -162,8 +162,8 @@
case STT_HIPROC: VG_(printf)("hip "); break;
default: VG_(printf)("??? "); break;
}
- VG_(printf)(": val %010p, %ssz %4d %s\n",
- sym_addr, space, sym->st_size,
+ VG_(printf)(": svma %010p, %ssz %4d %s\n",
+ sym_svma, space, sym->st_size,
( sym->st_name ? sym_name : (Char*)"NONAME" ) );
}
@@ -173,6 +173,12 @@
this is straightforward - the name, address, size are copied out
unchanged.
+ There is a bit of a kludge re data symbols (see KLUDGED BSS CHECK
+ below): we assume that the .bss is mapped immediately after .data,
+ and so accept any data symbol which exists in the range [start of
+ .data, size of .data + size of .bss). I don't know if this is
+ really correct/justifiable, or not.
+
For ppc64-linux it's more complex. If the symbol is seen to be in
the .opd section, it is taken to be a function descriptor, and so
a dereference is attempted, in order to get hold of the real entry
@@ -195,24 +201,26 @@
struct _DebugInfo* di, /* containing DebugInfo */
ElfXX_Sym* sym, /* ELF symbol */
Char* sym_name, /* name */
- Addr sym_addr, /* declared address */
+ Addr sym_svma, /* address as stated in the object file */
UChar* opd_img, /* oimage of .opd sec (ppc64-linux only) */
OffT opd_bias, /* for biasing AVMAs found in .opd */
/* OUTPUTS */
Char** sym_name_out, /* name we should record */
- Addr* sym_addr_out, /* addr we should record */
+ Addr* sym_avma_out, /* addr we should record */
Int* sym_size_out, /* symbol size */
Addr* sym_tocptr_out, /* ppc64-linux only: R2 value to be
used on entry */
- Bool* from_opd_out /* ppc64-linux only: did we deref an
- .opd entry? */
+ Bool* from_opd_out, /* ppc64-linux only: did we deref an
+ .opd entry? */
+ Bool* is_text_out /* is this a text symbol? */
)
{
Bool plausible, is_in_opd;
/* Set defaults */
*sym_name_out = sym_name;
- *sym_addr_out = sym_addr;
+ *sym_avma_out = sym_svma; /* we will bias this shortly */
+ *is_text_out = True;
*sym_size_out = (Int)sym->st_size;
*sym_tocptr_out = 0; /* unknown/inapplicable */
*from_opd_out = False;
@@ -226,20 +234,29 @@
)
&&
(ELFXX_ST_TYPE(sym->st_info) == STT_FUNC
- || (VG_(needs).data_syms
- && ELFXX_ST_TYPE(sym->st_info) == STT_OBJECT)
+ || ELFXX_ST_TYPE(sym->st_info) == STT_OBJECT
);
+ /* Now bias sym_avma_out accordingly */
+ if (ELFXX_ST_TYPE(sym->st_info) == STT_OBJECT) {
+ *is_text_out = False;
+ *sym_avma_out += di->data_bias;
+ } else {
+ *is_text_out = True;
+ *sym_avma_out += di->text_bias;
+ }
+
# if defined(VGP_ppc64_linux)
/* Allow STT_NOTYPE in the very special case where we're running on
ppc64-linux and the symbol is one which the .opd-chasing hack
below will chase. */
if (!plausible
+ && *is_text_out
&& ELFXX_ST_TYPE(sym->st_info) == STT_NOTYPE
&& sym->st_size > 0
- && di->opd_avma != 0
- && sym_addr >= di->opd_avma
- && sym_addr < di->opd_avma + di->opd_size)
+ && di->opd_size > 0
+ && *sym_svma_out >= di->opd_avma
+ && *sym_svma_out < di->opd_avma + di->opd_size)
plausible = True;
# endif
@@ -266,15 +283,15 @@
/* If it's apparently in a GOT or PLT, it's really a reference to a
symbol defined elsewhere, so ignore it. */
- if (di->got_avma != 0
- && sym_addr >= di->got_avma
- && sym_addr < di->got_avma + di->got_size) {
+ if (di->got_size > 0
+ && *sym_avma_out >= di->got_avma
+ && *sym_avma_out < di->got_avma + di->got_size) {
TRACE_SYMTAB(" ignore -- in GOT: %s\n", sym_name);
return False;
}
- if (di->plt_avma != 0
- && sym_addr >= di->plt_avma
- && sym_addr < di->plt_avma + di->plt_size) {
+ if (di->plt_size > 0
+ && *sym_avma_out >= di->plt_avma
+ && *sym_avma_out < di->plt_avma + di->plt_size) {
TRACE_SYMTAB(" ignore -- in PLT: %s\n", sym_name);
return False;
}
@@ -289,9 +306,9 @@
*/
is_in_opd = False;
- if (di->opd_avma != 0
- && sym_addr >= di->opd_avma
- && sym_addr < di->opd_avma + di->opd_size) {
+ if (di->opd_size > 0
+ && *sym_avma_out >= di->opd_avma
+ && *sym_avma_out < di->opd_avma + di->opd_size) {
# if !defined(VGP_ppc64_linux)
TRACE_SYMTAB(" ignore -- in OPD: %s\n", sym_name);
return False;
@@ -299,19 +316,19 @@
Int offset_in_opd;
ULong* fn_descr;
- if (0) VG_(printf)("opdXXX: opd_bias %p, sym_addr %p\n",
- (void*)(opd_bias), (void*)sym_addr);
+ if (0) VG_(printf)("opdXXX: opd_bias %p, sym_svma_out %p\n",
+ (void*)(opd_bias), (void*)*sym_avma_out);
- if (!VG_IS_8_ALIGNED(sym_addr)) {
+ if (!VG_IS_8_ALIGNED(*sym_avma_out)) {
TRACE_SYMTAB(" ignore -- not 8-aligned: %s\n", sym_name);
return False;
}
- /* sym_addr is a vma pointing into the .opd section. We know
- the vma of the opd section start, so we can figure out how
- far into the opd section this is. */
+ /* *sym_avma_out is a vma pointing into the .opd section. We
+ know the vma of the opd section start, so we can figure out
+ how far into the opd section this is. */
- offset_in_opd = (Addr)sym_addr - (Addr)(di->opd_avma);
+ offset_in_opd = (Addr)(*sym_avma_out) - (Addr)(di->opd_avma);
if (offset_in_opd < 0 || offset_in_opd >= di->opd_size) {
TRACE_SYMTAB(" ignore -- invalid OPD offset: %s\n", sym_name);
return False;
@@ -337,16 +354,15 @@
OK for fn_descr[0], but surely we need to use the data bias
and not the text bias for fn_descr[1] ? Oh Well.
*/
- sym_addr = fn_descr[0] + opd_bias;
- *sym_addr_out = sym_addr;
+ *sym_avma_out = fn_descr[0] + opd_bias;
*sym_tocptr_out = fn_descr[1] + opd_bias;
*from_opd_out = True;
is_in_opd = True;
/* Do a final sanity check: if the symbol falls outside the
- DebugInfo's mapped range, ignore it. Since sym_addr has been
- updated, that can be achieved simply by falling through to
- the test below. */
+ DebugInfo's mapped range, ignore it. Since *sym_avma_out has
+ been updated, that can be achieved simply by falling through
+ to the test below. */
# endif /* ppc64-linux nasty hack */
}
@@ -354,7 +370,7 @@
/* Here's yet another ppc64-linux hack. Get rid of leading dot if
the symbol is outside .opd. */
# if defined(VGP_ppc64_linux)
- if (di->opd_avma != 0
+ if (di->opd_size > 0
&& !is_in_opd
&& sym_name[0] == '.') {
vg_assert(!(*from_opd_out));
@@ -364,13 +380,28 @@
/* If no part of the symbol falls within the mapped range,
ignore it. */
- if (*sym_addr_out + *sym_size_out <= di->text_avma
- || *sym_addr_out >= di->text_avma + di->text_size) {
- TRACE_SYMTAB( "ignore -- %p .. %p outside mapped range %p .. %p\n",
- *sym_addr_out, *sym_addr_out + *sym_size_out,
- di->text_avma,
- di->text_avma + di->text_size);
- return False;
+ if (*is_text_out) {
+ if (*sym_avma_out + *sym_size_out <= di->text_avma
+ || *sym_avma_out >= di->text_avma + di->text_size) {
+ TRACE_SYMTAB(
+ "ignore -- %p .. %p outside .text svma range %p .. %p\n",
+ *sym_avma_out, *sym_avma_out + *sym_size_out,
+ di->text_avma,
+ di->text_avma + di->text_size);
+ return False;
+ }
+ } else {
+ /* KLUDGED BSS CHECK -- see comments at start of fn */
+ if (*sym_avma_out + *sym_size_out <= di->data_avma
+ || *sym_avma_out >= di->data_avma + di->data_size
+ + di->bss_size) {
+ TRACE_SYMTAB(
+ "ignore -- %p .. %p outside .data svma range %p .. %p\n",
+ *sym_avma_out, *sym_avma_out + *sym_size_out,
+ di->data_avma,
+ di->data_avma + di->data_size);
+ return False;
+ }
}
# if defined(VGP_ppc64_linux)
@@ -378,9 +409,9 @@
section. This would completely mess up function redirection and
intercepting. This assert ensures that any symbols that make it
into the symbol table on ppc64-linux don't point into .opd. */
- if (di->opd_avma != 0) {
- vg_assert(*sym_addr_out + *sym_size_out <= di->opd_avma
- || *sym_addr_out >= di->opd_avma + di->opd_size);
+ if (di->opd_size > 0) {
+ vg_assert(*sym_avma_out + *sym_size_out <= di->opd_avma
+ || *sym_avma_out >= di->opd_avma + di->opd_size);
}
# endif
@@ -401,11 +432,11 @@
)
{
Word i;
- Addr sym_addr, sym_addr_really;
+ Addr sym_svma, sym_avma_really;
Char *sym_name, *sym_name_really;
Int sym_size;
Addr sym_tocptr;
- Bool from_opd;
+ Bool from_opd, is_text;
DiSym risym;
ElfXX_Sym *sym;
@@ -417,38 +448,40 @@
return;
}
- TRACE_SYMTAB("\nReading (ELF, standard) %s (%d entries)\n", tab_name,
- symtab_szB/sizeof(ElfXX_Sym) );
+ TRACE_SYMTAB("\n--- Reading (ELF, standard) %s (%d entries)---\n",
+ tab_name, symtab_szB/sizeof(ElfXX_Sym) );
/* Perhaps should start at i = 1; ELF docs suggest that entry
0 always denotes 'unknown symbol'. */
for (i = 1; i < (Word)(symtab_szB/sizeof(ElfXX_Sym)); i++) {
sym = & symtab_img[i];
sym_name = (UChar*)(strtab_img + sym->st_name);
- sym_addr = di->text_bias + sym->st_value;
+ sym_svma = sym->st_value;
if (di->trace_symtab)
- show_raw_elf_symbol(i, sym, sym_name, sym_addr, False);
+ show_raw_elf_symbol(i, sym, sym_name, sym_svma, False);
- if (get_elf_symbol_info(di, sym, sym_name, sym_addr,
+ if (get_elf_symbol_info(di, sym, sym_name, sym_svma,
opd_img, di->text_bias,
&sym_name_really,
- &sym_addr_really,
+ &sym_avma_really,
&sym_size,
&sym_tocptr,
- &from_opd)) {
+ &from_opd, &is_text)) {
- risym.addr = sym_addr_really;
+ risym.addr = sym_avma_really;
risym.size = sym_size;
risym.name = ML_(addStr) ( di, sym_name_really, -1 );
risym.tocptr = sym_tocptr;
+ risym.isText = is_text;
vg_assert(risym.name != NULL);
vg_assert(risym.tocptr == 0); /* has no role except on ppc64-linux */
ML_(addSym) ( di, &risym );
if (di->trace_symtab) {
- VG_(printf)(" record [%4d]: "
- " val %010p, sz %4d %s\n",
+ VG_(printf)(" rec(%c) [%4d]: "
+ " val %010p, sz %4d %s\n",
+ is_text ? 't' : 'd',
i, (void*)risym.addr, (Int)risym.size,
(HChar*)risym.name
);
@@ -501,11 +534,11 @@
{
Word i;
Int old_size;
- Addr sym_addr, sym_addr_really;
+ Addr sym_svma, sym_avma_really;
Char *sym_name, *sym_name_really;
Int sym_size;
Addr sym_tocptr, old_tocptr;
- Bool from_opd, modify_size, modify_tocptr;
+ Bool from_opd, modify_size, modify_tocptr, is_text;
DiSym risym;
ElfXX_Sym *sym;
OSet *oset;
@@ -521,8 +554,8 @@
return;
}
- TRACE_SYMTAB("\nReading (ELF, ppc64-linux) %s (%d entries)\n", tab_name,
- symtab_szB/sizeof(ElfXX_Sym) );
+ TRACE_SYMTAB("\n--- Reading (ELF, ppc64-linux) %s (%d entries) ---\n",
+ tab_name, symtab_szB/sizeof(ElfXX_Sym) );
oset = VG_(OSetGen_Create)( offsetof(TempSym,key),
(OSetCmp_t)cmp_TempSymKey,
@@ -534,21 +567,21 @@
for (i = 1; i < (Word)(symtab_szB/sizeof(ElfXX_Sym)); i++) {
sym = & symtab_img[i];
sym_name = (Char*)(strtab_img + sym->st_name);
- sym_addr = di->text_bias + sym->st_value;
+ sym_svma = sym->st_value;
if (di->trace_symtab)
- show_raw_elf_symbol(i, sym, sym_name, sym_addr, True);
+ show_raw_elf_symbol(i, sym, sym_name, sym_svma, True);
- if (get_elf_symbol_info(di, sym, sym_name, sym_addr,
+ if (get_elf_symbol_info(di, sym, sym_name, sym_svma,
opd_img, di->text_bias,
&sym_name_really,
- &sym_addr_really,
+ &sym_avma_really,
&sym_size,
&sym_tocptr,
- &from_opd)) {
+ &from_opd, &is_text)) {
/* Check if we've seen this (name,addr) key before. */
- key.addr = sym_addr_really;
+ key.addr = sym_avma_really;
key.name = sym_name_really;
prev = VG_(OSetGen_Lookup)( oset, &key );
@@ -644,12 +677,14 @@
risym.size = elem->size;
risym.name = ML_(addStr) ( di, elem->key.name, -1 );
risym.tocptr = elem->tocptr;
+ risym.isText = True;
vg_assert(risym.name != NULL);
ML_(addSym) ( di, &risym );
if (di->trace_symtab) {
- VG_(printf)(" record [%4d]: "
- " val %010p, toc %010p, sz %4d %s\n",
+ VG_(printf)(" rec(%c) [%4d]: "
+ " val %010p, toc %010p, sz %4d %s\n",
+ is_text ? 't' : 'd',
i, (void*) risym.addr,
(void*) risym.tocptr,
(Int) risym.size,
@@ -866,7 +901,6 @@
Bool res, ok;
SysRes fd, sres;
Word i;
- Bool debug = False;
/* Image addresses for the ELF file we're working with. */
Addr oimage = 0;
@@ -991,15 +1025,19 @@
shdr_nent = ehdr_img->e_shnum;
shdr_ent_szB = ehdr_img->e_shentsize;
- if (debug) {
- VG_(printf)("object: img %p n_oimage %ld\n",
- (void*)oimage, n_oimage);
- VG_(printf)("phdr: img %p nent %ld ent_szB %ld\n",
- phdr_img, phdr_nent, phdr_ent_szB);
- VG_(printf)("shdr: img %p nent %ld ent_szB %ld\n",
- shdr_img, shdr_nent, shdr_ent_szB);
- }
+ TRACE_SYMTAB("\n");
+ TRACE_SYMTAB("------ start ELF OBJECT ------------------------------\n");
+ TRACE_SYMTAB("------ name = %s\n", di->filename);
+ TRACE_SYMTAB("\n");
+ TRACE_SYMTAB("--- Basic facts about the object ---\n");
+ TRACE_SYMTAB("object: img %p n_oimage %ld\n",
+ (void*)oimage, n_oimage);
+ TRACE_SYMTAB("phdr: img %p nent %ld ent_szB %ld\n",
+ phdr_img, phdr_nent, phdr_ent_szB);
+ TRACE_SYMTAB("shdr: img %p nent %ld ent_szB %ld\n",
+ shdr_img, shdr_nent, shdr_ent_szB);
+
if (phdr_nent == 0
|| !contained_within(
oimage, n_oimage,
@@ -1030,15 +1068,14 @@
goto out;
}
- if (debug) {
- VG_(printf)("shdr: string table at %p\n", shdr_strtab_img );
- }
+ TRACE_SYMTAB("shdr: string table at %p\n", shdr_strtab_img );
/* Do another amazingly tedious thing: find out the .soname for
this object. Apparently requires looking through the program
header table. */
+ TRACE_SYMTAB("\n");
+ TRACE_SYMTAB("--- Looking for the soname ---\n");
vg_assert(di->soname == NULL);
-
{
ElfXX_Addr prev_svma = 0;
@@ -1047,8 +1084,7 @@
/* Make sure the PT_LOADable entries are in order */
if (phdr->p_type == PT_LOAD) {
- if (debug)
- VG_(printf)("Comparing %p %p\n", prev_svma, phdr->p_vaddr);
+ TRACE_SYMTAB("PT_LOAD in order?: %p %p\n", prev_svma, phdr->p_vaddr);
if (phdr->p_vaddr < prev_svma) {
ML_(symerr)(di, True,
"ELF Program Headers are not in ascending order");
@@ -1092,9 +1128,7 @@
}
}
if (stroff != -1 && strtab != NULL) {
- if (debug)
- VG_(printf)("Got soname=%s\n", strtab+stroff);
- TRACE_SYMTAB("soname=%s\n", strtab+stroff);
+ TRACE_SYMTAB("Found soname = %s\n", strtab+stroff);
di->soname = VG_(arena_strdup)(VG_AR_DINFO, strtab+stroff);
}
}
@@ -1149,14 +1183,21 @@
}
}
+ /* If, after looking at all the program headers, we still didn't
+ find a soname, add a fake one. */
+ if (di->soname == NULL) {
+ TRACE_SYMTAB("No soname found; using (fake) \"NONE\"\n");
+ di->soname = "NONE";
+ }
+
/* Now read the section table. */
- if (debug) {
- VG_(printf)("rx: foffsets %ld .. %ld\n",
- di->rx_map_foff, di->rx_map_foff + di->rx_map_size - 1 );
- VG_(printf)("rw: foffsets %ld .. %ld\n",
- di->rw_map_foff, di->rw_map_foff + di->rw_map_size - 1 );
- }
+ TRACE_SYMTAB("\n");
+ TRACE_SYMTAB("--- Examining the section headers and program headers ---\n");
+ TRACE_SYMTAB("rx: foffsets %ld .. %ld\n",
+ di->rx_map_foff, di->rx_map_foff + di->rx_map_size - 1 );
+ TRACE_SYMTAB("rw: foffsets %ld .. %ld\n",
+ di->rw_map_foff, di->rw_map_foff + di->rw_map_size - 1 );
for (i = 0; i < shdr_nent; i++) {
ElfXX_Shdr* shdr = INDEX_BIS( shdr_img, i, shdr_ent_szB );
UChar* name = shdr_strtab_img + shdr->sh_name;
@@ -1169,11 +1210,10 @@
Bool inrw = size > 0 && foff >= di->rw_map_foff
&& foff < di->rw_map_foff + di->rw_map_size;
- if (debug)
- VG_(printf)("section %2ld %s %s foff %6ld .. %6ld "
- " svma %p name \"%s\"\n",
- i, inrx ? "rx" : " ", inrw ? "rw" : " ",
- foff, foff+size-1, (void*)svma, name );
+ TRACE_SYMTAB(" [sec %2ld] %s %s foff %6ld .. %6ld "
+ " svma %p name \"%s\"\n",
+ i, inrx ? "rx" : " ", inrw ? "rw" : " ",
+ foff, foff+size-1, (void*)svma, name );
/* Check for sane-sized segments. SHT_NOBITS sections have zero
size in the file. */
@@ -1197,8 +1237,10 @@
di->text_avma = di->rx_map_avma + foff - di->rx_map_foff;
di->text_size = size;
di->text_bias = VG_PGROUNDDN(di->text_avma) - VG_PGROUNDDN(svma);
- if (debug)
- VG_(printf)("acquiring .text avma = %p\n", di->text_avma);
+ TRACE_SYMTAB("acquiring .text avma = %p .. %p\n",
+ di->text_avma,
+ di->text_avma + di->text_size - 1);
+ TRACE_SYMTAB("acquiring .text bias = %p\n", di->text_bias);
} else {
BAD(".text");
}
@@ -1209,9 +1251,11 @@
if (inrw && size > 0 && di->data_size == 0) {
di->data_avma = di->rw_map_avma + foff - di->rw_map_foff;
di->data_size = size;
- di->data_bias = di->data_avma - svma;
- if (debug)
- VG_(printf)("acquiring .data avma = %p\n", di->data_avma);
+ di->data_bias = VG_PGROUNDDN(di->data_avma) - VG_PGROUNDDN(svma);
+ TRACE_SYMTAB("acquiring .data avma = %p .. %p\n",
+ di->data_avma,
+ di->data_avma + di->data_size - 1);
+ TRACE_SYMTAB("acquiring .data bias = %p\n", di->data_bias);
} else {
BAD(".data");
}
@@ -1222,8 +1266,9 @@
if (inrw && size > 0 && di->bss_size == 0) {
di->bss_avma = di->rw_map_avma + foff - di->rw_map_foff;
di->bss_size = size;
- if (debug)
- VG_(printf)("acquiring .bss avma = %p\n", di->bss_avma);
+ TRACE_SYMTAB("acquiring .bss avma = %p .. %p\n",
+ di->bss_avma,
+ di->bss_avma + di->bss_size - 1);
} else
if ((!inrw) && (!inrx) && size > 0 && di->bss_size == 0) {
/* File contains a .bss, but it didn't get mapped. Ignore. */
@@ -1239,8 +1284,7 @@
if (inrw && size > 0 && di->got_size == 0) {
di->got_avma = di->rw_map_avma + foff - di->rw_map_foff;
di->got_size = size;
- if (debug)
- VG_(printf)("acquiring .got avma = %p\n", di->got_avma);
+ TRACE_SYMTAB("acquiring .got avma = %p\n", di->got_avma);
} else {
BAD(".got");
}
@@ -1253,8 +1297,7 @@
if (inrx && size > 0 && di->plt_size == 0) {
di->plt_avma = di->rx_map_avma + foff - di->rx_map_foff;
di->plt_size = size;
- if (debug)
- VG_(printf)("acquiring .plt avma = %p\n", di->plt_avma);
+ TRACE_SYMTAB("acquiring .plt avma = %p\n", di->plt_avma);
} else {
BAD(".plt");
}
@@ -1265,8 +1308,7 @@
if (inrw && size > 0 && di->plt_size == 0) {
di->plt_avma = di->rw_map_avma + foff - di->rw_map_foff;
di->plt_size = size;
- if (debug)
- VG_(printf)("acquiring .plt avma = %p\n", di->plt_avma);
+ TRACE_SYMTAB("acquiring .plt avma = %p\n", di->plt_avma);
} else {
BAD(".plt");
}
@@ -1277,8 +1319,7 @@
if (inrw && size > 0 && di->plt_size == 0) {
di->plt_avma = di->rw_map_avma + foff - di->rw_map_foff;
di->plt_size = size;
- if (debug)
- VG_(printf)("acquiring .plt avma = %p\n", di->plt_avma);
+ TRACE_SYMTAB("acquiring .plt avma = %p\n", di->plt_avma);
} else
if ((!inrw) && (!inrx) && size > 0 && di->plt_size == 0) {
/* File contains a .plt, but it didn't get mapped.
@@ -1299,8 +1340,7 @@
if (inrw && size > 0 && di->opd_size == 0) {
di->opd_avma = di->rw_map_avma + foff - di->rw_map_foff;
di->opd_size = size;
- if (debug)
- VG_(printf)("acquiring .opd avma = %p\n", di->opd_avma);
+ TRACE_SYMTAB("acquiring .opd avma = %p\n", di->opd_avma);
} else {
BAD(".opd");
}
@@ -1311,8 +1351,7 @@
if (inrx && size > 0 && di->ehframe_size == 0) {
di->ehframe_avma = di->rx_map_avma + foff - di->rx_map_foff;
di->ehframe_size = size;
- if (debug)
- VG_(printf)("acquiring .eh_frame avma = %p\n", di->ehframe_avma);
+ TRACE_SYMTAB("acquiring .eh_frame avma = %p\n", di->ehframe_avma);
} else {
BAD(".eh_frame");
}
@@ -1330,17 +1369,9 @@
di->text_avma - di->text_bias,
di->text_avma );
- /* If, after looking at all the program headers, we still didn't
- find a soname, add a fake one. */
- if (di->soname == NULL) {
- TRACE_SYMTAB("soname(fake)=\"NONE\"\n");
- di->soname = "NONE";
- }
+ TRACE_SYMTAB("\n");
+ TRACE_SYMTAB("--- Finding image addresses for debug-info sections ---\n");
- TRACE_SYMTAB("shoff = %d, shnum = %d, size = %d, n_vg_oimage = %d\n",
- ehdr_img->e_shoff, ehdr_img->e_shnum,
- sizeof(ElfXX_Shdr), n_oimage );
-
/* Find interesting sections, read the symbol table(s), read any debug
information */
{
@@ -1402,7 +1433,7 @@
sec_img = (void*)(oimage + shdr->sh_offset); \
sec_size = shdr->sh_size; \
nobits = shdr->sh_type == SHT_NOBITS; \
- TRACE_SYMTAB( "%18s: filea %p .. %p, vma %p .. %p\n", \
+ TRACE_SYMTAB( "%18s: img %p .. %p\n", \
sec_name, (UChar*)sec_img, \
((UChar*)sec_img) + sec_size - 1); \
/* SHT_NOBITS sections have zero size in the file. */ \
@@ -1546,7 +1577,7 @@
sec_img = (void*)(dimage + shdr->sh_offset); \
sec_size = shdr->sh_size; \
nobits = shdr->sh_type == SHT_NOBITS; \
- TRACE_SYMTAB( "%18s: filea %p .. %p\n", \
+ TRACE_SYMTAB( "%18s: dimg %p .. %p\n", \
sec_name, \
(UChar*)sec_img, \
((UChar*)sec_img) + sec_size - 1); \
@@ -1641,6 +1672,12 @@
out: {
SysRes m_res;
+
+ TRACE_SYMTAB("\n");
+ TRACE_SYMTAB("------ name = %s\n", di->filename);
+ TRACE_SYMTAB("------ end ELF OBJECT ------------------------------\n");
+ TRACE_SYMTAB("\n");
+
/* Last, but not least, heave the image(s) back overboard. */
if (dimage) {
m_res = VG_(am_munmap_valgrind) ( dimage, n_dimage );
Modified: branches/DATASYMS/coregrind/m_debuginfo/readxcoff.c
===================================================================
--- branches/DATASYMS/coregrind/m_debuginfo/readxcoff.c 2008-01-09 22:53:42 UTC (rev 7335)
+++ branches/DATASYMS/coregrind/m_debuginfo/readxcoff.c 2008-01-10 14:31:54 UTC (rev 7336)
@@ -1523,6 +1523,7 @@
di.addr = addr;
di.size = size;
di.tocptr = s->r2known ? s->r2value : 0;
+ di.isText = True;
vg_assert(!is_empty_Name(s->name));
nlen = s->name.len;
vg_assert(nlen > 0);
|
|
From: Tom H. <th...@cy...> - 2008-01-10 03:26:13
|
Nightly build on lloyd ( x86_64, Fedora 7 ) started at 2008-01-10 03:05:06 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 366 tests, 8 stderr failures, 2 stdout failures, 0 post failures == memcheck/tests/malloc_free_fill (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/vcpu_fnfns (stdout) memcheck/tests/x86/scalar (stderr) memcheck/tests/xml1 (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc22_exit_w_lock (stderr) exp-drd/tests/pth_cond_race (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Last 20 lines of verbose log follow echo fi if test -r index.pdf ; then \ mkdir -p /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind; \ cp index.pdf /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind/valgrind_manual.pdf; \ fi if test -r index.ps ; then \ mkdir -p /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind; \ cp index.ps /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind/valgrind_manual.ps; \ fi if test -r valgrind.1 ; then \ mkdir -p /tmp/vgtest/2008-01-10/Inst/share/man/man1; \ cp valgrind.1 /tmp/vgtest/2008-01-10/Inst/share/man/man1/valgrind.1; \ fi make[5]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' make[4]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' make[3]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' make[2]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' make[1]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind' Running regression tests ... cd valgrind && make all-regtest make: *** No rule to make target `all-regtest'. Stop. ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Thu Jan 10 03:10:54 2008 --- new.short Thu Jan 10 03:26:14 2008 *************** *** 6,27 **** ! Last 20 lines of verbose log follow echo ! fi ! if test -r index.pdf ; then \ ! mkdir -p /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind; \ ! cp index.pdf /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind/valgrind_manual.pdf; \ ! fi ! if test -r index.ps ; then \ ! mkdir -p /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind; \ ! cp index.ps /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind/valgrind_manual.ps; \ ! fi ! if test -r valgrind.1 ; then \ ! mkdir -p /tmp/vgtest/2008-01-10/Inst/share/man/man1; \ ! cp valgrind.1 /tmp/vgtest/2008-01-10/Inst/share/man/man1/valgrind.1; \ ! fi ! make[5]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' ! make[4]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' ! make[3]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' ! make[2]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' ! make[1]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind' ! Running regression tests ... cd valgrind && make all-regtest ! make: *** No rule to make target `all-regtest'. Stop. --- 6,20 ---- ! Regression test results follow ! ! == 366 tests, 8 stderr failures, 2 stdout failures, 0 post failures == ! memcheck/tests/malloc_free_fill (stderr) ! memcheck/tests/pointer-trace (stderr) ! memcheck/tests/vcpu_fnfns (stdout) ! memcheck/tests/x86/scalar (stderr) ! memcheck/tests/xml1 (stderr) ! none/tests/mremap (stderr) ! none/tests/mremap2 (stdout) ! helgrind/tests/tc20_verifywrap (stderr) ! helgrind/tests/tc22_exit_w_lock (stderr) ! exp-drd/tests/pth_cond_race (stderr) ! |
|
From: Tom H. <th...@cy...> - 2008-01-10 03:24:01
|
Nightly build on dellow ( x86_64, Fedora 8 ) started at 2008-01-10 03:10:05 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 366 tests, 10 stderr failures, 3 stdout failures, 0 post failures == memcheck/tests/malloc_free_fill (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/vcpu_fnfns (stdout) memcheck/tests/x86/scalar (stderr) memcheck/tests/xml1 (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) none/tests/pth_detached (stdout) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc22_exit_w_lock (stderr) exp-drd/tests/pth_cond_race (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Last 20 lines of verbose log follow echo fi if test -r index.pdf ; then \ mkdir -p /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind; \ cp index.pdf /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind/valgrind_manual.pdf; \ fi if test -r index.ps ; then \ mkdir -p /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind; \ cp index.ps /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind/valgrind_manual.ps; \ fi if test -r valgrind.1 ; then \ mkdir -p /tmp/vgtest/2008-01-10/Inst/share/man/man1; \ cp valgrind.1 /tmp/vgtest/2008-01-10/Inst/share/man/man1/valgrind.1; \ fi make[5]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' make[4]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' make[3]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' make[2]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' make[1]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind' Running regression tests ... cd valgrind && make all-regtest make: *** No rule to make target `all-regtest'. Stop. ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Thu Jan 10 03:14:28 2008 --- new.short Thu Jan 10 03:24:05 2008 *************** *** 6,27 **** ! Last 20 lines of verbose log follow echo ! fi ! if test -r index.pdf ; then \ ! mkdir -p /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind; \ ! cp index.pdf /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind/valgrind_manual.pdf; \ ! fi ! if test -r index.ps ; then \ ! mkdir -p /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind; \ ! cp index.ps /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind/valgrind_manual.ps; \ ! fi ! if test -r valgrind.1 ; then \ ! mkdir -p /tmp/vgtest/2008-01-10/Inst/share/man/man1; \ ! cp valgrind.1 /tmp/vgtest/2008-01-10/Inst/share/man/man1/valgrind.1; \ ! fi ! make[5]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' ! make[4]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' ! make[3]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' ! make[2]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' ! make[1]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind' ! Running regression tests ... cd valgrind && make all-regtest ! make: *** No rule to make target `all-regtest'. Stop. --- 6,23 ---- ! Regression test results follow ! ! == 366 tests, 10 stderr failures, 3 stdout failures, 0 post failures == ! memcheck/tests/malloc_free_fill (stderr) ! memcheck/tests/pointer-trace (stderr) ! memcheck/tests/vcpu_fnfns (stdout) ! memcheck/tests/x86/scalar (stderr) ! memcheck/tests/xml1 (stderr) ! none/tests/mremap (stderr) ! none/tests/mremap2 (stdout) ! none/tests/pth_detached (stdout) ! helgrind/tests/tc17_sembar (stderr) ! helgrind/tests/tc18_semabuse (stderr) ! helgrind/tests/tc20_verifywrap (stderr) ! helgrind/tests/tc22_exit_w_lock (stderr) ! exp-drd/tests/pth_cond_race (stderr) ! |
|
From: Tom H. <th...@cy...> - 2008-01-10 03:12:24
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2008-01-10 03:00:02 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 368 tests, 30 stderr failures, 1 stdout failure, 0 post failures == memcheck/tests/addressable (stderr) memcheck/tests/badjump (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/match-overrun (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/supp_unknown (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/blockfault (stderr) none/tests/fdleak_fcntl (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) helgrind/tests/hg01_all_ok (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Last 20 lines of verbose log follow echo fi if test -r index.pdf ; then \ mkdir -p /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind; \ cp index.pdf /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind/valgrind_manual.pdf; \ fi if test -r index.ps ; then \ mkdir -p /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind; \ cp index.ps /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind/valgrind_manual.ps; \ fi if test -r valgrind.1 ; then \ mkdir -p /tmp/vgtest/2008-01-10/Inst/man/man1; \ cp valgrind.1 /tmp/vgtest/2008-01-10/Inst/man/man1/valgrind.1; \ fi make[5]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' make[4]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' make[3]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' make[2]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' make[1]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind' Running regression tests ... cd valgrind && make all-regtest make: *** No rule to make target `all-regtest'. Stop. ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Thu Jan 10 03:02:47 2008 --- new.short Thu Jan 10 03:12:08 2008 *************** *** 6,27 **** ! Last 20 lines of verbose log follow echo ! fi ! if test -r index.pdf ; then \ ! mkdir -p /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind; \ ! cp index.pdf /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind/valgrind_manual.pdf; \ ! fi ! if test -r index.ps ; then \ ! mkdir -p /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind; \ ! cp index.ps /tmp/vgtest/2008-01-10/Inst/share/doc/valgrind/valgrind_manual.ps; \ ! fi ! if test -r valgrind.1 ; then \ ! mkdir -p /tmp/vgtest/2008-01-10/Inst/man/man1; \ ! cp valgrind.1 /tmp/vgtest/2008-01-10/Inst/man/man1/valgrind.1; \ ! fi ! make[5]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' ! make[4]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' ! make[3]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' ! make[2]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind/docs' ! make[1]: Leaving directory `/tmp/vgtest/2008-01-10/valgrind' ! Running regression tests ... cd valgrind && make all-regtest ! make: *** No rule to make target `all-regtest'. Stop. --- 6,41 ---- ! Regression test results follow ! ! == 368 tests, 30 stderr failures, 1 stdout failure, 0 post failures == ! memcheck/tests/addressable (stderr) ! memcheck/tests/badjump (stderr) ! memcheck/tests/describe-block (stderr) ! memcheck/tests/malloc_free_fill (stderr) ! memcheck/tests/match-overrun (stderr) ! memcheck/tests/pointer-trace (stderr) ! memcheck/tests/stack_switch (stderr) ! memcheck/tests/supp_unknown (stderr) ! memcheck/tests/x86/scalar (stderr) ! memcheck/tests/x86/scalar_supp (stderr) ! none/tests/blockfault (stderr) ! none/tests/fdleak_fcntl (stderr) ! none/tests/mremap (stderr) ! none/tests/mremap2 (stdout) ! helgrind/tests/hg01_all_ok (stderr) ! helgrind/tests/hg02_deadlock (stderr) ! helgrind/tests/hg03_inherit (stderr) ! helgrind/tests/hg04_race (stderr) ! helgrind/tests/hg05_race2 (stderr) ! helgrind/tests/tc01_simple_race (stderr) ! helgrind/tests/tc05_simple_race (stderr) ! helgrind/tests/tc06_two_races (stderr) ! helgrind/tests/tc09_bad_unlock (stderr) ! helgrind/tests/tc14_laog_dinphils (stderr) ! helgrind/tests/tc16_byterace (stderr) ! helgrind/tests/tc17_sembar (stderr) ! helgrind/tests/tc19_shadowmem (stderr) ! helgrind/tests/tc20_verifywrap (stderr) ! helgrind/tests/tc21_pthonce (stderr) ! helgrind/tests/tc22_exit_w_lock (stderr) ! helgrind/tests/tc23_bogus_condwait (stderr) ! |