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
(16) |
2
(7) |
3
(9) |
4
(12) |
5
(20) |
|
6
(24) |
7
(10) |
8
(7) |
9
(17) |
10
(9) |
11
(7) |
12
(8) |
|
13
(12) |
14
(17) |
15
(15) |
16
(15) |
17
(21) |
18
(9) |
19
(17) |
|
20
(16) |
21
(12) |
22
(18) |
23
(8) |
24
(2) |
25
(17) |
26
(23) |
|
27
(30) |
28
(19) |
29
(14) |
30
(11) |
|
|
|
|
From: Julian S. <js...@ac...> - 2008-04-05 20:27:54
|
> Because of performance reasons. When e.g. allocating memory for > bitmaps, such memory is first allocated with VG_(malloc)(), > initialized to 0xdd inside VG_(malloc)(), and then reinitialized to > 0x00 by the caller of VG_(malloc)(). This is a waste of CPU cycles. This is true. (Except the 0xDD fill is done at deallocation time, not allocation time). But the question is, can you reliably, repeatably, measure any performance loss? I suspect you'd have to deallocate at the rate of several tens of megabytes per second to see much difference, in which case 1. at least for small deallocations, the overhead of the allocator itself is much larger (it generates many cache misses) 2. if you really need to allocate/deallocate that fast, it might be a sign that some higher-level algorithmic fix might be more effective VG_(memset)'s main loop is vectorised and unrolled in an attempt to minimise the cost. Really it depends on the actual performance numbers. J |
|
From: Bart V. A. <bar...@gm...> - 2008-04-05 18:47:38
|
On Sat, Apr 5, 2008 at 7:56 PM, Bart Van Assche <bar...@gm...> wrote: > > On Sat, Apr 5, 2008 at 6:40 PM, Julian Seward <js...@ac...> wrote: > > > > > Is anyone relying on the current behavior of VG_(malloc)(), namely > > > that it initializes all memory it allocates with the pattern 0xdd ? > > > > I prefer to keep it as it is, since it tends to enhance debuggability > > of the system. Why do you want to disable it? > > Because of performance reasons. When e.g. allocating memory for > bitmaps, such memory is first allocated with VG_(malloc)(), > initialized to 0xdd inside VG_(malloc)(), and then reinitialized to > 0x00 by the caller of VG_(malloc)(). This is a waste of CPU cycles. > Possible solutions are: > * Provide two memory allocation functions, one that initializes the > allocated memory to 0xdd and one that does not initialize the > allocated memory. > * Implement a global variable that allows enabling / disabling the > initialization of memory to 0xdd. Probably I'm too much used to glibc. Maybe I should just call VG_(calloc)() instead ? Bart. |
|
From: Bart V. A. <bar...@gm...> - 2008-04-05 17:56:41
|
On Sat, Apr 5, 2008 at 6:40 PM, Julian Seward <js...@ac...> wrote: > > > Is anyone relying on the current behavior of VG_(malloc)(), namely > > that it initializes all memory it allocates with the pattern 0xdd ? > > I prefer to keep it as it is, since it tends to enhance debuggability > of the system. Why do you want to disable it? Because of performance reasons. When e.g. allocating memory for bitmaps, such memory is first allocated with VG_(malloc)(), initialized to 0xdd inside VG_(malloc)(), and then reinitialized to 0x00 by the caller of VG_(malloc)(). This is a waste of CPU cycles. Possible solutions are: * Provide two memory allocation functions, one that initializes the allocated memory to 0xdd and one that does not initialize the allocated memory. * Implement a global variable that allows enabling / disabling the initialization of memory to 0xdd. Bart. |
|
From: Julian S. <js...@ac...> - 2008-04-05 16:45:37
|
> Is anyone relying on the current behavior of VG_(malloc)(), namely > that it initializes all memory it allocates with the pattern 0xdd ? I prefer to keep it as it is, since it tends to enhance debuggability of the system. Why do you want to disable it? J |
|
From: Bart V. A. <bar...@gm...> - 2008-04-05 15:54:50
|
Hello,
Is anyone relying on the current behavior of VG_(malloc)(), namely
that it initializes all memory it allocates with the pattern 0xdd ?
I'd like to disable this behavior, either conditionally or
unconditionally.
Bart.
Index: coregrind/m_mallocfree.c
===================================================================
--- coregrind/m_mallocfree.c (revision 7844)
+++ coregrind/m_mallocfree.c (working copy)
@@ -1270,6 +1270,7 @@
a->bytes_on_loan -= b_pszB;
+#if 0
/* If this is one of V's areas, fill it up with junk to enhance the
chances of catching any later reads of it. Note, 0xDD is
carefully chosen junk :-), in that: (1) 0xDDDDDDDD is an invalid
@@ -1278,6 +1279,7 @@
Vbits representation for memcheck. */
if (aid != VG_AR_CLIENT)
VG_(memset)(ptr, 0xDD, (SizeT)b_pszB);
+#endif
// Put this chunk back on a list somewhere.
b_listno = pszB_to_listNo(b_pszB);
|
|
From: Bart V. A. <bar...@gm...> - 2008-04-05 15:48:01
|
> On Thursday 03 April 2008 20:38, Bart Van Assche wrote:
> > Sometimes when Valgrind prints a stack trace on an AMD64 system, there
> > are a few dummy frames at the top which do not make sense. Apparently
> > sometimes Valgrind tries to go up "too high" on the stack. The patch
> > below should improve stack examination by Valgrind with only a minimal
> > performance impact. All it does is to check that the instruction
> > pointer fetched from the stack is not null and that what is assumed to
> > be an instruction pointer does not point to the stack being examined.
> >
> > Any comments are welcome.
> >
> > Bart.
> >
> > svn diff coregrind/m_stacktrace.c
> > Index: coregrind/m_stacktrace.c
> > ===================================================================
> > --- coregrind/m_stacktrace.c (revision 7839)
> > +++ coregrind/m_stacktrace.c (working copy)
> > @@ -276,8 +276,10 @@
> > address; instead scan a likely section of stack (eg sp ..
> > sp+256) and use suitable values found there.
> > */
> > - if (fp_min <= sp && sp < fp_max) {
> > - ip = ((UWord*)sp)[0];
> > + if (fp_min <= sp && sp < fp_max
> > + && (ip = ((UWord*)sp)[0]) != 0
> > + && (ip < fp_min || ip >= fp_max))
> > + {
> > if (sps) sps[i] = sp;
> > if (fps) fps[i] = fp;
> > ips[i++] = ip;
> >
On Sat, Apr 5, 2008 at 1:20 PM, Julian Seward <js...@ac...> wrote:
>
> Could you please send an example of a stack trace with extra frames in,
> to look at?
Sure. When I call VG_(get_StackTrace)() shortly after a client thread
has been created (e.g. from drd_clientreq.c just before
VG_USERREQ__DRD_SUPPRESS_CURRENT_STACK), I get the following results:
Before applying the patch:
--2445-- thread 1/1
--2445-- [ 0] 0x004c26a32 0x7fefffbc0 0x7fefffce0
--2445-- [ 1] 0x00400cc56 0x7fefffcf0 0x00401c000
--2445-- [ 2] 0x00400cd7e 0x7fefffd30 0x00401c000
--2445-- [ 3] 0x004000aaa 0x7fefffd90 0x000000000
--2445-- [ 4] 0x000000001 0x7fefffd90 0x000000000
--2445-- [ 5] 0x7ff00018b 0x7fefffd98 0x000000000
--2445-- [ 6] 0x000000000 0x7fefffda0 0x000000000
--2445-- [ 7] 0x7ff0001a1 0x7fefffda8 0x000000000
--2445-- [ 8] 0x7ff0001c0 0x7fefffdb0 0x000000000
--2445-- [ 9] 0x7ff0001d9 0x7fefffdb8 0x000000000
--2445-- [10] 0x7ff0001f2 0x7fefffdc0 0x000000000
--2445-- [11] 0x7ff000202 0x7fefffdc8 0x000000000
--2445-- [12] 0x7ff000219 0x7fefffdd0 0x000000000
--2445-- [13] 0x7ff00024b 0x7fefffdd8 0x000000000
--2445-- [14] 0x7ff00025e 0x7fefffde0 0x000000000
--2445-- [15] 0x7ff000272 0x7fefffde8 0x000000000
--2445-- [16] 0x7ff00028d 0x7fefffdf0 0x000000000
--2445-- [17] 0x7ff00029c 0x7fefffdf8 0x000000000
--2445-- [18] 0x7ff0002bf 0x7fefffe00 0x000000000
--2445-- [19] 0x7ff0002f1 0x7fefffe08 0x000000000
--2445-- thread 2/2
--2445-- [ 0] 0x004c26884 0x005b8a0d0 0x005b8a130
--2445-- [ 1] 0x004e30020 0x005b8a140 0x000000000
--2445-- [ 2] 0x005109f8d 0x005b8a260 0x000000000
--2445-- [ 3] 0x000000000 0x005b8a260 0x000000000
--2445-- [ 4] 0x000000000 0x005b8a268 0x000000000
--2445-- [ 5] 0x000000000 0x005b8a270 0x000000000
--2445-- [ 6] 0x000000000 0x005b8a278 0x000000000
--2445-- [ 7] 0x000000000 0x005b8a280 0x000000000
--2445-- [ 8] 0x000000000 0x005b8a288 0x000000000
--2445-- [ 9] 0x000000000 0x005b8a290 0x000000000
--2445-- [10] 0x000000000 0x005b8a298 0x000000000
--2445-- [11] 0x000000000 0x005b8a2a0 0x000000000
--2445-- [12] 0x000000000 0x005b8a2a8 0x000000000
--2445-- [13] 0x000000000 0x005b8a2b0 0x000000000
--2445-- [14] 0x000000000 0x005b8a2b8 0x000000000
--2445-- [15] 0x000000000 0x005b8a2c0 0x000000000
--2445-- [16] 0x000000000 0x005b8a2c8 0x000000000
--2445-- [17] 0x000000000 0x005b8a2d0 0x000000000
--2445-- [18] 0x000000000 0x005b8a2d8 0x000000000
--2445-- [19] 0x000000000 0x005b8a2e0 0x000000000
After having applied the patch:
--1280-- thread 1/1
--1280-- [ 0] 0x004c26a32 0x7fefffbc0 0x7fefffce0
--1280-- [ 1] 0x00400cc56 0x7fefffcf0 0x00401c000
--1280-- [ 2] 0x00400cd7e 0x7fefffd30 0x00401c000
--1280-- [ 3] 0x004000aaa 0x7fefffd90 0x000000000
--1280-- [ 4] 0x000000001 0x7fefffd90 0x000000000
--1280-- thread 2/2
--1280-- [ 0] 0x004c26884 0x005b8a0d0 0x005b8a130
--1280-- [ 1] 0x004e30020 0x005b8a140 0x000000000
--1280-- [ 2] 0x005109f8d 0x005b8a260 0x000000000
Bart.
|
|
From: Bart V. A. <bar...@gm...> - 2008-04-05 15:39:42
|
Hello,
I developed a patch to solve the issue explained below. Is it OK if I
commit this patch ?
The patch checks that a filename refers to a regular file before
trying to read ELF information
from the file, and ignores regular files for which Valgrind does not
have read access.
Bart.
Index: coregrind/m_debuginfo/debuginfo.c
===================================================================
--- coregrind/m_debuginfo/debuginfo.c (revision 7844)
+++ coregrind/m_debuginfo/debuginfo.c (working copy)
@@ -491,6 +491,8 @@
Int nread;
HChar buf1k[1024];
Bool debug = False;
+ SysRes statres;
+ struct vki_stat statbuf;
/* In short, figure out if this mapping is of interest to us, and
if so, try to guess what ld.so is doing and when/if we should
@@ -520,44 +522,27 @@
if (debug)
VG_(printf)("di_notify_mmap-2: %s\n", filename);
- /* XXXX begin KLUDGE */
- /* Skip filenames in /dev/. Don't even bother to try opening them.
- Why?
-
- Suppose the client opens and then mmaps the file specified by
- 'filename' and puts some kind of lock on it, so nobody else can
- open it. If we now try to open it to peer at the ELF header,
- the system can hang, because the VG_(open) call blocks.
- Precisely this happed when running Amarok, which opened and then
- mmap'd /dev/snd/pcmC0D0c.
-
- A clean(er) solution is to open the file with VKI_O_NONBLOCK, so
- that if it is locked, we simply fail immediately and don't hang
- the whole system. But "man 2 open" gives only a sketchy
- description of the resulting file semantics. So for the
- meantime, just skip files in /dev/ as (1) they are likely to be
- subject to wierd-ass locking stuff, and (2) they won't contain
- useful debug info anyway.
-
- But that's a kludge; in principle the same problem could occur
- with *any* file.
- */
- if (0 == VG_(strncmp)(filename, "/dev/", 5)) {
- if (debug)
- VG_(printf)("di_notify_mmap-2: skipping %s\n", filename);
+ /* Only try to read debug information from regular files. */
+ statres = VG_(stat)(filename, &statbuf);
+ if (statres.isError || ! VKI_S_ISREG(statbuf.st_mode))
return;
- }
- /* XXXX end KLUDGE */
- /* Peer at the first few bytes of the file, to see if it is an ELF
- object file. */
+ /* If the assert below ever fails, replace the VG_(stat)() call above */
+ /* by a VG_(lstat)() call. */
+ vg_assert(! VKI_S_ISLNK(statbuf.st_mode));
+
+ /* Peer at the first few bytes of the file, to see if it is an ELF */
+ /* object file. Ignore the file if we do not have read permission. */
VG_(memset)(buf1k, 0, sizeof(buf1k));
fd = VG_(open)( filename, VKI_O_RDONLY, 0 );
if (fd.isError) {
DebugInfo fake_di;
- VG_(memset)(&fake_di, 0, sizeof(fake_di));
- fake_di.filename = filename;
- ML_(symerr)(&fake_di, True, "can't open file to inspect ELF header");
+ if (fd.err != VKI_EACCES)
+ {
+ VG_(memset)(&fake_di, 0, sizeof(fake_di));
+ fake_di.filename = filename;
+ ML_(symerr)(&fake_di, True, "can't open file to inspect ELF header");
+ }
return;
}
nread = VG_(read)( fd.res, buf1k, sizeof(buf1k) );
On Sun, Mar 23, 2008 at 4:21 PM, Bart Van Assche
<bar...@gm...> wrote:
> Hello Julian,
>
> Can you please have a look at the following:
>
> $ ls -l /var/run/nscd/passwd
> -rw------- 1 root root 217016 2008-03-23 15:11 /var/run/nscd/passwd
> $ ./vg-in-place --tool=none knode
> ...
> --4396-- WARNING: Serious error when reading debug info
> --4396-- When reading debug info from /var/run/nscd/passwd:
> --4396-- can't open file to inspect ELF header
> ...
>
> From the output of strace -f knode:
> ...
> [pid 4457] socket(PF_FILE, SOCK_STREAM, 0) = 10
> [pid 4457] fcntl(10, F_SETFL, O_RDWR|O_NONBLOCK) = 0
> [pid 4457] connect(10, {sa_family=AF_FILE,
> path="/var/run/nscd/socket"}, 110) = 0
> ...
|
|
From: <sv...@va...> - 2008-04-05 12:57:24
|
Author: bart
Date: 2008-04-05 13:57:01 +0100 (Sat, 05 Apr 2008)
New Revision: 7847
Log:
Added command-line option --check-stack-var. Reporting data races on stack variables is now disabled by default.
Modified:
trunk/exp-drd/drd_main.c
trunk/exp-drd/tests/hg05_race2.vgtest
trunk/exp-drd/tests/recursive_mutex.vgtest
trunk/exp-drd/tests/tc04_free_lock.vgtest
trunk/exp-drd/tests/tc09_bad_unlock.vgtest
trunk/exp-drd/tests/tc20_verifywrap.vgtest
trunk/exp-drd/tests/tc20_verifywrap2.vgtest
Modified: trunk/exp-drd/drd_main.c
===================================================================
--- trunk/exp-drd/drd_main.c 2008-04-05 12:53:15 UTC (rev 7846)
+++ trunk/exp-drd/drd_main.c 2008-04-05 12:57:01 UTC (rev 7847)
@@ -62,6 +62,7 @@
// Local variables.
+static Bool s_drd_check_stack_var = False;
static Bool s_drd_print_stats = False;
static Bool s_drd_trace_fork_join = False;
static Bool s_drd_var_info = False;
@@ -88,7 +89,8 @@
int trace_suppression = -1;
Char* trace_address = 0;
- VG_BOOL_CLO (arg, "--drd-stats", s_drd_print_stats)
+ VG_BOOL_CLO (arg, "--check-stack-var", s_drd_check_stack_var)
+ else VG_BOOL_CLO(arg, "--drd-stats", s_drd_print_stats)
else VG_BOOL_CLO(arg, "--segment-merging", segment_merging)
else VG_BOOL_CLO(arg, "--show-confl-seg", show_confl_seg)
else VG_BOOL_CLO(arg, "--show-stack-usage", s_show_stack_usage)
@@ -144,6 +146,8 @@
static void drd_print_usage(void)
{
VG_(printf)(
+" --check-stack-var=yes|no Whether or not to report data races on\n"
+" stack variables [no].\n"
" --segment-merging=yes|no Controls segment merging [yes].\n"
" Segment merging is an algorithm to limit memory usage of the\n"
" data race detection algorithm. Disabling segment merging may\n"
@@ -494,7 +498,9 @@
}
}
-static void drd_stop_using_mem(const Addr a1, const SizeT len)
+static __inline__
+void drd_stop_using_mem(const Addr a1, const SizeT len,
+ const Bool is_stack_mem)
{
const Addr a2 = a1 + len;
@@ -504,11 +510,20 @@
{
drd_trace_mem_access(a1, len, eEnd);
}
- thread_stop_using_mem(a1, a2);
- clientobj_stop_using_mem(a1, a2);
- drd_suppression_stop_using_mem(a1, a2);
+ if (! is_stack_mem || s_drd_check_stack_var)
+ {
+ thread_stop_using_mem(a1, a2);
+ clientobj_stop_using_mem(a1, a2);
+ drd_suppression_stop_using_mem(a1, a2);
+ }
}
+static __inline__
+void drd_stop_using_nonstack_mem(const Addr a1, const SizeT len)
+{
+ drd_stop_using_mem(a1, len, False);
+}
+
static
void drd_start_using_mem_w_perms(const Addr a, const SizeT len,
const Bool rr, const Bool ww, const Bool xx)
@@ -534,7 +549,8 @@
{
thread_set_stack_min(thread_get_running_tid(),
a + len - VG_STACK_REDZONE_SZB);
- drd_stop_using_mem(a - VG_STACK_REDZONE_SZB, len + VG_STACK_REDZONE_SZB);
+ drd_stop_using_mem(a - VG_STACK_REDZONE_SZB, len + VG_STACK_REDZONE_SZB,
+ True);
}
static void drd_start_using_mem_stack_signal(const Addr a, const SizeT len)
@@ -545,7 +561,7 @@
static void drd_stop_using_mem_stack_signal(Addr a, SizeT len)
{
- drd_stop_using_mem(a, len);
+ drd_stop_using_mem(a, len, True);
}
static
@@ -570,16 +586,26 @@
/* the context of thread "created". At startup, this function is called */
/* with arguments (0,1). */
static
-void drd_post_thread_create(const ThreadId created)
+void drd_post_thread_create(const ThreadId vg_created)
{
- const DrdThreadId drd_created = thread_post_create(created);
- tl_assert(created != VG_INVALID_THREADID);
+ DrdThreadId drd_created;
+
+ tl_assert(vg_created != VG_INVALID_THREADID);
+
+ drd_created = thread_post_create(vg_created);
if (s_drd_trace_fork_join)
{
VG_(message)(Vg_DebugMsg,
"drd_post_thread_create created = %d/%d",
- created, drd_created);
+ vg_created, drd_created);
}
+ if (! s_drd_check_stack_var)
+ {
+ drd_start_suppression(thread_get_stack_max(drd_created)
+ - thread_get_stack_size(drd_created),
+ thread_get_stack_max(drd_created),
+ "stack");
+ }
}
/* Process VG_USERREQ__POST_THREAD_JOIN. This client request is invoked just */
@@ -615,6 +641,12 @@
VG_(free)(msg);
}
+ if (! s_drd_check_stack_var)
+ {
+ drd_finish_suppression(thread_get_stack_max(drd_joinee)
+ - thread_get_stack_size(drd_joinee),
+ thread_get_stack_max(drd_joinee));
+ }
thread_delete(drd_joinee);
mutex_thread_delete(drd_joinee);
cond_thread_delete(drd_joinee);
@@ -661,7 +693,8 @@
}
drd_stop_using_mem(thread_get_stack_min(drd_tid),
thread_get_stack_max(drd_tid)
- - thread_get_stack_min(drd_tid));
+ - thread_get_stack_min(drd_tid),
+ True);
thread_stop_recording(drd_tid);
thread_finished(drd_tid);
}
@@ -1078,8 +1111,8 @@
VG_(track_new_mem_stack) (drd_start_using_mem_stack);
VG_(track_new_mem_stack_signal) (drd_start_using_mem_stack_signal);
VG_(track_new_mem_startup) (drd_start_using_mem_w_perms);
- VG_(track_die_mem_brk) (drd_stop_using_mem);
- VG_(track_die_mem_munmap) (drd_stop_using_mem);
+ VG_(track_die_mem_brk) (drd_stop_using_nonstack_mem);
+ VG_(track_die_mem_munmap) (drd_stop_using_nonstack_mem);
VG_(track_die_mem_stack) (drd_stop_using_mem_stack);
VG_(track_die_mem_stack_signal) (drd_stop_using_mem_stack_signal);
VG_(track_start_client_code) (drd_start_client_code);
@@ -1088,7 +1121,8 @@
VG_(track_pre_thread_ll_exit) (drd_thread_finished);
// Other stuff.
- drd_register_malloc_wrappers(drd_start_using_mem, drd_stop_using_mem);
+ drd_register_malloc_wrappers(drd_start_using_mem,
+ drd_stop_using_nonstack_mem);
drd_clientreq_init();
Modified: trunk/exp-drd/tests/hg05_race2.vgtest
===================================================================
--- trunk/exp-drd/tests/hg05_race2.vgtest 2008-04-05 12:53:15 UTC (rev 7846)
+++ trunk/exp-drd/tests/hg05_race2.vgtest 2008-04-05 12:57:01 UTC (rev 7847)
@@ -1,3 +1,3 @@
prereq: ./supported_libpthread
-vgopts: --var-info=yes
+vgopts: --var-info=yes --check-stack-var=yes
prog: hg05_race2
Modified: trunk/exp-drd/tests/recursive_mutex.vgtest
===================================================================
--- trunk/exp-drd/tests/recursive_mutex.vgtest 2008-04-05 12:53:15 UTC (rev 7846)
+++ trunk/exp-drd/tests/recursive_mutex.vgtest 2008-04-05 12:57:01 UTC (rev 7847)
@@ -1,3 +1,4 @@
prereq: ./supported_libpthread
+vgopts: --check-stack-var=yes
prog: recursive_mutex
stderr_filter: filter_error_summary
Modified: trunk/exp-drd/tests/tc04_free_lock.vgtest
===================================================================
--- trunk/exp-drd/tests/tc04_free_lock.vgtest 2008-04-05 12:53:15 UTC (rev 7846)
+++ trunk/exp-drd/tests/tc04_free_lock.vgtest 2008-04-05 12:57:01 UTC (rev 7847)
@@ -1,2 +1,3 @@
prereq: ./supported_libpthread
+vgopts: --check-stack-var=yes
prog: tc04_free_lock
Modified: trunk/exp-drd/tests/tc09_bad_unlock.vgtest
===================================================================
--- trunk/exp-drd/tests/tc09_bad_unlock.vgtest 2008-04-05 12:53:15 UTC (rev 7846)
+++ trunk/exp-drd/tests/tc09_bad_unlock.vgtest 2008-04-05 12:57:01 UTC (rev 7847)
@@ -1,2 +1,3 @@
prereq: ./supported_libpthread
+vgopts: --check-stack-var=yes
prog: tc09_bad_unlock
Modified: trunk/exp-drd/tests/tc20_verifywrap.vgtest
===================================================================
--- trunk/exp-drd/tests/tc20_verifywrap.vgtest 2008-04-05 12:53:15 UTC (rev 7846)
+++ trunk/exp-drd/tests/tc20_verifywrap.vgtest 2008-04-05 12:57:01 UTC (rev 7847)
@@ -1,3 +1,3 @@
prereq: ./supported_libpthread
-vgopts: --var-info=yes
+vgopts: --var-info=yes --check-stack-var=yes
prog: tc20_verifywrap
Modified: trunk/exp-drd/tests/tc20_verifywrap2.vgtest
===================================================================
--- trunk/exp-drd/tests/tc20_verifywrap2.vgtest 2008-04-05 12:53:15 UTC (rev 7846)
+++ trunk/exp-drd/tests/tc20_verifywrap2.vgtest 2008-04-05 12:57:01 UTC (rev 7847)
@@ -1,3 +1,3 @@
prereq: ./supported_libpthread
-vgopts: --trace-mutex=yes --trace-cond=yes --trace-semaphore=yes --var-info=yes
+vgopts: --trace-mutex=yes --trace-cond=yes --trace-semaphore=yes --var-info=yes --check-stack-var=yes
prog: tc20_verifywrap
|
|
From: <sv...@va...> - 2008-04-05 12:53:20
|
Author: bart
Date: 2008-04-05 13:53:15 +0100 (Sat, 05 Apr 2008)
New Revision: 7846
Log:
Presence of pthread_mutex_t::__m_kind or pthread_mutex_t::__data.__kind is now detected by configure. DRD now halts if configure could not find either of these two data members.
Modified:
trunk/configure.in
trunk/exp-drd/drd_pthread_intercepts.c
Modified: trunk/configure.in
===================================================================
--- trunk/configure.in 2008-04-05 12:53:00 UTC (rev 7845)
+++ trunk/configure.in 2008-04-05 12:53:15 UTC (rev 7846)
@@ -550,6 +550,50 @@
fi
+# Check whether pthread_mutex_t has a member called __m_kind.
+
+AC_MSG_CHECKING([for pthread_mutex_t::__m_kind])
+
+AC_COMPILE_IFELSE(
+[
+#include <pthread.h>
+int main(int argc, char** argv)
+{
+ pthread_mutex_t m;
+ return m.__m_kind;
+}
+],
+[
+AC_MSG_RESULT([yes])
+AC_DEFINE([HAVE_PTHREAD_MUTEX_T__M_KIND], 1,
+ [Define to 1 if pthread_mutex_t has a member called __m_kind.])
+], [
+AC_MSG_RESULT([no])
+])
+
+
+# Check whether pthread_mutex_t has a member called __data.__kind.
+
+AC_MSG_CHECKING([for pthread_mutex_t::__data.__kind])
+
+AC_COMPILE_IFELSE(
+[
+#include <pthread.h>
+int main(int argc, char** argv)
+{
+ pthread_mutex_t m;
+ return m.__data.__kind;
+}
+],
+[
+AC_MSG_RESULT([yes])
+AC_DEFINE([HAVE_PTHREAD_MUTEX_T__DATA__KIND], 1,
+ [Define to 1 if pthread_mutex_t has a member __data.__kind.])
+], [
+AC_MSG_RESULT([no])
+])
+
+
# does this compiler support -fopenmp, does it have the include file
# <omp.h> and does it have libgomp ?
Modified: trunk/exp-drd/drd_pthread_intercepts.c
===================================================================
--- trunk/exp-drd/drd_pthread_intercepts.c 2008-04-05 12:53:00 UTC (rev 7845)
+++ trunk/exp-drd/drd_pthread_intercepts.c 2008-04-05 12:53:15 UTC (rev 7846)
@@ -53,6 +53,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> // confstr()
+#include "config.h"
#include "drd_clientreq.h"
#include "pub_tool_redir.h"
@@ -120,15 +121,18 @@
static MutexT mutex_type(pthread_mutex_t* mutex)
{
-#if defined(_PTHREAD_DESCR_DEFINED)
- // Linuxthreads.
+#if defined(HAVE_PTHREAD_MUTEX_T__M_KIND)
+ /* LinuxThreads. */
const int kind = mutex->__m_kind;
-#elif defined(__SIZEOF_PTHREAD_MUTEX_T)
- // NPTL.
+#elif defined(HAVE_PTHREAD_MUTEX_T__DATA__KIND)
+ /* NPTL. */
const int kind = mutex->__data.__kind;
#else
- // Another POSIX threads implementation. Regression tests will fail.
+ /* Another POSIX threads implementation. Regression tests will fail. */
const int kind = PTHREAD_MUTEX_DEFAULT;
+ fprintf(stderr,
+ "Did not recognize your POSIX threads implementation. Giving up.\n");
+ assert(0);
#endif
return pthread_to_drd_mutex_type(kind);
}
|
|
From: <sv...@va...> - 2008-04-05 12:52:59
|
Author: bart
Date: 2008-04-05 13:53:00 +0100 (Sat, 05 Apr 2008)
New Revision: 7845
Log:
Commented out the too frequently called tl_assert() statements.
Modified:
trunk/exp-drd/drd_thread.c
Modified: trunk/exp-drd/drd_thread.c
===================================================================
--- trunk/exp-drd/drd_thread.c 2008-04-05 11:36:35 UTC (rev 7844)
+++ trunk/exp-drd/drd_thread.c 2008-04-05 12:53:00 UTC (rev 7845)
@@ -170,6 +170,7 @@
: VG_INVALID_THREADID);
}
+#if 0
/** Sanity check of the doubly linked list of segments referenced by a
* ThreadInfo struct.
* @return True if sane, False if not.
@@ -191,6 +192,7 @@
}
return True;
}
+#endif
DrdThreadId thread_pre_create(const DrdThreadId creator,
const ThreadId vg_created)
@@ -415,7 +417,7 @@
{
tl_assert(0 <= tid && tid < DRD_N_THREADS
&& tid != DRD_INVALID_THREADID);
- tl_assert(sane_ThreadInfo(&s_threadinfo[tid]));
+ // tl_assert(sane_ThreadInfo(&s_threadinfo[tid]));
sg->prev = s_threadinfo[tid].last;
sg->next = 0;
if (s_threadinfo[tid].last)
@@ -423,7 +425,7 @@
s_threadinfo[tid].last = sg;
if (s_threadinfo[tid].first == 0)
s_threadinfo[tid].first = sg;
- tl_assert(sane_ThreadInfo(&s_threadinfo[tid]));
+ // tl_assert(sane_ThreadInfo(&s_threadinfo[tid]));
}
/** Remove a segment from the segment list of thread threadid, and free the
@@ -578,7 +580,7 @@
{
Segment* sg;
- tl_assert(sane_ThreadInfo(&s_threadinfo[i]));
+ // tl_assert(sane_ThreadInfo(&s_threadinfo[i]));
for (sg = s_threadinfo[i].first; sg; sg = sg->next)
{
@@ -593,7 +595,7 @@
}
}
- tl_assert(sane_ThreadInfo(&s_threadinfo[i]));
+ // tl_assert(sane_ThreadInfo(&s_threadinfo[i]));
}
}
|
|
From: <sv...@va...> - 2008-04-05 11:36:30
|
Author: sewardj
Date: 2008-04-05 12:36:35 +0100 (Sat, 05 Apr 2008)
New Revision: 7844
Log:
Understand and use the new third field in IR AbiHints (the
next-instruction-address field). This essentially makes Memcheck's
origin tracking work correctly for stack allocated values on
amd64-linux.
Modified:
branches/OTRACK_BY_INSTRUMENTATION/memcheck/mc_include.h
branches/OTRACK_BY_INSTRUMENTATION/memcheck/mc_main.c
branches/OTRACK_BY_INSTRUMENTATION/memcheck/mc_translate.c
Modified: branches/OTRACK_BY_INSTRUMENTATION/memcheck/mc_include.h
===================================================================
--- branches/OTRACK_BY_INSTRUMENTATION/memcheck/mc_include.h 2008-04-04 19:10:21 UTC (rev 7843)
+++ branches/OTRACK_BY_INSTRUMENTATION/memcheck/mc_include.h 2008-04-05 11:36:35 UTC (rev 7844)
@@ -320,7 +320,7 @@
extern VG_REGPARM(1) UWord MC_(helperc_LOADV8) ( Addr );
extern void MC_(helperc_MAKE_STACK_UNINIT) ( Addr base, UWord len,
- UInt otag );
+ Addr nia );
VG_REGPARM(2) void MC_(helperc_b_store1) ( Addr a, UWord d32 );
VG_REGPARM(2) void MC_(helperc_b_store2) ( Addr a, UWord d32 );
Modified: branches/OTRACK_BY_INSTRUMENTATION/memcheck/mc_main.c
===================================================================
--- branches/OTRACK_BY_INSTRUMENTATION/memcheck/mc_main.c 2008-04-04 19:10:21 UTC (rev 7843)
+++ branches/OTRACK_BY_INSTRUMENTATION/memcheck/mc_main.c 2008-04-05 11:36:35 UTC (rev 7844)
@@ -2380,12 +2380,65 @@
with defined values and g could mistakenly read them. So the RZ
also needs to be nuked on function calls.
*/
-void MC_(helperc_MAKE_STACK_UNINIT) ( Addr base, UWord len, UInt otag )
+
+
+/* Here's a simple cache to hold nia -> otag mappings. It could be
+ improved so as to have a lower miss rate. */
+
+static UWord stats__nia_cache_queries = 0;
+static UWord stats__nia_cache_misses = 0;
+
+typedef
+ struct { UWord arg1; UWord res; }
+ WCacheEnt;
+
+#define N_NIA_TO_OTAG_CACHE 511
+
+static WCacheEnt nia_to_otag_cache[N_NIA_TO_OTAG_CACHE];
+
+static void init_nia_to_otag_cache ( void ) {
+ VG_(memset)( &nia_to_otag_cache, 0, sizeof(nia_to_otag_cache) );
+}
+
+static inline UInt convert_nia_to_otag ( Addr nia )
{
+ UWord i;
+ UInt otag;
+ ExeContext* ec;
+
+ tl_assert( sizeof(nia_to_otag_cache[0].arg1) == sizeof(nia) );
+
+ stats__nia_cache_queries++;
+ i = nia % N_NIA_TO_OTAG_CACHE;
+ tl_assert(i >= 0 && i < N_NIA_TO_OTAG_CACHE);
+
+ if (LIKELY( nia_to_otag_cache[i].arg1 == nia ))
+ return nia_to_otag_cache[i].res;
+
+ stats__nia_cache_misses++;
+ ec = VG_(make_depth_1_ExeContext_from_Addr)(nia);
+ tl_assert(ec);
+ otag = VG_(get_ExeContext_uniq)(ec);
+ tl_assert(otag > 0);
+
+ nia_to_otag_cache[i].arg1 = nia;
+ nia_to_otag_cache[i].res = (UWord)otag;
+ return otag;
+}
+
+
+
+void MC_(helperc_MAKE_STACK_UNINIT) ( Addr base, UWord len, Addr nia )
+{
+ UInt otag;
tl_assert(sizeof(UWord) == sizeof(SizeT));
if (0)
- VG_(printf)("helperc_MAKE_STACK_UNINIT %p %lu\n", base, len );
+ VG_(printf)("helperc_MAKE_STACK_UNINIT (%p,%lu,nia=%p)\n",
+ base, len, nia );
+ otag = convert_nia_to_otag ( nia );
+ tl_assert(otag > 0);
+
# if 0
/* Really slow version */
MC_(make_mem_undefined)(base, len, otag);
@@ -5635,6 +5688,9 @@
- stats__ocacheline_found_at_N,
stats__ocacheline_found_at_1,
stats__ocacheline_found_at_N );
+ VG_(message)(Vg_DebugMsg,
+ " niacache: %,12lu finds %,12lu misses",
+ stats__nia_cache_queries, stats__nia_cache_misses);
}
if (0) {
@@ -5767,6 +5823,7 @@
tl_assert(-1 != VG_(log2)(BYTES_PER_SEC_VBIT_NODE));
init_OCache();
+ init_nia_to_otag_cache();
}
VG_DETERMINE_INTERFACE_VERSION(mc_pre_clo_init)
Modified: branches/OTRACK_BY_INSTRUMENTATION/memcheck/mc_translate.c
===================================================================
--- branches/OTRACK_BY_INSTRUMENTATION/memcheck/mc_translate.c 2008-04-04 19:10:21 UTC (rev 7843)
+++ branches/OTRACK_BY_INSTRUMENTATION/memcheck/mc_translate.c 2008-04-05 11:36:35 UTC (rev 7844)
@@ -3220,6 +3220,7 @@
void MC_(helperc_MAKE_STACK_UNINIT) ( Addr base, UWord len,
UInt otag );
*/
+#if 0
static
void do_AbiHint ( MCEnv* mce, IRExpr* base, Int len, Addr64 guest_IP )
{
@@ -3243,8 +3244,30 @@
);
stmt( 'V', mce, IRStmt_Dirty(di) );
}
+#else
+/* We have an ABI hint telling us that [base .. base+len-1] is to
+ become undefined ("writable"). Generate code to call a helper to
+ notify the A/V bit machinery of this fact.
+ We call
+ void MC_(helperc_MAKE_STACK_UNINIT) ( Addr base, UWord len,
+ Addr nia );
+*/
+static
+void do_AbiHint ( MCEnv* mce, IRExpr* base, Int len, IRExpr* nia )
+{
+ IRDirty* di;
+ di = unsafeIRDirty_0_N(
+ 0/*regparms*/,
+ "MC_(helperc_MAKE_STACK_UNINIT)",
+ VG_(fnptr_to_fnentry)( &MC_(helperc_MAKE_STACK_UNINIT) ),
+ mkIRExprVec_3( base, mkIRExpr_HWord( (UInt)len), nia )
+ );
+ stmt( 'V', mce, IRStmt_Dirty(di) );
+}
+#endif
+
/*------------------------------------------------------------*/
/*--- Memcheck main ---*/
/*------------------------------------------------------------*/
@@ -3347,7 +3370,8 @@
case Ist_Exit:
return isBogusAtom(st->Ist.Exit.guard);
case Ist_AbiHint:
- return isBogusAtom(st->Ist.AbiHint.base);
+ return isBogusAtom(st->Ist.AbiHint.base)
+ || isBogusAtom(st->Ist.AbiHint.nia);
case Ist_NoOp:
case Ist_IMark:
case Ist_MBE:
@@ -3560,8 +3584,9 @@
IMark is supposed to be at the start of *every*
instruction's IR. Hence this should never fail. */
tl_assert(curr_IP_known);
- do_AbiHint( &mce, st->Ist.AbiHint.base, st->Ist.AbiHint.len,
- curr_IP );
+ do_AbiHint( &mce, st->Ist.AbiHint.base,
+ st->Ist.AbiHint.len,
+ st->Ist.AbiHint.nia );
break;
default:
@@ -4452,7 +4477,7 @@
case Ist_AbiHint:
/* The value-check instrumenter handles this - by arranging
- to pass an origin-check tag to
+ to pass the address of the next instruction to
MC_(helperc_MAKE_STACK_UNINIT). This is all that needs to
happen for origin tracking w.r.t. AbiHints. So there is
nothing to do here. */
|
|
From: <sv...@va...> - 2008-04-05 11:34:46
|
Author: sewardj
Date: 2008-04-05 12:34:48 +0100 (Sat, 05 Apr 2008)
New Revision: 1820
Log:
Give the IR "AbiHint" construction, a third argument which indicates
the address of the next instruction to be executed. This is needed to
support origin tracking in Memcheck on platforms which use stack
redzones (amd64-linux, ppc64-linux, ppc{32,64}-aix5).
AbiHints indicate places where the redzone below the stack pointer
logically becomes undefined as per that target's calling conventions.
With origin tracking enabled, we must also set the origins of that
undefined area correctly, otherwise origins on stack allocated
undefined values are wrong -- they are often incorrectly reported as
deriving from the current function's caller, or from a function called
by the current function, which has since returned (to the current
function).
Modified:
branches/OTRACK_BY_INSTRUMENTATION/priv/guest-amd64/toIR.c
branches/OTRACK_BY_INSTRUMENTATION/priv/guest-ppc/toIR.c
branches/OTRACK_BY_INSTRUMENTATION/priv/ir/irdefs.c
branches/OTRACK_BY_INSTRUMENTATION/priv/ir/iropt.c
branches/OTRACK_BY_INSTRUMENTATION/pub/libvex_ir.h
Modified: branches/OTRACK_BY_INSTRUMENTATION/priv/guest-amd64/toIR.c
===================================================================
--- branches/OTRACK_BY_INSTRUMENTATION/priv/guest-amd64/toIR.c 2008-04-03 12:17:53 UTC (rev 1819)
+++ branches/OTRACK_BY_INSTRUMENTATION/priv/guest-amd64/toIR.c 2008-04-05 11:34:48 UTC (rev 1820)
@@ -1944,12 +1944,15 @@
}
}
-/* Let new_rsp be the %rsp value after a call/return. This function
- generates an AbiHint to say that -128(%rsp) .. -1(%rsp) should now
- be regarded as uninitialised.
+/* Let new_rsp be the %rsp value after a call/return. Let nia be the
+ guest address of the next instruction to be executed.
+
+ This function generates an AbiHint to say that -128(%rsp)
+ .. -1(%rsp) should now be regarded as uninitialised.
*/
static
-void make_redzone_AbiHint ( VexAbiInfo* vbi, IRTemp new_rsp, HChar* who )
+void make_redzone_AbiHint ( VexAbiInfo* vbi,
+ IRTemp new_rsp, IRTemp nia, HChar* who )
{
Int szB = vbi->guest_stack_redzone_size;
vassert(szB >= 0);
@@ -1961,10 +1964,12 @@
if (0) vex_printf("AbiHint: %s\n", who);
vassert(typeOfIRTemp(irsb->tyenv, new_rsp) == Ity_I64);
+ vassert(typeOfIRTemp(irsb->tyenv, nia) == Ity_I64);
if (szB > 0)
stmt( IRStmt_AbiHint(
binop(Iop_Sub64, mkexpr(new_rsp), mkU64(szB)),
- szB
+ szB,
+ mkexpr(nia)
));
}
@@ -3713,7 +3718,7 @@
assign(t2, binop(Iop_Sub64, getIReg64(R_RSP), mkU64(8)));
putIReg64(R_RSP, mkexpr(t2));
storeLE( mkexpr(t2), mkU64(guest_RIP_bbstart+delta+1));
- make_redzone_AbiHint(vbi, t2, "call-Ev(reg)");
+ make_redzone_AbiHint(vbi, t2, t3/*nia*/, "call-Ev(reg)");
jmp_treg(Ijk_Call,t3);
dres->whatNext = Dis_StopHere;
showSz = False;
@@ -3767,7 +3772,7 @@
assign(t2, binop(Iop_Sub64, getIReg64(R_RSP), mkU64(8)));
putIReg64(R_RSP, mkexpr(t2));
storeLE( mkexpr(t2), mkU64(guest_RIP_bbstart+delta+len));
- make_redzone_AbiHint(vbi, t2, "call-Ev(mem)");
+ make_redzone_AbiHint(vbi, t2, t3/*nia*/, "call-Ev(mem)");
jmp_treg(Ijk_Call,t3);
dres->whatNext = Dis_StopHere;
showSz = False;
@@ -7678,7 +7683,7 @@
assign(t2, loadLE(Ity_I64,mkexpr(t1)));
assign(t3, binop(Iop_Add64, mkexpr(t1), mkU64(8+d64)));
putIReg64(R_RSP, mkexpr(t3));
- make_redzone_AbiHint(vbi, t3, "ret");
+ make_redzone_AbiHint(vbi, t3, t2/*nia*/, "ret");
jmp_treg(Ijk_Ret,t2);
}
@@ -13493,7 +13498,9 @@
assign(t1, binop(Iop_Sub64, getIReg64(R_RSP), mkU64(8)));
putIReg64(R_RSP, mkexpr(t1));
storeLE( mkexpr(t1), mkU64(guest_RIP_bbstart+delta));
- make_redzone_AbiHint(vmi, t1, "call-d32");
+ t2 = newTemp(Ity_I64);
+ assign(t2, mkU64((Addr64)d64));
+ make_redzone_AbiHint(vmi, t1, t2/*nia*/, "call-d32");
if (resteerOkFn( callback_opaque, (Addr64)d64) ) {
/* follow into the call target. */
dres.whatNext = Dis_Resteer;
Modified: branches/OTRACK_BY_INSTRUMENTATION/priv/guest-ppc/toIR.c
===================================================================
--- branches/OTRACK_BY_INSTRUMENTATION/priv/guest-ppc/toIR.c 2008-04-03 12:17:53 UTC (rev 1819)
+++ branches/OTRACK_BY_INSTRUMENTATION/priv/guest-ppc/toIR.c 2008-04-05 11:34:48 UTC (rev 1820)
@@ -1217,17 +1217,20 @@
{
Int szB = vbi->guest_stack_redzone_size;
if (0) vex_printf("AbiHint: %s\n", who);
+vassert(0); /*FIXME*/
vassert(szB >= 0);
if (szB > 0) {
if (mode64)
stmt( IRStmt_AbiHint(
binop(Iop_Sub64, getIReg(1), mkU64(szB)),
szB
+,mkU64(0)
));
else
stmt( IRStmt_AbiHint(
binop(Iop_Sub32, getIReg(1), mkU32(szB)),
szB
+,mkU32(0)
));
}
}
Modified: branches/OTRACK_BY_INSTRUMENTATION/priv/ir/irdefs.c
===================================================================
--- branches/OTRACK_BY_INSTRUMENTATION/priv/ir/irdefs.c 2008-04-03 12:17:53 UTC (rev 1819)
+++ branches/OTRACK_BY_INSTRUMENTATION/priv/ir/irdefs.c 2008-04-05 11:34:48 UTC (rev 1820)
@@ -769,7 +769,9 @@
case Ist_AbiHint:
vex_printf("====== AbiHint(");
ppIRExpr(s->Ist.AbiHint.base);
- vex_printf(", %d) ======", s->Ist.AbiHint.len);
+ vex_printf(", %d, ", s->Ist.AbiHint.len);
+ ppIRExpr(s->Ist.AbiHint.nia);
+ vex_printf(") ======");
break;
case Ist_Put:
vex_printf( "PUT(%d) = ", s->Ist.Put.offset);
@@ -1156,11 +1158,12 @@
s->Ist.IMark.len = len;
return s;
}
-IRStmt* IRStmt_AbiHint ( IRExpr* base, Int len ) {
+IRStmt* IRStmt_AbiHint ( IRExpr* base, Int len, IRExpr* nia ) {
IRStmt* s = LibVEX_Alloc(sizeof(IRStmt));
s->tag = Ist_AbiHint;
s->Ist.AbiHint.base = base;
s->Ist.AbiHint.len = len;
+ s->Ist.AbiHint.nia = nia;
return s;
}
IRStmt* IRStmt_Put ( Int off, IRExpr* data ) {
@@ -1384,7 +1387,8 @@
return IRStmt_NoOp();
case Ist_AbiHint:
return IRStmt_AbiHint(deepCopyIRExpr(s->Ist.AbiHint.base),
- s->Ist.AbiHint.len);
+ s->Ist.AbiHint.len,
+ deepCopyIRExpr(s->Ist.AbiHint.nia));
case Ist_IMark:
return IRStmt_IMark(s->Ist.IMark.addr, s->Ist.IMark.len);
case Ist_Put:
@@ -1984,7 +1988,8 @@
switch (st->tag) {
case Ist_AbiHint:
- return isIRAtom(st->Ist.AbiHint.base);
+ return isIRAtom(st->Ist.AbiHint.base)
+ && isIRAtom(st->Ist.AbiHint.nia);
case Ist_Put:
return isIRAtom(st->Ist.Put.data);
case Ist_PutI:
@@ -2194,6 +2199,7 @@
break;
case Ist_AbiHint:
useBeforeDef_Expr(bb,stmt,stmt->Ist.AbiHint.base,def_counts);
+ useBeforeDef_Expr(bb,stmt,stmt->Ist.AbiHint.nia,def_counts);
break;
case Ist_Put:
useBeforeDef_Expr(bb,stmt,stmt->Ist.Put.data,def_counts);
@@ -2447,6 +2453,9 @@
if (typeOfIRExpr(tyenv, stmt->Ist.AbiHint.base) != gWordTy)
sanityCheckFail(bb,stmt,"IRStmt.AbiHint.base: "
"not :: guest word type");
+ if (typeOfIRExpr(tyenv, stmt->Ist.AbiHint.nia) != gWordTy)
+ sanityCheckFail(bb,stmt,"IRStmt.AbiHint.nia: "
+ "not :: guest word type");
break;
case Ist_Put:
tcExpr( bb, stmt, stmt->Ist.Put.data, gWordTy );
Modified: branches/OTRACK_BY_INSTRUMENTATION/priv/ir/iropt.c
===================================================================
--- branches/OTRACK_BY_INSTRUMENTATION/priv/ir/iropt.c 2008-04-03 12:17:53 UTC (rev 1819)
+++ branches/OTRACK_BY_INSTRUMENTATION/priv/ir/iropt.c 2008-04-05 11:34:48 UTC (rev 1820)
@@ -448,7 +448,8 @@
break;
case Ist_AbiHint:
e1 = flatten_Expr(bb, st->Ist.AbiHint.base);
- addStmtToIRSB(bb, IRStmt_AbiHint(e1, st->Ist.AbiHint.len));
+ e2 = flatten_Expr(bb, st->Ist.AbiHint.nia);
+ addStmtToIRSB(bb, IRStmt_AbiHint(e1, st->Ist.AbiHint.len, e2));
break;
case Ist_Exit:
e1 = flatten_Expr(bb, st->Ist.Exit.guard);
@@ -712,6 +713,7 @@
AbiHints.*/
case Ist_AbiHint:
vassert(isIRAtom(st->Ist.AbiHint.base));
+ vassert(isIRAtom(st->Ist.AbiHint.nia));
/* fall through */
case Ist_MBE:
case Ist_Dirty:
@@ -1707,9 +1709,11 @@
switch (st->tag) {
case Ist_AbiHint:
vassert(isIRAtom(st->Ist.AbiHint.base));
+ vassert(isIRAtom(st->Ist.AbiHint.nia));
return IRStmt_AbiHint(
fold_Expr(subst_Expr(env, st->Ist.AbiHint.base)),
- st->Ist.AbiHint.len
+ st->Ist.AbiHint.len,
+ fold_Expr(subst_Expr(env, st->Ist.AbiHint.nia))
);
case Ist_Put:
vassert(isIRAtom(st->Ist.Put.data));
@@ -1953,6 +1957,7 @@
switch (st->tag) {
case Ist_AbiHint:
addUses_Expr(set, st->Ist.AbiHint.base);
+ addUses_Expr(set, st->Ist.AbiHint.nia);
return;
case Ist_PutI:
addUses_Expr(set, st->Ist.PutI.ix);
@@ -3221,6 +3226,7 @@
break;
case Ist_AbiHint:
deltaIRExpr(st->Ist.AbiHint.base, delta);
+ deltaIRExpr(st->Ist.AbiHint.nia, delta);
break;
case Ist_Put:
deltaIRExpr(st->Ist.Put.data, delta);
@@ -3677,6 +3683,7 @@
switch (st->tag) {
case Ist_AbiHint:
aoccCount_Expr(uses, st->Ist.AbiHint.base);
+ aoccCount_Expr(uses, st->Ist.AbiHint.nia);
return;
case Ist_WrTmp:
aoccCount_Expr(uses, st->Ist.WrTmp.data);
@@ -3908,7 +3915,8 @@
case Ist_AbiHint:
return IRStmt_AbiHint(
atbSubst_Expr(env, st->Ist.AbiHint.base),
- st->Ist.AbiHint.len
+ st->Ist.AbiHint.len,
+ atbSubst_Expr(env, st->Ist.AbiHint.nia)
);
case Ist_Store:
return IRStmt_Store(
@@ -4241,6 +4249,7 @@
switch (st->tag) {
case Ist_AbiHint:
vassert(isIRAtom(st->Ist.AbiHint.base));
+ vassert(isIRAtom(st->Ist.AbiHint.nia));
break;
case Ist_PutI:
*hasGetIorPutI = True;
Modified: branches/OTRACK_BY_INSTRUMENTATION/pub/libvex_ir.h
===================================================================
--- branches/OTRACK_BY_INSTRUMENTATION/pub/libvex_ir.h 2008-04-03 12:17:53 UTC (rev 1819)
+++ branches/OTRACK_BY_INSTRUMENTATION/pub/libvex_ir.h 2008-04-05 11:34:48 UTC (rev 1820)
@@ -1412,14 +1412,17 @@
that a given chunk of address space, [base .. base+len-1],
has become undefined. This is used on amd64-linux and
some ppc variants to pass stack-redzoning hints to whoever
- wants to see them.
+ wants to see them. It also indicates the address of the
+ next (dynamic) instruction that will be executed. This is
+ to help Memcheck to origin tracking.
- ppIRExpr output: ====== AbiHint(<base>, <len>) ======
- eg. ====== AbiHint(t1, 16) ======
+ ppIRExpr output: ====== AbiHint(<base>, <len>, <nia>) ======
+ eg. ====== AbiHint(t1, 16, t2) ======
*/
struct {
IRExpr* base; /* Start of undefined chunk */
Int len; /* Length of undefined chunk */
+ IRExpr* nia; /* Address of next (guest) insn */
} AbiHint;
/* Write a guest register, at a fixed offset in the guest state.
@@ -1506,7 +1509,7 @@
/* Statement constructors. */
extern IRStmt* IRStmt_NoOp ( void );
extern IRStmt* IRStmt_IMark ( Addr64 addr, Int len );
-extern IRStmt* IRStmt_AbiHint ( IRExpr* base, Int len );
+extern IRStmt* IRStmt_AbiHint ( IRExpr* base, Int len, IRExpr* nia );
extern IRStmt* IRStmt_Put ( Int off, IRExpr* data );
extern IRStmt* IRStmt_PutI ( IRRegArray* descr, IRExpr* ix, Int bias,
IRExpr* data );
|
|
From: Julian S. <js...@ac...> - 2008-04-05 11:25:03
|
Could you please send an example of a stack trace with extra frames in,
to look at?
J
On Thursday 03 April 2008 20:38, Bart Van Assche wrote:
> Hello,
>
> Sometimes when Valgrind prints a stack trace on an AMD64 system, there
> are a few dummy frames at the top which do not make sense. Apparently
> sometimes Valgrind tries to go up "too high" on the stack. The patch
> below should improve stack examination by Valgrind with only a minimal
> performance impact. All it does is to check that the instruction
> pointer fetched from the stack is not null and that what is assumed to
> be an instruction pointer does not point to the stack being examined.
>
> Any comments are welcome.
>
> Bart.
>
> svn diff coregrind/m_stacktrace.c
> Index: coregrind/m_stacktrace.c
> ===================================================================
> --- coregrind/m_stacktrace.c (revision 7839)
> +++ coregrind/m_stacktrace.c (working copy)
> @@ -276,8 +276,10 @@
> address; instead scan a likely section of stack (eg sp ..
> sp+256) and use suitable values found there.
> */
> - if (fp_min <= sp && sp < fp_max) {
> - ip = ((UWord*)sp)[0];
> + if (fp_min <= sp && sp < fp_max
> + && (ip = ((UWord*)sp)[0]) != 0
> + && (ip < fp_min || ip >= fp_max))
> + {
> if (sps) sps[i] = sp;
> if (fps) fps[i] = fp;
> ips[i++] = ip;
>
> -------------------------------------------------------------------------
> Check out the new SourceForge.net Marketplace.
> It's the best place to buy or sell services for
> just about anything Open Source.
> http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplac
>e _______________________________________________
> Valgrind-developers mailing list
> Val...@li...
> https://lists.sourceforge.net/lists/listinfo/valgrind-developers
|
|
From: Tom H. <th...@cy...> - 2008-04-05 03:14:02
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2008-04-05 03:15:05 BST 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 == 330 tests, 76 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/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (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/faultstatus (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) none/tests/shell (stderr) none/tests/shell_valid1 (stderr) none/tests/shell_valid2 (stderr) none/tests/shell_valid3 (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/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) |
|
From: Tom H. <th...@cy...> - 2008-04-05 03:05:31
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2008-04-05 03:15:02 BST 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 == 326 tests, 76 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/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (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/faultstatus (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) none/tests/shell (stderr) none/tests/shell_valid1 (stderr) none/tests/shell_valid2 (stderr) none/tests/shell_valid3 (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/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) |
|
From: Tom H. <th...@cy...> - 2008-04-05 02:51:14
|
Nightly build on aston ( x86_64, Fedora Core 5 ) started at 2008-04-05 03:20:09 BST 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 == 419 tests, 9 stderr failures, 1 stdout failure, 0 post failures == memcheck/tests/malloc_free_fill (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/x86/scalar (stderr) none/tests/blockfault (stderr) none/tests/faultstatus (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) |
|
From: Tom H. <th...@cy...> - 2008-04-05 02:51:14
|
Nightly build on lloyd ( x86_64, Fedora 7 ) started at 2008-04-05 03:05:04 BST 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 == 413 tests, 6 stderr failures, 2 stdout failures, 0 post failures == memcheck/tests/pointer-trace (stderr) memcheck/tests/vcpu_fnfns (stdout) memcheck/tests/x86/scalar (stderr) none/tests/faultstatus (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-04-05 02:39:51
|
Nightly build on trojan ( x86_64, Fedora Core 6 ) started at 2008-04-05 03:25:06 BST 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 == 417 tests, 8 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/faultstatus (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) |
|
From: Tom H. <th...@cy...> - 2008-04-05 02:30:38
|
Nightly build on dellow ( x86_64, Fedora 8 ) started at 2008-04-05 03:10:03 BST 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 == 413 tests, 9 stderr failures, 2 stdout failures, 0 post failures == memcheck/tests/pointer-trace (stderr) memcheck/tests/vcpu_fnfns (stdout) memcheck/tests/x86/scalar (stderr) none/tests/blockfault (stderr) none/tests/faultstatus (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) |
|
From: Tom H. <th...@cy...> - 2008-04-05 02:17:04
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2008-04-05 03:00:05 BST 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 == 419 tests, 31 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/varinfo6 (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/faultstatus (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) |