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
(10) |
2
(22) |
3
(15) |
4
(14) |
5
(8) |
6
(10) |
7
(14) |
|
8
(9) |
9
(10) |
10
(21) |
11
(16) |
12
(17) |
13
(15) |
14
(8) |
|
15
(12) |
16
(8) |
17
(44) |
18
(24) |
19
(29) |
20
(29) |
21
(17) |
|
22
(17) |
23
(16) |
24
(18) |
25
(16) |
26
(15) |
27
(16) |
28
(11) |
|
29
(11) |
30
(10) |
31
(12) |
|
|
|
|
|
From: Oswald B. <os...@kd...> - 2006-01-17 19:41:54
|
On Tue, Jan 17, 2006 at 01:46:02PM +0000, Julian Seward wrote: > As of a couple of days ago, the svn trunk contains support for > wrapping arbitrary functions. > i have a question. i know it was discussed, so maybe i just missed the answer. the wrapped function is actually called from within the wrapper - that means it will see an additional stack frame. i imagine this might pose a problem for some conceivable functions. additionally it might turn out to be hard or at least work intensive to replicate the args of varargs functions. iirc, it was discussed to instrument the prologues/epilogues of wrapped functions. what has become of this idea? if it was implemented that way, this extra-elaborate wrapper loading and naming scheme could go away; wraps would be just specified in the tool that needs them. -- Hi! I'm a .signature virus! Copy me into your ~/.signature, please! -- Chaos, panic, and disorder - my work here is done. |
|
From: Nicholas N. <nj...@cs...> - 2006-01-17 19:37:59
|
On Tue, 17 Jan 2006, Julian Seward wrote:
> One thing I've noticed recently is that V ignores control-Z's.
> That hasn't always been the case. For example in this
>
> int main ( void )
> {
> int i;
> i = 0;
> while (1) {
> printf("%d\n", i);
> i = i + 1;
> sleep(1);
> }
> }
>
> and also for compute-bound code not waiting in syscalls.
>
> Before I go peer at what's with it ... does anyone know if this is
> somehow a feature rather than a bug?
Not that I'm aware of. I've noticed it too myself.
Nick
|
|
From: Julian S. <js...@ac...> - 2006-01-17 17:13:39
|
On Tuesday 17 January 2006 16:52, Tom Hughes wrote:
> In message <200...@ja...>
>
> sv...@va... wrote:
> > Make the selection of the default platform a bit more sophisticated,
> > so it does the right thing on ppc64-linux rigs.
>
> Hmm. The default platform is not normally supposed to kick in just
> because you valgrinded a script - in that case it should read the #!
> line and find the interpreter and check if it is 32 or 64 bit.
That's definitely so if the script starts #!. Problem is it was failing
none/tests/shell_valid2. That's a valid script but it doesn't have a
#! line, so what was happening was that the launcher was selecting
ppc64-linux as the default target, then starting V, which decided it
needs to run /bin/sh, which is a 32-bit executable.
On all platforms so far {x86,amd64,ppc32}-linux, /bin/sh has the
same 'flavour' as the platform name (specifically, on amd64 it is
a 64-bit binary), so using VG_PLATFORM worked ok. But on ppc64-linux
it's a 32-bit binary (typically) and so we wind up with a 64-bit Valgrind
trying to run a 32-bit executable, which fails.
The only effect of this change is that on ppc64-linux, the default
platform is chosen to be ppc32-linux.
J
|
|
From: Tom H. <to...@co...> - 2006-01-17 16:53:12
|
In message <200...@ja...>
sv...@va... wrote:
> Make the selection of the default platform a bit more sophisticated,
> so it does the right thing on ppc64-linux rigs.
Hmm. The default platform is not normally supposed to kick in just
because you valgrinded a script - in that case it should read the #!
line and find the interpreter and check if it is 32 or 64 bit.
The default platform is mainly used when no client is given (so if
you use --help for example) and was chosen to maximise the chance
that an appropriate valgrind tool existed.
It is also used if platform detection fails for a client, but that
should only happen on an error - client doesn't exist etc - in which
case the tool is just going to print an error and exit anyway.
Tom
--
Tom Hughes (to...@co...)
http://www.compton.nu/
|
|
From: <sv...@va...> - 2006-01-17 16:41:40
|
Author: sewardj
Date: 2006-01-17 16:41:34 +0000 (Tue, 17 Jan 2006)
New Revision: 5543
Log:
Make the selection of the default platform a bit more sophisticated,
so it does the right thing on ppc64-linux rigs.
Modified:
trunk/coregrind/launcher.c
Modified: trunk/coregrind/launcher.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/launcher.c 2006-01-17 15:09:07 UTC (rev 5542)
+++ trunk/coregrind/launcher.c 2006-01-17 16:41:34 UTC (rev 5543)
@@ -59,6 +59,7 @@
#endif
=20
/* Report fatal errors */
+__attribute__((noreturn))
static void barf ( const char *format, ... )
{
va_list vargs;
@@ -70,6 +71,8 @@
va_end(vargs);
=20
exit(1);
+ /*NOTREACHED*/
+ assert(0);
}
=20
/* Search the path for the client program */
@@ -185,6 +188,7 @@
const char *toolname =3D NULL;
const char *clientname =3D NULL;
const char *platform;
+ const char *default_platform;
const char *cp;
char *toolfile;
char launcher_name[PATH_MAX+1];
@@ -224,15 +228,40 @@
toolname =3D "memcheck";
}
=20
- /* Work out what platform to use */
+ /* Select a platform to use if we can't decide that by looking at
+ the executable (eg because it's a shell script). Note that the
+ default_platform is not necessarily either the primary or
+ secondary build target. Instead it's chosen to maximise the
+ chances that /bin/sh will work on it. Hence for a primary
+ target of ppc64-linux we still choose ppc32-linux as the default
+ target, because on most ppc64-linux setups, the basic /bin,
+ /usr/bin, etc, stuff is built in 32-bit mode, not 64-bit
+ mode. */
+ if (0=3D=3Dstrcmp(VG_PLATFORM,"x86-linux"))
+ default_platform =3D "x86-linux";
+ else if (0=3D=3Dstrcmp(VG_PLATFORM,"amd64-linux"))
+ default_platform =3D "amd64-linux";
+ else if (0=3D=3Dstrcmp(VG_PLATFORM,"ppc32-linux"))
+ default_platform =3D "ppc32-linux";
+ else if (0=3D=3Dstrcmp(VG_PLATFORM,"ppc64-linux"))
+ default_platform =3D "ppc32-linux";
+ else
+ barf("Unknown VG_PLATFORM '%s'", VG_PLATFORM);
+
+ /* Work out what platform to use, or use the default platform if
+ not possible. */
if (clientname =3D=3D NULL) {
- VG_(debugLog)(1, "launcher", "no client specified, defaulting plat=
form to '%s'\n", VG_PLATFORM);
- platform =3D VG_PLATFORM;
+ VG_(debugLog)(1, "launcher",=20
+ "no client specified, defaulting platform to '%s'=
\n",
+ default_platform);
+ platform =3D default_platform;
} else if ((platform =3D select_platform(clientname)) !=3D NULL) {
VG_(debugLog)(1, "launcher", "selected platform '%s'\n", platform)=
;
} else {
- VG_(debugLog)(1, "launcher", "no platform detected, defaulting pla=
tform to '%s'\n", VG_PLATFORM);
- platform =3D VG_PLATFORM;
+ VG_(debugLog)(1, "launcher",=20
+ "no platform detected, defaulting platform to '%s=
'\n",
+ default_platform);
+ platform =3D default_platform;
}
=20
/* Figure out the name of this executable (viz, the launcher), so
|
|
From: Julian S. <js...@ac...> - 2006-01-17 16:11:59
|
On Tuesday 17 January 2006 16:00, Tom Hughes wrote: > In message <200...@ac...> > > Julian Seward <js...@ac...> wrote: > >> One issue here is that the new function wrapping system runs the > >> wrapper routine on the virtual CPU so the thread wrappers will have > >> to use client requests to keep the thread model updated. > > > > Yes. Looks like the VALGRIND_NON_SIMD_CALL* macros might come > > in handy for this kind of thing. > > Maybe, but how does the code in the preload library get the address > of the function in valgrind to call? Ah. Yes. So .. coregrind/m_replacemalloc has exactly the same problem. The solution there is (see the bottom of vg_replace_malloc.c) that the first time through, do a special client request which gets a whole bundle of function pointers(GET_MALLOCFUNCS). After that, you can just pick the right pointer out of the bundle and use that. How does that sound? J |
|
From: Tom H. <to...@co...> - 2006-01-17 16:01:11
|
In message <200...@ac...>
Julian Seward <js...@ac...> wrote:
>> One issue here is that the new function wrapping system runs the
>> wrapper routine on the virtual CPU so the thread wrappers will have
>> to use client requests to keep the thread model updated.
>
> Yes. Looks like the VALGRIND_NON_SIMD_CALL* macros might come
> in handy for this kind of thing.
Maybe, but how does the code in the preload library get the address
of the function in valgrind to call?
Tom
--
Tom Hughes (to...@co...)
http://www.compton.nu/
|
|
From: Julian S. <js...@ac...> - 2006-01-17 15:20:00
|
One thing I've noticed recently is that V ignores control-Z's.
That hasn't always been the case. For example in this
int main ( void )
{
int i;
i = 0;
while (1) {
printf("%d\n", i);
i = i + 1;
sleep(1);
}
}
and also for compute-bound code not waiting in syscalls.
Before I go peer at what's with it ... does anyone know if this is
somehow a feature rather than a bug?
J
|
|
From: <sv...@va...> - 2006-01-17 15:09:17
|
Author: tom
Date: 2006-01-17 15:09:07 +0000 (Tue, 17 Jan 2006)
New Revision: 5542
Log:
Get the core thread modelling code compiling again - uncomment the
code, fix the includes and switch to OSets instead of SkipLists.
Modified:
trunk/coregrind/m_threadmodel.c
trunk/coregrind/pub_core_threadmodel.h
Modified: trunk/coregrind/m_threadmodel.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_threadmodel.c 2006-01-17 02:56:33 UTC (rev 5541)
+++ trunk/coregrind/m_threadmodel.c 2006-01-17 15:09:07 UTC (rev 5542)
@@ -61,1180 +61,1223 @@
*/
=20
#include "pub_core_basics.h"
+#include "pub_core_errormgr.h"
+#include "pub_core_execontext.h"
+#include "pub_core_libcassert.h"
+#include "pub_core_libcbase.h"
+#include "pub_core_libcprint.h"
+#include "pub_core_mallocfree.h"
+#include "pub_core_oset.h"
+#include "pub_core_threadmodel.h"
+#include "pub_core_threadstate.h"
+#include "pub_core_tooliface.h"
=20
-//:: struct thread;
-//:: struct mutex;
-//:: struct condvar;
-//::=20
-//:: static const Bool debug_thread =3D False;
-//:: static const Bool debug_mutex =3D False;
-//::=20
-//:: /* --------------------------------------------------
-//:: Thread lifetime
-//:: =20
-//:: Threads are all expressed in terms of internal ThreadIds. The
-//:: thread library interface needs to map from the library's identif=
ers
-//:: to ThreadIds.
-//:: -------------------------------------------------- */
-//::=20
-//:: /* Per-thread state. We maintain our own here rather than hanging =
it
-//:: off ThreadState, so that we have the option of not having a 1:1
-//:: relationship between modelled threads and Valgrind threads. */
-//:: struct thread
-//:: {
-//:: ThreadId tid;
-//:: ThreadId creator;
-//::=20
-//:: Bool detached; /* thread is detached */
-//::=20
-//:: enum thread_state {
-//:: TS_Alive, /* alive */
-//:: TS_Zombie, /* waiting to be joined on (detached is False) */
-//:: TS_Dead, /* all dead */
-//:: =20
-//:: TS_Running, /* running */
-//:: TS_MutexBlocked, /* blocked on mutex */
-//:: TS_CVBlocked, /* blocked on condvar */
-//:: TS_JoinBlocked, /* blocked in join */
-//:: } state;
-//::=20
-//:: struct mutex *mx_blocked; /* mutex we're blocked on (state=3D=3D=
TS_MutexBlocked) */
-//:: struct condvar *cv_blocked; /* condvar we're blocked on (state=3D=
=3DTS_CVBlocked) */
-//:: struct thread *th_blocked; /* thread we're blocked on (state=3D=3D=
TS_JoinBlocked) */
-//::=20
-//:: ExeContext *ec_created; /* where created */
-//:: ExeContext *ec_blocked; /* where blocked/unblocked */
-//:: };
-//::=20
-//:: enum thread_error
-//:: {
-//:: THE_NotExist, /* thread doesn't exist */
-//:: THE_NotAlive, /* thread isn't alive (use after death) */
-//:: THE_Rebirth, /* thread already alive */
-//:: THE_Blocked, /* thread not supposed to be blocked */
-//:: THE_NotBlocked, /* thread supposed to be blocked */
-//:: THE_Detached, /* thread is detached */
-//:: };
-//::=20
-//:: struct thread_error_data
-//:: {
-//:: enum thread_error err;
-//:: struct thread *th;
-//:: const Char *action;
-//:: };
-//::=20
-//:: static const Char *pp_threadstate(const struct thread *th)
-//:: {
-//:: if (th =3D=3D NULL)
-//:: return "non-existent";
-//::=20
-//:: switch(th->state) {
-//:: case TS_Alive: return "alive";
-//:: case TS_Zombie: return "zombie";
-//:: case TS_Dead: return "dead";
-//:: case TS_Running: return "running";
-//:: case TS_MutexBlocked:return "mutex-blocked";
-//:: case TS_CVBlocked: return "cv-blocked";
-//:: case TS_JoinBlocked: return "join-blocked";
-//:: default: return "???";
-//:: }
-//:: }
-//::=20
-//:: static void thread_validate(struct thread *th)
-//:: {
-//:: switch(th->state) {
-//:: case TS_Alive:
-//:: case TS_Running:
-//:: case TS_Dead:
-//:: case TS_Zombie:
-//:: vg_assert(th->mx_blocked =3D=3D NULL);
-//:: vg_assert(th->cv_blocked =3D=3D NULL);
-//:: vg_assert(th->th_blocked =3D=3D NULL);
-//:: break;
-//::=20
-//:: case TS_MutexBlocked:
-//:: vg_assert(th->mx_blocked !=3D NULL);
-//:: vg_assert(th->cv_blocked =3D=3D NULL);
-//:: vg_assert(th->th_blocked =3D=3D NULL);
-//:: break;
-//::=20
-//:: case TS_CVBlocked:
-//:: vg_assert(th->mx_blocked =3D=3D NULL);
-//:: vg_assert(th->cv_blocked !=3D NULL);
-//:: vg_assert(th->th_blocked =3D=3D NULL);
-//:: break;
-//::=20
-//:: case TS_JoinBlocked:
-//:: vg_assert(th->mx_blocked =3D=3D NULL);
-//:: vg_assert(th->cv_blocked =3D=3D NULL);
-//:: vg_assert(th->th_blocked !=3D NULL);
-//:: break;
-//:: }
-//:: }
-//::=20
-//:: static void thread_setstate(struct thread *th, enum thread_state st=
ate)
-//:: {
-//:: ExeContext *ec;
-//::=20
-//:: if (th->state =3D=3D state)
-//:: return;
-//::=20
-//:: ec =3D VG_(record_ExeContext)(th->tid);
-//::=20
-//:: switch(state) {
-//:: case TS_Alive:
-//:: case TS_Dead:
-//:: th->ec_created =3D ec;
-//:: break;
-//::=20
-//:: case TS_Running:
-//:: case TS_MutexBlocked:
-//:: case TS_CVBlocked:
-//:: case TS_JoinBlocked:
-//:: case TS_Zombie:
-//:: th->ec_blocked =3D ec;
-//:: }
-//::=20
-//:: th->state =3D state;
-//:: if (debug_thread)
-//:: VG_(printf)("setting thread(%d) -> %s\n", th->tid, pp_threads=
tate(th));
-//:: thread_validate(th);
-//:: }
-//::=20
-//:: static void do_thread_run(struct thread *th)
-//:: {
-//:: th->mx_blocked =3D NULL;
-//:: th->cv_blocked =3D NULL;
-//:: th->th_blocked =3D NULL;
-//:: thread_setstate(th, TS_Running);
-//:: }
-//::=20
-//:: static void do_thread_block_mutex(struct thread *th, struct mutex *=
mx)
-//:: {
-//:: th->mx_blocked =3D mx;
-//:: th->cv_blocked =3D NULL;
-//:: th->th_blocked =3D NULL;
-//:: thread_setstate(th, TS_MutexBlocked);
-//:: }
-//::=20
-//:: static void do_thread_block_condvar(struct thread *th, struct condv=
ar *cv)
-//:: {
-//:: th->mx_blocked =3D NULL;
-//:: th->cv_blocked =3D cv;
-//:: th->th_blocked =3D NULL;
-//:: thread_setstate(th, TS_CVBlocked);
-//:: }
-//::=20
-//:: static void do_thread_block_join(struct thread *th, struct thread *=
joinee)
-//:: {
-//:: th->mx_blocked =3D NULL;
-//:: th->cv_blocked =3D NULL;
-//:: th->th_blocked =3D joinee;
-//:: thread_setstate(th, TS_JoinBlocked);
-//:: }
-//::=20
-//:: static void do_thread_block_zombie(struct thread *th)
-//:: {
-//:: th->mx_blocked =3D NULL;
-//:: th->cv_blocked =3D NULL;
-//:: th->th_blocked =3D NULL;
-//:: thread_setstate(th, TS_Zombie);
-//:: }
-//::=20
-//:: static void do_thread_dead(struct thread *th)
-//:: {
-//:: th->mx_blocked =3D NULL;
-//:: th->cv_blocked =3D NULL;
-//:: th->th_blocked =3D NULL;
-//:: thread_setstate(th, TS_Dead);
-//:: }
-//::=20
-//:: static SkipList sk_threads =3D VG_SKIPLIST_INIT(struct thread, tid,=
VG_(cmp_UInt), NULL, VG_AR_CORE);
-//::=20
-//:: static struct thread *thread_get(ThreadId tid)
-//:: {
-//:: return VG_(SkipList_Find_Exact)(&sk_threads, &tid);
-//:: }
-//::=20
-//:: static void thread_report(ThreadId tid, enum thread_error err, cons=
t Char *action)
-//:: {
-//:: Char *errstr =3D "?";
-//:: struct thread *th =3D thread_get(tid);
-//:: struct thread_error_data errdata;
-//::=20
-//:: switch(err) {
-//:: case THE_NotExist: errstr =3D "non existent"; break;
-//:: case THE_NotAlive: errstr =3D "not alive"; break;
-//:: case THE_Rebirth: errstr =3D "re-born"; break;
-//:: case THE_Blocked: errstr =3D "blocked"; break;
-//:: case THE_NotBlocked: errstr =3D "not blocked"; break;
-//:: case THE_Detached: errstr =3D "detached"; break;
-//:: }
-//::=20
-//:: errdata.err =3D err;
-//:: errdata.th =3D th;
-//:: errdata.action =3D action;
-//:: =20
-//:: VG_(maybe_record_error)(VG_(get_running_tid)(), ThreadErr, 0, er=
rstr, &errdata);
-//:: }
-//::=20
-//:: static void pp_thread_error(Error *err)
-//:: {
-//:: struct thread_error_data *errdata =3D VG_(get_error_extra)(err);
-//:: struct thread *th =3D errdata->th;
-//:: Char *errstr =3D VG_(get_error_string)(err);
-//:: =20
-//:: VG_(message)(Vg_UserMsg, "Found %s thread in state %s while %s",
-//:: errstr, pp_threadstate(th), errdata->action);
-//:: VG_(pp_ExeContext)(VG_(get_error_where)(err));
-//::=20
-//:: if (th) {
-//:: VG_(message)(Vg_UserMsg, " Thread %d was %s",
-//:: th->tid, th->state =3D=3D TS_Dead ? "destroyed" : "created");
-//:: VG_(pp_ExeContext)(th->ec_created);
-//:: }
-//:: }
-//::=20
-//:: /* Thread creation */
-//:: void VG_(tm_thread_create)(ThreadId creator, ThreadId tid, Bool det=
ached)
-//:: {
-//:: struct thread *th =3D thread_get(tid);
-//::=20
-//:: if (debug_thread)
-//:: VG_(printf)("thread %d creates %d %s\n", creator, tid, detach=
ed ? "detached" : "");
-//:: if (th !=3D NULL) {
-//:: if (th->state !=3D TS_Dead)
-//:: thread_report(tid, THE_Rebirth, "creating");
-//:: } else {
-//:: th =3D VG_(SkipNode_Alloc)(&sk_threads);
-//:: th->tid =3D tid;
-//:: VG_(SkipList_Insert)(&sk_threads, th);
-//:: }
-//::=20
-//:: th->creator =3D creator;
-//:: th->detached =3D detached;
-//:: th->mx_blocked =3D NULL;
-//:: th->cv_blocked =3D NULL;
-//:: th->th_blocked =3D NULL;
-//::=20
-//:: thread_setstate(th, TS_Alive);
-//:: do_thread_run(th);
-//:: }
-//::=20
-//:: Bool VG_(tm_thread_exists)(ThreadId tid)
-//:: {
-//:: struct thread *th =3D thread_get(tid);
-//::=20
-//:: return th && th->state !=3D TS_Dead;
-//:: }
-//::=20
-//:: /* A thread is terminating itself
-//:: - fails if tid has already terminated
-//:: - if detached, tid becomes invalid for all further operations
-//:: - if not detached, the thread remains in a Zombie state until
-//:: someone joins on it
-//:: */
-//:: void VG_(tm_thread_exit)(ThreadId tid)
-//:: {
-//:: struct thread *th =3D thread_get(tid);
-//::=20
-//:: if (th =3D=3D NULL)
-//:: thread_report(tid, THE_NotExist, "exiting");
-//:: else {
-//:: struct thread *joiner;
-//::=20
-//:: switch(th->state) {
-//:: case TS_Dead:
-//:: case TS_Zombie: /* already exited once */
-//:: thread_report(tid, THE_NotAlive, "exiting");
-//:: break;
-//::=20
-//:: case TS_MutexBlocked:
-//:: case TS_CVBlocked:
-//:: case TS_JoinBlocked:
-//:: thread_report(tid, THE_Blocked, "exiting");
-//:: break;
-//::=20
-//:: case TS_Alive:
-//:: case TS_Running:
-//:: /* OK */
-//:: break;
-//:: }
-//::=20
-//:: /* ugly - walk all threads to find people joining with us */
-//:: /* In pthreads its an error to have multiple joiners, but tha=
t
-//:: seems a bit specific to implement here; there should a way
-//:: for the thread library binding to handle this. */
-//:: for(joiner =3D VG_(SkipNode_First)(&sk_threads);
-//:: joiner !=3D NULL;
-//:: joiner =3D VG_(SkipNode_Next)(&sk_threads, joiner)) {
-//:: if (joiner->state =3D=3D TS_JoinBlocked && joiner->th_blocked =3D=
=3D th) {
-//:: /* found someone - wake them up */
-//:: do_thread_run(joiner);
-//::=20
-//:: /* we're dead */
-//:: do_thread_dead(th);
-//:: }
-//:: }
-//::=20
-//:: if (th->state !=3D TS_Dead)
-//:: do_thread_block_zombie(th);
-//:: }
-//:: }
-//::=20
-//:: void VG_(tm_thread_detach)(ThreadId tid)
-//:: {
-//:: struct thread *th =3D thread_get(tid);
-//::=20
-//:: if (th =3D=3D NULL)
-//:: thread_report(tid, THE_NotExist, "detaching");
-//:: else {
-//:: if (th->detached)
-//:: thread_report(tid, THE_Detached, "detaching");
-//:: else {
-//:: /* XXX look for waiters */
-//:: th->detached =3D True;
-//:: }
-//:: }
-//:: }
-//::=20
-//:: /* One thread blocks until another has terminated
-//:: - fails if joinee is detached
-//:: - fails if joinee doesn't exist
-//:: - once the join completes, joinee is dead
-//:: */
-//:: void VG_(tm_thread_join)(ThreadId joinerid, ThreadId joineeid)
-//:: {
-//:: struct thread *joiner =3D thread_get(joinerid);
-//:: struct thread *joinee =3D thread_get(joineeid);
-//::=20
-//:: /* First, check the joinee thread's state */
-//:: if (joinee =3D=3D NULL)
-//:: thread_report(joineeid, THE_NotExist, "joining as joinee");
-//:: else {
-//:: switch(joinee->state) {
-//:: case TS_Alive: /* really shouldn't see them in this state...=
*/
-//:: case TS_Running:
-//:: case TS_Zombie:
-//:: case TS_MutexBlocked:
-//:: case TS_CVBlocked:
-//:: case TS_JoinBlocked:
-//:: /* OK */
-//:: break;
-//::=20
-//:: case TS_Dead:
-//:: thread_report(joineeid, THE_NotAlive, "joining as joinee");
-//:: break;
-//:: }
-//:: }
-//::=20
-//:: /* now the joiner... */
-//:: if (joiner =3D=3D NULL)
-//:: thread_report(joineeid, THE_NotExist, "joining as joiner");
-//:: else {
-//:: switch(joiner->state) {
-//:: case TS_Alive: /* ? */
-//:: case TS_Running: /* OK */
-//:: break;
-//::=20
-//:: case TS_Zombie: /* back from the dead */
-//:: case TS_Dead:
-//:: thread_report(joineeid, THE_NotAlive, "joining as joiner");
-//:: break;
-//::=20
-//:: case TS_MutexBlocked:
-//:: case TS_CVBlocked:
-//:: case TS_JoinBlocked:
-//:: thread_report(joineeid, THE_Blocked, "joining as joiner");
-//:: break;
-//:: }
-//::=20
-//:: if (joinee->detached)
-//:: thread_report(joineeid, THE_Detached, "joining as joiner");
-//:: else {
-//:: /* block if the joinee hasn't exited yet */
-//:: if (joinee) {
-//:: switch(joinee->state) {
-//:: case TS_Dead:
-//:: break;
-//::=20
-//:: default:
-//:: if (joinee->state =3D=3D TS_Zombie)
-//:: do_thread_dead(joinee);
-//:: else
-//:: do_thread_block_join(joiner, joinee);
-//:: }
-//:: }
-//:: }
-//:: }
-//:: }
-//::=20
-//:: /* Context switch to a new thread */
-//:: void VG_(tm_thread_switchto)(ThreadId tid)
-//:: {
-//:: VG_TRACK( thread_run, tid );
-//:: }
-//::=20
-//:: static void thread_block_mutex(ThreadId tid, struct mutex *mx)
-//:: {
-//:: struct thread *th =3D thread_get(tid);
-//::=20
-//:: if (th =3D=3D NULL) {
-//:: /* should an unknown thread doing something make it spring to=
life? */
-//:: thread_report(tid, THE_NotExist, "blocking on mutex");
-//:: return;
-//:: }
-//:: switch(th->state) {
-//:: case TS_Dead:
-//:: case TS_Zombie:
-//:: thread_report(th->tid, THE_NotAlive, "blocking on mutex");
-//:: break;
-//::=20
-//:: case TS_MutexBlocked:
-//:: case TS_CVBlocked:
-//:: case TS_JoinBlocked:
-//:: thread_report(th->tid, THE_Blocked, "blocking on mutex");
-//:: break;
-//::=20
-//:: case TS_Alive:
-//:: case TS_Running: /* OK */
-//:: break;
-//:: }
-//::=20
-//:: do_thread_block_mutex(th, mx);
-//:: }
-//::=20
-//:: static void thread_unblock_mutex(ThreadId tid, struct mutex *mx, co=
nst Char *action)
-//:: {
-//:: struct thread *th =3D thread_get(tid);
-//::=20
-//:: if (th =3D=3D NULL) {
-//:: /* should an unknown thread doing something make it spring to=
life? */
-//:: thread_report(tid, THE_NotExist, "giving up on mutex");
-//:: return;
-//:: }
-//::=20
-//:: switch(th->state) {
-//:: case TS_MutexBlocked: /* OK */
-//:: break;
-//::=20
-//:: case TS_Alive:
-//:: case TS_Running:
-//:: thread_report(tid, THE_NotBlocked, action);
-//:: break;
-//::=20
-//:: case TS_CVBlocked:
-//:: case TS_JoinBlocked:
-//:: thread_report(tid, THE_Blocked, action);
-//:: break;
-//::=20
-//:: case TS_Dead:
-//:: case TS_Zombie:
-//:: thread_report(tid, THE_NotAlive, action);
-//:: break;
-//:: }
-//::=20
-//:: do_thread_run(th);
-//:: }
-//::=20
-//:: /* --------------------------------------------------
-//:: Mutexes
-//::=20
-//:: This models simple, non-recursive mutexes.
-//:: -------------------------------------------------- */
-//::=20
-//:: struct mutex
-//:: {
-//:: Addr mutex; /* address of mutex */
-//:: ThreadId owner; /* owner if state =3D=3D MX_Locked */
-//:: enum mutex_state {
-//:: MX_Init,
-//:: MX_Free,
-//:: MX_Locked,
-//:: MX_Unlocking, /* half-unlocked */
-//:: MX_Dead
-//:: } state; /* mutex state */
-//::=20
-//:: ExeContext *ec_create; /* where created/destroyed */
-//:: ExeContext *ec_locked; /* where last locked/unlocked */
-//:: };
-//::=20
-//:: enum mutex_error
-//:: {
-//:: MXE_NotExist, /* never existed */
-//:: MXE_NotInit, /* not initialized (use after destroy) */
-//:: MXE_ReInit, /* already initialized */
-//:: MXE_NotLocked, /* not locked */
-//:: MXE_Locked, /* is locked */
-//:: MXE_Deadlock, /* deadlock detected */
-//:: MXE_NotOwner, /* non-owner trying to change lock */
-//:: };
-//::=20
-//:: struct mutex_error_data
-//:: {
-//:: enum mutex_error err;
-//:: struct mutex *mx;
-//:: const Char *action;
-//:: };
-//::=20
-//:: static struct mutex *mutex_get(Addr mutexp);
-//::=20
-//:: static const Char *pp_mutexstate(const struct mutex *mx)
-//:: {
-//:: static Char buf[20];
-//::=20
-//:: switch(mx->state) {
-//:: case MX_Init: return "Init";
-//:: case MX_Free: return "Free";
-//:: case MX_Dead: return "Dead";
-//::=20
-//:: case MX_Locked:
-//:: VG_(sprintf)(buf, "Locked by tid %d", mx->owner);
-//:: break;
-//::=20
-//:: case MX_Unlocking:
-//:: VG_(sprintf)(buf, "Being unlocked by tid %d", mx->owner);
-//:: break;
-//::=20
-//:: default:
-//:: VG_(sprintf)(buf, "?? %d", mx->state);
-//:: break;
-//:: }
-//::=20
-//:: return buf;
-//:: }
-//::=20
-//:: static void mutex_setstate(ThreadId tid, struct mutex *mx, enum mut=
ex_state st)
-//:: {
-//:: ExeContext *ec =3D VG_(record_ExeContext)(tid);
-//::=20
-//:: switch(st) {
-//:: case MX_Init:
-//:: case MX_Dead:
-//:: mx->ec_create =3D ec;
-//:: break;
-//::=20
-//:: case MX_Unlocking:
-//:: case MX_Locked:
-//:: case MX_Free:
-//:: mx->ec_locked =3D ec;
-//:: break;
-//:: }
-//::=20
-//:: mx->state =3D st;
-//:: if (debug_mutex)
-//:: VG_(printf)("setting mutex(%p) -> %s\n", mx->mutex, pp_mutexs=
tate(mx));
-//:: }
-//::=20
-//:: static void mutex_report(ThreadId tid, Addr mutexp, enum mutex_erro=
r err, const Char *action)
-//:: {
-//:: Char *errstr=3D"?";
-//:: struct mutex *mx =3D mutex_get(mutexp);
-//:: struct mutex_error_data errdata;
-//::=20
-//:: switch(err) {
-//:: case MXE_NotExist: errstr=3D"non-existent"; break;
-//:: case MXE_NotInit: errstr=3D"uninitialized"; break;
-//:: case MXE_ReInit: errstr=3D"already initialized"; break;
-//:: case MXE_NotLocked: errstr=3D"not locked"; break;
-//:: case MXE_Locked: errstr=3D"locked"; break;
-//:: case MXE_NotOwner: errstr=3D"unowned"; break;
-//:: case MXE_Deadlock: errstr=3D"deadlock on"; break;
-//:: }
-//::=20
-//:: errdata.err =3D err;
-//:: errdata.mx =3D mx;
-//:: errdata.action =3D action;
-//:: =20
-//:: VG_(maybe_record_error)(tid, MutexErr, 0, errstr, &errdata);
-//:: }
-//::=20
-//:: static void pp_mutex_error(Error *err)
-//:: {
-//:: struct mutex_error_data *errdata =3D VG_(get_error_extra)(err);
-//:: struct mutex *mx =3D errdata->mx;
-//:: Char *errstr =3D VG_(get_error_string)(err);
-//:: =20
-//:: VG_(message)(Vg_UserMsg, "Found %s mutex %p while %s",
-//:: errstr, mx ? mx->mutex : 0, errdata->action);
-//:: VG_(pp_ExeContext)(VG_(get_error_where)(err));
-//::=20
-//:: switch (mx->state) {
-//:: case MX_Init:
-//:: case MX_Dead:
-//:: break;
-//:: case MX_Locked:
-//:: VG_(message)(Vg_UserMsg, " Mutex was locked by thread %d",=
mx->owner);
-//:: VG_(pp_ExeContext)(mx->ec_locked);
-//:: break;
-//:: case MX_Unlocking:
-//:: VG_(message)(Vg_UserMsg, " Mutex being unlocked");
-//:: VG_(pp_ExeContext)(mx->ec_locked);
-//:: break;
-//:: case MX_Free:
-//:: VG_(message)(Vg_UserMsg, " Mutex was unlocked");
-//:: VG_(pp_ExeContext)(mx->ec_locked);
-//:: break;
-//:: }
-//::=20
-//:: VG_(message)(Vg_UserMsg, " Mutex was %s",
-//:: mx->state =3D=3D MX_Dead ? "destroyed" : "created")=
;
-//:: VG_(pp_ExeContext)(mx->ec_create);
-//:: }
-//::=20
-//:: static SkipList sk_mutex =3D VG_SKIPLIST_INIT(struct mutex, mutex, =
VG_(cmp_Addr), NULL, VG_AR_CORE);
-//::=20
-//:: static struct mutex *mutex_get(Addr mutexp)
-//:: {
-//:: return VG_(SkipList_Find_Exact)(&sk_mutex, &mutexp);
-//:: }
-//::=20
-//:: static Bool mx_is_initialized(Addr mutexp)
-//:: {
-//:: const struct mutex *mx =3D mutex_get(mutexp);
-//::=20
-//:: return mx && mx->state !=3D MX_Dead;
-//:: }
-//::=20
-//:: static struct mutex *mutex_check_initialized(ThreadId tid, Addr mut=
exp, const Char *action)
-//:: {
-//:: struct mutex *mx;
-//::=20
-//:: vg_assert(tid !=3D VG_INVALID_THREADID);
-//::=20
-//:: if (!mx_is_initialized(mutexp)) {
-//:: mutex_report(tid, mutexp, MXE_NotInit, action);
-//:: VG_(tm_mutex_init)(tid, mutexp);
-//:: }
-//::=20
-//:: mx =3D mutex_get(mutexp);
-//:: vg_assert(mx !=3D NULL);
-//::=20
-//:: return mx;
-//:: }
-//::=20
-//:: #if 0
-//:: static Bool mx_is_locked(Addr mutexp)
-//:: {
-//:: const struct mutex *mx =3D mutex_get(mutexp);
-//::=20
-//:: return mx && (mx->state =3D=3D MX_Locked);
-//:: }
-//:: #endif
-//::=20
-//:: /* Mutex at mutexp is initialized. This must be done before any
-//:: further mutex operations are OK. Fails if:
-//:: - mutexp already exists (and is locked?)
-//:: */
-//:: void VG_(tm_mutex_init)(ThreadId tid, Addr mutexp)
-//:: {
-//:: struct mutex *mx =3D mutex_get(mutexp);
-//::=20
-//:: if (mx =3D=3D NULL) {
-//:: mx =3D VG_(SkipNode_Alloc)(&sk_mutex);
-//:: mx->mutex =3D mutexp;
-//:: VG_(SkipList_Insert)(&sk_mutex, mx);
-//:: } else if (mx->state !=3D MX_Dead)
-//:: mutex_report(tid, mutexp, MXE_ReInit, "initializing");
-//::=20
-//:: mx->owner =3D VG_INVALID_THREADID;
-//::=20
-//:: mutex_setstate(tid, mx, MX_Init);
-//:: mutex_setstate(tid, mx, MX_Free);
-//:: }
-//::=20
-//:: Bool VG_(tm_mutex_exists)(Addr mutexp)
-//:: {
-//:: return mx_is_initialized(mutexp);
-//:: }
-//::=20
-//:: /* Mutex is being destroyed. Fails if:
-//:: - mutex was not initialized
-//:: - mutex is locked (?)
-//:: */
-//:: void VG_(tm_mutex_destroy)(ThreadId tid, Addr mutexp)
-//:: {
-//:: struct mutex *mx =3D mutex_get(mutexp);
-//::=20
-//:: if (mx =3D=3D NULL)
-//:: mutex_report(tid, mutexp, MXE_NotExist, "destroying");
-//:: else {
-//:: switch(mx->state) {
-//:: case MX_Dead:
-//:: mutex_report(tid, mutexp, MXE_NotInit, "destroying");
-//:: break;
-//::=20
-//:: case MX_Locked:
-//:: case MX_Unlocking:
-//:: mutex_report(tid, mutexp, MXE_Locked, "destroying");
-//:: VG_(tm_mutex_unlock)(tid, mutexp);
-//:: break;
-//::=20
-//:: case MX_Init:
-//:: case MX_Free:
-//:: /* OK */
-//:: break;
-//:: }
-//:: mutex_setstate(tid, mx, MX_Dead);
-//:: }
-//:: }
-//::=20
-//:: /* A thread attempts to lock a mutex. If "blocking" then the threa=
d
-//:: is put into a blocked state until the lock is acquired. Fails i=
f:
-//:: - tid is invalid
-//:: - mutex has not been initialized
-//:: - thread is blocked on another object (?)
-//:: - blocking on this mutex could cause a deadlock
-//:: (Lock rank detection?)
-//:: */
-//:: void VG_(tm_mutex_trylock)(ThreadId tid, Addr mutexp)
-//:: {
-//:: struct mutex *mx;
-//::=20
-//:: mx =3D mutex_check_initialized(tid, mutexp, "trylocking");
-//::=20
-//:: thread_block_mutex(tid, mx);
-//::=20
-//:: if (mx->state =3D=3D MX_Locked && mx->owner =3D=3D tid) /* deadl=
ock */
-//:: mutex_report(tid, mutexp, MXE_Deadlock, "trylocking");
-//::=20
-//:: VG_TRACK( pre_mutex_lock, tid, (void *)mutexp );
-//:: }
-//::=20
-//:: /* Give up waiting for a mutex. Fails if:
-//:: - thread is not currently blocked on the mutex
-//:: */
-//:: void VG_(tm_mutex_giveup)(ThreadId tid, Addr mutexp)
-//:: {
-//:: struct mutex *mx;
-//::=20
-//:: mx =3D mutex_check_initialized(tid, mutexp, "giving up");
-//::=20
-//:: thread_unblock_mutex(tid, mx, "giving up on mutex");
-//:: }
-//::=20
-//:: /* A thread acquires a mutex. Fails if:
-//:: - thread is not blocked waiting for the mutex
-//:: - mutex is held by another thread
-//:: */
-//:: void VG_(tm_mutex_acquire)(ThreadId tid, Addr mutexp)
-//:: {
-//:: struct mutex *mx;
-//::=20
-//:: mx =3D mutex_check_initialized(tid, mutexp, "acquiring"); =20
-//:: =20
-//:: switch(mx->state) {
-//:: case MX_Unlocking: /* ownership transfer or relock */
-//:: VG_TRACK( post_mutex_unlock, mx->owner, (void *)mutexp );
-//:: if (mx->owner !=3D tid)
-//:: thread_unblock_mutex(tid, mx, "acquiring mutex");
-//:: break;
-//::=20
-//:: case MX_Free:
-//:: thread_unblock_mutex(tid, mx, "acquiring mutex");
-//:: break;
-//::=20
-//:: case MX_Locked:
-//:: if (debug_mutex)
-//:: VG_(printf)("mutex=3D%p mx->state=3D%s\n", mutexp, pp_mutexstate(=
mx));
-//:: VG_TRACK( post_mutex_unlock, mx->owner, (void *)mutexp );
-//:: mutex_report(tid, mutexp, MXE_Locked, "acquiring");
-//:: thread_unblock_mutex(tid, mx, "acquiring mutex");
-//:: break;
-//::=20
-//:: case MX_Init:
-//:: case MX_Dead:
-//:: vg_assert(0);
-//:: }=20
-//:: =20
-//:: mx->owner =3D tid;
-//:: mutex_setstate(tid, mx, MX_Locked);
-//::=20
-//:: VG_TRACK( post_mutex_lock, tid, (void *)mutexp );
-//:: }
-//::=20
-//:: /* Try unlocking a lock. This will move it into a state where it c=
an
-//:: either be unlocked, or change ownership to another thread. If
-//:: unlock fails, it will remain locked. */
-//:: void VG_(tm_mutex_tryunlock)(ThreadId tid, Addr mutexp)
-//:: {
-//:: struct thread *th;
-//:: struct mutex *mx;
-//::=20
-//:: mx =3D mutex_check_initialized(tid, mutexp, "try-unlocking");
-//::=20
-//:: th =3D thread_get(tid);
-//::=20
-//:: if (th =3D=3D NULL)
-//:: thread_report(tid, THE_NotExist, "try-unlocking mutex");
-//:: else {
-//:: switch(th->state) {
-//:: case TS_Alive:
-//:: case TS_Running: /* OK */
-//:: break;
-//::=20
-//:: case TS_Dead:
-//:: case TS_Zombie:
-//:: thread_report(tid, THE_NotAlive, "try-unlocking mutex");
-//:: break;
-//::=20
-//:: case TS_JoinBlocked:
-//:: case TS_CVBlocked:
-//:: case TS_MutexBlocked:
-//:: thread_report(tid, THE_Blocked, "try-unlocking mutex");
-//:: do_thread_run(th);
-//:: break;
-//:: }
-//:: }
-//::=20
-//:: switch(mx->state) {
-//:: case MX_Locked:
-//:: if (mx->owner !=3D tid)
-//:: mutex_report(tid, mutexp, MXE_NotOwner, "try-unlocking");
-//:: break;
-//::=20
-//:: case MX_Free:
-//:: mutex_report(tid, mutexp, MXE_NotLocked, "try-unlocking");
-//:: break;
-//::=20
-//:: case MX_Unlocking:
-//:: mutex_report(tid, mutexp, MXE_NotLocked, "try-unlocking");
-//:: break;
-//::=20
-//:: case MX_Init:
-//:: case MX_Dead:
-//:: vg_assert(0);
-//:: }
-//::=20
-//:: mutex_setstate(tid, mx, MX_Unlocking);
-//:: }
-//::=20
-//:: /* Finish unlocking a Mutex. The mutex can validly be in one of th=
ree
-//:: states:
-//:: - Unlocking
-//:: - Locked, owned by someone else (someone else got it in the mean=
time)
-//:: - Free (someone else completed a lock-unlock cycle)
-//:: */
-//:: void VG_(tm_mutex_unlock)(ThreadId tid, Addr mutexp)
-//:: {
-//:: struct mutex *mx;
-//:: struct thread *th;
-//::=20
-//:: mx =3D mutex_check_initialized(tid, mutexp, "unlocking mutex");
-//::=20
-//:: th =3D thread_get(tid);
-//::=20
-//:: if (th =3D=3D NULL)
-//:: thread_report(tid, THE_NotExist, "unlocking mutex");
-//:: else {
-//:: switch(th->state) {
-//:: case TS_Alive:
-//:: case TS_Running: /* OK */
-//:: break;
-//::=20
-//:: case TS_Dead:
-//:: case TS_Zombie:
-//:: thread_report(tid, THE_NotAlive, "unlocking mutex");
-//:: break;
-//::=20
-//:: case TS_JoinBlocked:
-//:: case TS_CVBlocked:
-//:: case TS_MutexBlocked:
-//:: thread_report(tid, THE_Blocked, "unlocking mutex");
-//:: do_thread_run(th);
-//:: break;
-//:: }
-//:: }
-//::=20
-//:: switch(mx->state) {
-//:: case MX_Locked:
-//:: /* Someone else might have taken ownership in the meantime */
-//:: if (mx->owner =3D=3D tid)
-//:: mutex_report(tid, mutexp, MXE_Locked, "unlocking");
-//:: break;
-//::=20
-//:: case MX_Free:
-//:: /* OK - nothing to do */
-//:: break;
-//::=20
-//:: case MX_Unlocking:
-//:: /* OK - we need to complete the unlock */
-//:: VG_TRACK( post_mutex_unlock, tid, (void *)mutexp );
-//:: mutex_setstate(tid, mx, MX_Free);
-//:: break;
-//::=20
-//:: case MX_Init:
-//:: case MX_Dead:
-//:: vg_assert(0);
-//:: }
-//:: }
-//::=20
-//:: /* --------------------------------------------------
-//:: Condition variables
-//:: -------------------------------------------------- */
-//::=20
-//:: struct condvar_waiter
-//:: {
-//:: ThreadId waiter;
-//:: =20
-//:: struct condvar *condvar;
-//:: struct mutex *mutex;
-//::=20
-//:: struct condvar_waiter *next;
-//:: };
-//::=20
-//:: struct condvar=20
-//:: {
-//:: Addr condvar;
-//::=20
-//:: enum condvar_state {
-//:: CV_Dead,
-//:: CV_Alive,
-//:: } state;
-//::=20
-//:: struct condvar_waiter *waiters; // XXX skiplist?
-//:: =20
-//:: ExeContext *ec_created; // where created
-//:: ExeContext *ec_signalled; // where last signalled
-//:: };
-//::=20
-//:: enum condvar_err {
-//:: CVE_NotExist,
-//:: CVE_NotInit,
-//:: CVE_ReInit,
-//:: CVE_Busy,
-//:: CVE_Blocked,
-//:: };
-//::=20
-//:: static SkipList sk_condvar =3D VG_SKIPLIST_INIT(struct condvar, con=
dvar, VG_(cmp_Addr),
-//:: NULL, VG_AR_CORE);
-//::=20
-//:: static struct condvar *condvar_get(Addr condp)
-//:: {
-//:: return VG_(SkipList_Find_Exact)(&sk_condvar, &condp);
-//:: }
-//::=20
-//:: static Bool condvar_is_initialized(Addr condp)
-//:: {
-//:: const struct condvar *cv =3D condvar_get(condp);
-//::=20
-//:: return cv && cv->state !=3D CV_Dead;
-//:: }
-//::=20
-//:: static void condvar_report(ThreadId tid, Addr condp, enum condvar_e=
rr err, const Char *action)
-//:: {
-//:: }
-//::=20
-//:: static struct condvar *condvar_check_initialized(ThreadId tid, Addr=
condp, const Char *action)
-//:: {
-//:: struct condvar *cv;
-//:: vg_assert(tid !=3D VG_INVALID_THREADID);
-//:: =20
-//:: if (!condvar_is_initialized(condp)) {
-//:: condvar_report(tid, condp, CVE_NotInit, action);
-//:: VG_(tm_cond_init)(tid, condp);
-//:: }
-//::=20
-//:: cv =3D condvar_get(condp);
-//:: vg_assert(cv !=3D NULL);
-//::=20
-//:: return cv;
-//:: }
-//::=20
-//:: /* Initialize a condition variable. Fails if:
-//:: - condp has already been initialized
-//:: */
-//:: void VG_(tm_cond_init)(ThreadId tid, Addr condp)
-//:: {
-//:: struct condvar *cv =3D condvar_get(condp);
-//::=20
-//:: if (cv =3D=3D NULL) {
-//:: cv =3D VG_(SkipNode_Alloc)(&sk_condvar);
-//:: cv->condvar =3D condp;
-//:: cv->waiters =3D NULL;
-//:: VG_(SkipList_Insert)(&sk_condvar, cv);
-//:: } else if (cv->state !=3D CV_Dead) {
-//:: condvar_report(tid, condp, CVE_ReInit, "initializing");
-//:: /* ? what about existing waiters? */
-//:: }
-//::=20
-//:: cv->state =3D CV_Alive;
-//:: }
-//::=20
-//:: /* Destroy a condition variable. Fails if:
-//:: - condp has not been initialized
-//:: - condp is currently being waited on
-//:: */
-//:: void VG_(tm_cond_destroy)(ThreadId tid, Addr condp)
-//:: {
-//:: struct condvar *cv =3D condvar_get(condp);
-//::=20
-//:: if (cv =3D=3D NULL)
-//:: condvar_report(tid, condp, CVE_NotExist, "destroying");
-//:: else {
-//:: if (cv->state !=3D CV_Alive)
-//:: condvar_report(tid, condp, CVE_NotInit, "destroying");
-//:: if (cv->waiters !=3D NULL)
-//:: condvar_report(tid, condp, CVE_Busy, "destroying");
-//:: cv->state =3D CV_Dead;
-//:: }
-//:: }
-//::=20
-//:: static struct condvar_waiter *get_waiter(const struct condvar *cv, =
ThreadId tid)
-//:: {
-//:: struct condvar_waiter *w;
-//::=20
-//:: for(w =3D cv->waiters; w; w =3D w->next)
-//:: if (w->waiter =3D=3D tid)
-//:: return w;
-//:: return NULL;
-//:: }
-//::=20
-//:: /* Wait for a condition, putting thread into blocked state. Fails =
if:
-//:: - condp has not been initialized
-//:: - thread doesn't hold mutexp
-//:: - thread is blocked on some other object
-//:: - thread is already blocked on mutex
-//:: */
-//:: void VG_(tm_cond_wait)(ThreadId tid, Addr condp, Addr mutexp)
-//:: {
-//:: struct thread *th =3D thread_get(tid);
-//:: struct mutex *mx;
-//:: struct condvar *cv;
-//:: struct condvar_waiter *waiter;
-//::=20
-//:: /* Condvar must exist */
-//:: cv =3D condvar_check_initialized(tid, condp, "waiting");
-//::=20
-//:: /* Mutex must exist */
-//:: mx =3D mutex_check_initialized(tid, mutexp, "waiting on condvar"=
);
-//::=20
-//:: /* Thread must own mutex */
-//:: if (mx->state !=3D MX_Locked) {
-//:: mutex_report(tid, mutexp, MXE_NotLocked, "waiting on condvar"=
);
-//:: VG_(tm_mutex_trylock)(tid, mutexp);
-//:: VG_(tm_mutex_acquire)(tid, mutexp);
-//:: } else if (mx->owner !=3D tid) {
-//:: mutex_report(tid, mutexp, MXE_NotOwner, "waiting on condvar")=
;
-//:: mx->owner =3D tid;
-//:: }
-//::=20
-//:: /* Thread must not be already waiting for condvar */
-//:: waiter =3D get_waiter(cv, tid);
-//:: if (waiter !=3D NULL)
-//:: condvar_report(tid, condp, CVE_Blocked, "waiting");
-//:: else {
-//:: waiter =3D VG_(arena_malloc)(VG_AR_CORE, sizeof(*waiter));
-//:: waiter->condvar =3D cv;
-//:: waiter->mutex =3D mx;
-//:: waiter->next =3D cv->waiters;
-//:: cv->waiters =3D waiter;
-//:: }
-//::=20
-//:: /* Thread is now blocking on condvar */
-//:: do_thread_block_condvar(th, cv);
-//::=20
-//:: /* (half) release mutex */
-//:: VG_(tm_mutex_tryunlock)(tid, mutexp);
-//:: }
-//::=20
-//:: /* Wake from a condition, either because we've been signalled, or
-//:: because of timeout. Fails if:
-//:: - thread is not waiting on condp
-//:: */
-//:: void VG_(tm_cond_wakeup)(ThreadId tid, Addr condp, Addr mutexp)
-//:: {
-//:: }
-//::=20
-//:: /* Signal a condition variable. Fails if:
-//:: - condp has not been initialized
-//:: */
-//:: void VG_(tm_cond_signal)(ThreadId tid, Addr condp)
-//:: {
-//:: }
-//::=20
-//:: /* --------------------------------------------------
-//:: Error handling
-//:: -------------------------------------------------- */
-//::=20
-//:: UInt VG_(tm_error_update_extra)(Error *err)
-//:: {
-//:: switch (VG_(get_error_kind)(err)) {
-//:: case ThreadErr: {
-//:: struct thread_error_data *errdata =3D VG_(get_error_extra)=
(err);
-//:: struct thread *new_th =3D VG_(arena_malloc)(VG_AR_CORE, si=
zeof(struct thread));
-//::=20
-//:: VG_(memcpy)(new_th, errdata->th, sizeof(struct thread));
-//::=20
-//:: errdata->th =3D new_th;
-//::=20
-//:: return sizeof(struct thread_error_data);
-//:: }
-//::=20
-//:: case MutexErr: {
-//:: struct mutex_error_data *errdata =3D VG_(get_error_extra)(=
err);
-//:: struct mutex *new_mx =3D VG_(arena_malloc)(VG_AR_CORE, siz=
eof(struct mutex));
-//::=20
-//:: VG_(memcpy)(new_mx, errdata->mx, sizeof(struct mutex));
-//::=20
-//:: errdata->mx =3D new_mx;
-//::=20
-//:: return sizeof(struct mutex_error_data);
-//:: }
-//::=20
-//:: default:
-//:: return 0;
-//:: }
-//:: }
-//::=20
-//:: Bool VG_(tm_error_equal)(VgRes res, Error *e1, Error *e2)
-//:: {
-//:: /* Guaranteed by calling function */
-//:: vg_assert(VG_(get_error_kind)(e1) =3D=3D VG_(get_error_kind)(e2)=
);
-//:: =20
-//:: switch (VG_(get_error_kind)(e1)) {
-//:: case ThreadErr: {
-//:: struct thread_error_data *errdata1 =3D VG_(get_error_extra=
)(e1);
-//:: struct thread_error_data *errdata2 =3D VG_(get_error_extra=
)(e2);
-//::=20
-//:: return errdata1->err =3D=3D errdata2->err;
-//:: }
-//::=20
-//:: case MutexErr: {
-//:: struct mutex_error_data *errdata1 =3D VG_(get_error_extra)=
(e1);
-//:: struct mutex_error_data *errdata2 =3D VG_(get_error_extra)=
(e2);
-//::=20
-//:: return errdata1->err =3D=3D errdata2->err;
-//:: }
-//::=20
-//:: default:=20
-//:: VG_(printf)("Error:\n unknown error code %d\n",
-//:: VG_(get_error_kind)(e1));
-//:: VG_(core_panic)("unknown error code in VG_(tm_error_equal)=
");
-//:: }
-//:: }
-//::=20
-//:: void VG_(tm_error_print)(Error *err)
-//:: {
-//:: switch (VG_(get_error_kind)(err)) {
-//:: case ThreadErr:
-//:: pp_thread_error(err);
-//:: break;
-//:: case MutexErr:
-//:: pp_mutex_error(err);
-//:: break;
-//:: }
-//:: }
-//::=20
-//:: /* --------------------------------------------------
-//:: Initialisation
-//:: -------------------------------------------------- */
-//::=20
-//:: void VG_(tm_init)()
-//:: {
-//:: VG_(needs_core_errors)();
-//:: }
+struct thread;
+struct mutex;
+struct condvar;
=20
+static const Bool debug_thread =3D False;
+static const Bool debug_mutex =3D False;
+
+/* --------------------------------------------------
+ Thread lifetime
+ =20
+ Threads are all expressed in terms of internal ThreadIds. The
+ thread library interface needs to map from the library's identifers
+ to ThreadIds.
+ -------------------------------------------------- */
+
+/* Per-thread state. We maintain our own here rather than hanging it
+ off ThreadState, so that we have the option of not having a 1:1
+ relationship between modelled threads and Valgrind threads. */
+struct thread
+{
+ ThreadId tid;
+ ThreadId creator;
+
+ Bool detached; /* thread is detached */
+
+ enum thread_state {
+ TS_Alive, /* alive */
+ TS_Zombie, /* waiting to be joined on (detached is False) */
+ TS_Dead, /* all dead */
+ =20
+ TS_Running, /* running */
+ TS_MutexBlocked, /* blocked on mutex */
+ TS_CVBlocked, /* blocked on condvar */
+ TS_JoinBlocked, /* blocked in join */
+ } state;
+
+ struct mutex *mx_blocked; /* mutex we're blocked on (state=3D=3DTS_M=
utexBlocked) */
+ struct condvar *cv_blocked; /* condvar we're blocked on (state=3D=3DT=
S_CVBlocked) */
+ struct thread *th_blocked; /* thread we're blocked on (state=3D=3DTS_=
JoinBlocked) */
+
+ ExeContext *ec_created; /* where created */
+ ExeContext *ec_blocked; /* where blocked/unblocked */
+};
+
+enum thread_error
+{
+ THE_NotExist, /* thread doesn't exist */
+ THE_NotAlive, /* thread isn't alive (use after death) */
+ THE_Rebirth, /* thread already alive */
+ THE_Blocked, /* thread not supposed to be blocked */
+ THE_NotBlocked, /* thread supposed to be blocked */
+ THE_Detached, /* thread is detached */
+};
+
+struct thread_error_data
+{
+ enum thread_error err;
+ struct thread *th;
+ const Char *action;
+};
+
+static const Char *pp_threadstate(const struct thread *th)
+{
+ if (th =3D=3D NULL)
+ return "non-existent";
+
+ switch(th->state) {
+ case TS_Alive: return "alive";
+ case TS_Zombie: return "zombie";
+ case TS_Dead: return "dead";
+ case TS_Running: return "running";
+ case TS_MutexBlocked:return "mutex-blocked";
+ case TS_CVBlocked: return "cv-blocked";
+ case TS_JoinBlocked: return "join-blocked";
+ default: return "???";
+ }
+}
+
+static void thread_validate(struct thread *th)
+{
+ switch(th->state) {
+ case TS_Alive:
+ case TS_Running:
+ case TS_Dead:
+ case TS_Zombie:
+ vg_assert(th->mx_blocked =3D=3D NULL);
+ vg_assert(th->cv_blocked =3D=3D NULL);
+ vg_assert(th->th_blocked =3D=3D NULL);
+ break;
+
+ case TS_MutexBlocked:
+ vg_assert(th->mx_blocked !=3D NULL);
+ vg_assert(th->cv_blocked =3D=3D NULL);
+ vg_assert(th->th_blocked =3D=3D NULL);
+ break;
+
+ case TS_CVBlocked:
+ vg_assert(th->mx_blocked =3D=3D NULL);
+ vg_assert(th->cv_blocked !=3D NULL);
+ vg_assert(th->th_blocked =3D=3D NULL);
+ break;
+
+ case TS_JoinBlocked:
+ vg_assert(th->mx_blocked =3D=3D NULL);
+ vg_assert(th->cv_blocked =3D=3D NULL);
+ vg_assert(th->th_blocked !=3D NULL);
+ break;
+ }
+}
+
+static void thread_setstate(struct thread *th, enum thread_state state)
+{
+ ExeContext *ec;
+
+ if (th->state =3D=3D state)
+ return;
+
+ ec =3D VG_(record_ExeContext)(th->tid);
+
+ switch(state) {
+ case TS_Alive:
+ case TS_Dead:
+ th->ec_created =3D ec;
+ break;
+
+ case TS_Running:
+ case TS_MutexBlocked:
+ case TS_CVBlocked:
+ case TS_JoinBlocked:
+ case TS_Zombie:
+ th->ec_blocked =3D ec;
+ }
+
+ th->state =3D state;
+ if (debug_thread)
+ VG_(printf)("setting thread(%d) -> %s\n", th->tid, pp_threadstate(=
th));
+ thread_validate(th);
+}
+
+static void do_thread_run(struct thread *th)
+{
+ th->mx_blocked =3D NULL;
+ th->cv_blocked =3D NULL;
+ th->th_blocked =3D NULL;
+ thread_setstate(th, TS_Running);
+}
+
+static void do_thread_block_mutex(struct thread *th, struct mutex *mx)
+{
+ th->mx_blocked =3D mx;
+ th->cv_blocked =3D NULL;
+ th->th_blocked =3D NULL;
+ thread_setstate(th, TS_MutexBlocked);
+}
+
+static void do_thread_block_condvar(struct thread *th, struct condvar *c=
v)
+{
+ th->mx_blocked =3D NULL;
+ th->cv_blocked =3D cv;
+ th->th_blocked =3D NULL;
+ thread_setstate(th, TS_CVBlocked);
+}
+
+static void do_thread_block_join(struct thread *th, struct thread *joine=
e)
+{
+ th->mx_blocked =3D NULL;
+ th->cv_blocked =3D NULL;
+ th->th_blocked =3D joinee;
+ thread_setstate(th, TS_JoinBlocked);
+}
+
+static void do_thread_block_zombie(struct thread *th)
+{
+ th->mx_blocked =3D NULL;
+ th->cv_blocked =3D NULL;
+ th->th_blocked =3D NULL;
+ thread_setstate(th, TS_Zombie);
+}
+
+static void do_thread_dead(struct thread *th)
+{
+ th->mx_blocked =3D NULL;
+ th->cv_blocked =3D NULL;
+ th->th_blocked =3D NULL;
+ thread_setstate(th, TS_Dead);
+}
+
+static OSet *threadSet =3D NULL;
+
+static struct thread *thread_get(ThreadId tid)
+{
+ return VG_(OSet_Lookup)(threadSet, &tid);
+}
+
+static void thread_report(ThreadId tid, enum thread_error err, const Cha=
r *action)
+{
+ Char *errstr =3D "?";
+ struct thread *th =3D thread_get(tid);
+ struct thread_error_data errdata;
+
+ switch(err) {
+ case THE_NotExist: errstr =3D "non existent"; break;
+ case THE_NotAlive: errstr =3D "not alive"; break;
+ case THE_Rebirth: errstr =3D "re-born"; break;
+ case THE_Blocked: errstr =3D "blocked"; break;
+ case THE_NotBlocked: errstr =3D "not blocked"; break;
+ case THE_Detached: errstr =3D "detached"; break;
+ }
+
+ errdata.err =3D err;
+ errdata.th =3D th;
+ errdata.action =3D action;
+ =20
+ VG_(maybe_record_error)(VG_(get_running_tid)(), ThreadErr, 0, errstr,=
&errdata);
+}
+
+static void pp_thread_error(Error *err)
+{
+ struct thread_error_data *errdata =3D VG_(get_error_extra)(err);
+ struct thread *th =3D errdata->th;
+ Char *errstr =3D VG_(get_error_string)(err);
+ =20
+ VG_(message)(Vg_UserMsg, "Found %s thread in state %s while %s",
+ errstr, pp_threadstate(th), errdata->action);
+ VG_(pp_ExeContext)(VG_(get_error_where)(err));
+
+ if (th) {
+ VG_(message)(Vg_UserMsg, " Thread %d was %s",
+ th->tid, th->state =3D=3D TS_Dead ? "destroyed" : "created");
+ VG_(pp_ExeContext)(th->ec_created);
+ }
+}
+
+/* Thread creation */
+void VG_(tm_thread_create)(ThreadId creator, ThreadId tid, Bool detached=
)
+{
+ struct thread *th =3D thread_get(tid);
+
+ if (debug_thread)
+ VG_(printf)("thread %d creates %d %s\n", creator, tid, detached ? =
"detached" : "");
+ if (th !=3D NULL) {
+ if (th->state !=3D TS_Dead)
+ thread_report(tid, THE_Rebirth, "creating");
+ } else {
+ th =3D VG_(OSet_AllocNode)(threadSet, sizeof(struct thread));
+ th->tid =3D tid;
+ VG_(OSet_Insert)(threadSet, th);
+ }
+
+ th->creator =3D creator;
+ th->detached =3D detached;
+ th->mx_blocked =3D NULL;
+ th->cv_blocked =3D NULL;
+ th->th_blocked =3D NULL;
+
+ thread_setstate(th, TS_Alive);
+ do_thread_run(th);
+}
+
+Bool VG_(tm_thread_exists)(ThreadId tid)
+{
+ struct thread *th =3D thread_get(tid);
+
+ return th && th->state !=3D TS_Dead;
+}
+
+/* A thread is terminating itself
+ - fails if tid has already terminated
+ - if detached, tid becomes invalid for all further operations
+ - if not detached, the thread remains in a Zombie state until
+ someone joins on it
+ */
+void VG_(tm_thread_exit)(ThreadId tid)
+{
+ struct thread *th =3D thread_get(tid);
+
+ if (th =3D=3D NULL)
+ thread_report(tid, THE_NotExist, "exiting");
+ else {
+ struct thread *joiner;
+
+ switch(th->state) {
+ case TS_Dead:
+ case TS_Zombie: /* already exited once */
+ thread_report(tid, THE_NotAlive, "exiting");
+ break;
+
+ case TS_MutexBlocked:
+ case TS_CVBlocked:
+ case TS_JoinBlocked:
+ thread_report(tid, THE_Blocked, "exiting");
+ break;
+
+ case TS_Alive:
+ case TS_Running:
+ /* OK */
+ break;
+ }
+
+ /* ugly - walk all threads to find people joining with us */
+ /* In pthreads its an error to have multiple joiners, but that
+ seems a bit specific to implement here; there should a way
+ for the thread library binding to handle this. */
+ VG_(OSet_ResetIter)(threadSet);
+ while ((joiner =3D VG_(OSet_Next)(threadSet)) !=3D NULL) {
+ if (joiner->state =3D=3D TS_JoinBlocked && joiner->th_blocked =3D=3D t=
h) {
+ /* found someone - wake them up */
+ do_thread_run(joiner);
+
+ /* we're dead */
+ do_thread_dead(th);
+ }
+ }
+
+ if (th->state !=3D TS_Dead)
+ do_thread_block_zombie(th);
+ }
+}
+
+void VG_(tm_thread_detach)(ThreadId tid)
+{
+ struct thread *th =3D thread_get(tid);
+
+ if (th =3D=3D NULL)
+ thread_report(tid, THE_NotExist, "detaching");
+ else {
+ if (th->detached)
+ thread_report(tid, THE_Detached, "detaching");
+ else {
+ /* XXX look for waiters */
+ th->detached =3D True;
+ }
+ }
+}
+
+/* One thread blocks until another has terminated
+ - fails if joinee is detached
+ - fails if joinee doesn't exist
+ - once the join completes, joinee is dead
+ */
+void VG_(tm_thread_join)(ThreadId joinerid, ThreadId joineeid)
+{
+ struct thread *joiner =3D thread_get(joinerid);
+ struct thread *joinee =3D thread_get(joineeid);
+
+ /* First, check the joinee thread's state */
+ if (joinee =3D=3D NULL)
+ thread_report(joineeid, THE_NotExist, "joining as joinee");
+ else {
+ switch(joinee->state) {
+ case TS_Alive: /* really shouldn't see them in this state... */
+ case TS_Running:
+ case TS_Zombie:
+ case TS_MutexBlocked:
+ case TS_CVBlocked:
+ case TS_JoinBlocked:
+ /* OK */
+ break;
+
+ case TS_Dead:
+ thread_report(joineeid, THE_NotAlive, "joining as joinee");
+ break;
+ }
+ }
+
+ /* now the joiner... */
+ if (joiner =3D=3D NULL)
+ thread_report(joineeid, THE_NotExist, "joining as joiner");
+ else {
+ switch(joiner->state) {
+ case TS_Alive: /* ? */
+ case TS_Running: /* OK */
+ break;
+
+ case TS_Zombie: /* back from the dead */
+ case TS_Dead:
+ thread_report(joineeid, THE_NotAlive, "joining as joiner");
+ break;
+
+ case TS_MutexBlocked:
+ case TS_CVBlocked:
+ case TS_JoinBlocked:
+ thread_report(joineeid, THE_Blocked, "joining as joiner");
+ break;
+ }
+
+ if (joinee->detached)
+ thread_report(joineeid, THE_Detached, "joining as joiner");
+ else {
+ /* block if the joinee hasn't exited yet */
+ if (joinee) {
+ switch(joinee->state) {
+ case TS_Dead:
+ break;
+
+ default:
+ if (joinee->state =3D=3D TS_Zombie)
+ do_thread_dead(joinee);
+ else
+ do_thread_block_join(joiner, joinee);
+ }
+ }
+ }
+ }
+}
+
+/* Context switch to a new thread */
+void VG_(tm_thread_switchto)(ThreadId tid)
+{
+ VG_TRACK( thread_run, tid );
+}
+
+static void thread_block_mutex(ThreadId tid, struct mutex *mx)
+{
+ struct thread *th =3D thread_get(tid);
+
+ if (th =3D=3D NULL) {
+ /* should an unknown thread doing something make it spring to life=
? */
+ thread_report(tid, THE_NotExist, "blocking on mutex");
+ return;
+ }
+ switch(th->state) {
+ case TS_Dead:
+ case TS_Zombie:
+ thread_report(th->tid, THE_NotAlive, "blocking on mutex");
+ break;
+
+ case TS_MutexBlocked:
+ case TS_CVBlocked:
+ case TS_JoinBlocked:
+ thread_report(th->tid, THE_Blocked, "blocking on mutex");
+ break;
+
+ case TS_Alive:
+ case TS_Running: /* OK */
+ break;
+ }
+
+ do_thread_block_mutex(th, mx);
+}
+
+static void thread_unblock_mutex(ThreadId tid, struct mutex *mx, const C=
har *action)
+{
+ struct thread *th =3D thread_get(tid);
+
+ if (th =3D=3D NULL) {
+ /* should an unknown thread doing something make it spring to life=
? */
+ thread_report(tid, THE_NotExist, "giving up on mutex");
+ return;
+ }
+
+ switch(th->state) {
+ case TS_MutexBlocked: /* OK */
+ break;
+
+ case TS_Alive:
+ case TS_Running:
+ thread_report(tid, THE_NotBlocked, action);
+ break;
+
+ case TS_CVBlocked:
+ case TS_JoinBlocked:
+ thread_report(tid, THE_Blocked, action);
+ break;
+
+ case TS_Dead:
+ case TS_Zombie:
+ thread_report(tid, THE_NotAlive, action);
+ break;
+ }
+
+ do_thread_run(th);
+}
+
+/* --------------------------------------------------
+ Mutexes
+
+ This models simple, non-recursive mutexes.
+ -------------------------------------------------- */
+
+struct mutex
+{
+ Addr mutex; /* address of mutex */
+ ThreadId owner; /* owner if state =3D=3D MX_Locked */
+ enum mutex_state {
+ MX_Init,
+ MX_Free,
+ MX_Locked,
+ MX_Unlocking, /* half-unlocked */
+ MX_Dead
+ } state; /* mutex state */
+
+ ExeContext *ec_create; /* where created/destroyed */
+ ExeContext *ec_locked; /* where last locked/unlocked */
+};
+
+enum mutex_error
+{
+ MXE_NotExist, /* never existed */
+ MXE_NotInit, /* not initialized (use after destroy) */
+ MXE_ReInit, /* already initialized */
+ MXE_NotLocked, /* not locked */
+ MXE_Locked, /* is locked */
+ MXE_Deadlock, /* deadlock detected */
+ MXE_NotOwner, /* non-owner trying to change lock */
+};
+
+struct mutex_error_data
+{
+ enum mutex_error err;
+ struct mutex *mx;
+ const Char *action;
+};
+
+static struct mutex *mutex_get(Addr mutexp);
+
+static const Char *pp_mutexstate(const struct mutex *mx)
+{
+ static Char buf[20];
+
+ switch(mx->state) {
+ case MX_Init: return "Init";
+ case MX_Free: return "Free";
+ case MX_Dead: return "Dead";
+
+ case MX_Locked:
+ VG_(sprintf)(buf, "Locked by tid %d", mx->owner);
+ break;
+
+ case MX_Unlocking:
+ VG_(sprintf)(buf, "Being unlocked by tid %d", mx->owner);
+ break;
+
+ default:
+ VG_(sprintf)(buf, "?? %d", mx->state);
+ break;
+ }
+
+ return buf;
+}
+
+static void mutex_setstate(ThreadId tid, struct mutex *mx, enum mutex_st=
ate st)
+{
+ ExeContext *ec =3D VG_(record_ExeContext)(tid);
+
+ switch(st) {
+ case MX_Init:
+ case MX_Dead:
+ mx->ec_create =3D ec;
+ break;
+
+ case MX_Unlocking:
+ case MX_Locked:
+ case MX_Free:
+ mx->ec_locked =3D ec;
+ break;
+ }
+
+ mx->state =3D st;
+ if (debug_mutex)
+ VG_(printf)("setting mutex(%p) -> %s\n", mx->mutex, pp_mutexstate(=
mx));
+}
+
+static void mutex_report(ThreadId tid, Addr mutexp, enum mutex_error err=
, const Char *action)
+{
+ Char *errstr=3D"?";
+ struct mutex *mx =3D mutex_get(mutexp);
+ struct mutex_error_data errdata;
+
+ switch(err) {
+ case MXE_NotExist: errstr=3D"non-existent"; break;
+ case MXE_NotInit: errstr=3D"uninitialized"; break;
+ case MXE_ReInit: errstr=3D"already initialized"; break;
+ case MXE_NotLocked: errstr=3D"not locked"; break;
+ case MXE_Locked: errstr=3D"locked"; break;
+ case MXE_NotOwner: errstr=3D"unowned"; break;
+ case MXE_Deadlock: errstr=3D"deadlock on"; break;
+ }
+
+ errdata.err =3D err;
+ errdata.mx =3D mx;
+ errdata.action =3D action;
+ =20
+ VG_(maybe_record_error)(tid, MutexErr, 0, errstr, &errdata);
+}
+
+static void pp_mutex_error(Error *err)
+{
+ struct mutex_error_data *errdata =3D VG_(get_error_extra)(err);
+ struct mutex *mx =3D errdata->mx;
+ Char *errstr =3D VG_(get_error_string)(err);
+ =20
+ VG_(message)(Vg_UserMsg, "Found %s mutex %p while %s",
+ errstr, mx ? mx->mutex : 0, errdata->action);
+ VG_(pp_ExeContext)(VG_(get_error_where)(err));
+
+ switch (mx->state) {
+ case MX_Init:
+ case MX_Dead:
+ break;
+ case MX_Locked:
+ VG_(message)(Vg_UserMsg, " Mutex was locked by thread %d", mx->=
owner);
+ VG_(pp_ExeContext)(mx->ec_locked);
+ break;
+ case MX_Unlocking:
+ VG_(message)(Vg_UserMsg, " Mutex being unlocked");
+ VG_(pp_ExeContext)(mx->ec_locked);
+ break;
+ case MX_Free:
+ VG_(message)(Vg_UserMsg, " Mutex was unlocked");
+ VG_(pp_ExeContext)(mx->ec_locked);
+ break;
+ }
+
+ VG_(message)(Vg_UserMsg, " Mutex was %s",
+ mx->state =3D=3D MX_Dead ? "destroyed" : "created");
+ VG_(pp_ExeContext)(mx->ec_create);
+}
+
+static OSet *mutexSet =3D NULL;
+
+static struct mutex *mutex_get(Addr mutexp)
+{
+ return VG_(OSet_Lookup)(mutexSet, &mutexp);
+}
+
+static Bool mx_is_initialized(Addr mutexp)
+{
+ const struct mutex *mx =3D mutex_get(mutexp);
+
+ return mx && mx->state !=3D MX_Dead;
+}
+
+static struct mutex *mutex_check_initialized(ThreadId tid, Addr mutexp, =
const Char *action)
+{
+ struct mutex *mx;
+
+ vg_assert(tid !=3D VG_INVALID_THREADID);
+
+ if (!mx_is_initialized(mutexp)) {
+ mutex_report(tid, mutexp, MXE_NotInit, action);
+ VG_(tm_mutex_init)(tid, mutexp);
+ }
+
+ mx =3D mutex_get(mutexp);
+ vg_assert(mx !=3D NULL);
+
+ return mx;
+}
+
+#if 0
+static Bool mx_is_locked(Addr mutexp)
+{
+ const struct mutex *mx =3D mutex_get(mutexp);
+
+ return mx && (mx->state =3D=3D MX_Locked);
+}
+#endif
+
+/* Mutex at mutexp is initialized. This must be done before any
+ further mutex operations are OK. Fails if:
+ - mutexp already exists (and is locked?)
+*/
+void VG_(tm_mutex_init)(ThreadId tid, Addr mutexp)
+{
+ struct mutex *mx =3D mutex_get(mutexp);
+
+ if (mx =3D=3D NULL) {
+ mx =3D VG_(OSet_AllocNode)(mutexSet, sizeof(struct mutex));
+ mx->mutex =3D mutexp;
+ VG_(OSet_Insert)(mutexSet, mx);
+ } else if (mx->state !=3D MX_Dead)
+ mutex_report(tid, mutexp, MXE_ReInit, "initializing");
+
+ mx->owner =3D VG_INVALID_THREADID;
+
+ mutex_setstate(tid, mx, MX_Init);
+ mutex_setstate(tid, mx, MX_Free);
+}
+
+Bool VG_(tm_mutex_exists)(Addr mutexp)
+{
+ return mx_is_initialized(mutexp);
+}
+
+/* Mutex is being destroyed. Fails if:
+ - mutex was not initialized
+ - mutex is locked (?)
+ */
+void VG_(tm_mutex_destroy)(ThreadId tid, Addr mutexp)
+{
+ struct mutex *mx =3D mutex_get(mutexp);
+
+ if (mx =3D=3D NULL)
+ mutex_report(tid, mutexp, MXE_NotExist, "destroying");
+ else {
+ switch(mx->state) {
+ case MX_Dead:
+ mutex_report(tid, mutexp, MXE_NotInit, "destroying");
+ break;
+
+ case MX_Locked:
+ case MX_Unlocking:
+ mutex_report(tid, mutexp, MXE_Locked, "destroying");
+ VG_(tm_mutex_unlock)(tid, mutexp);
+ break;
+
+ case MX_Init:
+ case MX_Free:
+ /* OK */
+ break;
+ }
+ mutex_setstate(tid, mx, MX_Dead);
+ }
+}
+
+/* A thread attempts to lock a mutex. If "blocking" then the thread
+ is put into a blocked state until the lock is acquired. Fails if:
+ - tid is invalid
+ - mutex has not been initialized
+ - thread is blocked on another object (?)
+ - blocking on this mutex could cause a deadlock
+ (Lock rank detection?)
+ */
+void VG_(tm_mutex_trylock)(ThreadId tid, Addr mutexp)
+{
+ struct mutex *mx;
+
+ mx =3D mutex_check_initialized(tid, mutexp, "trylocking");
+
+ thread_block_mutex(tid, mx);
+
+ if (mx->state =3D=3D MX_Locked && mx->owner =3D=3D tid) /* deadlock *=
/
+ mutex_report(tid, mutexp, MXE_Deadlock, "trylocking");
+
+ VG_TRACK( pre_mutex_lock, tid, (void *)mutexp );
+}
+
+/* Give up waiting for a mutex. Fails if:
+ - thread is not currently blocked on the mutex
+ */
+void VG_(tm_mutex_giveup)(ThreadId tid, Addr mutexp)
+{
+ struct mutex *mx;
+
+ mx =3D mutex_check_initialized(tid, mutexp, "giving up");
+
+ thread_unblock_mutex(tid, mx, "giving up on mutex");
+}
+
+/* A thread acquires a mutex. Fails if:
+ - thread is not blocked waiting for the mutex
+ - mutex is held by another thread
+ */
+void VG_(tm_mutex_acquire)(ThreadId tid, Addr mutexp)
+{
+ struct mutex *mx;
+
+ mx =3D mutex_check_initialized(tid, mutexp, "acquiring"); =20
+ =20
+ switch(mx->state) {
+ case MX_Unlocking: /* ownership transfer or relock */
+ VG_TRACK( post_mutex_unlock, mx->owner, (void *)mutexp );
+ if (mx->owner !=3D tid)
+ thread_unblock_mutex(tid, mx, "acquiring mutex");
+ break;
+
+ case MX_Free:
+ thread_unblock_mutex(tid, mx, "acquiring mutex");
+ break;
+
+ case MX_Locked:
+ if (debug_mutex)
+ VG_(printf)("mutex=3D%p mx->state=3D%s\n", mutexp, pp_mutexstate(mx));
+ VG_TRACK( post_mutex_unlock, mx->owner, (void *)mutexp );
+ mutex_report(tid, mutexp, MXE_Locked, "acquiring");
+ thread_unblock_mutex(tid, mx, "acquiring mutex");
+ break;
+
+ case MX_Init:
+ case MX_Dead:
+ vg_assert(0);
+ }=20
+ =20
+ mx->owner =3D tid;
+ mutex_setstate(tid, mx, MX_Locked);
+
+ VG_TRACK( post_mutex_lock, tid, (void *)mutexp );
+}
+
+/* Try unlocking a lock. This will move it into a state where it can
+ either be unlocked, or change ownership to another thread. If
+ unlock fails, it will remain locked. */
+void VG_(tm_mutex_tryunlock)(ThreadId tid, Addr mutexp)
+{
+ struct thread *th;
+ struct mutex *mx;
+
+ mx =3D mutex_check_initialized(tid, mutexp, "try-unlocking");
+
+ th =3D thread_get(tid);
+
+ if (th =3D=3D NULL)
+ thread_report(tid, THE_NotExist, "try-unlocking mutex");
+ else {
+ switch(th->state) {
+ case TS_Alive:
+ case TS_Running: /* OK */
+ break;
+
+ case TS_Dead:
+ case TS_Zombie:
+ thread_report(tid, THE_NotAlive, "try-unlocking mutex");
+ break;
+
+ case TS_JoinBlocked:
+ case TS_CVBlocked:
+ case TS_MutexBlocked:
+ thread_report(tid, THE_Blocked, "try-unlocking mutex");
+ do_thread_run(th);
+ break;
+ }
+ }
+
+ switch(mx->state) {
+ case MX_Locked:
+ if (mx->owner !=3D tid)
+ mutex_report(tid, mutexp, MXE_NotOwner, "try-unlocking");
+ break;
+
+ case MX_Free:
+ mutex_report(tid, mutexp, MXE_NotLocked, "try-unlocking");
+ break;
+
+ case...
[truncated message content] |
|
From: Julian S. <js...@ac...> - 2006-01-17 14:48:47
|
> One issue here is that the new function wrapping system runs the > wrapper routine on the virtual CPU so the thread wrappers will have > to use client requests to keep the thread model updated. Yes. Looks like the VALGRIND_NON_SIMD_CALL* macros might come in handy for this kind of thing. J |
|
From: Tom H. <to...@co...> - 2006-01-17 14:08:15
|
In message <200...@ac...>
Julian Seward <js...@ac...> wrote:
> This opens the door to reinstating functionality that depends on
> being able to intercept the pthread_ functions - that is, Helgrind,
> and the simple pthread checks that Valgrind used to do prior to
> version 2.4. If anybody wants to look into these, particularly
> into bringing Helgrind back to life, or just play around with
> function wrapping, now is a good time to start.
One issue here is that the new function wrapping system runs the
wrapper routine on the virtual CPU so the thread wrappers will have
to use client requests to keep the thread model updated.
So the existing m_pthreadmodel.c will need quite a bit of work as
it currently has wrappers that expect to run on the real CPU and
have direct access to valgrind internals.
> This generality is necessary in order to write pthread replacements
> reliably, since there are many minor variants in names (eg,
> pthread_create@GLIBC_2.0 vs pthread_create@@GLIBC_2.1) and we want to
> write just one wrapper which covers all such variants.
You do need to be careful when doing that though, as the whole point
of the versioning of the symbols is to cope with API/ABI changes so
if the version has changed the arguments may have changed in some way
and you may need separate wrappers in order to handle that.
Tom
--
Tom Hughes (to...@co...)
http://www.compton.nu/
|
|
From: Julian S. <js...@ac...> - 2006-01-17 13:46:23
|
As of a couple of days ago, the svn trunk contains support for
wrapping arbitrary functions. This works on x86, amd64 and
ppc32; it does not yet work reliably on ppc64.
This opens the door to reinstating functionality that depends on
being able to intercept the pthread_ functions - that is, Helgrind,
and the simple pthread checks that Valgrind used to do prior to
version 2.4. If anybody wants to look into these, particularly
into bringing Helgrind back to life, or just play around with
function wrapping, now is a good time to start.
At the bottom of coregrind/vg_preloaded.c are a few #if 0'd
wrappers for pthread functions. Uncomment them and rebuild, and
you'll see entries/exits to those functions as they happen.
There are also some test cases in memcheck/tests/wrap[1-6]*.c
worth looking at.
The rest of this message is a bit of technical background.
Making function wrapping work reliably and portably in the presence
of dynamic linking has proven remarkably difficult. It sounds like
a simple problem, but it isn't, and it seems to contain some
unavoidable amount of uglyness, which moves from place to place
depending on the scheme used, but which cannot be avoided entirely.
There are two parts to the problem:
(1) specifying which functions should be wrapped by which other functions
(2) getting the control flow stuff to work right
-----
(1) Specifying wraps (and redirects)
The current implementation extends the previous redirection scheme.
A wrapper function has a specially encoded name, which specifies an
arbitrary set of functions to be wrapped. Those functions are
characterised by their name and the soname of the containing ELF
shared object, and both of those may contain '*' as a wildcard.
So for example you can write a single wrapper for any function
whose name matches "pthread_create@*" in any shared object whose
soname matches "libpthread.so.*".
This generality is necessary in order to write pthread replacements
reliably, since there are many minor variants in names (eg,
pthread_create@GLIBC_2.0 vs pthread_create@@GLIBC_2.1) and we want to
write just one wrapper which covers all such variants.
The symbol table reading machinery notices when wrapper functions are
loaded, and causes wraps (and replacements) to become active as soon as
possible. When code is unloaded, any wraps/replacements which then
are impossible are cancelled. You can see what's going on with
--trace-redir=yes. The wrapping manager makes explicit a concept
which had previously been implicit: the distinction between redirect/wrap
specifications and the currently active wraps/specifications.
For example, a wrapper claiming to be the wrapper for function "foo" in
"libobscure.so" might be loaded. That remains as a specification until
such time as libobscure.so is also loaded, at which point the binding
becomes active. If libobscure.so is later unmapped, the active binding
is cancelled, but the specification remains present, just in case
libobscure.so is re-mapped again even later. Also, if the .so containing
the wrapper is unmapped, then all active wrappings involving it
are cancelled. In short, all code mmaps/munmaps are monitored, and the
mechanism binds wrappers to wrappees whenever it can.
(2) getting the control flow stuff to work right
The tricky part of function wrapping is what to do when you want to call
the "real" function. For example, a wrapper for pthread_create really
needs to call the real pthread_create at some point. The problem is that
this call, unlike all others to pthread_create, must not merely be diverted
to the wrapper; instead we want to go to the real thing.
The solution is as follows. Valgrind pretends that the CPU it is simulating
has an extra register, the non-redirected-address register ("%NRADDR").
Whenever a wrapper is entered, Valgrind writes the address of the
corresponding original function (the REAL pthread_create) to this
register.
valgrind.h supplies a C macro to get hold of this address, and that's the
first thing the wrapper should do. Then it can do whatever it likes, but
at some point it has to make a call to that address. The problem now is
that simply doing a normal call would wind up back in the wrapper (that's
how we got there in the first place).
This is where the unavoidable uglyness appears. valgrind.h therefore
supplies a bunch of ultra-magical macros which make it possible to do
function calls which disable redirection, and these must be used to call
the original. Hence a simple wrapper for pthread_mutex_lock will look
like this:
// return type
int
// name of wrapper, specifying what this is a wrapper for
I_WRAP_SONAME_FNNAME_ZU(libpthreadZdsoZd0,pthread_mutex_lock)
// formals, same as the original, of course
( pthread_mutex_t *mutex )
{
// read %NRADDR before it gets trashed
void* orig;
VALGRIND_GET_ORIG_FN(orig);
// do stuff before
fprintf(stderr, "<< pthread_mxlock %p", mutex);
// call the original
// "ret = orig(mutex), but skip the redirect this time"
CALL_FN_W_W(ret, orig, mutex);
// do stuff after
fprintf(stderr, " -> %d >>\n", ret);
return ret;
}
All the magic macros I_REPLACE_SONAME_FNNAME_ZU, VALGRIND_GET_ORIG_FN
and CALL_FN_W_W are supplied in valgrind.h.
The CALL_FN_W_W macros and its friends construct simple function calls.
This is the really nasty bit. Really we'd like to just write an ordinary
function call there, but then gcc would emit a normal call instruction
and it would be redirected, leading to an infinite loop (+ stack
overflow). The CALL_ macros therefore create calls using a special
call-no-redirect instruction which the real CPU doesn't understand
but Valgrind does.
J
|
|
From: <js...@ac...> - 2006-01-17 09:46:43
|
Nightly build on minnie ( SuSE 10.0, ppc32 ) started at 2006-01-17 05:00:01 GMT
Results differ from 24 hours ago
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... done
Running regression tests ... failed
Regression test results follow
== 182 tests, 17 stderr failures, 3 stdout failures =================
memcheck/tests/badjump (stderr)
memcheck/tests/badjump2 (stderr)
memcheck/tests/leak-cycle (stderr)
memcheck/tests/leak-tree (stderr)
memcheck/tests/leakotron (stdout)
memcheck/tests/mempool (stderr)
memcheck/tests/nanoleak_supp (stderr)
memcheck/tests/partiallydefinedeq (stderr)
memcheck/tests/pointer-trace (stderr)
memcheck/tests/sigaltstack (stderr)
memcheck/tests/stack_changes (stdout)
memcheck/tests/stack_changes (stderr)
memcheck/tests/supp1 (stderr)
memcheck/tests/supp_unknown (stderr)
memcheck/tests/xml1 (stderr)
none/tests/faultstatus (stderr)
none/tests/fdleak_cmsg (stderr)
none/tests/mremap (stderr)
none/tests/ppc32/jm-fp (stdout)
none/tests/ppc32/jm-fp (stderr)
=================================================
== Results from 24 hours ago ==
=================================================
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... failed
Last 20 lines of verbose log follow echo
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/ppc32 -I../coregrind/linux -I../coregrind/ppc32-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"ppc32-linux\"" -DVGA_ppc32=1 -DVGO_linux=1 -DVGP_ppc32_linux=1 -DVG_LIBDIR="\"/home/sewardj/Nightly/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -MT libcoregrind_ppc32_linux_a-m_threadstate.o -MD -MP -MF ".deps/libcoregrind_ppc32_linux_a-m_threadstate.Tpo" -c -o libcoregrind_ppc32_linux_a-m_threadstate.o `test -f 'm_threadstate.c' || echo './'`m_threadstate.c; \
then mv -f ".deps/libcoregrind_ppc32_linux_a-m_threadstate.Tpo" ".deps/libcoregrind_ppc32_linux_a-m_threadstate.Po"; else rm -f ".deps/libcoregrind_ppc32_linux_a-m_threadstate.Tpo"; exit 1; fi
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/ppc32 -I../coregrind/linux -I../coregrind/ppc32-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"ppc32-linux\"" -DVGA_ppc32=1 -DVGO_linux=1 -DVGP_ppc32_linux=1 -DVG_LIBDIR="\"/home/sewardj/Nightly/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -MT libcoregrind_ppc32_linux_a-m_tooliface.o -MD -MP -MF ".deps/libcoregrind_ppc32_linux_a-m_tooliface.Tpo" -c -o libcoregrind_ppc32_linux_a-m_tooliface.o `test -f 'm_tooliface.c' || echo './'`m_tooliface.c; \
then mv -f ".deps/libcoregrind_ppc32_linux_a-m_tooliface.Tpo" ".deps/libcoregrind_ppc32_linux_a-m_tooliface.Po"; else rm -f ".deps/libcoregrind_ppc32_linux_a-m_tooliface.Tpo"; exit 1; fi
gcc -I../coregrind -I.. -I../coregrind/ppc32 -I../coregrind/linux -I../coregrind/ppc32-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"ppc32-linux\"" -DVGA_ppc32=1 -DVGO_linux=1 -DVGP_ppc32_linux=1 -Wa,-maltivec -m32 -g -Wno-long-long -c -o libcoregrind_ppc32_linux_a-m_trampoline.o `test -f 'm_trampoline.S' || echo './'`m_trampoline.S
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/ppc32 -I../coregrind/linux -I../coregrind/ppc32-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"ppc32-linux\"" -DVGA_ppc32=1 -DVGO_linux=1 -DVGP_ppc32_linux=1 -DVG_LIBDIR="\"/home/sewardj/Nightly/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -MT libcoregrind_ppc32_linux_a-m_translate.o -MD -MP -MF ".deps/libcoregrind_ppc32_linux_a-m_translate.Tpo" -c -o libcoregrind_ppc32_linux_a-m_translate.o `test -f 'm_translate.c' || echo './'`m_translate.c; \
then mv -f ".deps/libcoregrind_ppc32_linux_a-m_translate.Tpo" ".deps/libcoregrind_ppc32_linux_a-m_translate.Po"; else rm -f ".deps/libcoregrind_ppc32_linux_a-m_translate.Tpo"; exit 1; fi
m_translate.c: In function 'vgPlain_translate':
m_translate.c:717: error: 'VexTranslateArgs' has no member named 'guest_bytes_addr_noredir'
m_translate.c:718: warning: assignment from incompatible pointer type
m_translate.c:723: warning: assignment from incompatible pointer type
m_translate.c:726: warning: assignment from incompatible pointer type
m_translate.c:731: error: 'VexTranslateArgs' has no member named 'do_set_NRADDR'
make[3]: *** [libcoregrind_ppc32_linux_a-m_translate.o] Error 1
make[3]: Leaving directory `/home/sewardj/Nightly/valgrind/coregrind'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/sewardj/Nightly/valgrind/coregrind'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/sewardj/Nightly/valgrind'
make: *** [all] Error 2
=================================================
== Difference between 24 hours ago and now ==
=================================================
*** old.short Tue Jan 17 05:02:43 2006
--- new.short Tue Jan 17 05:12:29 2006
***************
*** 3,26 ****
Configuring valgrind ... done
! Building valgrind ... failed
- Last 20 lines of verbose log follow echo
- if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/ppc32 -I../coregrind/linux -I../coregrind/ppc32-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"ppc32-linux\"" -DVGA_ppc32=1 -DVGO_linux=1 -DVGP_ppc32_linux=1 -DVG_LIBDIR="\"/home/sewardj/Nightly/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -MT libcoregrind_ppc32_linux_a-m_threadstate.o -MD -MP -MF ".deps/libcoregrind_ppc32_linux_a-m_threadstate.Tpo" -c -o libcoregrind_ppc32_linux_a-m_threadstate.o `test -f 'm_threadstate.c' || echo './'`m_threadstate.c; \
- then mv -f ".deps/libcoregrind_ppc32_linux_a-m_threadstate.Tpo" ".deps/libcoregrind_ppc32_linux_a-m_threadstate.Po"; else rm -f ".deps/libcoregrind_ppc32_linux_a-m_threadstate.Tpo"; exit 1; fi
- if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/ppc32 -I../coregrind/linux -I../coregrind/ppc32-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"ppc32-linux\"" -DVGA_ppc32=1 -DVGO_linux=1 -DVGP_ppc32_linux=1 -DVG_LIBDIR="\"/home/sewardj/Nightly/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -MT libcoregrind_ppc32_linux_a-m_tooliface.o -MD -MP -MF ".deps/libcoregrind_ppc32_linux_a-m_tooliface.Tpo" -c -o libcoregrind_ppc32_linux_a-m_tooliface.o `test -f 'm_tooliface.c' || echo './'`m_tooliface.c; \
- then mv -f ".deps/libcoregrind_ppc32_linux_a-m_tooliface.Tpo" ".deps/libcoregrind_ppc32_linux_a-m_tooliface.Po"; else rm -f ".deps/libcoregrind_ppc32_linux_a-m_tooliface.Tpo"; exit 1; fi
- gcc -I../coregrind -I.. -I../coregrind/ppc32 -I../coregrind/linux -I../coregrind/ppc32-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"ppc32-linux\"" -DVGA_ppc32=1 -DVGO_linux=1 -DVGP_ppc32_linux=1 -Wa,-maltivec -m32 -g -Wno-long-long -c -o libcoregrind_ppc32_linux_a-m_trampoline.o `test -f 'm_trampoline.S' || echo './'`m_trampoline.S
- if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/ppc32 -I../coregrind/linux -I../coregrind/ppc32-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"ppc32-linux\"" -DVGA_ppc32=1 -DVGO_linux=1 -DVGP_ppc32_linux=1 -DVG_LIBDIR="\"/home/sewardj/Nightly/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -MT libcoregrind_ppc32_linux_a-m_translate.o -MD -MP -MF ".deps/libcoregrind_ppc32_linux_a-m_translate.Tpo" -c -o libcoregrind_ppc32_linux_a-m_translate.o `test -f 'm_translate.c' || echo './'`m_translate.c; \
- then mv -f ".deps/libcoregrind_ppc32_linux_a-m_translate.Tpo" ".deps/libcoregrind_ppc32_linux_a-m_translate.Po"; else rm -f ".deps/libcoregrind_ppc32_linux_a-m_translate.Tpo"; exit 1; fi
- m_translate.c: In function 'vgPlain_translate':
- m_translate.c:717: error: 'VexTranslateArgs' has no member named 'guest_bytes_addr_noredir'
- m_translate.c:718: warning: assignment from incompatible pointer type
- m_translate.c:723: warning: assignment from incompatible pointer type
- m_translate.c:726: warning: assignment from incompatible pointer type
- m_translate.c:731: error: 'VexTranslateArgs' has no member named 'do_set_NRADDR'
- make[3]: *** [libcoregrind_ppc32_linux_a-m_translate.o] Error 1
- make[3]: Leaving directory `/home/sewardj/Nightly/valgrind/coregrind'
- make[2]: *** [all] Error 2
- make[2]: Leaving directory `/home/sewardj/Nightly/valgrind/coregrind'
- make[1]: *** [all-recursive] Error 1
- make[1]: Leaving directory `/home/sewardj/Nightly/valgrind'
- make: *** [all] Error 2
--- 3,30 ----
Configuring valgrind ... done
! Building valgrind ... done
! Running regression tests ... failed
!
! Regression test results follow
!
! == 182 tests, 17 stderr failures, 3 stdout failures =================
! memcheck/tests/badjump (stderr)
! memcheck/tests/badjump2 (stderr)
! memcheck/tests/leak-cycle (stderr)
! memcheck/tests/leak-tree (stderr)
! memcheck/tests/leakotron (stdout)
! memcheck/tests/mempool (stderr)
! memcheck/tests/nanoleak_supp (stderr)
! memcheck/tests/partiallydefinedeq (stderr)
! memcheck/tests/pointer-trace (stderr)
! memcheck/tests/sigaltstack (stderr)
! memcheck/tests/stack_changes (stdout)
! memcheck/tests/stack_changes (stderr)
! memcheck/tests/supp1 (stderr)
! memcheck/tests/supp_unknown (stderr)
! memcheck/tests/xml1 (stderr)
! none/tests/faultstatus (stderr)
! none/tests/fdleak_cmsg (stderr)
! none/tests/mremap (stderr)
! none/tests/ppc32/jm-fp (stdout)
! none/tests/ppc32/jm-fp (stderr)
|
|
From: Julian S. <js...@ac...> - 2006-01-17 04:25:09
|
On Tuesday 17 January 2006 03:11, Robert Walsh wrote: > > Even with a clean build, Robin? I did check in a load of > > stuff just now, but revs 1540/5541 appear to work OK on my > > amd64 box. > > Yup - even with a clean build. Details are: Athlon64 with 1GB memory > running stock FC4 w/ glibc-2.3.5-10.3. It looks like every single test > fails. Hmm. Looking at the nightly builds, there's clearly something up, but I can't reproduce it. A fresh checkout of 1540/5541 builds and tests ok for me on SuSE 9.2 (amd64) and SuSE 10.0 (ppc32). Might this be to do with svn up-ing an existing tree vs using a new checkout? J |
|
From: Julian S. <js...@ac...> - 2006-01-17 04:08:29
|
> On Mon, 2006-01-16 at 18:58 -0800, Robert Walsh wrote: > > I think I know why 'make distclean' isn't cleaning out the test > > directories correctly. [...] Ah, well spotted. I didn't realise this too had been caused by my VG_ARCH_ALL snafu. Oops. J |
|
From: <js...@ac...> - 2006-01-17 03:58:02
|
Nightly build on phoenix ( SuSE 10.0 ) started at 2006-01-17 03:30:01 GMT Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 215 tests, 6 stderr failures, 1 stdout failure ================= memcheck/tests/leak-tree (stderr) memcheck/tests/nanoleak_supp (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) none/tests/mremap2 (stdout) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: <js...@ac...> - 2006-01-17 03:49:30
|
Nightly build on g5 ( YDL 4.0, ppc970 ) started at 2006-01-17 04:40:00 CET
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
== 185 tests, 48 stderr failures, 7 stdout failures =================
memcheck/tests/badaddrvalue (stderr)
memcheck/tests/badfree-2trace (stderr)
memcheck/tests/badfree (stderr)
memcheck/tests/badjump (stderr)
memcheck/tests/badjump2 (stderr)
memcheck/tests/badpoll (stderr)
memcheck/tests/badrw (stderr)
memcheck/tests/custom_alloc (stderr)
memcheck/tests/doublefree (stderr)
memcheck/tests/error_counts (stdout)
memcheck/tests/errs1 (stderr)
memcheck/tests/exitprog (stderr)
memcheck/tests/fprw (stderr)
memcheck/tests/fwrite (stderr)
memcheck/tests/inline (stderr)
memcheck/tests/leak-cycle (stderr)
memcheck/tests/leak-tree (stderr)
memcheck/tests/leakotron (stdout)
memcheck/tests/malloc1 (stderr)
memcheck/tests/malloc2 (stderr)
memcheck/tests/memalign_test (stderr)
memcheck/tests/mempool (stderr)
memcheck/tests/mismatches (stderr)
memcheck/tests/mmaptest (stderr)
memcheck/tests/nanoleak (stderr)
memcheck/tests/overlap (stderr)
memcheck/tests/partial_load_dflt (stderr)
memcheck/tests/partial_load_ok (stderr)
memcheck/tests/partiallydefinedeq (stderr)
memcheck/tests/pointer-trace (stderr)
memcheck/tests/post-syscall (stdout)
memcheck/tests/post-syscall (stderr)
memcheck/tests/realloc3 (stderr)
memcheck/tests/sigaltstack (stderr)
memcheck/tests/sigprocmask (stderr)
memcheck/tests/stack_changes (stdout)
memcheck/tests/stack_changes (stderr)
memcheck/tests/stack_switch (stderr)
memcheck/tests/supp1 (stderr)
memcheck/tests/supp_unknown (stderr)
memcheck/tests/suppfree (stderr)
memcheck/tests/trivialleak (stderr)
memcheck/tests/wrap5 (stdout)
memcheck/tests/wrap5 (stderr)
memcheck/tests/wrap6 (stdout)
memcheck/tests/writev (stderr)
memcheck/tests/xml1 (stderr)
none/tests/faultstatus (stderr)
none/tests/fdleak_cmsg (stderr)
none/tests/fdleak_fcntl (stderr)
none/tests/mremap (stderr)
none/tests/mremap2 (stdout)
none/tests/sem (stderr)
none/tests/shell_valid2 (stderr)
none/tests/shell_valid3 (stderr)
=================================================
== Results from 24 hours ago ==
=================================================
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... failed
Last 20 lines of verbose log follow echo
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/ppc32 -I../coregrind/linux -I../coregrind/ppc32-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"ppc32-linux\"" -DVGA_ppc32=1 -DVGO_linux=1 -DVGP_ppc32_linux=1 -DVG_LIBDIR="\"/home/sewardj/Nightly/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -MT libcoregrind_ppc32_linux_a-m_threadstate.o -MD -MP -MF ".deps/libcoregrind_ppc32_linux_a-m_threadstate.Tpo" -c -o libcoregrind_ppc32_linux_a-m_threadstate.o `test -f 'm_threadstate.c' || echo './'`m_threadstate.c; \
then mv -f ".deps/libcoregrind_ppc32_linux_a-m_threadstate.Tpo" ".deps/libcoregrind_ppc32_linux_a-m_threadstate.Po"; else rm -f ".deps/libcoregrind_ppc32_linux_a-m_threadstate.Tpo"; exit 1; fi
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/ppc32 -I../coregrind/linux -I../coregrind/ppc32-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"ppc32-linux\"" -DVGA_ppc32=1 -DVGO_linux=1 -DVGP_ppc32_linux=1 -DVG_LIBDIR="\"/home/sewardj/Nightly/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -MT libcoregrind_ppc32_linux_a-m_tooliface.o -MD -MP -MF ".deps/libcoregrind_ppc32_linux_a-m_tooliface.Tpo" -c -o libcoregrind_ppc32_linux_a-m_tooliface.o `test -f 'm_tooliface.c' || echo './'`m_tooliface.c; \
then mv -f ".deps/libcoregrind_ppc32_linux_a-m_tooliface.Tpo" ".deps/libcoregrind_ppc32_linux_a-m_tooliface.Po"; else rm -f ".deps/libcoregrind_ppc32_linux_a-m_tooliface.Tpo"; exit 1; fi
gcc -I../coregrind -I.. -I../coregrind/ppc32 -I../coregrind/linux -I../coregrind/ppc32-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"ppc32-linux\"" -DVGA_ppc32=1 -DVGO_linux=1 -DVGP_ppc32_linux=1 -Wa,-maltivec -m32 -g -Wno-long-long -c -o libcoregrind_ppc32_linux_a-m_trampoline.o `test -f 'm_trampoline.S' || echo './'`m_trampoline.S
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/ppc32 -I../coregrind/linux -I../coregrind/ppc32-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"ppc32-linux\"" -DVGA_ppc32=1 -DVGO_linux=1 -DVGP_ppc32_linux=1 -DVG_LIBDIR="\"/home/sewardj/Nightly/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -MT libcoregrind_ppc32_linux_a-m_translate.o -MD -MP -MF ".deps/libcoregrind_ppc32_linux_a-m_translate.Tpo" -c -o libcoregrind_ppc32_linux_a-m_translate.o `test -f 'm_translate.c' || echo './'`m_translate.c; \
then mv -f ".deps/libcoregrind_ppc32_linux_a-m_translate.Tpo" ".deps/libcoregrind_ppc32_linux_a-m_translate.Po"; else rm -f ".deps/libcoregrind_ppc32_linux_a-m_translate.Tpo"; exit 1; fi
m_translate.c: In function `vgPlain_translate':
m_translate.c:717: error: structure has no member named `guest_bytes_addr_noredir'
m_translate.c:718: warning: assignment from incompatible pointer type
m_translate.c:723: warning: assignment from incompatible pointer type
m_translate.c:726: warning: assignment from incompatible pointer type
m_translate.c:731: error: structure has no member named `do_set_NRADDR'
make[3]: *** [libcoregrind_ppc32_linux_a-m_translate.o] Error 1
make[3]: Leaving directory `/home/sewardj/Nightly/valgrind/coregrind'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/sewardj/Nightly/valgrind/coregrind'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/sewardj/Nightly/valgrind'
make: *** [all] Error 2
=================================================
== Difference between 24 hours ago and now ==
=================================================
*** old.short Tue Jan 17 04:41:27 2006
--- new.short Tue Jan 17 04:49:23 2006
***************
*** 3,26 ****
Configuring valgrind ... done
! Building valgrind ... failed
- Last 20 lines of verbose log follow echo
- if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/ppc32 -I../coregrind/linux -I../coregrind/ppc32-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"ppc32-linux\"" -DVGA_ppc32=1 -DVGO_linux=1 -DVGP_ppc32_linux=1 -DVG_LIBDIR="\"/home/sewardj/Nightly/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -MT libcoregrind_ppc32_linux_a-m_threadstate.o -MD -MP -MF ".deps/libcoregrind_ppc32_linux_a-m_threadstate.Tpo" -c -o libcoregrind_ppc32_linux_a-m_threadstate.o `test -f 'm_threadstate.c' || echo './'`m_threadstate.c; \
- then mv -f ".deps/libcoregrind_ppc32_linux_a-m_threadstate.Tpo" ".deps/libcoregrind_ppc32_linux_a-m_threadstate.Po"; else rm -f ".deps/libcoregrind_ppc32_linux_a-m_threadstate.Tpo"; exit 1; fi
- if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/ppc32 -I../coregrind/linux -I../coregrind/ppc32-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"ppc32-linux\"" -DVGA_ppc32=1 -DVGO_linux=1 -DVGP_ppc32_linux=1 -DVG_LIBDIR="\"/home/sewardj/Nightly/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -MT libcoregrind_ppc32_linux_a-m_tooliface.o -MD -MP -MF ".deps/libcoregrind_ppc32_linux_a-m_tooliface.Tpo" -c -o libcoregrind_ppc32_linux_a-m_tooliface.o `test -f 'm_tooliface.c' || echo './'`m_tooliface.c; \
- then mv -f ".deps/libcoregrind_ppc32_linux_a-m_tooliface.Tpo" ".deps/libcoregrind_ppc32_linux_a-m_tooliface.Po"; else rm -f ".deps/libcoregrind_ppc32_linux_a-m_tooliface.Tpo"; exit 1; fi
- gcc -I../coregrind -I.. -I../coregrind/ppc32 -I../coregrind/linux -I../coregrind/ppc32-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"ppc32-linux\"" -DVGA_ppc32=1 -DVGO_linux=1 -DVGP_ppc32_linux=1 -Wa,-maltivec -m32 -g -Wno-long-long -c -o libcoregrind_ppc32_linux_a-m_trampoline.o `test -f 'm_trampoline.S' || echo './'`m_trampoline.S
- if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/ppc32 -I../coregrind/linux -I../coregrind/ppc32-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"ppc32-linux\"" -DVGA_ppc32=1 -DVGO_linux=1 -DVGP_ppc32_linux=1 -DVG_LIBDIR="\"/home/sewardj/Nightly/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -MT libcoregrind_ppc32_linux_a-m_translate.o -MD -MP -MF ".deps/libcoregrind_ppc32_linux_a-m_translate.Tpo" -c -o libcoregrind_ppc32_linux_a-m_translate.o `test -f 'm_translate.c' || echo './'`m_translate.c; \
- then mv -f ".deps/libcoregrind_ppc32_linux_a-m_translate.Tpo" ".deps/libcoregrind_ppc32_linux_a-m_translate.Po"; else rm -f ".deps/libcoregrind_ppc32_linux_a-m_translate.Tpo"; exit 1; fi
- m_translate.c: In function `vgPlain_translate':
- m_translate.c:717: error: structure has no member named `guest_bytes_addr_noredir'
- m_translate.c:718: warning: assignment from incompatible pointer type
- m_translate.c:723: warning: assignment from incompatible pointer type
- m_translate.c:726: warning: assignment from incompatible pointer type
- m_translate.c:731: error: structure has no member named `do_set_NRADDR'
- make[3]: *** [libcoregrind_ppc32_linux_a-m_translate.o] Error 1
- make[3]: Leaving directory `/home/sewardj/Nightly/valgrind/coregrind'
- make[2]: *** [all] Error 2
- make[2]: Leaving directory `/home/sewardj/Nightly/valgrind/coregrind'
- make[1]: *** [all-recursive] Error 1
- make[1]: Leaving directory `/home/sewardj/Nightly/valgrind'
- make: *** [all] Error 2
--- 3,65 ----
Configuring valgrind ... done
! Building valgrind ... done
! Running regression tests ... failed
!
! Regression test results follow
!
! == 185 tests, 48 stderr failures, 7 stdout failures =================
! memcheck/tests/badaddrvalue (stderr)
! memcheck/tests/badfree-2trace (stderr)
! memcheck/tests/badfree (stderr)
! memcheck/tests/badjump (stderr)
! memcheck/tests/badjump2 (stderr)
! memcheck/tests/badpoll (stderr)
! memcheck/tests/badrw (stderr)
! memcheck/tests/custom_alloc (stderr)
! memcheck/tests/doublefree (stderr)
! memcheck/tests/error_counts (stdout)
! memcheck/tests/errs1 (stderr)
! memcheck/tests/exitprog (stderr)
! memcheck/tests/fprw (stderr)
! memcheck/tests/fwrite (stderr)
! memcheck/tests/inline (stderr)
! memcheck/tests/leak-cycle (stderr)
! memcheck/tests/leak-tree (stderr)
! memcheck/tests/leakotron (stdout)
! memcheck/tests/malloc1 (stderr)
! memcheck/tests/malloc2 (stderr)
! memcheck/tests/memalign_test (stderr)
! memcheck/tests/mempool (stderr)
! memcheck/tests/mismatches (stderr)
! memcheck/tests/mmaptest (stderr)
! memcheck/tests/nanoleak (stderr)
! memcheck/tests/overlap (stderr)
! memcheck/tests/partial_load_dflt (stderr)
! memcheck/tests/partial_load_ok (stderr)
! memcheck/tests/partiallydefinedeq (stderr)
! memcheck/tests/pointer-trace (stderr)
! memcheck/tests/post-syscall (stdout)
! memcheck/tests/post-syscall (stderr)
! memcheck/tests/realloc3 (stderr)
! memcheck/tests/sigaltstack (stderr)
! memcheck/tests/sigprocmask (stderr)
! memcheck/tests/stack_changes (stdout)
! memcheck/tests/stack_changes (stderr)
! memcheck/tests/stack_switch (stderr)
! memcheck/tests/supp1 (stderr)
! memcheck/tests/supp_unknown (stderr)
! memcheck/tests/suppfree (stderr)
! memcheck/tests/trivialleak (stderr)
! memcheck/tests/wrap5 (stdout)
! memcheck/tests/wrap5 (stderr)
! memcheck/tests/wrap6 (stdout)
! memcheck/tests/writev (stderr)
! memcheck/tests/xml1 (stderr)
! none/tests/faultstatus (stderr)
! none/tests/fdleak_cmsg (stderr)
! none/tests/fdleak_fcntl (stderr)
! none/tests/mremap (stderr)
! none/tests/mremap2 (stdout)
! none/tests/sem (stderr)
! none/tests/shell_valid2 (stderr)
! none/tests/shell_valid3 (stderr)
|
|
From: Tom H. <to...@co...> - 2006-01-17 03:38:11
|
Nightly build on dunsmere ( athlon, Fedora Core 4 ) started at 2006-01-17 03:30:06 GMT
Results differ from 24 hours ago
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... done
Running regression tests ... failed
Regression test results follow
== 217 tests, 7 stderr failures, 2 stdout failures =================
memcheck/tests/leak-tree (stderr)
memcheck/tests/mempool (stderr)
memcheck/tests/nanoleak_supp (stderr)
memcheck/tests/stack_switch (stderr)
memcheck/tests/x86/scalar (stderr)
memcheck/tests/x86/sse1_memory (stdout)
none/tests/mremap2 (stdout)
none/tests/x86/faultstatus (stderr)
none/tests/x86/int (stderr)
=================================================
== Results from 24 hours ago ==
=================================================
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... failed
Last 20 lines of verbose log follow echo
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.12390/Inst/lib/valgrind"\" -m32 -mpreferred-stack-boundary=2 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_threadstate.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo" -c -o libcoregrind_x86_linux_a-m_threadstate.o `test -f 'm_threadstate.c' || echo './'`m_threadstate.c; \
then mv -f ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo" ".deps/libcoregrind_x86_linux_a-m_threadstate.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo"; exit 1; fi
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.12390/Inst/lib/valgrind"\" -m32 -mpreferred-stack-boundary=2 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_tooliface.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo" -c -o libcoregrind_x86_linux_a-m_tooliface.o `test -f 'm_tooliface.c' || echo './'`m_tooliface.c; \
then mv -f ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo" ".deps/libcoregrind_x86_linux_a-m_tooliface.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo"; exit 1; fi
gcc -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -m32 -g -Wno-long-long -c -o libcoregrind_x86_linux_a-m_trampoline.o `test -f 'm_trampoline.S' || echo './'`m_trampoline.S
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.12390/Inst/lib/valgrind"\" -m32 -mpreferred-stack-boundary=2 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_translate.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_translate.Tpo" -c -o libcoregrind_x86_linux_a-m_translate.o `test -f 'm_translate.c' || echo './'`m_translate.c; \
then mv -f ".deps/libcoregrind_x86_linux_a-m_translate.Tpo" ".deps/libcoregrind_x86_linux_a-m_translate.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_translate.Tpo"; exit 1; fi
m_translate.c: In function 'vgPlain_translate':
m_translate.c:717: error: 'VexTranslateArgs' has no member named 'guest_bytes_addr_noredir'
m_translate.c:718: warning: assignment from incompatible pointer type
m_translate.c:723: warning: assignment from incompatible pointer type
m_translate.c:726: warning: assignment from incompatible pointer type
m_translate.c:731: error: 'VexTranslateArgs' has no member named 'do_set_NRADDR'
make[3]: *** [libcoregrind_x86_linux_a-m_translate.o] Error 1
make[3]: Leaving directory `/tmp/valgrind.12390/valgrind/coregrind'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/tmp/valgrind.12390/valgrind/coregrind'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/valgrind.12390/valgrind'
make: *** [all] Error 2
=================================================
== Difference between 24 hours ago and now ==
=================================================
*** old.short Tue Jan 17 03:31:38 2006
--- new.short Tue Jan 17 03:38:06 2006
***************
*** 3,26 ****
Configuring valgrind ... done
! Building valgrind ... failed
- Last 20 lines of verbose log follow echo
- if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.12390/Inst/lib/valgrind"\" -m32 -mpreferred-stack-boundary=2 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_threadstate.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo" -c -o libcoregrind_x86_linux_a-m_threadstate.o `test -f 'm_threadstate.c' || echo './'`m_threadstate.c; \
- then mv -f ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo" ".deps/libcoregrind_x86_linux_a-m_threadstate.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo"; exit 1; fi
- if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.12390/Inst/lib/valgrind"\" -m32 -mpreferred-stack-boundary=2 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_tooliface.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo" -c -o libcoregrind_x86_linux_a-m_tooliface.o `test -f 'm_tooliface.c' || echo './'`m_tooliface.c; \
- then mv -f ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo" ".deps/libcoregrind_x86_linux_a-m_tooliface.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo"; exit 1; fi
- gcc -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -m32 -g -Wno-long-long -c -o libcoregrind_x86_linux_a-m_trampoline.o `test -f 'm_trampoline.S' || echo './'`m_trampoline.S
- if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.12390/Inst/lib/valgrind"\" -m32 -mpreferred-stack-boundary=2 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_translate.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_translate.Tpo" -c -o libcoregrind_x86_linux_a-m_translate.o `test -f 'm_translate.c' || echo './'`m_translate.c; \
- then mv -f ".deps/libcoregrind_x86_linux_a-m_translate.Tpo" ".deps/libcoregrind_x86_linux_a-m_translate.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_translate.Tpo"; exit 1; fi
- m_translate.c: In function 'vgPlain_translate':
- m_translate.c:717: error: 'VexTranslateArgs' has no member named 'guest_bytes_addr_noredir'
- m_translate.c:718: warning: assignment from incompatible pointer type
- m_translate.c:723: warning: assignment from incompatible pointer type
- m_translate.c:726: warning: assignment from incompatible pointer type
- m_translate.c:731: error: 'VexTranslateArgs' has no member named 'do_set_NRADDR'
- make[3]: *** [libcoregrind_x86_linux_a-m_translate.o] Error 1
- make[3]: Leaving directory `/tmp/valgrind.12390/valgrind/coregrind'
- make[2]: *** [all] Error 2
- make[2]: Leaving directory `/tmp/valgrind.12390/valgrind/coregrind'
- make[1]: *** [all-recursive] Error 1
- make[1]: Leaving directory `/tmp/valgrind.12390/valgrind'
- make: *** [all] Error 2
--- 3,19 ----
Configuring valgrind ... done
! Building valgrind ... done
! Running regression tests ... failed
!
! Regression test results follow
!
! == 217 tests, 7 stderr failures, 2 stdout failures =================
! memcheck/tests/leak-tree (stderr)
! memcheck/tests/mempool (stderr)
! memcheck/tests/nanoleak_supp (stderr)
! memcheck/tests/stack_switch (stderr)
! memcheck/tests/x86/scalar (stderr)
! memcheck/tests/x86/sse1_memory (stdout)
! none/tests/mremap2 (stdout)
! none/tests/x86/faultstatus (stderr)
! none/tests/x86/int (stderr)
|
|
From: Tom H. <th...@cy...> - 2006-01-17 03:24:40
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2006-01-17 03:15:03 GMT
Results differ from 24 hours ago
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... done
Running regression tests ... failed
Regression test results follow
== 216 tests, 18 stderr failures, 2 stdout failures =================
memcheck/tests/addressable (stderr)
memcheck/tests/describe-block (stderr)
memcheck/tests/erringfds (stderr)
memcheck/tests/leak-0 (stderr)
memcheck/tests/leak-cycle (stderr)
memcheck/tests/leak-regroot (stderr)
memcheck/tests/leak-tree (stderr)
memcheck/tests/leakotron (stdout)
memcheck/tests/match-overrun (stderr)
memcheck/tests/mempool (stderr)
memcheck/tests/nanoleak_supp (stderr)
memcheck/tests/partial_load_dflt (stderr)
memcheck/tests/partial_load_ok (stderr)
memcheck/tests/partiallydefinedeq (stderr)
memcheck/tests/pointer-trace (stderr)
memcheck/tests/sigkill (stderr)
memcheck/tests/stack_changes (stderr)
memcheck/tests/x86/sse1_memory (stdout)
none/tests/x86/faultstatus (stderr)
none/tests/x86/int (stderr)
=================================================
== Results from 24 hours ago ==
=================================================
Checking out valgrind source tree ... done
Configuring valgrind ... failed
Last 20 lines of verbose log follow echo
A valgrind/VEX/Makefile-icc
A valgrind/VEX/Makefile
A valgrind/VEX/LICENSE.README
U valgrind/VEX
Checked out external at revision 1540.
Checked out revision 5528.
Configuring valgrind ... cd valgrind && ./autogen.sh && ./configure --prefix=/tmp/valgrind.24596/Inst
running: aclocal
running: autoheader
running: automake -a
configure.in: installing `./install-sh'
configure.in: installing `./mkinstalldirs'
configure.in: installing `./missing'
configure.in:112: installing `./config.guess'
configure.in:112: installing `./config.sub'
addrcheck/Makefile.am: installing `./depcomp'
auxprogs/Makefile.am: installing `./compile'
DIST_SUBDIRS: variable `VG_ARCH_ALL' is used but `VG_ARCH_ALL' is undefined
error: while running 'automake -a'
=================================================
== Difference between 24 hours ago and now ==
=================================================
*** old.short Tue Jan 17 03:17:04 2006
--- new.short Tue Jan 17 03:24:36 2006
***************
*** 2,25 ****
Checking out valgrind source tree ... done
! Configuring valgrind ... failed
! Last 20 lines of verbose log follow echo
! A valgrind/VEX/Makefile-icc
! A valgrind/VEX/Makefile
! A valgrind/VEX/LICENSE.README
! U valgrind/VEX
! Checked out external at revision 1540.
- Checked out revision 5528.
- Configuring valgrind ... cd valgrind && ./autogen.sh && ./configure --prefix=/tmp/valgrind.24596/Inst
- running: aclocal
- running: autoheader
- running: automake -a
- configure.in: installing `./install-sh'
- configure.in: installing `./mkinstalldirs'
- configure.in: installing `./missing'
- configure.in:112: installing `./config.guess'
- configure.in:112: installing `./config.sub'
- addrcheck/Makefile.am: installing `./depcomp'
- auxprogs/Makefile.am: installing `./compile'
- DIST_SUBDIRS: variable `VG_ARCH_ALL' is used but `VG_ARCH_ALL' is undefined
- error: while running 'automake -a'
--- 2,30 ----
Checking out valgrind source tree ... done
! Configuring valgrind ... done
! Building valgrind ... done
! Running regression tests ... failed
! Regression test results follow
!
! == 216 tests, 18 stderr failures, 2 stdout failures =================
! memcheck/tests/addressable (stderr)
! memcheck/tests/describe-block (stderr)
! memcheck/tests/erringfds (stderr)
! memcheck/tests/leak-0 (stderr)
! memcheck/tests/leak-cycle (stderr)
! memcheck/tests/leak-regroot (stderr)
! memcheck/tests/leak-tree (stderr)
! memcheck/tests/leakotron (stdout)
! memcheck/tests/match-overrun (stderr)
! memcheck/tests/mempool (stderr)
! memcheck/tests/nanoleak_supp (stderr)
! memcheck/tests/partial_load_dflt (stderr)
! memcheck/tests/partial_load_ok (stderr)
! memcheck/tests/partiallydefinedeq (stderr)
! memcheck/tests/pointer-trace (stderr)
! memcheck/tests/sigkill (stderr)
! memcheck/tests/stack_changes (stderr)
! memcheck/tests/x86/sse1_memory (stdout)
! none/tests/x86/faultstatus (stderr)
! none/tests/x86/int (stderr)
|
|
From: Tom H. <th...@cy...> - 2006-01-17 03:20:41
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2006-01-17 03:00:12 GMT
Results differ from 24 hours ago
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... done
Running regression tests ... failed
Regression test results follow
== 236 tests, 7 stderr failures, 1 stdout failure =================
memcheck/tests/nanoleak_supp (stderr)
memcheck/tests/stack_switch (stderr)
memcheck/tests/x86/sse1_memory (stdout)
none/tests/amd64/faultstatus (stderr)
none/tests/fdleak_fcntl (stderr)
none/tests/syscall-restart1 (stderr)
none/tests/x86/faultstatus (stderr)
none/tests/x86/int (stderr)
=================================================
== Results from 24 hours ago ==
=================================================
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... failed
Last 20 lines of verbose log follow echo
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.6917/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_threadstate.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo" -c -o libcoregrind_x86_linux_a-m_threadstate.o `test -f 'm_threadstate.c' || echo './'`m_threadstate.c; \
then mv -f ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo" ".deps/libcoregrind_x86_linux_a-m_threadstate.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo"; exit 1; fi
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.6917/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_tooliface.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo" -c -o libcoregrind_x86_linux_a-m_tooliface.o `test -f 'm_tooliface.c' || echo './'`m_tooliface.c; \
then mv -f ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo" ".deps/libcoregrind_x86_linux_a-m_tooliface.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo"; exit 1; fi
gcc -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -m32 -g -Wno-long-long -c -o libcoregrind_x86_linux_a-m_trampoline.o `test -f 'm_trampoline.S' || echo './'`m_trampoline.S
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.6917/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_translate.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_translate.Tpo" -c -o libcoregrind_x86_linux_a-m_translate.o `test -f 'm_translate.c' || echo './'`m_translate.c; \
then mv -f ".deps/libcoregrind_x86_linux_a-m_translate.Tpo" ".deps/libcoregrind_x86_linux_a-m_translate.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_translate.Tpo"; exit 1; fi
m_translate.c: In function `vgPlain_translate':
m_translate.c:717: error: structure has no member named `guest_bytes_addr_noredir'
m_translate.c:718: warning: assignment from incompatible pointer type
m_translate.c:723: warning: assignment from incompatible pointer type
m_translate.c:726: warning: assignment from incompatible pointer type
m_translate.c:731: error: structure has no member named `do_set_NRADDR'
make[3]: *** [libcoregrind_x86_linux_a-m_translate.o] Error 1
make[3]: Leaving directory `/tmp/valgrind.6917/valgrind/coregrind'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/tmp/valgrind.6917/valgrind/coregrind'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/valgrind.6917/valgrind'
make: *** [all] Error 2
=================================================
== Difference between 24 hours ago and now ==
=================================================
*** old.short Tue Jan 17 03:03:20 2006
--- new.short Tue Jan 17 03:20:28 2006
***************
*** 3,26 ****
Configuring valgrind ... done
! Building valgrind ... failed
- Last 20 lines of verbose log follow echo
- if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.6917/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_threadstate.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo" -c -o libcoregrind_x86_linux_a-m_threadstate.o `test -f 'm_threadstate.c' || echo './'`m_threadstate.c; \
- then mv -f ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo" ".deps/libcoregrind_x86_linux_a-m_threadstate.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo"; exit 1; fi
- if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.6917/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_tooliface.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo" -c -o libcoregrind_x86_linux_a-m_tooliface.o `test -f 'm_tooliface.c' || echo './'`m_tooliface.c; \
- then mv -f ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo" ".deps/libcoregrind_x86_linux_a-m_tooliface.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo"; exit 1; fi
- gcc -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -m32 -g -Wno-long-long -c -o libcoregrind_x86_linux_a-m_trampoline.o `test -f 'm_trampoline.S' || echo './'`m_trampoline.S
- if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.6917/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_translate.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_translate.Tpo" -c -o libcoregrind_x86_linux_a-m_translate.o `test -f 'm_translate.c' || echo './'`m_translate.c; \
- then mv -f ".deps/libcoregrind_x86_linux_a-m_translate.Tpo" ".deps/libcoregrind_x86_linux_a-m_translate.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_translate.Tpo"; exit 1; fi
- m_translate.c: In function `vgPlain_translate':
- m_translate.c:717: error: structure has no member named `guest_bytes_addr_noredir'
- m_translate.c:718: warning: assignment from incompatible pointer type
- m_translate.c:723: warning: assignment from incompatible pointer type
- m_translate.c:726: warning: assignment from incompatible pointer type
- m_translate.c:731: error: structure has no member named `do_set_NRADDR'
- make[3]: *** [libcoregrind_x86_linux_a-m_translate.o] Error 1
- make[3]: Leaving directory `/tmp/valgrind.6917/valgrind/coregrind'
- make[2]: *** [all] Error 2
- make[2]: Leaving directory `/tmp/valgrind.6917/valgrind/coregrind'
- make[1]: *** [all-recursive] Error 1
- make[1]: Leaving directory `/tmp/valgrind.6917/valgrind'
- make: *** [all] Error 2
--- 3,18 ----
Configuring valgrind ... done
! Building valgrind ... done
! Running regression tests ... failed
!
! Regression test results follow
!
! == 236 tests, 7 stderr failures, 1 stdout failure =================
! memcheck/tests/nanoleak_supp (stderr)
! memcheck/tests/stack_switch (stderr)
! memcheck/tests/x86/sse1_memory (stdout)
! none/tests/amd64/faultstatus (stderr)
! none/tests/fdleak_fcntl (stderr)
! none/tests/syscall-restart1 (stderr)
! none/tests/x86/faultstatus (stderr)
! none/tests/x86/int (stderr)
|
|
From: Tom H. <th...@cy...> - 2006-01-17 03:20:16
|
Nightly build on dellow ( x86_64, Fedora Core 4 ) started at 2006-01-17 03:10:04 GMT
Results differ from 24 hours ago
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... done
Running regression tests ... failed
Regression test results follow
== 236 tests, 5 stderr failures, 2 stdout failures =================
memcheck/tests/nanoleak_supp (stderr)
memcheck/tests/x86/scalar (stderr)
memcheck/tests/x86/sse1_memory (stdout)
none/tests/amd64/faultstatus (stderr)
none/tests/mremap2 (stdout)
none/tests/x86/faultstatus (stderr)
none/tests/x86/int (stderr)
=================================================
== Results from 24 hours ago ==
=================================================
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... failed
Last 20 lines of verbose log follow echo
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.5995/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_threadstate.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo" -c -o libcoregrind_x86_linux_a-m_threadstate.o `test -f 'm_threadstate.c' || echo './'`m_threadstate.c; \
then mv -f ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo" ".deps/libcoregrind_x86_linux_a-m_threadstate.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo"; exit 1; fi
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.5995/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_tooliface.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo" -c -o libcoregrind_x86_linux_a-m_tooliface.o `test -f 'm_tooliface.c' || echo './'`m_tooliface.c; \
then mv -f ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo" ".deps/libcoregrind_x86_linux_a-m_tooliface.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo"; exit 1; fi
gcc -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -m32 -g -Wno-long-long -c -o libcoregrind_x86_linux_a-m_trampoline.o `test -f 'm_trampoline.S' || echo './'`m_trampoline.S
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.5995/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_translate.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_translate.Tpo" -c -o libcoregrind_x86_linux_a-m_translate.o `test -f 'm_translate.c' || echo './'`m_translate.c; \
then mv -f ".deps/libcoregrind_x86_linux_a-m_translate.Tpo" ".deps/libcoregrind_x86_linux_a-m_translate.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_translate.Tpo"; exit 1; fi
m_translate.c: In function 'vgPlain_translate':
m_translate.c:717: error: 'VexTranslateArgs' has no member named 'guest_bytes_addr_noredir'
m_translate.c:718: warning: assignment from incompatible pointer type
m_translate.c:723: warning: assignment from incompatible pointer type
m_translate.c:726: warning: assignment from incompatible pointer type
m_translate.c:731: error: 'VexTranslateArgs' has no member named 'do_set_NRADDR'
make[3]: *** [libcoregrind_x86_linux_a-m_translate.o] Error 1
make[3]: Leaving directory `/tmp/valgrind.5995/valgrind/coregrind'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/tmp/valgrind.5995/valgrind/coregrind'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/valgrind.5995/valgrind'
make: *** [all] Error 2
=================================================
== Difference between 24 hours ago and now ==
=================================================
*** old.short Tue Jan 17 03:13:12 2006
--- new.short Tue Jan 17 03:19:59 2006
***************
*** 3,26 ****
Configuring valgrind ... done
! Building valgrind ... failed
- Last 20 lines of verbose log follow echo
- if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.5995/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_threadstate.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo" -c -o libcoregrind_x86_linux_a-m_threadstate.o `test -f 'm_threadstate.c' || echo './'`m_threadstate.c; \
- then mv -f ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo" ".deps/libcoregrind_x86_linux_a-m_threadstate.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo"; exit 1; fi
- if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.5995/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_tooliface.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo" -c -o libcoregrind_x86_linux_a-m_tooliface.o `test -f 'm_tooliface.c' || echo './'`m_tooliface.c; \
- then mv -f ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo" ".deps/libcoregrind_x86_linux_a-m_tooliface.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo"; exit 1; fi
- gcc -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -m32 -g -Wno-long-long -c -o libcoregrind_x86_linux_a-m_trampoline.o `test -f 'm_trampoline.S' || echo './'`m_trampoline.S
- if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.5995/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_translate.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_translate.Tpo" -c -o libcoregrind_x86_linux_a-m_translate.o `test -f 'm_translate.c' || echo './'`m_translate.c; \
- then mv -f ".deps/libcoregrind_x86_linux_a-m_translate.Tpo" ".deps/libcoregrind_x86_linux_a-m_translate.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_translate.Tpo"; exit 1; fi
- m_translate.c: In function 'vgPlain_translate':
- m_translate.c:717: error: 'VexTranslateArgs' has no member named 'guest_bytes_addr_noredir'
- m_translate.c:718: warning: assignment from incompatible pointer type
- m_translate.c:723: warning: assignment from incompatible pointer type
- m_translate.c:726: warning: assignment from incompatible pointer type
- m_translate.c:731: error: 'VexTranslateArgs' has no member named 'do_set_NRADDR'
- make[3]: *** [libcoregrind_x86_linux_a-m_translate.o] Error 1
- make[3]: Leaving directory `/tmp/valgrind.5995/valgrind/coregrind'
- make[2]: *** [all] Error 2
- make[2]: Leaving directory `/tmp/valgrind.5995/valgrind/coregrind'
- make[1]: *** [all-recursive] Error 1
- make[1]: Leaving directory `/tmp/valgrind.5995/valgrind'
- make: *** [all] Error 2
--- 3,17 ----
Configuring valgrind ... done
! Building valgrind ... done
! Running regression tests ... failed
!
! Regression test results follow
!
! == 236 tests, 5 stderr failures, 2 stdout failures =================
! memcheck/tests/nanoleak_supp (stderr)
! memcheck/tests/x86/scalar (stderr)
! memcheck/tests/x86/sse1_memory (stdout)
! none/tests/amd64/faultstatus (stderr)
! none/tests/mremap2 (stdout)
! none/tests/x86/faultstatus (stderr)
! none/tests/x86/int (stderr)
|
|
From: Tom H. <th...@cy...> - 2006-01-17 03:15:41
|
Nightly build on aston ( x86_64, Fedora Core 3 ) started at 2006-01-17 03:05:04 GMT
Results differ from 24 hours ago
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... done
Running regression tests ... failed
Regression test results follow
== 236 tests, 7 stderr failures, 2 stdout failures =================
memcheck/tests/nanoleak_supp (stderr)
memcheck/tests/stack_switch (stderr)
memcheck/tests/x86/scalar (stderr)
memcheck/tests/x86/scalar_supp (stderr)
memcheck/tests/x86/sse1_memory (stdout)
none/tests/amd64/faultstatus (stderr)
none/tests/mremap2 (stdout)
none/tests/x86/faultstatus (stderr)
none/tests/x86/int (stderr)
=================================================
== Results from 24 hours ago ==
=================================================
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... failed
Last 20 lines of verbose log follow echo
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.15215/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_threadstate.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo" -c -o libcoregrind_x86_linux_a-m_threadstate.o `test -f 'm_threadstate.c' || echo './'`m_threadstate.c; \
then mv -f ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo" ".deps/libcoregrind_x86_linux_a-m_threadstate.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo"; exit 1; fi
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.15215/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_tooliface.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo" -c -o libcoregrind_x86_linux_a-m_tooliface.o `test -f 'm_tooliface.c' || echo './'`m_tooliface.c; \
then mv -f ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo" ".deps/libcoregrind_x86_linux_a-m_tooliface.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo"; exit 1; fi
gcc -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -m32 -g -Wno-long-long -c -o libcoregrind_x86_linux_a-m_trampoline.o `test -f 'm_trampoline.S' || echo './'`m_trampoline.S
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.15215/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_translate.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_translate.Tpo" -c -o libcoregrind_x86_linux_a-m_translate.o `test -f 'm_translate.c' || echo './'`m_translate.c; \
then mv -f ".deps/libcoregrind_x86_linux_a-m_translate.Tpo" ".deps/libcoregrind_x86_linux_a-m_translate.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_translate.Tpo"; exit 1; fi
m_translate.c: In function `vgPlain_translate':
m_translate.c:717: error: structure has no member named `guest_bytes_addr_noredir'
m_translate.c:718: warning: assignment from incompatible pointer type
m_translate.c:723: warning: assignment from incompatible pointer type
m_translate.c:726: warning: assignment from incompatible pointer type
m_translate.c:731: error: structure has no member named `do_set_NRADDR'
make[3]: *** [libcoregrind_x86_linux_a-m_translate.o] Error 1
make[3]: Leaving directory `/tmp/valgrind.15215/valgrind/coregrind'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/tmp/valgrind.15215/valgrind/coregrind'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/valgrind.15215/valgrind'
make: *** [all] Error 2
=================================================
== Difference between 24 hours ago and now ==
=================================================
*** old.short Tue Jan 17 03:08:10 2006
--- new.short Tue Jan 17 03:15:35 2006
***************
*** 3,26 ****
Configuring valgrind ... done
! Building valgrind ... failed
- Last 20 lines of verbose log follow echo
- if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.15215/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_threadstate.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo" -c -o libcoregrind_x86_linux_a-m_threadstate.o `test -f 'm_threadstate.c' || echo './'`m_threadstate.c; \
- then mv -f ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo" ".deps/libcoregrind_x86_linux_a-m_threadstate.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_threadstate.Tpo"; exit 1; fi
- if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.15215/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_tooliface.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo" -c -o libcoregrind_x86_linux_a-m_tooliface.o `test -f 'm_tooliface.c' || echo './'`m_tooliface.c; \
- then mv -f ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo" ".deps/libcoregrind_x86_linux_a-m_tooliface.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_tooliface.Tpo"; exit 1; fi
- gcc -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -m32 -g -Wno-long-long -c -o libcoregrind_x86_linux_a-m_trampoline.o `test -f 'm_trampoline.S' || echo './'`m_trampoline.S
- if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../VEX/pub -DVG_PLATFORM="\"x86-linux\"" -DVGA_x86=1 -DVGO_linux=1 -DVGP_x86_linux=1 -DVG_LIBDIR="\"/tmp/valgrind.15215/Inst/lib/valgrind"\" -m32 -O -g -Wmissing-prototypes -Winline -Wall -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-long-long -Wdeclaration-after-statement -MT libcoregrind_x86_linux_a-m_translate.o -MD -MP -MF ".deps/libcoregrind_x86_linux_a-m_translate.Tpo" -c -o libcoregrind_x86_linux_a-m_translate.o `test -f 'm_translate.c' || echo './'`m_translate.c; \
- then mv -f ".deps/libcoregrind_x86_linux_a-m_translate.Tpo" ".deps/libcoregrind_x86_linux_a-m_translate.Po"; else rm -f ".deps/libcoregrind_x86_linux_a-m_translate.Tpo"; exit 1; fi
- m_translate.c: In function `vgPlain_translate':
- m_translate.c:717: error: structure has no member named `guest_bytes_addr_noredir'
- m_translate.c:718: warning: assignment from incompatible pointer type
- m_translate.c:723: warning: assignment from incompatible pointer type
- m_translate.c:726: warning: assignment from incompatible pointer type
- m_translate.c:731: error: structure has no member named `do_set_NRADDR'
- make[3]: *** [libcoregrind_x86_linux_a-m_translate.o] Error 1
- make[3]: Leaving directory `/tmp/valgrind.15215/valgrind/coregrind'
- make[2]: *** [all] Error 2
- make[2]: Leaving directory `/tmp/valgrind.15215/valgrind/coregrind'
- make[1]: *** [all-recursive] Error 1
- make[1]: Leaving directory `/tmp/valgrind.15215/valgrind'
- make: *** [all] Error 2
--- 3,19 ----
Configuring valgrind ... done
! Building valgrind ... done
! Running regression tests ... failed
!
! Regression test results follow
!
! == 236 tests, 7 stderr failures, 2 stdout failures =================
! memcheck/tests/nanoleak_supp (stderr)
! memcheck/tests/stack_switch (stderr)
! memcheck/tests/x86/scalar (stderr)
! memcheck/tests/x86/scalar_supp (stderr)
! memcheck/tests/x86/sse1_memory (stdout)
! none/tests/amd64/faultstatus (stderr)
! none/tests/mremap2 (stdout)
! none/tests/x86/faultstatus (stderr)
! none/tests/x86/int (stderr)
|
|
From: Robert W. <rj...@du...> - 2006-01-17 03:11:17
|
> Even with a clean build, Robin? I did check in a load of=20 > stuff just now, but revs 1540/5541 appear to work OK on my > amd64 box. Yup - even with a clean build. Details are: Athlon64 with 1GB memory running stock FC4 w/ glibc-2.3.5-10.3. It looks like every single test fails. > p.s. Shouldn't it be "Holy smoking test suite!" ? I thought "flaming" would give a better idea of the severity of the situation :-) Regards, Robert. --=20 Robert Walsh Amalgamated Durables, Inc. - "We don't make the things you buy." Email: rj...@du... |
|
From: Julian S. <js...@ac...> - 2006-01-17 03:04:18
|
Even with a clean build, Robin? I did check in a load of stuff just now, but revs 1540/5541 appear to work OK on my amd64 box. J p.s. Shouldn't it be "Holy smoking test suite!" ? On Tuesday 17 January 2006 02:45, Robert Walsh wrote: > As of 2 minutes ago, the entire test suite is failing on my amd64 box, > all like this: > > vex: priv/main/vex_main.c:279 (LibVEX_Translate): Assertion `vta->dispatch > != ((void*)0)' failed. vex storage: T total 0 bytes allocated |
|
From: Robert W. <rj...@du...> - 2006-01-17 03:00:58
|
On Mon, 2006-01-16 at 18:58 -0800, Robert Walsh wrote:
> I think I know why 'make distclean' isn't cleaning out the test
> directories correctly. In the Makefile.am in memcheck/tests, I see
> this:
>=20
> DIST_SUBDIRS =3D ${VG_ARCH_ALL} .
>=20
> However, I can't find VG_ARCH_ALL defined anywhere (it's mentioned in
> the porting HOWTOs but seems to have disappeared from the sources.) If
> this indeed has been removed, then the Makefile.am files need to be
> updated with, perhaps, ${SUBDIRS} instead? If nobody complains, I'll
> make this change and check it in.
Never mind - Julian just fixed it in 5540.
Regards,
Robert.
--=20
Robert Walsh
Amalgamated Durables, Inc. - "We don't make the things you buy."
Email: rj...@du...
|