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
(6) |
2
(7) |
|
3
(12) |
4
(9) |
5
(12) |
6
(9) |
7
(18) |
8
(10) |
9
(17) |
|
10
(15) |
11
(22) |
12
(16) |
13
(18) |
14
(9) |
15
(14) |
16
(18) |
|
17
(24) |
18
(11) |
19
(15) |
20
(29) |
21
(19) |
22
(20) |
23
(9) |
|
24
(25) |
25
(25) |
26
(38) |
27
(22) |
28
(16) |
29
(17) |
|
|
From: <sv...@va...> - 2008-02-19 22:02:58
|
Author: sewardj
Date: 2008-02-19 22:03:01 +0000 (Tue, 19 Feb 2008)
New Revision: 7427
Log:
When adding variables, line number info and unwind info to the various
tables in the DebugInfo (basically, any info that is associated with a
text address ranges), be more relaxed about the address ranges
accepted. Prior to this we rejected ranges falling outside the mapped
.text segment. Now we only reject ranges falling outside the area
that is mapped r-x. Reasons for this are documented in comments. It
probably means we have line number and unwind info available in some
corner cases where before it was absent.
Modified:
branches/DATASYMS/coregrind/m_debuginfo/storage.c
Modified: branches/DATASYMS/coregrind/m_debuginfo/storage.c
===================================================================
--- branches/DATASYMS/coregrind/m_debuginfo/storage.c 2008-02-19 21:11:13 UTC (rev 7426)
+++ branches/DATASYMS/coregrind/m_debuginfo/storage.c 2008-02-19 22:03:01 UTC (rev 7427)
@@ -303,11 +303,12 @@
size = 1;
}
- /* vg_assert(this < di->text_avma + di->size
- && next-1 >= di->text_avma); */
- if (!di->text_present
- || this >= di->text_avma + di->text_size
- || next-1 < di->text_avma) {
+ /* Rule out ones which are completely outside the r-x mapped area.
+ See "Comment_Regarding_Text_Range_Checks" elsewhere in this file
+ for background and rationale. */
+ vg_assert(di->have_rx_map && di->have_rw_map);
+ if (next-1 < di->rx_map_avma
+ || this >= di->rx_map_avma + di->rx_map_size ) {
if (0)
VG_(message)(Vg_DebugMsg,
"warning: ignoring line info entry falling "
@@ -370,12 +371,12 @@
broken. */
vg_assert(cfsi->len < 5000000);
- /* Rule out ones which are completely outside the text segment.
- These probably indicate some kind of bug, but for the meantime
- ignore them. */
- if ( !di->text_present
- || cfsi->base + cfsi->len - 1 < di->text_avma
- || di->text_avma + di->text_size - 1 < cfsi->base ) {
+ /* Rule out ones which are completely outside the r-x mapped area.
+ See "Comment_Regarding_Text_Range_Checks" elsewhere in this file
+ for background and rationale. */
+ vg_assert(di->have_rx_map && di->have_rw_map);
+ if (cfsi->base + cfsi->len - 1 < di->rx_map_avma
+ || cfsi->base >= di->rx_map_avma + di->rx_map_size) {
static Int complaints = 3;
if (VG_(clo_trace_cfi) || complaints > 0) {
complaints--;
@@ -711,14 +712,25 @@
vg_assert(type);
vg_assert(gexpr);
- /* Ignore any variables whose aMin .. aMax (that is, range of text
+ /* "Comment_Regarding_Text_Range_Checks" (is referred to elsewhere)
+ ----------------------------------------------------------------
+ Ignore any variables whose aMin .. aMax (that is, range of text
addresses for which they actually exist) falls outside the text
- segment. Is this indicative of a bug in the reader? Maybe. */
- if (di->text_present
- && di->text_size > 0
- && level > 0
- && (aMax < di->text_avma
- || aMin >= di->text_avma + di->text_size)) {
+ segment. Is this indicative of a bug in the reader? Maybe.
+ (LATER): instead of restricting strictly to the .text segment,
+ be a bit more relaxed, and accept any variable whose text range
+ falls inside the r-x mapped area. This is useful because .text
+ is not always the only instruction-carrying segment: others are:
+ .init .plt __libc_freeres_fn and .fini. This implicitly assumes
+ that those extra sections have the same bias as .text, but that
+ seems a reasonable assumption to me. */
+ /* This is assured us by top level steering logic in debuginfo.c,
+ and it is re-checked at the start of
+ ML_(read_elf_debug_info). */
+ vg_assert(di->have_rx_map && di->have_rw_map);
+ if (level > 0
+ && (aMax < di->rx_map_avma
+ || aMin >= di->rx_map_avma + di->rx_map_size)) {
if (VG_(clo_verbosity) >= 0) {
VG_(message)(Vg_DebugMsg,
"warning: addVar: in range %p .. %p outside "
|
|
From: <sv...@va...> - 2008-02-19 21:11:12
|
Author: sewardj
Date: 2008-02-19 21:11:13 +0000 (Tue, 19 Feb 2008)
New Revision: 7426
Log:
Lots more tidying, and a bug fix.
* rename VG_(seginfo_start), VG_(seginfo_size),
VG_(seginfo_sym_offset) to VG_(seginfo_get_text_avma),
VG_(seginfo_get_text_size), VG_(seginfo_get_text_bias). This gives
them terminology consistent with the rest of m_debuginfo, and makes it
clearer what they actually do :-)
* tidy up and formalise hacks^H^H^H^H^Hcarefully designed techniques
for figuring out where the .bss and .data sections got mapped. This
involves ensuring that a DebugInfo can correctly distinguish between
"a .text, .data, etc section which is mapped but of zero size, from
one which is not mapped."
* fix stupid typo causing incorrect identification of .debug_loc
sections from debuginfo files
* get rid of various commented out bits of code
Modified:
branches/DATASYMS/callgrind/bb.c
branches/DATASYMS/callgrind/fn.c
branches/DATASYMS/coregrind/m_debuginfo/debuginfo.c
branches/DATASYMS/coregrind/m_debuginfo/priv_storage.h
branches/DATASYMS/coregrind/m_debuginfo/readdwarf3.c
branches/DATASYMS/coregrind/m_debuginfo/readelf.c
branches/DATASYMS/coregrind/m_debuginfo/storage.c
branches/DATASYMS/include/pub_tool_debuginfo.h
Modified: branches/DATASYMS/callgrind/bb.c
===================================================================
--- branches/DATASYMS/callgrind/bb.c 2008-02-19 12:51:29 UTC (rev 7425)
+++ branches/DATASYMS/callgrind/bb.c 2008-02-19 21:11:13 UTC (rev 7426)
@@ -203,15 +203,17 @@
obj = CLG_(get_obj_node)( di );
/* Update symbol offset in object if remapped */
- offset = di ? VG_(seginfo_sym_offset)(di):0;
+ /* FIXME (or at least check this) 2008 Feb 19: 'offset' is
+ only correct for text symbols, not for data symbols */
+ offset = di ? VG_(seginfo_get_text_bias)(di):0;
if (obj->offset != offset) {
- Addr start = di ? VG_(seginfo_start)(di) : 0;
+ Addr start = di ? VG_(seginfo_get_text_avma)(di) : 0;
CLG_DEBUG(0, "Mapping changed for '%s': %p -> %p\n",
obj->name, obj->start, start);
/* Size should be the same, and offset diff == start diff */
- CLG_ASSERT( obj->size == (di ? VG_(seginfo_size)(di) : 0) );
+ CLG_ASSERT( obj->size == (di ? VG_(seginfo_get_text_size)(di) : 0) );
CLG_ASSERT( obj->start - start == obj->offset - offset );
obj->offset = offset;
obj->start = start;
Modified: branches/DATASYMS/callgrind/fn.c
===================================================================
--- branches/DATASYMS/callgrind/fn.c 2008-02-19 12:51:29 UTC (rev 7425)
+++ branches/DATASYMS/callgrind/fn.c 2008-02-19 21:11:13 UTC (rev 7426)
@@ -194,9 +194,12 @@
}
CLG_(stat).distinct_objs ++;
new->number = CLG_(stat).distinct_objs;
- new->start = di ? VG_(seginfo_start)(di) : 0;
- new->size = di ? VG_(seginfo_size)(di) : 0;
- new->offset = di ? VG_(seginfo_sym_offset)(di) : 0;
+ /* JRS 2008 Feb 19: maybe rename .start/.size/.offset to
+ .text_avma/.text_size/.test_bias to make it clearer what these
+ fields really mean */
+ new->start = di ? VG_(seginfo_get_text_avma)(di) : 0;
+ new->size = di ? VG_(seginfo_get_text_size)(di) : 0;
+ new->offset = di ? VG_(seginfo_get_text_bias)(di) : 0;
new->next = next;
// not only used for debug output (see static.c)
Modified: branches/DATASYMS/coregrind/m_debuginfo/debuginfo.c
===================================================================
--- branches/DATASYMS/coregrind/m_debuginfo/debuginfo.c 2008-02-19 12:51:29 UTC (rev 7425)
+++ branches/DATASYMS/coregrind/m_debuginfo/debuginfo.c 2008-02-19 21:11:13 UTC (rev 7426)
@@ -314,7 +314,8 @@
while (True) {
if (curr == NULL)
break;
- if (curr->text_size > 0
+ if (curr->text_present
+ && curr->text_size > 0
&& (start+length - 1 < curr->text_avma
|| curr->text_avma + curr->text_size - 1 < start)) {
/* no overlap */
@@ -792,26 +793,27 @@
for (di = debugInfo_list; di != NULL; di = di->next) {
if (findText) {
- inRange = di->text_size > 0
+ inRange = di->text_present
+ && di->text_size > 0
&& di->text_avma <= ptr
&& ptr < di->text_avma + di->text_size;
} else {
- inRange = (di->data_size > 0
+ inRange = (di->data_present
+ && di->data_size > 0
&& di->data_avma <= ptr
&& ptr < di->data_avma + di->data_size)
||
- (di->sdata_size > 0
+ (di->sdata_present
+ && di->sdata_size > 0
&& di->sdata_avma <= ptr
&& ptr < di->sdata_avma + di->sdata_size)
||
- (di->bss_size > 0
+ (di->bss_present
+ && di->bss_size > 0
&& di->bss_avma <= ptr
&& ptr < di->bss_avma + di->bss_size);
}
- /* Note this short-circuit check relies on the assumption that
- .bss is mapped immediately after .data. This is an assumption
- that readelf.c makes anyway. */
if (!inRange) continue;
sno = ML_(search_one_symtab) (
@@ -836,7 +838,8 @@
Int lno;
DebugInfo* di;
for (di = debugInfo_list; di != NULL; di = di->next) {
- if (di->text_avma <= ptr
+ if (di->text_present
+ && di->text_avma <= ptr
&& ptr < di->text_avma + di->text_size) {
lno = ML_(search_one_loctab) ( di, ptr );
if (lno == -1) goto not_found;
@@ -1017,7 +1020,8 @@
DebugInfo* di;
vg_assert(nbuf > 0);
for (di = debugInfo_list; di != NULL; di = di->next) {
- if (di->text_avma <= a
+ if (di->text_present
+ && di->text_avma <= a
&& a < di->text_avma + di->text_size) {
VG_(strncpy_safely)(buf, di->filename, nbuf);
if (di->memname) {
@@ -1044,7 +1048,8 @@
{
DebugInfo* di;
for (di = debugInfo_list; di != NULL; di = di->next) {
- if (di->text_avma <= a
+ if (di->text_present
+ && di->text_avma <= a
&& a < di->text_avma + di->text_size) {
return di;
}
@@ -1785,7 +1790,7 @@
for (di = debugInfo_list; di; di = di->next) {
n_steps++;
/* text segment missing? unlikely, but handle it .. */
- if (di->text_size == 0)
+ if (!di->text_present || di->text_size == 0)
continue;
/* Ok. So does this text mapping bracket the ip? */
if (di->text_avma <= ip && ip < di->text_avma + di->text_size)
@@ -1915,7 +1920,7 @@
XArray* vars;
/* text segment missing? unlikely, but handle it .. */
- if (di->text_size == 0)
+ if (!di->text_present || di->text_size == 0)
continue;
/* any var info at all? */
if (!di->varinfo)
@@ -2029,14 +2034,14 @@
return di->next;
}
-Addr VG_(seginfo_start)(const DebugInfo* di)
+Addr VG_(seginfo_get_text_avma)(const DebugInfo* di)
{
- return di->text_avma;
+ return di->text_present ? di->text_avma : 0;
}
-SizeT VG_(seginfo_size)(const DebugInfo* di)
+SizeT VG_(seginfo_get_text_size)(const DebugInfo* di)
{
- return di->text_size;
+ return di->text_present ? di->text_size : 0;
}
const UChar* VG_(seginfo_soname)(const DebugInfo* di)
@@ -2049,9 +2054,9 @@
return di->filename;
}
-ULong VG_(seginfo_sym_offset)(const DebugInfo* di)
+ULong VG_(seginfo_get_text_bias)(const DebugInfo* di)
{
- return di->text_bias;
+ return di->text_present ? di->text_bias : 0;
}
Int VG_(seginfo_syms_howmany) ( const DebugInfo *si )
@@ -2061,14 +2066,14 @@
void VG_(seginfo_syms_getidx) ( const DebugInfo *si,
Int idx,
- /*OUT*/Addr* addr,
+ /*OUT*/Addr* avma,
/*OUT*/Addr* tocptr,
/*OUT*/UInt* size,
/*OUT*/HChar** name,
/*OUT*/Bool* isText )
{
vg_assert(idx >= 0 && idx < si->symtab_used);
- if (addr) *addr = si->symtab[idx].addr;
+ if (avma) *avma = 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;
@@ -2118,32 +2123,44 @@
di->data_avma, di->data_size,
di->bss_avma, di->bss_size);
- if (di->text_size > 0
+ if (di->text_present
+ && di->text_size > 0
&& a >= di->text_avma && a < di->text_avma + di->text_size) {
res = Vg_SectText;
break;
}
- if (di->data_size > 0
+ if (di->data_present
+ && di->data_size > 0
&& a >= di->data_avma && a < di->data_avma + di->data_size) {
res = Vg_SectData;
break;
}
- if (di->bss_size > 0
+ if (di->sdata_present
+ && di->sdata_size > 0
+ && a >= di->sdata_avma && a < di->sdata_avma + di->sdata_size) {
+ res = Vg_SectData;
+ break;
+ }
+ if (di->bss_present
+ && di->bss_size > 0
&& a >= di->bss_avma && a < di->bss_avma + di->bss_size) {
res = Vg_SectBSS;
break;
}
- if (di->plt_size > 0
+ if (di->plt_present
+ && di->plt_size > 0
&& a >= di->plt_avma && a < di->plt_avma + di->plt_size) {
res = Vg_SectPLT;
break;
}
- if (di->got_size > 0
+ if (di->got_present
+ && di->got_size > 0
&& a >= di->got_avma && a < di->got_avma + di->got_size) {
res = Vg_SectGOT;
break;
}
- if (di->opd_size > 0
+ if (di->opd_present
+ && di->opd_size > 0
&& a >= di->opd_avma && a < di->opd_avma + di->opd_size) {
res = Vg_SectOPD;
break;
Modified: branches/DATASYMS/coregrind/m_debuginfo/priv_storage.h
===================================================================
--- branches/DATASYMS/coregrind/m_debuginfo/priv_storage.h 2008-02-19 12:51:29 UTC (rev 7425)
+++ branches/DATASYMS/coregrind/m_debuginfo/priv_storage.h 2008-02-19 21:11:13 UTC (rev 7426)
@@ -293,40 +293,50 @@
VG_AR_DINFO. */
UChar* soname;
- /* Description of some important mapped sections. In each case if
- the _size field is zero, the section isn't present. Certainly
- text_ is mandatory on all platforms; not sure about the rest
- though. */
+ /* Description of some important mapped segments. The presence or
+ absence of the mapping is denoted by the _present field, since
+ in some obscure circumstances (to do with data/sdata/bss) it is
+ possible for the mapping to be present but have zero size.
+ Certainly text_ is mandatory on all platforms; not sure about
+ the rest though. */
/* .text */
+ Bool text_present;
Addr text_avma;
Addr text_svma;
SizeT text_size;
OffT text_bias;
/* .data */
+ Bool data_present;
Addr data_svma;
Addr data_avma;
SizeT data_size;
OffT data_bias;
/* .sdata */
+ Bool sdata_present;
Addr sdata_svma;
Addr sdata_avma;
SizeT sdata_size;
OffT sdata_bias;
/* .bss */
+ Bool bss_present;
Addr bss_svma;
Addr bss_avma;
SizeT bss_size;
OffT bss_bias;
/* .plt */
+ Bool plt_present;
Addr plt_avma;
SizeT plt_size;
/* .got */
+ Bool got_present;
Addr got_avma;
SizeT got_size;
- /* .opd -- needed on ppc64-linux */
+ /* .opd -- needed on ppc64-linux for finding symbols */
+ Bool opd_present;
Addr opd_avma;
SizeT opd_size;
- /* .ehframe -- needed on amd64-linux */
+ /* .ehframe -- needed on amd64-linux for stack unwinding */
+ Bool ehframe_present;
Addr ehframe_avma;
SizeT ehframe_size;
Modified: branches/DATASYMS/coregrind/m_debuginfo/readdwarf3.c
===================================================================
--- branches/DATASYMS/coregrind/m_debuginfo/readdwarf3.c 2008-02-19 12:51:29 UTC (rev 7425)
+++ branches/DATASYMS/coregrind/m_debuginfo/readdwarf3.c 2008-02-19 21:11:13 UTC (rev 7426)
@@ -109,21 +109,14 @@
/*------------------------------------------------------------*/
-/*--- The "new" DWARF3 reader -- enumerations and types ---*/
+/*--- The "new" DWARF3 reader ---*/
/*------------------------------------------------------------*/
#define TRACE_D3(format, args...) \
if (td3) { VG_(printf)(format, ## args); }
-
-
-////////////////////////////////////////////////////////////////
-
#define D3_INVALID_CUOFF ((void*)(-1UL))
#define D3_FAKEVOID_CUOFF ((void*)(-2UL))
-/*------------------------------------------------------------*/
-/*--- The "new" DWARF3 reader ---*/
-/*------------------------------------------------------------*/
typedef
struct {
@@ -541,6 +534,9 @@
"Overrun whilst reading .debug_loc section(2)" );
set_position_of_Cursor( &loc, debug_loc_offset );
+ TRACE_D3("make_general_GX (.debug_loc_offset = %lu, img = %p) {\n",
+ debug_loc_offset, get_address_of_Cursor( &loc ) );
+
/* Who frees this xa? It is freed before this fn exits. */
xa = VG_(newXA)( ML_(dinfo_zalloc), ML_(dinfo_free),
sizeof(UChar) );
@@ -558,6 +554,7 @@
UWord w1 = get_UWord( &loc );
UWord w2 = get_UWord( &loc );
+ TRACE_D3(" %08lx %08lx\n", w1, w2);
if (w1 == 0 && w2 == 0)
break; /* end of list */
@@ -571,8 +568,13 @@
/* else enumerate [w1+base, w2+base) */
/* w2 is 1 past end of range, as per D3 defn for "DW_AT_high_pc"
(sec 2.17.2) */
- if (w1 > w2)
+ if (w1 > w2) {
+ TRACE_D3("negative range is for .debug_loc expr at "
+ "file offset %lu\n",
+ debug_loc_offset);
cc->barf( "negative range in .debug_loc section" );
+ }
+
/* ignore zero length ranges */
acquire = w1 < w2;
len = (UWord)get_UShort( &loc );
@@ -615,6 +617,9 @@
VG_(deleteXA)( xa );
gx->next = NULL;
+
+ TRACE_D3("}\n");
+
return gx;
}
@@ -1110,7 +1115,7 @@
/* cts, ctsSzB, ctsMemSzB are derived from a DW_AT_location and so
refer either to a location expression or to a location list.
Figure out which, and in both cases bundle the expression or
- location list into a so-called GExpr (guarded expression. */
+ location list into a so-called GExpr (guarded expression). */
__attribute__((noinline))
static GExpr* get_GX ( CUConst* cc, Bool td3,
ULong cts, Int ctsSzB, UWord ctsMemSzB )
Modified: branches/DATASYMS/coregrind/m_debuginfo/readelf.c
===================================================================
--- branches/DATASYMS/coregrind/m_debuginfo/readelf.c 2008-02-19 12:51:29 UTC (rev 7425)
+++ branches/DATASYMS/coregrind/m_debuginfo/readelf.c 2008-02-19 21:11:13 UTC (rev 7426)
@@ -255,30 +255,35 @@
/* Try to figure out exactly which section the symbol is from and
bias accordingly. Screws up if the previously deduced section
svma address ranges are wrong. */
- if (di->text_size > 0
+ if (di->text_present
+ && di->text_size > 0
&& sym_svma >= di->text_svma
&& sym_svma < di->text_svma + di->text_size) {
*is_text_out = True;
*sym_avma_out += di->text_bias;
} else
- if (di->data_size > 0
+ if (di->data_present
+ && di->data_size > 0
&& sym_svma >= di->data_svma
&& sym_svma < di->data_svma + di->data_size) {
*is_text_out = False;
*sym_avma_out += di->data_bias;
} else
- if (di->sdata_size > 0
+ if (di->sdata_present
+ && di->sdata_size > 0
&& sym_svma >= di->sdata_svma
&& sym_svma < di->sdata_svma + di->sdata_size) {
*is_text_out = False;
*sym_avma_out += di->sdata_bias;
} else
- if (di->bss_size > 0
+ if (di->bss_present
+ && di->bss_size > 0
&& sym_svma >= di->bss_svma
&& sym_svma < di->bss_svma + di->bss_size) {
*is_text_out = False;
*sym_avma_out += di->bss_bias;
} else {
+ /* Assume it's in .text. Is this a good idea? */
*is_text_out = True;
*sym_avma_out += di->text_bias;
}
@@ -292,6 +297,7 @@
&& *is_text_out
&& ELFXX_ST_TYPE(sym->st_info) == STT_NOTYPE
&& sym->st_size > 0
+ && di->opd_present
&& di->opd_size > 0
&& *sym_avma_out >= di->opd_avma
&& *sym_avma_out < di->opd_avma + di->opd_size)
@@ -321,13 +327,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_size > 0
+ if (di->got_present
+ && 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_size > 0
+ if (di->plt_present
+ && 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);
@@ -344,7 +352,8 @@
*/
is_in_opd = False;
- if (di->opd_size > 0
+ if (di->opd_present
+ && di->opd_size > 0
&& *sym_avma_out >= di->opd_avma
&& *sym_avma_out < di->opd_avma + di->opd_size) {
# if !defined(VGP_ppc64_linux)
@@ -424,22 +433,26 @@
ignore it. */
in_text
- = di->text_size > 0
+ = di->text_present
+ && di->text_size > 0
&& !(*sym_avma_out + *sym_size_out <= di->text_avma
|| *sym_avma_out >= di->text_avma + di->text_size);
in_data
- = di->data_size > 0
+ = di->data_present
+ && di->data_size > 0
&& !(*sym_avma_out + *sym_size_out <= di->data_avma
|| *sym_avma_out >= di->data_avma + di->data_size);
in_sdata
- = di->sdata_size > 0
+ = di->sdata_present
+ && di->sdata_size > 0
&& !(*sym_avma_out + *sym_size_out <= di->sdata_avma
|| *sym_avma_out >= di->sdata_avma + di->sdata_size);
in_bss
- = di->bss_size > 0
+ = di->bss_present
+ && di->bss_size > 0
&& !(*sym_avma_out + *sym_size_out <= di->bss_avma
|| *sym_avma_out >= di->bss_avma + di->bss_size);
@@ -467,7 +480,7 @@
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_size > 0) {
+ if (di->opd_present && di->opd_size > 0) {
vg_assert(*sym_avma_out + *sym_size_out <= di->opd_avma
|| *sym_avma_out >= di->opd_avma + di->opd_size);
}
@@ -827,7 +840,7 @@
* not match the value from the main object file.
*/
static
-Addr open_debug_file( Char* name, UInt crc, UWord* size )
+Addr open_debug_file( Char* name, UInt crc, /*OUT*/UWord* size )
{
SysRes fd, sres;
struct vki_stat stat_buf;
@@ -843,7 +856,7 @@
}
if (VG_(clo_verbosity) > 1)
- VG_(message)(Vg_DebugMsg, "Reading debug info from %s...", name);
+ VG_(message)(Vg_DebugMsg, "Reading debug info from %s ..", name);
*size = stat_buf.st_size;
@@ -861,7 +874,7 @@
vg_assert(!res.isError);
if (VG_(clo_verbosity) > 1)
VG_(message)(Vg_DebugMsg,
- "... CRC mismatch (computed %08x wanted %08x)", calccrc, crc);
+ ".. CRC mismatch (computed %08x wanted %08x)", calccrc, crc);
return 0;
}
@@ -872,7 +885,9 @@
* Try to find a separate debug file for a given object file.
*/
static
-Addr find_debug_file( Char* objpath, Char* debugname, UInt crc, UWord* size )
+Addr find_debug_file( struct _DebugInfo* di,
+ Char* objpath, Char* debugname,
+ UInt crc, /*OUT*/UWord* size )
{
Char *objdir = ML_(dinfo_strdup)(objpath);
Char *objdirptr;
@@ -883,7 +898,7 @@
*objdirptr = '\0';
debugpath = ML_(dinfo_zalloc)(
- VG_(strlen)(objdir) + VG_(strlen)(debugname) + 16);
+ VG_(strlen)(objdir) + VG_(strlen)(debugname) + 32);
VG_(sprintf)(debugpath, "%s/%s", objdir, debugname);
@@ -895,6 +910,11 @@
}
}
+ if (addr) {
+ TRACE_SYMTAB("\n");
+ TRACE_SYMTAB("------ Found a debuginfo file: %s\n", debugpath);
+ }
+
ML_(dinfo_free)(debugpath);
ML_(dinfo_free)(objdir);
@@ -1002,6 +1022,8 @@
vg_assert(di);
vg_assert(di->have_rx_map == True);
vg_assert(di->have_rw_map == True);
+ vg_assert(di->rx_map_size > 0);
+ vg_assert(di->rw_map_size > 0);
vg_assert(di->have_dinfo == False);
vg_assert(di->filename);
vg_assert(!di->memname);
@@ -1019,15 +1041,15 @@
vg_assert(VG_IS_PAGE_ALIGNED(di->rw_map_avma));
/* ----------------------------------------------------------
- Phase 1. At this point, there is very little information in
- the DebugInfo. We only know that something that looks like an
- ELF file has been mapped rx-ishly as recorded with the
- di->*rx_map* fields and has also been mapped rw-ishly as
- recorded with the di->*rw_map* fields. In this phase we
- examine the file's ELF Program Header, and, by comparing that
- against the di->*r{w,x}_map* info, try to figure out the AVMAs
- for the sections we care about, that should have been mapped:
- text, data, got, plt, and toc.
+ At this point, there is very little information in the
+ DebugInfo. We only know that something that looks like an ELF
+ file has been mapped rx-ishly as recorded with the di->*rx_map*
+ fields and has also been mapped rw-ishly as recorded with the
+ di->*rw_map* fields. First we examine the file's ELF Program
+ Header, and, by comparing that against the di->*r{w,x}_map*
+ info, try to figure out the AVMAs for the sections we care
+ about, that should have been mapped: text, data, sdata, bss got,
+ plt, and toc.
---------------------------------------------------------- */
oimage = (Addr)NULL;
@@ -1201,57 +1223,9 @@
di->soname = ML_(dinfo_strdup)(strtab+stroff);
}
}
+ } /* for (i = 0; i < phdr_nent; i++) ... */
+ } /* look for the soname */
-//zz if (o_phdr->p_type != PT_LOAD)
-//zz continue;
-//zz
-//zz if (!offset_set) {
-//zz offset_set = True;
-//zz offset_oimage = si->text_start_avma - o_phdr->p_vaddr;
-//zz baseaddr = o_phdr->p_vaddr;
-//zz }
-//zz
-//zz // Get the data and bss start/size if appropriate
-//zz mapped = o_phdr->p_vaddr + offset_oimage;
-//zz mapped_end = mapped + o_phdr->p_memsz;
-//zz if (si->data_start_avma == 0 &&
-//zz (o_phdr->p_flags & (PF_R|PF_W|PF_X)) == (PF_R|PF_W)) {
-//zz si->data_start_avma = mapped;
-//zz si->data_size = o_phdr->p_filesz;
-//zz si->bss_start_avma = mapped + o_phdr->p_filesz;
-//zz if (o_phdr->p_memsz > o_phdr->p_filesz)
-//zz si->bss_size = o_phdr->p_memsz - o_phdr->p_filesz;
-//zz else
-//zz si->bss_size = 0;
-//zz }
-//zz
-//zz mapped = mapped & ~(VKI_PAGE_SIZE-1);
-//zz mapped_end = (mapped_end + VKI_PAGE_SIZE - 1) & ~(VKI_PAGE_SIZE-1);
-//zz
-//zz if (VG_(needs).data_syms
-//zz && mapped >= si->text_start_avma
-//zz && mapped <= (si->text_start_avma + si->text_size)
-//zz && mapped_end > (si->text_start_avma + si->text_size)) {
-//zz /* XXX jrs 2007 Jan 11: what's going on here? If data
-//zz syms are involved, surely we shouldn't be messing with
-//zz the segment's text_size unless there is an assumption
-//zz that the data segment has been mapped immediately after
-//zz the text segment. Which doesn't sound good to me. */
-//zz UInt newsz = mapped_end - si->text_start_avma;
-//zz if (newsz > si->text_size) {
-//zz if (0)
-//zz VG_(printf)("extending mapping %p..%p %d -> ..%p %d\n",
-//zz si->text_start_avma,
-//zz si->text_start_avma + si->text_size,
-//zz si->text_size,
-//zz si->text_start_avma + newsz, newsz);
-//zz
-//zz si->text_size = newsz;
-//zz }
-//zz }
- }
- }
-
/* If, after looking at all the program headers, we still didn't
find a soname, add a fake one. */
if (di->soname == NULL) {
@@ -1285,10 +1259,10 @@
UWord size = shdr->sh_size;
UInt alyn = shdr->sh_addralign;
Bool bits = !(shdr->sh_type == SHT_NOBITS);
- Bool inrx = size > 0 && foff >= di->rx_map_foff
- && foff < di->rx_map_foff + di->rx_map_size;
- Bool inrw = size > 0 && foff >= di->rw_map_foff
- && foff < di->rw_map_foff + di->rw_map_size;
+ Bool inrx = foff >= di->rx_map_foff
+ && foff < di->rx_map_foff + di->rx_map_size;
+ Bool inrw = foff >= di->rw_map_foff
+ && foff < di->rw_map_foff + di->rw_map_size;
TRACE_SYMTAB(" [sec %2ld] %s %s al%2u foff %6ld .. %6ld "
" svma %p name \"%s\"\n",
@@ -1316,11 +1290,13 @@
goto out; \
} while (0)
- /* Find avma-s for: .text .data .bss .plt .got .opd .eh_frame */
+ /* Find avma-s for: .text .data .sdata .bss .plt .got .opd
+ and .eh_frame */
/* Accept .text where mapped as rx (code) */
if (0 == VG_(strcmp)(name, ".text")) {
- if (inrx && size > 0 && di->text_size == 0) {
+ if (inrx && size > 0 && !di->text_present) {
+ di->text_present = True;
di->text_svma = svma;
di->text_avma = di->rx_map_avma + foff - di->rx_map_foff;
di->text_size = size;
@@ -1337,10 +1313,12 @@
}
}
- /* Accept .data where mapped as rw (data) */
+ /* Accept .data where mapped as rw (data), even if zero-sized */
if (0 == VG_(strcmp)(name, ".data")) {
- if (inrw && size > 0 && di->data_size == 0) {
-if (alyn > data_align) data_align = alyn;
+ if (inrw && size >= 0 && !di->data_present) {
+ if (alyn > data_align)
+ data_align = alyn;
+ di->data_present = True;
di->data_svma = svma;
di->data_avma = di->rw_map_avma + foff - di->rw_map_foff;
di->data_size = size;
@@ -1359,8 +1337,10 @@
/* Accept .sdata where mapped as rw (data) */
if (0 == VG_(strcmp)(name, ".sdata")) {
- if (inrw && size > 0 && di->sdata_size == 0) {
-if (alyn > data_align) data_align = alyn;
+ if (inrw && size > 0 && !di->sdata_present) {
+ if (alyn > data_align)
+ data_align = alyn;
+ di->sdata_present = True;
di->sdata_svma = svma;
di->sdata_avma = di->rw_map_avma + foff - di->rw_map_foff;
di->sdata_size = size;
@@ -1377,12 +1357,15 @@
}
}
- /* Accept .bss where mapped as rw (data) */
+ /* Accept .bss where mapped as rw (data), even if zero-sized */
if (0 == VG_(strcmp)(name, ".bss")) {
- if (inrw && size > 0 && di->bss_size == 0) {
-bss_totsize += round_Addr_upwards(size, alyn);
-if (svma < gen_bss_lowest_svma) gen_bss_lowest_svma = svma;
-TRACE_SYMTAB("increasing total bss-like size to %ld\n", bss_totsize);
+ if (inrw && size >= 0 && !di->bss_present) {
+ bss_totsize += round_Addr_upwards(size, alyn);
+ if (svma < gen_bss_lowest_svma)
+ gen_bss_lowest_svma = svma;
+ TRACE_SYMTAB("increasing total bss-like size to %ld\n",
+ bss_totsize);
+ di->bss_present = True;
di->bss_svma = svma;
di->bss_avma = di->rw_map_avma + foff - di->rw_map_foff;
di->bss_size = size;
@@ -1396,8 +1379,9 @@
di->bss_avma + di->bss_size - 1);
TRACE_SYMTAB("acquiring .bss bias = %p\n", di->bss_bias);
} else
- if ((!inrw) && (!inrx) && size > 0 && di->bss_size == 0) {
+ if ((!inrw) && (!inrx) && size > 0 && !di->bss_present) {
/* File contains a .bss, but it didn't get mapped. Ignore. */
+ di->bss_present = False;
di->bss_svma = 0;
di->bss_avma = 0;
di->bss_size = 0;
@@ -1411,9 +1395,11 @@
/* Accept .sbss where mapped as rw (data) */
if (0 == VG_(strcmp)(name, ".sbss")) {
if (inrw && size > 0 && sbss_size == 0) {
-bss_totsize += round_Addr_upwards(size, alyn);
-if (svma < gen_bss_lowest_svma) gen_bss_lowest_svma = svma;
-TRACE_SYMTAB("increasing total bss-like size to %ld\n", bss_totsize);
+ bss_totsize += round_Addr_upwards(size, alyn);
+ if (svma < gen_bss_lowest_svma)
+ gen_bss_lowest_svma = svma;
+ TRACE_SYMTAB("increasing total bss-like size to %ld\n",
+ bss_totsize);
sbss_size = size;
sbss_svma = svma;
sbss_align = alyn;
@@ -1422,12 +1408,14 @@
}
}
- /* Accept .sbss where mapped as rw (data) */
+ /* Accept .dynbss where mapped as rw (data) */
if (0 == VG_(strcmp)(name, ".dynbss")) {
if (inrw && size > 0 /* && sbss_size == 0*/) {
-bss_totsize += round_Addr_upwards(size, alyn);
-if (svma < gen_bss_lowest_svma) gen_bss_lowest_svma = svma;
-TRACE_SYMTAB("increasing total bss-like size to %ld\n", bss_totsize);
+ bss_totsize += round_Addr_upwards(size, alyn);
+ if (svma < gen_bss_lowest_svma)
+ gen_bss_lowest_svma = svma;
+ TRACE_SYMTAB("increasing total bss-like size to %ld\n",
+ bss_totsize);
} else {
BAD(".dynbss");
}
@@ -1435,7 +1423,8 @@
/* Accept .got where mapped as rw (data) */
if (0 == VG_(strcmp)(name, ".got")) {
- if (inrw && size > 0 && di->got_size == 0) {
+ if (inrw && size > 0 && !di->got_present) {
+ di->got_present = True;
di->got_avma = di->rw_map_avma + foff - di->rw_map_foff;
di->got_size = size;
TRACE_SYMTAB("acquiring .got avma = %p\n", di->got_avma);
@@ -1448,7 +1437,8 @@
# if defined(VGP_x86_linux) || defined(VGP_amd64_linux)
/* Accept .plt where mapped as rx (code) */
if (0 == VG_(strcmp)(name, ".plt")) {
- if (inrx && size > 0 && di->plt_size == 0) {
+ if (inrx && size > 0 && !di->plt_present) {
+ di->plt_present = True;
di->plt_avma = di->rx_map_avma + foff - di->rx_map_foff;
di->plt_size = size;
TRACE_SYMTAB("acquiring .plt avma = %p\n", di->plt_avma);
@@ -1459,7 +1449,8 @@
# elif defined(VGP_ppc32_linux)
/* Accept .plt where mapped as rw (data) */
if (0 == VG_(strcmp)(name, ".plt")) {
- if (inrw && size > 0 && di->plt_size == 0) {
+ if (inrw && size > 0 && !di->plt_present) {
+ di->plt_present = True;
di->plt_avma = di->rw_map_avma + foff - di->rw_map_foff;
di->plt_size = size;
TRACE_SYMTAB("acquiring .plt avma = %p\n", di->plt_avma);
@@ -1470,15 +1461,17 @@
# elif defined(VGP_ppc64_linux)
/* Accept .plt where mapped as rw (data), or unmapped */
if (0 == VG_(strcmp)(name, ".plt")) {
- if (inrw && size > 0 && di->plt_size == 0) {
+ if (inrw && size > 0 && !di->plt_present) {
+ di->plt_present = True;
di->plt_avma = di->rw_map_avma + foff - di->rw_map_foff;
di->plt_size = size;
TRACE_SYMTAB("acquiring .plt avma = %p\n", di->plt_avma);
} else
- if ((!inrw) && (!inrx) && size > 0 && di->plt_size == 0) {
+ if ((!inrw) && (!inrx) && size > 0 && !di->plt_present) {
/* File contains a .plt, but it didn't get mapped.
Presumably it is not required on this platform. At
least don't reject the situation as invalid. */
+ di->plt_present = True;
di->plt_avma = 0;
di->plt_size = 0;
} else {
@@ -1491,7 +1484,8 @@
/* Accept .opd where mapped as rw (data) */
if (0 == VG_(strcmp)(name, ".opd")) {
- if (inrw && size > 0 && di->opd_size == 0) {
+ if (inrw && size > 0 && !di->opd_present) {
+ di->opd_present = True;
di->opd_avma = di->rw_map_avma + foff - di->rw_map_foff;
di->opd_size = size;
TRACE_SYMTAB("acquiring .opd avma = %p\n", di->opd_avma);
@@ -1502,7 +1496,8 @@
/* Accept .eh_frame where mapped as rx (code) (?!) */
if (0 == VG_(strcmp)(name, ".eh_frame")) {
- if (inrx && size > 0 && di->ehframe_size == 0) {
+ if (inrx && size > 0 && !di->ehframe_present) {
+ di->ehframe_present = True;
di->ehframe_avma = di->rx_map_avma + foff - di->rx_map_foff;
di->ehframe_size = size;
TRACE_SYMTAB("acquiring .eh_frame avma = %p\n", di->ehframe_avma);
@@ -1515,57 +1510,6 @@
}
-#if 0
- /* We found a .sbss section too. If if immediately adjoins the
- .bss, pretend it's a part of .bss. This is a hack. Fortunately
- .sbss (small-items .bss section) seems to exist on
- ppc32/64-linux, so if this screws up it at least won't affect
- the main x86/amd64-linux ports. */
- if (di->bss_size > 0 && sbss_size > 0) {
-
- if (round_Addr_upwards(sbss_svma + sbss_size, bss_align)
- == di->bss_svma) {
- /* Immediately precedes .bss */
- di->bss_size += (di->bss_svma - sbss_svma);
- di->bss_bias += (di->bss_svma - sbss_svma);
- di->bss_svma -= (di->bss_svma - sbss_svma);
- /* but don't mess with .bss avma or bias */
- TRACE_SYMTAB("found .sbss of size %ld immediately preceding .bss\n",
- sbss_size);
- TRACE_SYMTAB("revised .bss svma = %p .. %p\n",
- di->bss_svma, di->bss_svma + di->bss_size - 1);
- TRACE_SYMTAB("revised .bss avma = %p .. %p\n",
- di->bss_avma, di->bss_avma + di->bss_size - 1);
- TRACE_SYMTAB("revised .bss bias = %p\n", di->bss_bias);
- }
- else
- if (round_Addr_upwards(di->bss_svma + di->bss_size, sbss_align)
- == sbss_svma) {
- /* Immediately follows .bss */
- di->bss_size += (sbss_svma - di->bss_svma);
- /* but don't mess with .bss avma or bias */
- TRACE_SYMTAB("found .sbss of size %ld immediately following .bss\n",
- sbss_size);
- TRACE_SYMTAB("revised .bss svma = %p .. %p\n",
- di->bss_svma, di->bss_svma + di->bss_size - 1);
- TRACE_SYMTAB("revised .bss avma = %p .. %p\n",
- di->bss_avma, di->bss_avma + di->bss_size - 1);
- TRACE_SYMTAB("revised .bss bias = %p\n", di->bss_bias);
- }
- else {
- /* Can't ascertain relative position. Complain and
- ignore. */
- TRACE_SYMTAB("found .sbss of size %ld but not immediately "
- "preceding/following .bss\n",
- sbss_size);
- TRACE_SYMTAB("therefore ignoring it\n");
- ML_(symerr)(di, True, ".sbss which is not adjacent to .bss");
- }
-
- }
-#endif
-
-#if 1
/* Kludge: ignore all previous computations for .bss avma range,
and simply assume that .bss immediately follows .data/.sdata.*/
if (1) {
@@ -1573,7 +1517,6 @@
- di->data_avma;
TRACE_SYMTAB("data_al = %ld\n", data_al);
bss_totsize += data_al;
-
di->bss_svma = gen_bss_lowest_svma;
di->bss_size = bss_totsize;
di->bss_avma = di->data_avma + (di->bss_svma - di->data_svma);
@@ -1584,7 +1527,6 @@
di->bss_avma, di->bss_avma + di->bss_size - 1);
TRACE_SYMTAB("kludged .bss bias = %p\n", di->bss_bias);
}
-#endif
if (0) VG_(printf)("YYYY text_: avma %p size %ld bias %p\n",
di->text_avma, di->text_size, di->text_bias);
@@ -1714,7 +1656,8 @@
crc = *(UInt *)(debuglink_img + crc_offset);
/* See if we can find a matching debug file */
- dimage = find_debug_file(di->filename, debuglink_img, crc, &n_dimage);
+ dimage = find_debug_file( di, di->filename, debuglink_img,
+ crc, &n_dimage );
if (dimage != 0
&& n_dimage >= sizeof(ElfXX_Ehdr)
@@ -1834,7 +1777,7 @@
FIND(need_dwarf2, ".debug_str", debug_str_sz, debug_str_img)
FIND(need_dwarf2, ".debug_ranges", debug_ranges_sz,
debug_ranges_img)
- FIND(need_dwarf2, ".debug_str", debug_loc_sz, debug_loc_img)
+ FIND(need_dwarf2, ".debug_loc", debug_loc_sz, debug_loc_img)
FIND(need_dwarf1, ".debug", dwarf1d_sz, dwarf1d_img)
FIND(need_dwarf1, ".line", dwarf1l_sz, dwarf1l_img)
Modified: branches/DATASYMS/coregrind/m_debuginfo/storage.c
===================================================================
--- branches/DATASYMS/coregrind/m_debuginfo/storage.c 2008-02-19 12:51:29 UTC (rev 7425)
+++ branches/DATASYMS/coregrind/m_debuginfo/storage.c 2008-02-19 21:11:13 UTC (rev 7426)
@@ -305,7 +305,9 @@
/* vg_assert(this < di->text_avma + di->size
&& next-1 >= di->text_avma); */
- if (this >= di->text_avma + di->text_size || next-1 < di->text_avma) {
+ if (!di->text_present
+ || this >= di->text_avma + di->text_size
+ || next-1 < di->text_avma) {
if (0)
VG_(message)(Vg_DebugMsg,
"warning: ignoring line info entry falling "
@@ -371,7 +373,8 @@
/* Rule out ones which are completely outside the text segment.
These probably indicate some kind of bug, but for the meantime
ignore them. */
- if ( cfsi->base + cfsi->len - 1 < di->text_avma
+ if ( !di->text_present
+ || cfsi->base + cfsi->len - 1 < di->text_avma
|| di->text_avma + di->text_size - 1 < cfsi->base ) {
static Int complaints = 3;
if (VG_(clo_trace_cfi) || complaints > 0) {
@@ -711,7 +714,8 @@
/* Ignore any variables whose aMin .. aMax (that is, range of text
addresses for which they actually exist) falls outside the text
segment. Is this indicative of a bug in the reader? Maybe. */
- if (di->text_size > 0
+ if (di->text_present
+ && di->text_size > 0
&& level > 0
&& (aMax < di->text_avma
|| aMin >= di->text_avma + di->text_size)) {
@@ -971,12 +975,12 @@
vg_assert(0);
out:
if (preferA && !preferB) {
- TRACE_SYMTAB("sym at %p: prefer '%s' over '%s'\n",
+ TRACE_SYMTAB("sym at %p: prefer '%s' to '%s'\n",
a->addr, a->name, b->name );
return a;
}
if (preferB && !preferA) {
- TRACE_SYMTAB("sym at %p: prefer '%s' over '%s'\n",
+ TRACE_SYMTAB("sym at %p: prefer '%s' to '%s'\n",
b->addr, b->name, a->name );
return b;
}
@@ -1019,7 +1023,7 @@
di->symtab[di->symtab_used++] = di->symtab[i];
}
}
- TRACE_SYMTAB( "%d merged\n", n_merged);
+ TRACE_SYMTAB( "canonicaliseSymtab: %d symbols merged\n", n_merged);
}
while (n_merged > 0);
Modified: branches/DATASYMS/include/pub_tool_debuginfo.h
===================================================================
--- branches/DATASYMS/include/pub_tool_debuginfo.h 2008-02-19 12:51:29 UTC (rev 7425)
+++ branches/DATASYMS/include/pub_tool_debuginfo.h 2008-02-19 21:11:13 UTC (rev 7426)
@@ -112,16 +112,16 @@
/* A way to get information about what segments are mapped */
typedef struct _DebugInfo DebugInfo;
-/* Returns NULL if the DebugInfo isn't found. It doesn't matter if debug info
- is present or not. */
+/* Returns NULL if the DebugInfo isn't found. It doesn't matter if
+ debug info is present or not. */
extern DebugInfo* VG_(find_seginfo) ( Addr a );
/* Fish bits out of DebugInfos. */
-extern Addr VG_(seginfo_start) ( const DebugInfo *di );
-extern SizeT VG_(seginfo_size) ( const DebugInfo *di );
-extern const UChar* VG_(seginfo_soname) ( const DebugInfo *di );
-extern const UChar* VG_(seginfo_filename) ( const DebugInfo *di );
-extern ULong VG_(seginfo_sym_offset)( const DebugInfo *di );
+extern Addr VG_(seginfo_get_text_avma)( const DebugInfo *di );
+extern SizeT VG_(seginfo_get_text_size)( const DebugInfo *di );
+extern const UChar* VG_(seginfo_soname) ( const DebugInfo *di );
+extern const UChar* VG_(seginfo_filename) ( const DebugInfo *di );
+extern ULong VG_(seginfo_get_text_bias)( const DebugInfo *di );
/* Function for traversing the seginfo list. When called with NULL it
returns the first element; otherwise it returns the given element's
@@ -135,7 +135,7 @@
extern Int VG_(seginfo_syms_howmany) ( const DebugInfo *di );
extern void VG_(seginfo_syms_getidx) ( const DebugInfo *di,
Int idx,
- /*OUT*/Addr* addr,
+ /*OUT*/Addr* avma,
/*OUT*/Addr* tocptr,
/*OUT*/UInt* size,
/*OUT*/HChar** name,
|
|
From: Nicholas N. <nj...@cs...> - 2008-02-19 21:09:39
|
On Tue, 19 Feb 2008, Konstantin Serebryany wrote: > If we can ignore the majority of all memory accesses, we will speedup > the whole thing. > I have implemented the following: > if ((address % X) != Y) we ignore this memory access. > X and Y are command line parameters (% operation is optimized for > some values). > 0<=Y<X > typical value of X is between 3 and 30. So this increases the granularity by treating larger sections of memory as a single thing? More generally, a huge proportion of what Helgrind is doing is wasted effort. In many multithreaded programs, different threads share only a small amount of memory out of the total memory used. Unfortunately there's no way for Helgrind to know in advance (AFAIK) what that small amount of memory should be. Also, because threads are so crude each thread can accidentally "share" more memory than intended (ie. no inter-thread memory protection). But programmers should know in advance which bits of memory should be shared. Perhaps some client requests could be used which say "this section of memory will be shared" or "this section of memory won't be shared" could be useful. In the "won't be shared" sections the checking might be a lot simpler? Nick |
|
From: Nicholas N. <nj...@cs...> - 2008-02-19 20:54:53
|
On Tue, 19 Feb 2008, Olivier Sarrouy wrote: > Unhappily, i fall in trouble shadowing temporaries. For instance, if i > want to trace an addition, how to obtain the content of t3 = > Add32(Get::I32(0), Get::I32(6)), whithout manually shadowing all temps > used in the SB ? In a nutshell, how to access the result of the > operations processed by Valgrind for the guest program ? You will need to shadow all temps in the SB. Nick |
|
From: Konstantin S. <kon...@gm...> - 2008-02-19 14:57:19
|
Hello all,
I've been doing some more experiments with helgrind and I would like
to share some ideas...
The 'test' programs I've run have few things in common:
- Hundreds of threads.
- Heavy use of message queues, condvars, and other 'happens-before'
stuff. Mutexes are used as well.
- Strict timeouts (i.e. if some action is delayed too much, the
program starts behaving differently).
- Strict limits on memory usage.
Accuracy:
The current default memory state machine (MSMHelgrind) gives too many
false reports in presence of message queues, condvars, etc.
So far, I find MSMProp1 to be more accurate, but noticeably slower
(mostly because it has to check happens-before in all states).
Speed:
MSMHelgrind leads to 40x-150x slowdown (mostly depending on the number
of active threads, since valgrind runs on one core).
MSMProp1 is 20%-100% slower than MSMHelgrind (depending on the size of
HB graph?).
Even though it is possible to further speedup both machines, I don't
think we can get to 20x slowdown by doing just this.
If we can ignore the majority of all memory accesses, we will speedup
the whole thing.
I have implemented the following:
if ((address % X) != Y) we ignore this memory access.
X and Y are command line parameters (% operation is optimized for
some values).
0<=Y<X
typical value of X is between 3 and 30.
This hack brings helgrind's speed to something about 10x-15x and makes
my strict timeouts happy.
We will of course miss some races, but it is better than nothing
(again, this is needed only in presence of strict timeouts).
And we also can run helgrind several times giving different values of Y.
Most other ways to speedup helgrind are complimentary to this hack.
Memory:
Helgrind's memory consumption on my tests is about 2x-2.5x.
Some tests have limits on memory usage and I have to suppress those
limits (and use a machine with lots of RAM).
Also, if I modify the hack above to
if (((address >> N_SECMAP_BITS) % X) != Y)
I reduce the memory usage (since shadow values are not created for the
ignored addresses).
Segments:
If we have a lot of happens-before synchronization we create many segments.
We need to have very fast mapping between SegmentID->Segment
(especially for MSMProp1).
I suggest a resisable array of segments instead of a linked list.
And the mapping SegmentID->Segment is just an array reference. It also
reduces memory usage a bit.
We can't have more than N segments at a time (limited by RAM) so
ideally we have to recycle old segments (I did not do this yet).
Annotations:
Life is more complex than just mutex and condvar. :)
We have all the varieties of message queues and custom synchronization
mechanisms implemented via atomics.
Most of them can be explained to helgrind via annotations. Annotations
are essentially valgrind's 'client requests'.
This is what I used so far:
ANNOTATE_CONDVAR_*
Create a happens-before relation between two thread segments at
arbitrary points of program.
ANNOTATE_PCQ_*
A variation of ANNOTATE_CONDVAR_* specifically for FIFO message queue.
ANNOTATE_MUTEX_IS_USED_AS_CONDVAR(mutex)
Signal on all Unlocks and Wait on all Locks of this mutex.
On such mutex helgrind will behave as pure happens-before detector. See test61.
ANNOTATE_TRACE_MEMORY
--trace-addr is very good for testing helgrind on unit tests.
However it is useless on large programs where memory addresses are
non-deterministic (due to scheduler).
This annotation tells helgrind to trace accesses to some particular
memory location and to report races only on this address.
Multiple addresses could be traced. Useful for debugging a race.
ANNOTATE_EXPECT_RACE
Useful for regression testing of helgrind itself (if an expected race
is not detected, helgrind will complain).
ANNOTATE_BENIGN_RACE
Alternative to a suppression file.
Most of the things mentioned above are implemented at
http://code.google.com/p/data-race-test (not all of them are
'production quality' yet).
You feedback is more than welcome.
Thanks,
--kcc
|
|
From: <sv...@va...> - 2008-02-19 12:51:27
|
Author: sewardj
Date: 2008-02-19 12:51:29 +0000 (Tue, 19 Feb 2008)
New Revision: 7425
Log:
Make Dwarf3-based local variable descriptions work at least marginally
on ppc32/64-linux.
Modified:
branches/DATASYMS/coregrind/m_debuginfo/d3basics.c
branches/DATASYMS/coregrind/m_debuginfo/priv_d3basics.h
branches/DATASYMS/coregrind/m_debuginfo/readdwarf.c
branches/DATASYMS/coregrind/m_stacktrace.c
Modified: branches/DATASYMS/coregrind/m_debuginfo/d3basics.c
===================================================================
--- branches/DATASYMS/coregrind/m_debuginfo/d3basics.c 2008-02-18 02:16:22 UTC (rev 7424)
+++ branches/DATASYMS/coregrind/m_debuginfo/d3basics.c 2008-02-19 12:51:29 UTC (rev 7425)
@@ -379,6 +379,16 @@
# elif defined(VGP_x86_linux)
if (regno == 5/*EBP*/) { *a = regs->fp; return True; }
if (regno == 4/*ESP*/) { *a = regs->sp; return True; }
+# elif defined(VGP_ppc32_linux)
+ if (regno == 1/*SP*/) { *a = regs->sp; return True; }
+ VG_(printf)("get_Dwarf_Reg(ppc32-linux)(%ld)\n", regno);
+ if (regno == 31) return False;
+ vg_assert(0);
+# elif defined(VGP_ppc64_linux)
+ if (regno == 1/*SP*/) { *a = regs->sp; return True; }
+ VG_(printf)("get_Dwarf_Reg(ppc64-linux)(%ld)\n", regno);
+ if (regno == 31) return False;
+ vg_assert(0);
# else
# error "Unknown platform"
# endif
@@ -490,6 +500,12 @@
a1 += sw1;
PUSH( a1 );
break;
+ /* As per comment on DW_OP_breg*, the following denote that
+ the value in question is in a register, not in memory. So
+ we simply return failure. */
+ case DW_OP_reg0 ... DW_OP_reg31:
+ FAIL("evaluate_Dwarf3_Expr: DW_OP_reg* (value is in a register)");
+ break;
case DW_OP_plus_uconst:
POP(uw1);
uw1 += (UWord)read_leb128U( &expr );
@@ -498,8 +514,8 @@
default:
if (!VG_(clo_xml))
VG_(message)(Vg_DebugMsg,
- "Warning: DWARF3 CFI reader: unhandled DW_OP_ "
- "opcode 0x%x", (Int)opcode);
+ "warning: evaluate_Dwarf3_Expr: unhandled "
+ "DW_OP_ 0x%x", (Int)opcode);
FAIL("evaluate_Dwarf3_Expr: unhandled DW_OP_");
/*NOTREACHED*/
}
Modified: branches/DATASYMS/coregrind/m_debuginfo/priv_d3basics.h
===================================================================
--- branches/DATASYMS/coregrind/m_debuginfo/priv_d3basics.h 2008-02-18 02:16:22 UTC (rev 7424)
+++ branches/DATASYMS/coregrind/m_debuginfo/priv_d3basics.h 2008-02-19 12:51:29 UTC (rev 7425)
@@ -589,7 +589,8 @@
require knowing a suitably contextualising set of values for the
instruction, frame and stack pointers (and, in general, all
registers, though we punt on such generality here). Here's a
- struct to carry the bare essentials. */
+ struct to carry the bare essentials. ip, fp and sp are expected to
+ be provided for all platforms. */
typedef
struct { Addr ip; Addr sp; Addr fp; }
RegSummary;
Modified: branches/DATASYMS/coregrind/m_debuginfo/readdwarf.c
===================================================================
--- branches/DATASYMS/coregrind/m_debuginfo/readdwarf.c 2008-02-18 02:16:22 UTC (rev 7424)
+++ branches/DATASYMS/coregrind/m_debuginfo/readdwarf.c 2008-02-19 12:51:29 UTC (rev 7425)
@@ -1530,7 +1530,7 @@
the CFA].
JRS: on amd64, the dwarf register numbering is, as per
- gdb-6.3/gdb/tdep-amd64.c and also amd64-abi-0.98.pdf:
+ gdb-6.3/gdb/amd64-tdep.c and also amd64-abi-0.98.pdf:
0 1 2 3 4 5 6 7
RAX RDX RCX RBX RSI RDI RBP RSP
Modified: branches/DATASYMS/coregrind/m_stacktrace.c
===================================================================
--- branches/DATASYMS/coregrind/m_stacktrace.c 2008-02-18 02:16:22 UTC (rev 7424)
+++ branches/DATASYMS/coregrind/m_stacktrace.c 2008-02-19 12:51:29 UTC (rev 7425)
@@ -330,7 +330,7 @@
# undef M_VG_ERRTXT
}
- if (sps) sps[0] = sp;
+ if (sps) sps[0] = fp; /* NB. not sp */
if (fps) fps[0] = fp;
ips[0] = ip;
i = 1;
@@ -389,7 +389,7 @@
# endif
fp = (((UWord*)fp)[0]);
- if (sps) sps[i] = sp;
+ if (sps) sps[i] = fp; /* NB. not sp */
if (fps) fps[i] = fp;
ips[i++] = ip;
if (debug)
|
|
From: Julian S. <js...@ac...> - 2008-02-19 12:28:36
|
> I'd like to see the result of the operation Add32(Get::I32(0), Get::I32(6). You should note that "Add32(Get::I32(0), Get::I32(6))" is not in the flat-SSA form that will be sent to your tool. To see the actual input to your instrumentation function, use --trace-flags=01000000 --trace-notbelow=0. Learn to use --trace-flags and --trace-notbelow; they are your friends. What you will see is something like "t3 = Add32(t99,t88)" Anyway: to see the value of t3 you need to construct IRExpr_RdTmp(t3) (where the arg to IRExpr_RdTmp is the IRTemp which is t3). J > > For the temporary which holds some information associated with t3 i've > build up a shadow manager (hope it is not useless !). > > Thanks > > Olivier > > Julian Seward a écrit : > >> Unhappily, i fall in trouble shadowing temporaries. For instance, if i > >> want to trace an addition, how to obtain the content of t3 = > >> Add32(Get::I32(0), Get::I32(6)), whithout manually shadowing all temps > >> used in the SB ? > > > > Not sure what you are asking. You want to see the value of t3, or > > you want a new temporary which holds some information associated > > with t3, or something different? > > > > J |
|
From: Julian S. <js...@ac...> - 2008-02-19 11:24:21
|
> Unhappily, i fall in trouble shadowing temporaries. For instance, if i > want to trace an addition, how to obtain the content of t3 = > Add32(Get::I32(0), Get::I32(6)), whithout manually shadowing all temps > used in the SB ? Not sure what you are asking. You want to see the value of t3, or you want a new temporary which holds some information associated with t3, or something different? J |
|
From: Olivier S. <oli...@re...> - 2008-02-19 10:32:58
|
Hi everyone, I'm a french student using Valgrind framework to write a Redux-like dataflow analyser to be used for intrusion detection. I had initially planned to work from Redux Source Code but it's seems too old to work with the latests versions of Valgrind, and hence i decided to rebuild it from scratch. Unhappily, i fall in trouble shadowing temporaries. For instance, if i want to trace an addition, how to obtain the content of t3 = Add32(Get::I32(0), Get::I32(6)), whithout manually shadowing all temps used in the SB ? In a nutshell, how to access the result of the operations processed by Valgrind for the guest program ? That's it .... If anyone could help me ! Thanks for everyone's job on Valgrind project and sorry for my poor english .... Olivier Sarrouy Master Student Supélec, Rennes France |
|
From: Tom H. <th...@cy...> - 2008-02-19 05:06:50
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2008-02-19 03:15:12 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 338 tests, 80 stderr failures, 1 stdout failure, 29 post failures == memcheck/tests/addressable (stderr) memcheck/tests/badjump (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/erringfds (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-pool-0 (stderr) memcheck/tests/leak-pool-1 (stderr) memcheck/tests/leak-pool-2 (stderr) memcheck/tests/leak-pool-3 (stderr) memcheck/tests/leak-pool-4 (stderr) memcheck/tests/leak-pool-5 (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/long_namespace_xml (stderr) memcheck/tests/lsframe1 (stderr) memcheck/tests/lsframe2 (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/match-overrun (stderr) memcheck/tests/noisy_child (stderr) memcheck/tests/partial_load_dflt (stderr) memcheck/tests/partial_load_ok (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/sigkill (stderr) memcheck/tests/stack_changes (stderr) memcheck/tests/x86/bug152022 (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/xor-undef-x86 (stderr) memcheck/tests/xml1 (stderr) massif/tests/alloc-fns-A (post) massif/tests/alloc-fns-B (post) massif/tests/basic (post) massif/tests/basic2 (post) massif/tests/big-alloc (post) massif/tests/culling1 (stderr) massif/tests/culling2 (stderr) massif/tests/custom_alloc (post) massif/tests/deep-A (post) massif/tests/deep-B (stderr) massif/tests/deep-B (post) massif/tests/deep-C (stderr) massif/tests/deep-C (post) massif/tests/deep-D (post) massif/tests/ignoring (post) massif/tests/insig (post) massif/tests/long-names (post) massif/tests/long-time (post) massif/tests/new-cpp (post) massif/tests/null (post) massif/tests/one (post) massif/tests/overloaded-new (post) massif/tests/peak (post) massif/tests/peak2 (stderr) massif/tests/peak2 (post) massif/tests/realloc (stderr) massif/tests/realloc (post) massif/tests/thresholds_0_0 (post) massif/tests/thresholds_0_10 (post) massif/tests/thresholds_10_0 (post) massif/tests/thresholds_10_10 (post) massif/tests/thresholds_5_0 (post) massif/tests/thresholds_5_10 (post) massif/tests/zero1 (post) massif/tests/zero2 (post) none/tests/blockfault (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/hg06_readshared (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc02_simple_tls (stderr) helgrind/tests/tc03_re_excl (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc07_hbl1 (stderr) helgrind/tests/tc08_hbl2 (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc11_XCHG (stderr) helgrind/tests/tc12_rwl_trivial (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc18_semabuse (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) helgrind/tests/tc24_nonzero_sem (stderr) exp-drd/tests/fp_race (stderr) exp-drd/tests/fp_race2 (stderr) exp-drd/tests/matinv (stderr) exp-drd/tests/pth_barrier (stderr) exp-drd/tests/pth_broadcast (stderr) exp-drd/tests/pth_cond_race (stderr) exp-drd/tests/pth_cond_race2 (stderr) exp-drd/tests/pth_create_chain (stderr) exp-drd/tests/pth_detached (stderr) exp-drd/tests/pth_detached2 (stderr) exp-drd/tests/sem_as_mutex (stderr) exp-drd/tests/sem_as_mutex2 (stderr) exp-drd/tests/sigalrm (stderr) exp-drd/tests/tc17_sembar (stderr) exp-drd/tests/tc18_semabuse (stderr) |
|
From: Tom H. <th...@cy...> - 2008-02-19 04:05:54
|
Nightly build on lloyd ( x86_64, Fedora 7 ) started at 2008-02-19 03:05:04 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 372 tests, 7 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) |
|
From: Tom H. <th...@cy...> - 2008-02-19 03:46:18
|
Nightly build on aston ( x86_64, Fedora Core 5 ) started at 2008-02-19 03:20:08 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 == 378 tests, 8 stderr failures, 1 stdout failure, 0 post failures == memcheck/tests/malloc_free_fill (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/xml1 (stderr) none/tests/blockfault (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc22_exit_w_lock (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 378 tests, 8 stderr failures, 2 stdout failures, 0 post failures == memcheck/tests/malloc_free_fill (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/xml1 (stderr) none/tests/blockfault (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) helgrind/tests/tc08_hbl2 (stdout) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc22_exit_w_lock (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Tue Feb 19 03:33:29 2008 --- new.short Tue Feb 19 03:46:21 2008 *************** *** 8,10 **** ! == 378 tests, 8 stderr failures, 2 stdout failures, 0 post failures == memcheck/tests/malloc_free_fill (stderr) --- 8,10 ---- ! == 378 tests, 8 stderr failures, 1 stdout failure, 0 post failures == memcheck/tests/malloc_free_fill (stderr) *************** *** 16,18 **** none/tests/mremap2 (stdout) - helgrind/tests/tc08_hbl2 (stdout) helgrind/tests/tc20_verifywrap (stderr) --- 16,17 ---- |
|
From: Tom H. <th...@cy...> - 2008-02-19 03:42:07
|
Nightly build on trojan ( x86_64, Fedora Core 6 ) started at 2008-02-19 03:25:17 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 376 tests, 6 stderr failures, 5 stdout failures, 0 post failures == memcheck/tests/pointer-trace (stderr) memcheck/tests/vcpu_fnfns (stdout) memcheck/tests/x86/bug133694 (stdout) memcheck/tests/x86/bug133694 (stderr) memcheck/tests/x86/scalar (stderr) none/tests/cmdline1 (stdout) none/tests/cmdline2 (stdout) none/tests/mremap (stderr) none/tests/mremap2 (stdout) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc22_exit_w_lock (stderr) |
|
From: Tom H. <th...@cy...> - 2008-02-19 03:27:11
|
Nightly build on dellow ( x86_64, Fedora 8 ) started at 2008-02-19 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 == 372 tests, 8 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_cvsimple (stdout) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc22_exit_w_lock (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 372 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/tc18_semabuse (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc22_exit_w_lock (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Tue Feb 19 03:18:44 2008 --- new.short Tue Feb 19 03:27:10 2008 *************** *** 8,10 **** ! == 372 tests, 8 stderr failures, 2 stdout failures, 0 post failures == memcheck/tests/malloc_free_fill (stderr) --- 8,10 ---- ! == 372 tests, 8 stderr failures, 3 stdout failures, 0 post failures == memcheck/tests/malloc_free_fill (stderr) *************** *** 16,17 **** --- 16,18 ---- none/tests/mremap2 (stdout) + none/tests/pth_cvsimple (stdout) helgrind/tests/tc18_semabuse (stderr) |
|
From: Tom H. <th...@cy...> - 2008-02-19 03:14:49
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2008-02-19 03:00:10 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 378 tests, 29 stderr failures, 3 stdout failures, 0 post failures == memcheck/tests/malloc_free_fill (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/amd64/insn_ssse3 (stdout) none/tests/amd64/insn_ssse3 (stderr) none/tests/amd64/ssse3_misaligned (stderr) none/tests/blockfault (stderr) none/tests/fdleak_fcntl (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) none/tests/x86/insn_ssse3 (stdout) none/tests/x86/insn_ssse3 (stderr) none/tests/x86/ssse3_misaligned (stderr) 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) |