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
(3) |
|
2
(8) |
3
(19) |
4
(24) |
5
(23) |
6
(16) |
7
(33) |
8
(5) |
|
9
(4) |
10
(23) |
11
(22) |
12
(40) |
13
(30) |
14
(31) |
15
(17) |
|
16
(18) |
17
(20) |
18
(41) |
19
(36) |
20
(25) |
21
(8) |
22
(9) |
|
23
(17) |
24
(12) |
25
(15) |
26
(15) |
27
(16) |
28
(22) |
29
(6) |
|
30
(7) |
31
(10) |
|
|
|
|
|
|
From: Julian S. <js...@ac...> - 2009-08-15 23:51:52
|
On Friday 14 August 2009, Josef Weidendorfer wrote: > On Friday 14 August 2009, Nicholas Nethercote wrote: > > On Fri, Aug 14, 2009 at 8:02 AM, Josef > > > > Weidendorfer<Jos...@gm...> wrote: > > > On Wednesday 12 August 2009, Nicholas Nethercote wrote: > > >> Can you post the patch here? The change sounds ok to me in principle, > > >> but I think you'll have to create a new file > > >> include/pub_tool_transtab.h so I'd like to see the patch. Thanks. > > > > > > See attachment. > > > As there is a dependance on m_scheduler, I thought it would be better > > > to make it part of the scheduler. The scheduler has already a > > > dependency on transtab... > > > > > > Julian wanted to rethink whether there could be any further problems > > > for discarding translations from tools. However, there is already a > > > client request for discarding translations. So I think this should be > > > safe. > > > > Three comments: > > > > - I'd still rather see it in pub_tool_transtab.h. I don't see a good > > reason for breaking our convention that m_foo declarations live in > > pub_core_foo.h/pub_tool_foo.h. > > > > - Rather than creating the new VG_(discard_all_translations), I'd > > prefer to just make VG_(discard_translations) visible to tools. It's > > more flexible, and I'm sure at some point some tool will want to only > > discard translations from part of the address space. > > > > - This should go in after 3.5.0, just to minimise changes at this very > > late stage. I figure this isn't a problem as it's just an internal > > clean-up and not visible to the user. > > I am fine with all of your comments. However, for making > VG_(discard_translations) safe for tools, the assertion to check that we > are not inside of translated code is really useful (we do not want to > discard code we currently are executing). This will produce a dependency of > transtab to scheduler :( So I am inclined to agree, it needs to go in m_scheduler, since I really want to keep the assertion but don't want yet another circular module dependency. Josef, maybe file a bug report and put the patch there, so we don't lose it? J |
|
From: <sv...@va...> - 2009-08-15 23:33:16
|
Author: sewardj
Date: 2009-08-16 00:33:04 +0100 (Sun, 16 Aug 2009)
New Revision: 10825
Log:
Followup to r10822: send the CDATA text to the XML channel, not the
text one. Duh.
Modified:
trunk/coregrind/m_errormgr.c
Modified: trunk/coregrind/m_errormgr.c
===================================================================
--- trunk/coregrind/m_errormgr.c 2009-08-15 23:26:12 UTC (rev 10824)
+++ trunk/coregrind/m_errormgr.c 2009-08-15 23:33:04 UTC (rev 10825)
@@ -415,7 +415,7 @@
// itself contains "]]>", as specified in Protocol 4.
VG_(printf_xml)(" <rawtext>\n");
VG_(printf_xml)("<![CDATA[\n");
- VG_(printf)("%s", (HChar*) VG_(indexXA)(text, 0) );
+ VG_(printf_xml)("%s", (HChar*) VG_(indexXA)(text, 0) );
VG_(printf_xml)("]]>\n");
VG_(printf_xml)(" </rawtext>\n");
VG_(printf_xml)(" </suppression>\n");
|
|
From: <sv...@va...> - 2009-08-15 23:26:24
|
Author: njn Date: 2009-08-16 00:26:12 +0100 (Sun, 16 Aug 2009) New Revision: 10824 Log: Fix "make check" on Darwin. Modified: trunk/helgrind/tests/Makefile.am Modified: trunk/helgrind/tests/Makefile.am =================================================================== --- trunk/helgrind/tests/Makefile.am 2009-08-15 23:05:34 UTC (rev 10823) +++ trunk/helgrind/tests/Makefile.am 2009-08-15 23:26:12 UTC (rev 10824) @@ -146,3 +146,10 @@ LDADD = -lpthread +if VGCONF_OS_IS_DARWIN +annotate_hbefore_CFLAGS = $(AM_CFLAGS) -mdynamic-no-pic +else +annotate_hbefore_CFLAGS = $(AM_CFLAGS) +endif + + |
|
From: Julian S. <js...@ac...> - 2009-08-15 23:16:16
|
Ashley,
I think you have some good points, esp w.r.t. the tagging when using
--xml-socket. I see that the lack of it gets in your way.
Can I suggest you open a bug report, to put this stuff on? We're trying
to use bugzilla more actively, and it'll stop this all getting lost
otherwise.
> Did you have any thoughts on the other points I mentioned, either
> getting both sets of output and ideally a way of getting a qualifier in
> over the --{log,file}-socket options.
Could you show some examples of what you mean? (examples with simple
bits of XML ?) I think I know what you're getting at, but am not sure.
J
|
|
From: Julian S. <js...@ac...> - 2009-08-15 23:08:22
|
Hi Ashley, Thank you for giving this stuff a good testing. I at least fixed the two obvious bugs you found: > b) If I do specify --xml-file=<file> but not --xml=yes I get partial > output in the xml file. and > f) Using log file qualifiers with XML results in the xml for the > qualifier being put to stdout (at least, I think they are fixed). r10823. J |
|
From: <sv...@va...> - 2009-08-15 23:05:51
|
Author: sewardj
Date: 2009-08-16 00:05:34 +0100 (Sun, 16 Aug 2009)
New Revision: 10823
Log:
Fix a couple of errors in the revised XML generation that were
spotted by Ashley Pittman:
* If I specify --xml-file=<file> but not --xml=yes I get partial
output in the xml file.
* Using log file qualifiers with XML results in the xml for the
qualifier being put to stdout.
Modified:
trunk/coregrind/m_main.c
Modified: trunk/coregrind/m_main.c
===================================================================
--- trunk/coregrind/m_main.c 2009-08-15 22:41:51 UTC (rev 10822)
+++ trunk/coregrind/m_main.c 2009-08-15 23:05:34 UTC (rev 10823)
@@ -950,10 +950,11 @@
i++;
}
- VG_(message_no_f_c)(Vg_UserMsg,
- "<logfilequalifier> <var>%t</var> "
- "<value>%t</value> </logfilequalifier>\n",
- qualname,qual);
+ VG_(printf_xml_no_f_c)(
+ "<logfilequalifier> <var>%t</var> "
+ "<value>%t</value> </logfilequalifier>\n",
+ qualname,qual
+ );
format[i] = '}';
i++;
}
@@ -2422,7 +2423,8 @@
VG_TDICT_CALL(tool_fini, 0/*exitcode*/);
/* Show the error counts. */
- if (VG_(needs).core_errors || VG_(needs).tool_errors) {
+ if (VG_(clo_xml)
+ && (VG_(needs).core_errors || VG_(needs).tool_errors)) {
VG_(show_error_counts_as_XML)();
}
|
|
From: <sv...@va...> - 2009-08-15 22:42:02
|
Author: sewardj
Date: 2009-08-15 23:41:51 +0100 (Sat, 15 Aug 2009)
New Revision: 10822
Log:
When generating XML output for suppressions, print the suppression
both wrapped up in XML tags (as before) but also in plain text in a
sequence of CDATA blocks. Normally only one, but in the worst case
the raw data will have ]]> in it, in which case it needs to be split
across two CDATA blocks.
This apparently simple change involved a lot of refactoring of the
suppression printing machinery:
* in the core-tool iface, change "print_extra_suppression_info" (which
prints any auxiliary info) to "get_extra_suppression_info", which
parks the text in a caller-supplied buffer. Adjust tools to match.
* VG_(apply_StackTrace): accept a void* argument, which is passed to
each invokation of the functional parameter (a poor man's closure
implementation).
* move PRINTF_CHECK into put_tool_basics.h, where it should have been
all along
* move private printf-into-an-XArray-of-character functions from
m_debuginfo into m_xarray, and make them public
* gen_suppression itself: use all the above changes. Basically we
always generate the plaintext version into an XArray. In text mode
that's just printed. In XML mode, we print the XMLery as before,
but the plaintext version is dumped into a CDATA block too.
* update the Protocol 4 specification to match all this.
This still isn't 100% right in the sense that the CDATA block data
needs to be split across multiple blocks if it should ever contain the
CDATA end mark "]]>". The Protocol 4 spec has this right even though
the implementation currently doesn't.
Fixes #191189.
Modified:
trunk/coregrind/m_debuginfo/debuginfo.c
trunk/coregrind/m_errormgr.c
trunk/coregrind/m_stacktrace.c
trunk/coregrind/m_tooliface.c
trunk/coregrind/m_xarray.c
trunk/coregrind/pub_core_tooliface.h
trunk/docs/internals/xml-output-protocol4.txt
trunk/drd/drd_error.c
trunk/exp-ptrcheck/pc_common.c
trunk/exp-ptrcheck/pc_common.h
trunk/exp-ptrcheck/pc_main.c
trunk/helgrind/hg_errors.c
trunk/helgrind/hg_errors.h
trunk/helgrind/hg_main.c
trunk/include/pub_tool_basics.h
trunk/include/pub_tool_libcprint.h
trunk/include/pub_tool_stacktrace.h
trunk/include/pub_tool_tooliface.h
trunk/include/pub_tool_xarray.h
trunk/memcheck/mc_errors.c
trunk/memcheck/mc_include.h
trunk/memcheck/mc_main.c
Modified: trunk/coregrind/m_debuginfo/debuginfo.c
===================================================================
--- trunk/coregrind/m_debuginfo/debuginfo.c 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/coregrind/m_debuginfo/debuginfo.c 2009-08-15 22:41:51 UTC (rev 10822)
@@ -2269,28 +2269,18 @@
/*--- ---*/
/*--------------------------------------------------------------*/
-/* Implement a "p2XA" function ("printf-to-XA"), which printfs into an
- XArray of HChar, adding stuff at the end. This is very convenient
- for concocting result strings in format_message(). Note that the
- resulting string is NOT zero-terminated.
+/* Try to make p2XA(dst, fmt, args..) turn into
+ VG_(xaprintf_no_f_c)(dst, fmt, args) without having to resort to
+ vararg macros. As usual with everything to do with varargs, it's
+ an ugly hack.
- Unfortunately no format check on p2XA, since we need to use %t
- for XML escaped-string output, and gcc complains about that.
+ //#define p2XA(dstxa, format, args...)
+ // VG_(xaprintf_no_f_c)(dstxa, format, ##args)
*/
-static void add_char_to_XA ( HChar c, void* opaque )
-{
- XArray* dst = (XArray*)opaque;
- (void) VG_(addBytesToXA)( dst, &c, 1 );
-}
-static void p2XA ( XArray* dst, const HChar* format, ... )
-{
- va_list vargs;
- va_start(vargs, format);
- VG_(vcbprintf)( add_char_to_XA, (void*)dst, format, vargs );
- va_end(vargs);
-}
+#define p2XA VG_(xaprintf_no_f_c)
-/* Add a zero-terminating byte to DST. */
+/* Add a zero-terminating byte to DST, which must be an XArray* of
+ HChar. */
static void zterm_XA ( XArray* dst )
{
HChar zero = 0;
Modified: trunk/coregrind/m_errormgr.c
===================================================================
--- trunk/coregrind/m_errormgr.c 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/coregrind/m_errormgr.c 2009-08-15 22:41:51 UTC (rev 10822)
@@ -46,6 +46,7 @@
#include "pub_core_stacktrace.h"
#include "pub_core_tooliface.h"
#include "pub_core_translate.h" // for VG_(translate)()
+#include "pub_core_xarray.h" // VG_(xaprintf) et al
/*------------------------------------------------------------*/
/*--- Globals ---*/
@@ -295,78 +296,133 @@
}
-/* Helper function for suppression generation: print a single line of
- a suppression pseudo-stack-trace, either in XML or text mode.
+/* Helper functions for suppression generation: print a single line of
+ a suppression pseudo-stack-trace, either in XML or text mode. It's
+ important that the behaviour of these two functions exactly
+ corresponds.
*/
#define ERRTXT_LEN 4096
-static void printSuppForIp(UInt n, Addr ip)
+static void printSuppForIp_XML(UInt n, Addr ip, void* uu_opaque)
{
static UChar buf[ERRTXT_LEN];
+ if ( VG_(get_fnname_no_cxx_demangle) (ip, buf, ERRTXT_LEN) ) {
+ VG_(printf_xml_no_f_c)(" <sframe> <fun>%t</fun> </sframe>\n", buf);
+ } else
+ if ( VG_(get_objname)(ip, buf, ERRTXT_LEN) ) {
+ VG_(printf_xml_no_f_c)(" <sframe> <obj>%t</obj> </sframe>\n", buf);
+ } else {
+ VG_(printf_xml_no_f_c)(" <sframe> <obj>*</obj> </sframe>\n");
+ }
+}
+static void printSuppForIp_nonXML(UInt n, Addr ip, void* textV)
+{
+ static UChar buf[ERRTXT_LEN];
+ XArray* /* of HChar */ text = (XArray*)textV;
if ( VG_(get_fnname_no_cxx_demangle) (ip, buf, ERRTXT_LEN) ) {
- if (VG_(clo_xml))
- VG_(printf_xml_no_f_c)(" <sframe> <fun>%t</fun> </sframe>\n", buf);
- else
- VG_(printf)(" fun:%s\n", buf);
-
- } else if ( VG_(get_objname)(ip, buf, ERRTXT_LEN) ) {
- if (VG_(clo_xml))
- VG_(printf_xml_no_f_c)(" <sframe> <obj>%t</obj> </sframe>\n", buf);
- else
- VG_(printf)(" obj:%s\n", buf);
-
+ VG_(xaprintf)(text, " fun:%s\n", buf);
+ } else
+ if ( VG_(get_objname)(ip, buf, ERRTXT_LEN) ) {
+ VG_(xaprintf)(text, " obj:%s\n", buf);
} else {
- if (VG_(clo_xml))
- VG_(printf_xml_no_f_c)(" <sframe> <obj>*</obj> </sframe>\n");
- else
- VG_(printf)(" obj:*\n");
+ VG_(xaprintf)(text, " obj:*\n");
}
}
-
/* Generate a suppression for an error, either in text or XML mode.
*/
static void gen_suppression(Error* err)
{
- ExeContext* ec = VG_(get_error_where)(err);
+ Char xtra[256]; /* assumed big enough (is overrun-safe) */
+ Bool anyXtra;
+ Char* name;
+ ExeContext* ec;
+ XArray* /* HChar */ text;
- //(example code, see comment on CoreSuppKind above)
- if (0) {
- //if (0) ThreadErr == err->ekind) {
- // VG_(printf)("{\n");
- // VG_(printf)(" <insert a suppression name here>\n");
- // VG_(printf)(" core:Thread\n");
+ const HChar* dummy_name = "insert_a_suppression_name_here";
- } else {
- Char* name = VG_TDICT_CALL(tool_get_error_name, err);
- if (NULL == name) {
- VG_(umsg)("(%s does not allow error to be suppressed)\n",
- VG_(details).name);
- return;
- }
- if (VG_(clo_xml)) {
- VG_(printf_xml)(" <suppression>\n");
- VG_(printf_xml)(" <sname>insert_a_suppression_name_here</sname>\n");
- VG_(printf_xml)(" <skind>%s:%s</skind>\n", VG_(details).name, name);
- } else {
- VG_(printf)("{\n");
- VG_(printf)(" <insert a suppression name here>\n");
- VG_(printf)(" %s:%s\n", VG_(details).name, name);
- }
- VG_TDICT_CALL(tool_print_extra_suppression_info, err);
+ vg_assert(err);
+
+ /* In XML mode, we also need to print the plain text version of the
+ suppresion in a CDATA section. What that really means is, we
+ need to generate the plaintext version both in XML and text
+ mode. So generate it into TEXT. */
+ text = VG_(newXA)( VG_(malloc), "errormgr.gen_suppression.1",
+ VG_(free), sizeof(HChar) );
+ vg_assert(text);
+
+ ec = VG_(get_error_where)(err);
+ vg_assert(ec);
+
+ name = VG_TDICT_CALL(tool_get_error_name, err);
+ if (NULL == name) {
+ VG_(umsg)("(%s does not allow error to be suppressed)\n",
+ VG_(details).name);
+ return;
}
+ /* Ok. Generate the plain text version into TEXT. */
+ VG_(xaprintf)(text, "{\n");
+ VG_(xaprintf)(text, " <%s>\n", dummy_name);
+ VG_(xaprintf)(text, " %s:%s\n", VG_(details).name, name);
+
+ VG_(memset)(xtra, 0, sizeof(xtra));
+ anyXtra = VG_TDICT_CALL(tool_get_extra_suppression_info,
+ err, xtra, sizeof(xtra));
+ vg_assert(xtra[sizeof(xtra)-1] == 0);
+
+ if (anyXtra)
+ VG_(xaprintf)(text, " %s\n", xtra);
+
// Print stack trace elements
- VG_(apply_StackTrace)(printSuppForIp,
+ VG_(apply_StackTrace)(printSuppForIp_nonXML,
+ text,
VG_(get_ExeContext_StackTrace)(ec),
VG_(get_ExeContext_n_ips)(ec));
- if (VG_(clo_xml)) {
+ VG_(xaprintf)(text, "}\n");
+ // zero terminate
+ VG_(xaprintf)(text, "%c", (HChar)0 );
+ // VG_(printf) of text
+
+ /* And now display it. */
+ if (! VG_(clo_xml) ) {
+
+ // the simple case
+ VG_(printf)("%s", (HChar*) VG_(indexXA)(text, 0) );
+
+ } else {
+
+ /* Now we have to print the XML directly. No need to go to the
+ effort of stuffing it in an XArray, since we won't need it
+ again. */
+ VG_(printf_xml)(" <suppression>\n");
+ VG_(printf_xml)(" <sname>%s</sname>\n", dummy_name);
+ VG_(printf_xml_no_f_c)(
+ " <skind>%t:%t</skind>\n", VG_(details).name, name);
+ if (anyXtra)
+ VG_(printf_xml_no_f_c)(" <skaux>%t</skaux>\n", xtra);
+
+ // Print stack trace elements
+ VG_(apply_StackTrace)(printSuppForIp_XML,
+ NULL,
+ VG_(get_ExeContext_StackTrace)(ec),
+ VG_(get_ExeContext_n_ips)(ec));
+
+ // And now the cdata bit
+ // XXX FIXME! properly handle the case where the raw text
+ // itself contains "]]>", as specified in Protocol 4.
+ VG_(printf_xml)(" <rawtext>\n");
+ VG_(printf_xml)("<![CDATA[\n");
+ VG_(printf)("%s", (HChar*) VG_(indexXA)(text, 0) );
+ VG_(printf_xml)("]]>\n");
+ VG_(printf_xml)(" </rawtext>\n");
VG_(printf_xml)(" </suppression>\n");
- } else {
- VG_(printf)("}\n");
+
}
+
+ VG_(deleteXA)(text);
}
Modified: trunk/coregrind/m_stacktrace.c
===================================================================
--- trunk/coregrind/m_stacktrace.c 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/coregrind/m_stacktrace.c 2009-08-15 22:41:51 UTC (rev 10822)
@@ -514,7 +514,7 @@
stack_highest_word);
}
-static void printIpDesc(UInt n, Addr ip)
+static void printIpDesc(UInt n, Addr ip, void* uu_opaque)
{
#define BUF_LEN 4096
@@ -537,7 +537,7 @@
if (VG_(clo_xml))
VG_(printf_xml)(" <stack>\n");
- VG_(apply_StackTrace)( printIpDesc, ips, n_ips );
+ VG_(apply_StackTrace)( printIpDesc, NULL, ips, n_ips );
if (VG_(clo_xml))
VG_(printf_xml)(" </stack>\n");
@@ -555,8 +555,11 @@
VG_(pp_StackTrace)(ips, n_ips);
}
-void VG_(apply_StackTrace)( void(*action)(UInt n, Addr ip),
- StackTrace ips, UInt n_ips )
+void VG_(apply_StackTrace)(
+ void(*action)(UInt n, Addr ip, void* opaque),
+ void* opaque,
+ StackTrace ips, UInt n_ips
+ )
{
Bool main_done = False;
Int i = 0;
@@ -576,7 +579,7 @@
}
// Act on the ip
- action(i, ip);
+ action(i, ip, opaque);
i++;
} while (i < n_ips && !main_done);
Modified: trunk/coregrind/m_tooliface.c
===================================================================
--- trunk/coregrind/m_tooliface.c 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/coregrind/m_tooliface.c 2009-08-15 22:41:51 UTC (rev 10822)
@@ -233,7 +233,7 @@
Bool (*read_extra) (Int, Char**, SizeT*, Supp*),
Bool (*matches) (Error*, Supp*),
Char* (*name) (Error*),
- void (*print_extra)(Error*)
+ Bool (*get_xtra_si)(Error*,/*OUT*/Char*,Int)
)
{
VG_(needs).tool_errors = True;
@@ -246,7 +246,7 @@
VG_(tdict).tool_read_extra_suppression_info = read_extra;
VG_(tdict).tool_error_matches_suppression = matches;
VG_(tdict).tool_get_error_name = name;
- VG_(tdict).tool_print_extra_suppression_info = print_extra;
+ VG_(tdict).tool_get_extra_suppression_info = get_xtra_si;
}
void VG_(needs_command_line_options)(
Modified: trunk/coregrind/m_xarray.c
===================================================================
--- trunk/coregrind/m_xarray.c 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/coregrind/m_xarray.c 2009-08-15 22:41:51 UTC (rev 10822)
@@ -306,7 +306,32 @@
xa->usedsizeE -= n;
}
+/* --------- Printeffery --------- */
+static void add_char_to_XA ( HChar c, void* opaque )
+{
+ XArray* dst = (XArray*)opaque;
+ (void) VG_(addBytesToXA)( dst, &c, 1 );
+}
+
+void VG_(xaprintf)( XArray* dst, const HChar* format, ... )
+{
+ va_list vargs;
+ va_start(vargs, format);
+ VG_(vcbprintf)( add_char_to_XA, (void*)dst, format, vargs );
+ va_end(vargs);
+}
+
+/* and again .. */
+void VG_(xaprintf_no_f_c)( XArray* dst, const HChar* format, ... )
+{
+ va_list vargs;
+ va_start(vargs, format);
+ VG_(vcbprintf)( add_char_to_XA, (void*)dst, format, vargs );
+ va_end(vargs);
+}
+
+
/*--------------------------------------------------------------------*/
/*--- end m_xarray.c ---*/
/*--------------------------------------------------------------------*/
Modified: trunk/coregrind/pub_core_tooliface.h
===================================================================
--- trunk/coregrind/pub_core_tooliface.h 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/coregrind/pub_core_tooliface.h 2009-08-15 22:41:51 UTC (rev 10822)
@@ -125,7 +125,7 @@
Bool (*tool_read_extra_suppression_info) (Int, Char**, SizeT*, Supp*);
Bool (*tool_error_matches_suppression) (Error*, Supp*);
Char* (*tool_get_error_name) (Error*);
- void (*tool_print_extra_suppression_info)(Error*);
+ Bool (*tool_get_extra_suppression_info) (Error*,/*OUT*/Char*,Int);
// VG_(needs).superblock_discards
void (*tool_discard_superblock_info)(Addr64, VexGuestExtents);
Modified: trunk/docs/internals/xml-output-protocol4.txt
===================================================================
--- trunk/docs/internals/xml-output-protocol4.txt 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/docs/internals/xml-output-protocol4.txt 2009-08-15 22:41:51 UTC (rev 10822)
@@ -298,15 +298,27 @@
-----------
These are optionally emitted as part of ERRORs, and specify the
suppression that would be needed to suppress the containing error.
+For convenience, the suppression is presented twice, once in
+a structured nicely wrapped up in tags, and once as raw text
+suitable for direct copying and pasting into a suppressions file.
<suppression>
<sname>TEXT</sname> name of the suppression
<skind>TEXT</skind> kind, eg "Memcheck:Param"
<skaux>TEXT</skaux> (optional) aux kind, eg "write(buf)"
SFRAME (one or more) frames
+ <rawtext> CDATAS </rawtext>
</suppression>
+where CDATAS is a sequence of one or more <![CDATA[ .. ]]> blocks
+holding the raw text. Unfortunately, CDATA provides no way to escape
+the ending marker "]]>", which means that if the raw data contains
+such a sequence, it has to be split between two CDATA blocks, one
+ending with data "]]" and the other beginning with data "<". This is
+why the spec calls for one or more CDATA blocks rather than exactly
+one.
+
SFRAME
------
Either
Modified: trunk/drd/drd_error.c
===================================================================
--- trunk/drd/drd_error.c 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/drd/drd_error.c 2009-08-15 22:41:51 UTC (rev 10822)
@@ -528,14 +528,18 @@
}
/**
- * Print extra suppression information.
+ * Return extra suppression information.
*
* Invoked while printing a suppression pattern because the user
* specified --gen-suppressions=yes or all on the command line. DRD does not
* define any 'extra' suppression information.
*/
-static void drd_print_extra_suppression_info(Error* e)
-{ }
+static
+Bool drd_get_extra_suppression_info(Error* e,
+ /*OUT*/Char* buf, Int nBuf)
+{
+ return False;
+}
/** Tell the Valgrind core about DRD's error handlers. */
void DRD_(register_error_handlers)(void)
@@ -549,5 +553,5 @@
drd_read_extra_suppression_info,
drd_error_matches_suppression,
drd_get_error_name,
- drd_print_extra_suppression_info);
+ drd_get_extra_suppression_info);
}
Modified: trunk/exp-ptrcheck/pc_common.c
===================================================================
--- trunk/exp-ptrcheck/pc_common.c 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/exp-ptrcheck/pc_common.c 2009-08-15 22:41:51 UTC (rev 10822)
@@ -775,16 +775,23 @@
}
}
-void pc_print_extra_suppression_info ( Error* err )
+Bool pc_get_extra_suppression_info ( Error* err,
+ /*OUT*/Char* buf, Int nBuf )
{
- if (XE_SysParam == VG_(get_error_kind)(err)) {
- VG_(printf)(" %s\n", VG_(get_error_string)(err));
+ ErrorKind ekind = VG_(get_error_kind )(err);
+ tl_assert(buf);
+ tl_assert(nBuf >= 16); // stay sane
+ if (XE_SysParam == ekind) {
+ Char* errstr = VG_(get_error_string)(err);
+ tl_assert(errstr);
+ VG_(snprintf)(buf, nBuf-1, "%s", errstr);
+ return True;
+ } else {
+ return False;
}
}
-
-
/*--------------------------------------------------------------------*/
/*--- end pc_common.c ---*/
/*--------------------------------------------------------------------*/
Modified: trunk/exp-ptrcheck/pc_common.h
===================================================================
--- trunk/exp-ptrcheck/pc_common.h 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/exp-ptrcheck/pc_common.h 2009-08-15 22:41:51 UTC (rev 10822)
@@ -56,7 +56,8 @@
SizeT* nBufp, Supp* su );
Bool pc_error_matches_suppression (Error* err, Supp* su);
Char* pc_get_error_name ( Error* err );
-void pc_print_extra_suppression_info ( Error* err );
+Bool pc_get_extra_suppression_info ( Error* err,
+ /*OUT*/Char* buf, Int nBuf );
extern Bool h_clo_partial_loads_ok;
/* extern Bool h_clo_lossage_check; */
Modified: trunk/exp-ptrcheck/pc_main.c
===================================================================
--- trunk/exp-ptrcheck/pc_main.c 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/exp-ptrcheck/pc_main.c 2009-08-15 22:41:51 UTC (rev 10822)
@@ -190,7 +190,7 @@
pc_read_extra_suppression_info,
pc_error_matches_suppression,
pc_get_error_name,
- pc_print_extra_suppression_info);
+ pc_get_extra_suppression_info);
VG_(needs_xml_output) ();
Modified: trunk/helgrind/hg_errors.c
===================================================================
--- trunk/helgrind/hg_errors.c 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/helgrind/hg_errors.c 2009-08-15 22:41:51 UTC (rev 10822)
@@ -1068,9 +1068,11 @@
}
}
-void HG_(print_extra_suppression_info) ( Error* err )
+Bool HG_(get_extra_suppression_info) ( Error* err,
+ /*OUT*/Char* buf, Int nBuf )
{
/* Do nothing */
+ return False;
}
Modified: trunk/helgrind/hg_errors.h
===================================================================
--- trunk/helgrind/hg_errors.h 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/helgrind/hg_errors.h 2009-08-15 22:41:51 UTC (rev 10822)
@@ -44,7 +44,8 @@
Supp* su );
Bool HG_(error_matches_suppression) ( Error* err, Supp* su );
Char* HG_(get_error_name) ( Error* err );
-void HG_(print_extra_suppression_info) ( Error* err );
+Bool HG_(get_extra_suppression_info) ( Error* err,
+ /*OUT*/Char* buf, Int nBuf );
/* Functions for recording various kinds of errors. */
void HG_(record_error_Race) ( Thread* thr,
Modified: trunk/helgrind/hg_main.c
===================================================================
--- trunk/helgrind/hg_main.c 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/helgrind/hg_main.c 2009-08-15 22:41:51 UTC (rev 10822)
@@ -4601,7 +4601,7 @@
HG_(read_extra_suppression_info),
HG_(error_matches_suppression),
HG_(get_error_name),
- HG_(print_extra_suppression_info));
+ HG_(get_extra_suppression_info));
VG_(needs_xml_output) ();
Modified: trunk/include/pub_tool_basics.h
===================================================================
--- trunk/include/pub_tool_basics.h 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/include/pub_tool_basics.h 2009-08-15 22:41:51 UTC (rev 10822)
@@ -323,7 +323,17 @@
# define UNLIKELY(x) (x)
#endif
+// printf format string checking for gcc.
+// This feature has been supported since at least gcc version 2.95.
+// For more information about the format attribute, see
+// http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/Function-Attributes.html.
+#if defined(__GNUC__)
+#define PRINTF_CHECK(x, y) __attribute__((format(__printf__, x, y)))
+#else
+#define PRINTF_CHECK(x, y)
+#endif
+
#endif /* __PUB_TOOL_BASICS_H */
/*--------------------------------------------------------------------*/
Modified: trunk/include/pub_tool_libcprint.h
===================================================================
--- trunk/include/pub_tool_libcprint.h 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/include/pub_tool_libcprint.h 2009-08-15 22:41:51 UTC (rev 10822)
@@ -31,20 +31,6 @@
#ifndef __PUB_TOOL_LIBCPRINT_H
#define __PUB_TOOL_LIBCPRINT_H
-
-/* Enable compile-time format string checking by gcc.
- This feature is supported since at least gcc version 2.95.
- For more information about the format attribute, see also
- http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/Function-Attributes.html.
- */
-
-#if defined(__GNUC__)
-#define PRINTF_CHECK(x, y) __attribute__((format(__printf__, x, y)))
-#else
-#define PRINTF_CHECK(x, y)
-#endif
-
-
/* ---------------------------------------------------------------------
Basic printing
------------------------------------------------------------------ */
Modified: trunk/include/pub_tool_stacktrace.h
===================================================================
--- trunk/include/pub_tool_stacktrace.h 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/include/pub_tool_stacktrace.h 2009-08-15 22:41:51 UTC (rev 10822)
@@ -62,11 +62,16 @@
/*OUT*/StackTrace fps,
Word first_ip_delta );
-// Apply a function to every element in the StackTrace. The parameter 'n'
-// gives the index of the passed ip. Doesn't go below main() unless
-// --show-below-main=yes is set.
-extern void VG_(apply_StackTrace)( void(*action)(UInt n, Addr ip),
- StackTrace ips, UInt n_ips );
+// Apply a function to every element in the StackTrace. The parameter
+// 'n' gives the index of the passed ip. 'opaque' is an arbitrary
+// pointer provided to each invokation of 'action' (a poor man's
+// closure). Doesn't go below main() unless --show-below-main=yes is
+// set.
+extern void VG_(apply_StackTrace)(
+ void(*action)(UInt n, Addr ip, void* opaque),
+ void* opaque,
+ StackTrace ips, UInt n_ips
+ );
// Print a StackTrace.
extern void VG_(pp_StackTrace) ( StackTrace ips, UInt n_ips );
Modified: trunk/include/pub_tool_tooliface.h
===================================================================
--- trunk/include/pub_tool_tooliface.h 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/include/pub_tool_tooliface.h 2009-08-15 22:41:51 UTC (rev 10822)
@@ -332,10 +332,17 @@
// VG_(tdict).tool_recognised_suppression().
Char* (*get_error_name)(Error* err),
- // This should print any extra info for the error, for --gen-suppressions,
- // including the newline. This is the inverse of
+ // This should print into buf[0..nBuf-1] any extra info for the
+ // error, for --gen-suppressions, but not including any leading
+ // spaces nor a trailing newline. When called, buf[0 .. nBuf-1]
+ // will be zero filled, and it is expected and checked that the
+ // last element is still zero after the call. In other words the
+ // tool may not overrun the buffer, and this is checked for. If
+ // there is any info printed in the buffer, return True, otherwise
+ // do nothing, and return False. This function is the inverse of
// VG_(tdict).tool_read_extra_suppression_info().
- void (*print_extra_suppression_info)(Error* err)
+ Bool (*print_extra_suppression_info)(Error* err,
+ /*OUT*/Char* buf, Int nBuf)
);
/* Is information kept by the tool about specific instructions or
Modified: trunk/include/pub_tool_xarray.h
===================================================================
--- trunk/include/pub_tool_xarray.h 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/include/pub_tool_xarray.h 2009-08-15 22:41:51 UTC (rev 10822)
@@ -125,6 +125,18 @@
is NULL, in which case the parent's cost-center is used. */
extern XArray* VG_(cloneXA)( HChar* cc, XArray* xa );
+/* Convenience function: printf into an XArray of HChar, adding stuff
+ at the end. This is very convenient for concocting arbitrary
+ length printf output in an XArray. Note that the resulting string
+ is NOT zero-terminated. Versions are provided with and without a
+ format check, the latter so the unknown (to gcc) "%t" can be used
+ without gcc complaining. */
+extern void VG_(xaprintf)( XArray* dst, const HChar* format, ... )
+ PRINTF_CHECK(2, 3);
+
+extern void VG_(xaprintf_no_f_c)
+ ( XArray* dst, const HChar* format, ... );
+
#endif // __PUB_TOOL_XARRAY_H
/*--------------------------------------------------------------------*/
Modified: trunk/memcheck/mc_errors.c
===================================================================
--- trunk/memcheck/mc_errors.c 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/memcheck/mc_errors.c 2009-08-15 22:41:51 UTC (rev 10822)
@@ -1499,11 +1499,19 @@
}
}
-void MC_(print_extra_suppression_info) ( Error* err )
+Bool MC_(get_extra_suppression_info) ( Error* err,
+ /*OUT*/Char* buf, Int nBuf )
{
ErrorKind ekind = VG_(get_error_kind )(err);
+ tl_assert(buf);
+ tl_assert(nBuf >= 16); // stay sane
if (Err_RegParam == ekind || Err_MemParam == ekind) {
- VG_(printf)(" %s\n", VG_(get_error_string)(err));
+ Char* errstr = VG_(get_error_string)(err);
+ tl_assert(errstr);
+ VG_(snprintf)(buf, nBuf-1, "%s", errstr);
+ return True;
+ } else {
+ return False;
}
}
Modified: trunk/memcheck/mc_include.h
===================================================================
--- trunk/memcheck/mc_include.h 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/memcheck/mc_include.h 2009-08-15 22:41:51 UTC (rev 10822)
@@ -320,7 +320,8 @@
Bool MC_(error_matches_suppression) ( Error* err, Supp* su );
-void MC_(print_extra_suppression_info) ( Error* err );
+Bool MC_(get_extra_suppression_info) ( Error* err,
+ /*OUT*/Char* buf, Int nBuf );
Char* MC_(get_error_name) ( Error* err );
Modified: trunk/memcheck/mc_main.c
===================================================================
--- trunk/memcheck/mc_main.c 2009-08-15 21:50:44 UTC (rev 10821)
+++ trunk/memcheck/mc_main.c 2009-08-15 22:41:51 UTC (rev 10822)
@@ -5715,7 +5715,7 @@
MC_(read_extra_suppression_info),
MC_(error_matches_suppression),
MC_(get_error_name),
- MC_(print_extra_suppression_info));
+ MC_(get_extra_suppression_info));
VG_(needs_libc_freeres) ();
VG_(needs_command_line_options)(mc_process_cmd_line_options,
mc_print_usage,
|
|
From: <sv...@va...> - 2009-08-15 21:50:58
|
Author: njn Date: 2009-08-15 22:50:44 +0100 (Sat, 15 Aug 2009) New Revision: 10821 Log: Minor update. Modified: trunk/docs/internals/release-HOWTO.txt Modified: trunk/docs/internals/release-HOWTO.txt =================================================================== --- trunk/docs/internals/release-HOWTO.txt 2009-08-15 13:31:41 UTC (rev 10820) +++ trunk/docs/internals/release-HOWTO.txt 2009-08-15 21:50:44 UTC (rev 10821) @@ -91,6 +91,9 @@ build works whereas a from-the-tarball one doesn't, usually due to some trivial installation problem. +- Also check the HTML and print docs look sane (eg. links work). And the + man pages, esp. that there are no broken references (look for "???"). + - Announce the release: - Email valgrind-users and valgrind-developers (but not valgrind-announce). - Make clear it's a release candidate. |
|
From: <sv...@va...> - 2009-08-15 13:51:23
|
Author: bart
Date: 2009-08-15 14:31:41 +0100 (Sat, 15 Aug 2009)
New Revision: 10820
Log:
Minor manual update.
Modified:
trunk/drd/docs/drd-manual.xml
Modified: trunk/drd/docs/drd-manual.xml
===================================================================
--- trunk/drd/docs/drd-manual.xml 2009-08-15 10:50:35 UTC (rev 10819)
+++ trunk/drd/docs/drd-manual.xml 2009-08-15 13:31:41 UTC (rev 10820)
@@ -853,6 +853,12 @@
reader-writer synchronization objects that were locked by that thread.
</para>
</listitem>
+ <listitem>
+ <para>
+ Passing an invalid thread ID to <function>pthread_join</function>
+ or <function>pthread_cancel</function>.
+ </para>
+ </listitem>
</itemizedlist>
</para>
@@ -1087,7 +1093,12 @@
<para>
For an example of how to use the annotations for user-defined reader-writer
synchronization objects, see
-also <literal>drd/tests/annotate_rwlock.c</literal>.
+also the source file <literal>drd/tests/annotate_rwlock.c</literal> in the
+Valgrind source archive. And an example of how to
+use the <literal>ANNOTATE_HAPPENS_BEFORE</literal> and
+the <literal>ANNOTATE_HAPPENS_AFTER</literal> annotations can be found
+in the source code of the <ulink url="http://code.google.com/chromium/">Chromium</ulink>
+web browser.
</para>
<para>
|
|
From: Ashley P. <as...@pi...> - 2009-08-15 12:23:26
|
On Sat, 2009-08-15 at 21:52 +1000, Nicholas Nethercote wrote:
> On Sat, Aug 15, 2009 at 7:42 PM, Ashley Pittman<as...@pi...> wrote:
> >
> > Did you have any thoughts on the other points I mentioned, either
> > getting both sets of output and ideally a way of getting a qualifier in
> > over the --{log,file}-socket options.
>
> I don't know much about the qualifier issue. As for both sets of
> output, it's conceptually nice but does it have a practical use? (I
> think it would invalidate Julian's use case of looking in the non-XML
> text output to look for critical errors.) Having said that, the
> message printing code currently is ugly, there's lots of ad hoc tests
> all over the place to decide whether to print each message as text or
> XML or both, it would be great to have a simpler and more consistent
> story for all that.
I work in HPC (High performance computing) where applications are
written in MPI and run in parallel. Ideally I'd like to start a
valgrind-listener type process, pass the socket id to multiple valgrind
instances simultaneously and then report errors as the sum of the
instances rather than on a per instance basis.
As you say this does make Julian's use case invalid which is unfortunate
as it's a very useful one, perhaps it would be possible to print the
pre-amble and qualifiers only if using --log-socket and then test for
further output as a sign of critical error?
> I very much like the idea of testing the XML by converting it back to
> text and comparing with the text output, but it would be too much to
> do it for every regtest, I think. Is there a simple GPL-licensed XML
> parser that could be the starting point for this, preferably in C or
> Perl? Presumably.
Yes, I've written one in perl. It was to solve the problem above, at
the time I used files with a qualifier and then after the job had
finished loaded all the xml files. I would then re-write the "standard"
valgrind output prefixing each error with a "qualifier prefix" which is
the standard way of specifying processes within HPC. You'd end up with
an extra line for each error, as shown below.
==27271== [0,2-15]
==27271== Use of uninitialised value of size 8
==27271== at 0x187FCEC6: (within /usr/lib/libGLcore.so.180.44)
==27271== by 0x41FF6BF: (within /usr/lib/libGL.so.180.44)
==27271== by 0x41FF6BF: (within /usr/lib/libGL.so.180.44)
It order to test the xml parser and subsequent output code you could run
the program with only one input file without a prefix and it would
simply convert the output as best it could, I even hooked this into the
test suite so the regtests did this automatically and then tested the
resultant output in the normal way, by and large this worked well with a
few specific cases where it didn't.
That was a couple of years ago now, it's written in perl, GPL but will
probably need updating. It uses XML::Simple which is easy to code but
unfortunately quite slow with large XML files, I did make a stab at
re-writing it to use XML::Parser but this was taking more time than I
had available at the time.
Ashley,
--
Ashley Pittman, Bath, UK.
Padb - A parallel job inspection tool for cluster computing
http://padb.pittman.org.uk
|
|
From: Nicholas N. <n.n...@gm...> - 2009-08-15 11:52:19
|
On Sat, Aug 15, 2009 at 7:42 PM, Ashley Pittman<as...@pi...> wrote:
>
> Did you have any thoughts on the other points I mentioned, either
> getting both sets of output and ideally a way of getting a qualifier in
> over the --{log,file}-socket options.
I don't know much about the qualifier issue. As for both sets of
output, it's conceptually nice but does it have a practical use? (I
think it would invalidate Julian's use case of looking in the non-XML
text output to look for critical errors.) Having said that, the
message printing code currently is ugly, there's lots of ad hoc tests
all over the place to decide whether to print each message as text or
XML or both, it would be great to have a simpler and more consistent
story for all that.
I very much like the idea of testing the XML by converting it back to
text and comparing with the text output, but it would be too much to
do it for every regtest, I think. Is there a simple GPL-licensed XML
parser that could be the starting point for this, preferably in C or
Perl? Presumably.
Nick
|
|
From: <sv...@va...> - 2009-08-15 10:50:49
|
Author: bart
Date: 2009-08-15 11:50:35 +0100 (Sat, 15 Aug 2009)
New Revision: 10819
Log:
- Made the ANNOTATE_RWLOCK_*() macros binary compatible with Helgrind.
- Added two additional regression tests.
Added:
trunk/drd/tests/annotate_publish_hg.c
trunk/drd/tests/annotate_publish_hg.stderr.exp
trunk/drd/tests/annotate_publish_hg.vgtest
trunk/drd/tests/annotate_rwlock_hg.stderr.exp
trunk/drd/tests/annotate_rwlock_hg.vgtest
trunk/drd/tests/compare_error_count_with
Modified:
trunk/drd/drd.h
trunk/drd/drd_clientreq.c
trunk/drd/drd_error.c
trunk/drd/drd_error.h
trunk/drd/tests/
trunk/drd/tests/Makefile.am
trunk/drd/tests/rwlock_type_checking.stderr.exp
Modified: trunk/drd/drd.h
===================================================================
--- trunk/drd/drd.h 2009-08-14 22:34:30 UTC (rev 10818)
+++ trunk/drd/drd.h 2009-08-15 10:50:35 UTC (rev 10819)
@@ -158,11 +158,11 @@
/** Tell DRD that a reader-writer lock object has been initialized. */
#define ANNOTATE_RWLOCK_CREATE(rwlock) \
- DRDCL_(annotate_rwlock)(rwlock, 0, 0)
+ DRDCL_(annotate_rwlock_create)(rwlock)
/** Tell DRD that a reader-writer lock object has been destroyed. */
#define ANNOTATE_RWLOCK_DESTROY(rwlock) \
- DRDCL_(annotate_rwlock)(rwlock, 1, 0)
+ DRDCL_(annotate_rwlock_destroy)(rwlock)
/**
* Tell DRD that a reader-writer lock has been acquired. is_w == 1 means that
@@ -170,7 +170,7 @@
* obtained.
*/
#define ANNOTATE_RWLOCK_ACQUIRED(rwlock, is_w) \
- DRDCL_(annotate_rwlock)(rwlock, 2, is_w)
+ DRDCL_(annotate_rwlock_acquired)(rwlock, is_w)
/**
* Tell DRD that a reader lock has been acquired on a reader-writer
@@ -190,7 +190,7 @@
* is about to be released.
*/
#define ANNOTATE_RWLOCK_RELEASED(rwlock, is_w) \
- DRDCL_(annotate_rwlock)(rwlock, 3, is_w)
+ DRDCL_(annotate_rwlock_released)(rwlock, is_w)
/**
* Tell DRD that a reader lock is about to be released.
@@ -320,6 +320,32 @@
VG_USERREQ__DRD_SET_THREAD_NAME,
/* args: null-terminated character string. */
+ /* Tell DRD that a user-defined reader-writer synchronization object
+ * has been created. */
+ VG_USERREQ__DRD_ANNOTATE_RWLOCK_CREATE
+ = VG_USERREQ_TOOL_BASE('H','G') + 256 + 14,
+ /* args: Addr. */
+ /* Tell DRD that a user-defined reader-writer synchronization object
+ * is about to be destroyed. */
+ VG_USERREQ__DRD_ANNOTATE_RWLOCK_DESTROY
+ = VG_USERREQ_TOOL_BASE('H','G') + 256 + 15,
+ /* args: Addr. */
+ /* Tell DRD that a lock on a user-defined reader-writer synchronization
+ * object has been acquired. */
+ VG_USERREQ__DRD_ANNOTATE_RWLOCK_ACQUIRED
+ = VG_USERREQ_TOOL_BASE('H','G') + 256 + 17,
+ /* args: Addr, Int is_rw. */
+ /* Tell DRD that a lock on a user-defined reader-writer synchronization
+ * object is about to be released. */
+ VG_USERREQ__DRD_ANNOTATE_RWLOCK_RELEASED
+ = VG_USERREQ_TOOL_BASE('H','G') + 256 + 18,
+ /* args: Addr, Int is_rw. */
+
+ /* Tell DRD that an annotation has not yet been implemented. */
+ VG_USERREQ__DRD_ANNOTATION_UNIMP
+ = VG_USERREQ_TOOL_BASE('H','G') + 256 + 32,
+ /* args: Char*. */
+
/* Tell DRD to insert a happens before annotation. */
VG_USERREQ__DRD_ANNOTATE_HAPPENS_BEFORE
= VG_USERREQ_TOOL_BASE('H','G') + 256 + 33,
@@ -329,10 +355,6 @@
= VG_USERREQ_TOOL_BASE('H','G') + 256 + 34,
/* args: Addr. */
- /* Tell DRD about an operation performed on a user-defined reader-writer
- * synchronization object. */
- VG_USERREQ__DRD_ANNOTATE_RWLOCK,
- /* args: Addr, Int operation_type, Int is_rw. */
};
@@ -433,13 +455,39 @@
}
static __inline__
-void DRDCL_(annotate_rwlock)(const void* const rwlock, const int op,
- const int is_w)
+void DRDCL_(annotate_rwlock_create)(const void* const rwlock)
{
int res;
VALGRIND_DO_CLIENT_REQUEST(res, 0,
- VG_USERREQ__DRD_ANNOTATE_RWLOCK,
- rwlock, op, is_w, 0, 0);
+ VG_USERREQ__DRD_ANNOTATE_RWLOCK_CREATE,
+ rwlock, 0, 0, 0, 0);
}
+static __inline__
+void DRDCL_(annotate_rwlock_destroy)(const void* const rwlock)
+{
+ int res;
+ VALGRIND_DO_CLIENT_REQUEST(res, 0,
+ VG_USERREQ__DRD_ANNOTATE_RWLOCK_DESTROY,
+ rwlock, 0, 0, 0, 0);
+}
+
+static __inline__
+void DRDCL_(annotate_rwlock_acquired)(const void* const rwlock, const int is_w)
+{
+ int res;
+ VALGRIND_DO_CLIENT_REQUEST(res, 0,
+ VG_USERREQ__DRD_ANNOTATE_RWLOCK_ACQUIRED,
+ rwlock, is_w, 0, 0, 0);
+}
+
+static __inline__
+void DRDCL_(annotate_rwlock_released)(const void* const rwlock, const int is_w)
+{
+ int res;
+ VALGRIND_DO_CLIENT_REQUEST(res, 0,
+ VG_USERREQ__DRD_ANNOTATE_RWLOCK_RELEASED,
+ rwlock, is_w, 0, 0, 0);
+}
+
#endif /* __VALGRIND_DRD_H */
Modified: trunk/drd/drd_clientreq.c
===================================================================
--- trunk/drd/drd_clientreq.c 2009-08-14 22:34:30 UTC (rev 10818)
+++ trunk/drd/drd_clientreq.c 2009-08-15 10:50:35 UTC (rev 10819)
@@ -136,42 +136,57 @@
}
break;
- case VG_USERREQ__DRD_ANNOTATE_RWLOCK:
+ case VG_USERREQ__DRD_ANNOTATE_RWLOCK_CREATE:
+ if (arg[1])
{
struct mutex_info* const mutex_p = DRD_(mutex_get)(arg[1]);
if (mutex_p && mutex_p->mutex_type == mutex_type_spinlock)
break;
}
- switch (arg[2])
+ DRD_(rwlock_pre_init)(arg[1], user_rwlock);
+ break;
+
+ case VG_USERREQ__DRD_ANNOTATE_RWLOCK_DESTROY:
+ if (arg[1])
{
- case 0:
- DRD_(rwlock_pre_init)(arg[1], user_rwlock);
- break;
- case 1:
- DRD_(rwlock_post_destroy)(arg[1], user_rwlock);
- break;
- case 2:
- tl_assert(arg[3] == !! arg[3]);
- if (arg[3])
- {
- DRD_(rwlock_pre_wrlock)(arg[1], user_rwlock);
- DRD_(rwlock_post_wrlock)(arg[1], user_rwlock, True);
- }
- else
- {
- DRD_(rwlock_pre_rdlock)(arg[1], user_rwlock);
- DRD_(rwlock_post_rdlock)(arg[1], user_rwlock, True);
- }
- break;
- case 3:
- tl_assert(arg[3] == !! arg[3]);
- DRD_(rwlock_pre_unlock)(arg[1], user_rwlock);
- break;
- default:
- tl_assert(False);
+ struct mutex_info* const mutex_p = DRD_(mutex_get)(arg[1]);
+ if (mutex_p && mutex_p->mutex_type == mutex_type_spinlock)
+ break;
}
+ DRD_(rwlock_post_destroy)(arg[1], user_rwlock);
break;
+ case VG_USERREQ__DRD_ANNOTATE_RWLOCK_ACQUIRED:
+ if (arg[1])
+ {
+ struct mutex_info* const mutex_p = DRD_(mutex_get)(arg[1]);
+ if (mutex_p && mutex_p->mutex_type == mutex_type_spinlock)
+ break;
+ }
+ tl_assert(arg[2] == !! arg[2]);
+ if (arg[2])
+ {
+ DRD_(rwlock_pre_wrlock)(arg[1], user_rwlock);
+ DRD_(rwlock_post_wrlock)(arg[1], user_rwlock, True);
+ }
+ else
+ {
+ DRD_(rwlock_pre_rdlock)(arg[1], user_rwlock);
+ DRD_(rwlock_post_rdlock)(arg[1], user_rwlock, True);
+ }
+ break;
+
+ case VG_USERREQ__DRD_ANNOTATE_RWLOCK_RELEASED:
+ if (arg[1])
+ {
+ struct mutex_info* const mutex_p = DRD_(mutex_get)(arg[1]);
+ if (mutex_p && mutex_p->mutex_type == mutex_type_spinlock)
+ break;
+ }
+ tl_assert(arg[2] == !! arg[2]);
+ DRD_(rwlock_pre_unlock)(arg[1], user_rwlock);
+ break;
+
case VG_USERREQ__DRD_START_NEW_SEGMENT:
DRD_(thread_new_segment)(DRD_(PtThreadIdToDrdThreadId)(arg[1]));
break;
@@ -482,6 +497,21 @@
DRD_(clean_memory)(arg[1], arg[2]);
break;
+ case VG_USERREQ__DRD_ANNOTATION_UNIMP:
+ {
+ /* Note: it is assumed below that the text arg[1] points to is never
+ * freed, e.g. because it points to static data.
+ */
+ UnimpClReqInfo UICR =
+ { DRD_(thread_get_running_tid)(), (Char*)arg[1] };
+ VG_(maybe_record_error)(vg_tid,
+ UnimpClReq,
+ VG_(get_IP)(vg_tid),
+ "",
+ &UICR);
+ }
+ break;
+
default:
#if 0
VG_(message)(Vg_DebugMsg, "Unrecognized client request 0x%lx 0x%lx",
Modified: trunk/drd/drd_error.c
===================================================================
--- trunk/drd/drd_error.c 2009-08-14 22:34:30 UTC (rev 10818)
+++ trunk/drd/drd_error.c 2009-08-15 10:50:35 UTC (rev 10819)
@@ -383,6 +383,15 @@
VG_(pp_ExeContext)(VG_(get_error_where)(e));
break;
}
+ case UnimpClReq: {
+ UnimpClReqInfo* uicr =(UnimpClReqInfo*)(VG_(get_error_extra)(e));
+ VG_(message)(Vg_UserMsg,
+ "The annotation macro %s has not yet been implemented in"
+ " <helgrind/helgrind.h>\n",
+ /*VG_(get_error_string)(e),*/ uicr->descr);
+ VG_(pp_ExeContext)(VG_(get_error_where)(e));
+ break;
+ }
default:
VG_(message)(Vg_UserMsg,
"%s\n",
@@ -420,6 +429,8 @@
return sizeof(GenericErrInfo);
case InvalidThreadId:
return sizeof(InvalidThreadIdInfo);
+ case UnimpClReq:
+ return sizeof(UnimpClReqInfo);
default:
tl_assert(False);
break;
@@ -461,6 +472,8 @@
skind = GenericErr;
else if (VG_(strcmp)(name, STR_InvalidThreadId) == 0)
skind = InvalidThreadId;
+ else if (VG_(strcmp)(name, STR_UnimpClReq) == 0)
+ skind = UnimpClReq;
else
return False;
@@ -507,6 +520,7 @@
case HoldtimeErr: return VGAPPEND(STR_, HoldtimeErr);
case GenericErr: return VGAPPEND(STR_, GenericErr);
case InvalidThreadId: return VGAPPEND(STR_, InvalidThreadId);
+ case UnimpClReq: return VGAPPEND(STR_, UnimpClReq);
default:
tl_assert(0);
}
Modified: trunk/drd/drd_error.h
===================================================================
--- trunk/drd/drd_error.h 2009-08-14 22:34:30 UTC (rev 10818)
+++ trunk/drd/drd_error.h 2009-08-15 10:50:35 UTC (rev 10819)
@@ -61,6 +61,8 @@
GenericErr = 11,
#define STR_InvalidThreadId "InvalidThreadId"
InvalidThreadId = 12,
+#define STR_UnimpClReq "UnimpClReq"
+ UnimpClReq = 13,
} DrdErrorKind;
/* The classification of a faulting address. */
@@ -168,6 +170,11 @@
ULong ptid;
} InvalidThreadIdInfo;
+typedef struct {
+ DrdThreadId tid;
+ Char* descr;
+} UnimpClReqInfo;
+
void DRD_(set_show_conflicting_segments)(const Bool scs);
void DRD_(register_error_handlers)(void);
Property changes on: trunk/drd/tests
___________________________________________________________________
Name: svn:ignore
- *.dSYM
*.stderr.diff*
*.stderr.out
*.stdout.diff*
*.stdout.out
.deps
annotate_ignore_rw
annotate_ignore_write
annotate_rwlock
atomic_var
bar_bad
bar_trivial
boost_thread
circular_buffer
custom_alloc
drd_bitmap_test
fp_race
hg01_all_ok
hg02_deadlock
hg03_inherit
hg04_race
hg05_race2
hg06_readshared
hold_lock
linuxthreads_det
Makefile
Makefile.in
matinv
memory_allocation
monitor_example
new_delete
omp_matinv
omp_prime
omp_printf
pth_barrier
pth_barrier_race
pth_barrier_reinit
pth_broadcast
pth_cancel_locked
pth_cleanup_handler
pth_cond_race
pth_create_chain
pth_create_glibc_2_0
pth_detached
pth_detached_sem
pth_inconsistent_cond_wait
pth_mutex_reinit
pth_process_shared_mutex
pth_spinlock
qt4_mutex
qt4_rwlock
qt4_semaphore
recursive_mutex
rwlock_race
rwlock_test
rwlock_type_checking
sem_as_mutex
sem_open
sigalrm
tc01_simple_race
tc02_simple_tls
tc03_re_excl
tc04_free_lock
tc05_simple_race
tc06_two_races
tc07_hbl1
tc08_hbl2
tc09_bad_unlock
tc10_rec_lock
tc11_XCHG
tc12_rwl_trivial
tc13_laog1
tc15_laog_lockdel
tc16_byterace
tc17_sembar
tc18_semabuse
tc19_shadowmem
tc20_verifywrap
tc21_pthonce
tc22_exit_w_lock
tc23_bogus_condwait
tc24_nonzero_sem
thread_name
trylock
tsan_unittest
unit_bitmap
unit_vc
vg_regtest.tmp*
+ *.dSYM
*.stderr.diff*
*.stderr.out
*.stdout.diff*
*.stdout.out
.deps
annotate_ignore_rw
annotate_ignore_write
annotate_publish_hg
annotate_rwlock
atomic_var
bar_bad
bar_trivial
boost_thread
circular_buffer
custom_alloc
drd_bitmap_test
fp_race
hg01_all_ok
hg02_deadlock
hg03_inherit
hg04_race
hg05_race2
hg06_readshared
hold_lock
linuxthreads_det
Makefile
Makefile.in
matinv
memory_allocation
monitor_example
new_delete
omp_matinv
omp_prime
omp_printf
pth_barrier
pth_barrier_race
pth_barrier_reinit
pth_broadcast
pth_cancel_locked
pth_cleanup_handler
pth_cond_race
pth_create_chain
pth_create_glibc_2_0
pth_detached
pth_detached_sem
pth_inconsistent_cond_wait
pth_mutex_reinit
pth_process_shared_mutex
pth_spinlock
qt4_mutex
qt4_rwlock
qt4_semaphore
recursive_mutex
rwlock_race
rwlock_test
rwlock_type_checking
sem_as_mutex
sem_open
sigalrm
tc01_simple_race
tc02_simple_tls
tc03_re_excl
tc04_free_lock
tc05_simple_race
tc06_two_races
tc07_hbl1
tc08_hbl2
tc09_bad_unlock
tc10_rec_lock
tc11_XCHG
tc12_rwl_trivial
tc13_laog1
tc15_laog_lockdel
tc16_byterace
tc17_sembar
tc18_semabuse
tc19_shadowmem
tc20_verifywrap
tc21_pthonce
tc22_exit_w_lock
tc23_bogus_condwait
tc24_nonzero_sem
thread_name
trylock
tsan_unittest
unit_bitmap
unit_vc
vg_regtest.tmp*
Modified: trunk/drd/tests/Makefile.am
===================================================================
--- trunk/drd/tests/Makefile.am 2009-08-14 22:34:30 UTC (rev 10818)
+++ trunk/drd/tests/Makefile.am 2009-08-15 10:50:35 UTC (rev 10819)
@@ -2,6 +2,7 @@
include $(top_srcdir)/Makefile.tool-tests.am
dist_noinst_SCRIPTS = \
+ compare_error_count_with \
filter_error_summary \
filter_stderr \
filter_stderr_and_thread_no \
@@ -21,10 +22,14 @@
annotate_order_2.vgtest \
annotate_order_3.stderr.exp \
annotate_order_3.vgtest \
+ annotate_publish_hg.stderr.exp \
+ annotate_publish_hg.vgtest \
annotate_spinlock.stderr.exp \
annotate_spinlock.vgtest \
annotate_rwlock.stderr.exp \
annotate_rwlock.vgtest \
+ annotate_rwlock_hg.stderr.exp \
+ annotate_rwlock_hg.vgtest \
annotate_ignore_read.stderr.exp \
annotate_ignore_read.vgtest \
annotate_ignore_rw.stderr.exp \
@@ -239,6 +244,7 @@
check_PROGRAMS = \
annotate_ignore_rw \
annotate_ignore_write \
+ annotate_publish_hg \
custom_alloc \
fp_race \
hold_lock \
Added: trunk/drd/tests/annotate_publish_hg.c
===================================================================
--- trunk/drd/tests/annotate_publish_hg.c (rev 0)
+++ trunk/drd/tests/annotate_publish_hg.c 2009-08-15 10:50:35 UTC (rev 10819)
@@ -0,0 +1,11 @@
+/* Test for verifying that unsupported annotations are reported properly. */
+
+#include <stdio.h>
+#include "../../helgrind/helgrind.h"
+
+int main(int argc, char** argv)
+{
+ ANNOTATE_PUBLISH_MEMORY_RANGE(argv[0], sizeof(argv[0]));
+ fprintf(stderr, "Done.\n");
+ return 0;
+}
Added: trunk/drd/tests/annotate_publish_hg.stderr.exp
===================================================================
--- trunk/drd/tests/annotate_publish_hg.stderr.exp (rev 0)
+++ trunk/drd/tests/annotate_publish_hg.stderr.exp 2009-08-15 10:50:35 UTC (rev 10819)
@@ -0,0 +1,7 @@
+
+The annotation macro ANNOTATE_PUBLISH_MEMORY_RANGE has not yet been implemented in <helgrind/helgrind.h>
+ at 0x........: main (annotate_publish_hg.c:?)
+
+Done.
+
+ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Added: trunk/drd/tests/annotate_publish_hg.vgtest
===================================================================
--- trunk/drd/tests/annotate_publish_hg.vgtest (rev 0)
+++ trunk/drd/tests/annotate_publish_hg.vgtest 2009-08-15 10:50:35 UTC (rev 10819)
@@ -0,0 +1,4 @@
+prereq: test -e annotate_publish_hg && ./supported_libpthread
+vgopts: --read-var-info=yes --check-stack-var=yes --show-confl-seg=no
+prog: annotate_publish_hg
+stderr_filter: filter_stderr
Added: trunk/drd/tests/annotate_rwlock_hg.stderr.exp
===================================================================
--- trunk/drd/tests/annotate_rwlock_hg.stderr.exp (rev 0)
+++ trunk/drd/tests/annotate_rwlock_hg.stderr.exp 2009-08-15 10:50:35 UTC (rev 10819)
@@ -0,0 +1 @@
+Total error count is below threshold.
Added: trunk/drd/tests/annotate_rwlock_hg.vgtest
===================================================================
--- trunk/drd/tests/annotate_rwlock_hg.vgtest (rev 0)
+++ trunk/drd/tests/annotate_rwlock_hg.vgtest 2009-08-15 10:50:35 UTC (rev 10819)
@@ -0,0 +1,4 @@
+prereq: test -e ../../helgrind/tests/annotate_rwlock && ./supported_libpthread
+vgopts: --read-var-info=yes --check-stack-var=yes --show-confl-seg=no
+prog: ../../helgrind/tests/annotate_rwlock
+stderr_filter: compare_error_count_with
Added: trunk/drd/tests/compare_error_count_with
===================================================================
--- trunk/drd/tests/compare_error_count_with (rev 0)
+++ trunk/drd/tests/compare_error_count_with 2009-08-15 10:50:35 UTC (rev 10819)
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+awk -v count=50000 '/ERROR SUMMARY/{if ($4 <= count) print "Total error count is below threshold."; else print "Total error count is above threshold" }'
Property changes on: trunk/drd/tests/compare_error_count_with
___________________________________________________________________
Name: svn:executable
+ *
Modified: trunk/drd/tests/rwlock_type_checking.stderr.exp
===================================================================
--- trunk/drd/tests/rwlock_type_checking.stderr.exp 2009-08-14 22:34:30 UTC (rev 10818)
+++ trunk/drd/tests/rwlock_type_checking.stderr.exp 2009-08-15 10:50:35 UTC (rev 10819)
@@ -3,11 +3,11 @@
at 0x........: pthread_rwlock_init (drd_pthread_intercepts.c:?)
by 0x........: main (rwlock_type_checking.c:?)
rwlock 0x........ was first observed at:
- at 0x........: vgDrdCl_annotate_rwlock (drd.h:?)
+ at 0x........: vgDrdCl_annotate_rwlock_create (drd.h:?)
by 0x........: main (rwlock_type_checking.c:?)
Attempt to use a POSIX rwlock as a user-defined rwlock: rwlock 0x.........
- at 0x........: vgDrdCl_annotate_rwlock (drd.h:?)
+ at 0x........: vgDrdCl_annotate_rwlock_released (drd.h:?)
by 0x........: main (rwlock_type_checking.c:?)
rwlock 0x........ was first observed at:
at 0x........: pthread_rwlock_init (drd_pthread_intercepts.c:?)
|
|
From: Ashley P. <as...@pi...> - 2009-08-15 09:41:52
|
On Sat, 2009-08-15 at 08:48 +1000, Nicholas Nethercote wrote:
> On Fri, Aug 14, 2009 at 1:15 AM, Ashley Pittman<as...@pi...> wrote:
> > a) Why do we still need --xml=yes, isn't it implied by
> > --xml-file=<file>? It would appear the --xml=yes option can be dropped
> > completely, if used without a XML output destination it aborts anyway.
> >
> > b) If I do specify --xml-file=<file> but not --xml=yes I get partial
> > output in the xml file.
> >
> > <errorcounts>
> > </errorcounts>
>
> The small amount of output in (b) looks like a bug.
Yes. Interestingly enough this output was both the two xml tags and a
number of new-lines. Point (f) appears to be a simple bug as well, the
log file qualifier goes to stdout instead of the xml log file.
> But I agree that the option behaviour is sub-optimal and inconsistent,
> esp. that you can specify --xml-file without --xml=yes and it'll
> continue.
>
> I'd suggest:
>
> - Allow --xml=yes for backward compatibility. If it's specified, then
> --xml-{file,socket,fd} also has to be specified
>
> - If --xml-{file,socket,fd} is given, --xml=yes doesn't have to be,
> and you get full XML output.
That would seem sensible to me, the error message if you specify only
--xml=yes says what extra steps you need to take to enable xml so should
be sufficient, I can see the reason for not wanting to drop the option
completely.
Did you have any thoughts on the other points I mentioned, either
getting both sets of output and ideally a way of getting a qualifier in
over the --{log,file}-socket options.
Ashley,
--
Ashley Pittman, Bath, UK.
Padb - A parallel job inspection tool for cluster computing
http://padb.pittman.org.uk
|
|
From: Bart V. A. <bar...@gm...> - 2009-08-15 08:00:28
|
Nightly build on georgia-tech-cellbuzz-native ( cellbuzz, ppc64, Fedora 7, native ) Started at 2009-08-15 02:15:49 EDT Ended at 2009-08-15 04:00:00 EDT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... done Regression test results follow == 444 tests, 45 stderr failures, 9 stdout failures, 0 post failures == memcheck/tests/deep_templates (stdout) memcheck/tests/leak-cases-full (stderr) memcheck/tests/leak-cases-summary (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/wrap8 (stderr) none/tests/empty-exe (stderr) none/tests/linux/mremap (stderr) none/tests/ppc32/jm-fp (stdout) none/tests/ppc32/jm-vmx (stdout) none/tests/ppc32/round (stdout) none/tests/ppc32/test_gx (stdout) none/tests/ppc64/jm-fp (stdout) none/tests/ppc64/jm-vmx (stdout) none/tests/ppc64/round (stdout) none/tests/shell (stdout) none/tests/shell (stderr) none/tests/shell_valid1 (stderr) none/tests/shell_valid2 (stderr) none/tests/shell_valid3 (stderr) none/tests/shell_zerolength (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) exp-ptrcheck/tests/bad_percentify (stderr) exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/fp (stderr) exp-ptrcheck/tests/globalerr (stderr) exp-ptrcheck/tests/hackedbz2 (stderr) exp-ptrcheck/tests/hp_bounds (stderr) exp-ptrcheck/tests/hp_dangle (stderr) exp-ptrcheck/tests/hsg (stderr) exp-ptrcheck/tests/justify (stderr) exp-ptrcheck/tests/partial_bad (stderr) exp-ptrcheck/tests/partial_good (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) exp-ptrcheck/tests/realloc (stderr) exp-ptrcheck/tests/stackerr (stderr) exp-ptrcheck/tests/strcpy (stderr) exp-ptrcheck/tests/supp (stderr) exp-ptrcheck/tests/tricky (stderr) exp-ptrcheck/tests/unaligned (stderr) exp-ptrcheck/tests/zero (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... done Regression test results follow == 441 tests, 45 stderr failures, 9 stdout failures, 0 post failures == memcheck/tests/deep_templates (stdout) memcheck/tests/leak-cases-full (stderr) memcheck/tests/leak-cases-summary (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/wrap8 (stderr) none/tests/empty-exe (stderr) none/tests/linux/mremap (stderr) none/tests/ppc32/jm-fp (stdout) none/tests/ppc32/jm-vmx (stdout) none/tests/ppc32/round (stdout) none/tests/ppc32/test_gx (stdout) none/tests/ppc64/jm-fp (stdout) none/tests/ppc64/jm-vmx (stdout) none/tests/ppc64/round (stdout) none/tests/shell (stdout) none/tests/shell (stderr) none/tests/shell_valid1 (stderr) none/tests/shell_valid2 (stderr) none/tests/shell_valid3 (stderr) none/tests/shell_zerolength (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) exp-ptrcheck/tests/bad_percentify (stderr) exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/fp (stderr) exp-ptrcheck/tests/globalerr (stderr) exp-ptrcheck/tests/hackedbz2 (stderr) exp-ptrcheck/tests/hp_bounds (stderr) exp-ptrcheck/tests/hp_dangle (stderr) exp-ptrcheck/tests/hsg (stderr) exp-ptrcheck/tests/justify (stderr) exp-ptrcheck/tests/partial_bad (stderr) exp-ptrcheck/tests/partial_good (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) exp-ptrcheck/tests/realloc (stderr) exp-ptrcheck/tests/stackerr (stderr) exp-ptrcheck/tests/strcpy (stderr) exp-ptrcheck/tests/supp (stderr) exp-ptrcheck/tests/tricky (stderr) exp-ptrcheck/tests/unaligned (stderr) exp-ptrcheck/tests/zero (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Sat Aug 15 03:08:11 2009 --- new.short Sat Aug 15 04:00:00 2009 *************** *** 8,10 **** ! == 441 tests, 45 stderr failures, 9 stdout failures, 0 post failures == memcheck/tests/deep_templates (stdout) --- 8,10 ---- ! == 444 tests, 45 stderr failures, 9 stdout failures, 0 post failures == memcheck/tests/deep_templates (stdout) |
|
From: Tom H. <th...@cy...> - 2009-08-15 02:49:27
|
Nightly build on vauxhall ( x86_64, Fedora 11 ) Started at 2009-08-15 03:20:06 BST Ended at 2009-08-15 03:49:05 BST 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 == 537 tests, 6 stderr failures, 1 stdout failure, 0 post failures == memcheck/tests/linux/stack_switch (stderr) memcheck/tests/long_namespace_xml (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc23_bogus_condwait (stderr) drd/tests/pth_detached2 (stdout) exp-ptrcheck/tests/bad_percentify (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 == 534 tests, 7 stderr failures, 0 stdout failures, 0 post failures == memcheck/tests/linux/stack_switch (stderr) memcheck/tests/long_namespace_xml (stderr) helgrind/tests/pth_spinlock (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc23_bogus_condwait (stderr) exp-ptrcheck/tests/bad_percentify (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Sat Aug 15 03:34:35 2009 --- new.short Sat Aug 15 03:49:05 2009 *************** *** 8,13 **** ! == 534 tests, 7 stderr failures, 0 stdout failures, 0 post failures == memcheck/tests/linux/stack_switch (stderr) memcheck/tests/long_namespace_xml (stderr) - helgrind/tests/pth_spinlock (stderr) helgrind/tests/tc06_two_races_xml (stderr) --- 8,12 ---- ! == 537 tests, 6 stderr failures, 1 stdout failure, 0 post failures == memcheck/tests/linux/stack_switch (stderr) memcheck/tests/long_namespace_xml (stderr) helgrind/tests/tc06_two_races_xml (stderr) *************** *** 15,16 **** --- 14,16 ---- helgrind/tests/tc23_bogus_condwait (stderr) + drd/tests/pth_detached2 (stdout) exp-ptrcheck/tests/bad_percentify (stderr) |
|
From: Tom H. <th...@cy...> - 2009-08-15 02:48:10
|
Nightly build on lloyd ( x86_64, Fedora 7 ) Started at 2009-08-15 03:05:04 BST Ended at 2009-08-15 03:47:49 BST 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 == 527 tests, 1 stderr failure, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (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 == 524 tests, 1 stderr failure, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Sat Aug 15 03:26:32 2009 --- new.short Sat Aug 15 03:47:49 2009 *************** *** 8,10 **** ! == 524 tests, 1 stderr failure, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (stderr) --- 8,10 ---- ! == 527 tests, 1 stderr failure, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (stderr) |
|
From: Tom H. <th...@cy...> - 2009-08-15 02:31:05
|
Nightly build on mg ( x86_64, Fedora 9 ) Started at 2009-08-15 03:10:06 BST Ended at 2009-08-15 03:30:41 BST 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 == 534 tests, 1 stderr failure, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (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 == 531 tests, 2 stderr failures, 0 stdout failures, 0 post failures == helgrind/tests/pth_spinlock (stderr) helgrind/tests/tc06_two_races_xml (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Sat Aug 15 03:20:29 2009 --- new.short Sat Aug 15 03:30:41 2009 *************** *** 8,11 **** ! == 531 tests, 2 stderr failures, 0 stdout failures, 0 post failures == ! helgrind/tests/pth_spinlock (stderr) helgrind/tests/tc06_two_races_xml (stderr) --- 8,10 ---- ! == 534 tests, 1 stderr failure, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (stderr) |