You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
|
|
1
(11) |
2
(8) |
|
3
(8) |
4
(8) |
5
(8) |
6
(19) |
7
(17) |
8
(12) |
9
(10) |
|
10
(15) |
11
(18) |
12
(14) |
13
(16) |
14
(24) |
15
(16) |
16
(12) |
|
17
(25) |
18
(23) |
19
(12) |
20
(10) |
21
(9) |
22
(12) |
23
(13) |
|
24
(19) |
25
(7) |
26
(39) |
27
(22) |
28
(22) |
29
(16) |
30
(13) |
|
31
(23) |
|
|
|
|
|
|
|
From: Josef W. <Jos...@gm...> - 2006-12-18 23:07:56
|
On Monday 18 December 2006 15:44, Julian Seward wrote: > On Monday 18 December 2006 09:29, Josef Weidendorfer wrote: > > This is wasteful, but unfortunately necessary; > > VG_(thread_run) is not exhaustive for detecting thread > > switches. There was some case with a signal handler > > running in a new thread, and longjmp'ing into normal > > code at the end. The latter, Valgrind can not detect itself. > > However, I have to look this up again. I can not remember > > the exact problem; it was with code generated by an ADA > > compiler. > > That sounds like a bug in the core. You should have complained > earlier :-) Ok, I tried to reconstruct it. It was at VG 2.x times. There actually were 2 problems: (1) SK_(post_signal) was not being called exhaustively for the case that a signal handler was left via longjmp. And callgrind needs a signal handler exit event. I can not see how (also 3.x) VG ever could catch this event, as the signal frame is discarded by the longjmp. However, this has nothing to do with (2) There was a problem in older VG 2.x releases about not notifying the tool about current thread after running a signal handler in another thread. I think this was fixed, and probably is not a problem at all in VG 3.x. I remember that (1) was nastly, as I got the ADA binary from the bug reporter, and never was able to construct a test case in source, but only could observe the problem from running the binary in VG. So there probably is no problem. However, I can check with an assertion if expected tid is the same as actual running tid. > My proposed patch should make it possible for callgrind/drd to > know exactly when client code is running and when it is not, and > which thread it is. And no problems with longjmp etc. > > One thing to note (Bart too) is that the proposed change will > cause VG_TRACK(thread_run) and the proposed VG_TRACK(thread_stopped) > to be called very often, perhaps 1000 x more often than thread_run is > called at present, in the worst case. So the callbacks in the > callgrind/drd need to be fast. Thanks. I probably have to adjust the polling interval for the command file. It would be nice if we could come up with a general way to interact with VG tools from the outside. > > One other thing to note: there is a subtle change in semantics > too. So far, a call to VG_TRACK(thread_run)(tid) means "thread tid > has acquired the big CPU lock (and so can make translations, etc, > all possible actions, as well as running client code)". In the proposed > new scheme, the meaning is a subset: > > VG_TRACK(thread_run)(tid) means "thread tid has the CPU lock and is > about to start running client code". > > VG_TRACK(thread_stopped)(tid) means "thread tid, which previously had the > CPU lock and was running client code, is no longer running client code." So the difference is that now if translation is happening, I get a VG_TRACK(thread_stopped) before, and after the translation has finished, I get a VG_TRACK(thread_run), even when not switching client threads? Josef |
|
From: <sv...@va...> - 2006-12-18 17:53:19
|
Author: sewardj
Date: 2006-12-18 17:53:13 +0000 (Mon, 18 Dec 2006)
New Revision: 6412
Log:
Use standard pthread mutexes instead of spinlocks. Not all distros
support spinlocks, it appears.
Modified:
trunk/none/tests/pth_detached.c
Modified: trunk/none/tests/pth_detached.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/none/tests/pth_detached.c 2006-12-18 16:48:10 UTC (rev 6411)
+++ trunk/none/tests/pth_detached.c 2006-12-18 17:53:13 UTC (rev 6412)
@@ -9,21 +9,21 @@
#include <unistd.h>
=20
static int s_finished_count =3D 0;
-static pthread_spinlock_t s_spinlock;
+static pthread_mutex_t s_mutex;
=20
void increment_finished_count()
{
- pthread_spin_lock(&s_spinlock);
+ pthread_mutex_lock(&s_mutex);
s_finished_count++;
- pthread_spin_unlock(&s_spinlock);
+ pthread_mutex_unlock(&s_mutex);
}
=20
int get_finished_count()
{
int result;
- pthread_spin_lock(&s_spinlock);
+ pthread_mutex_lock(&s_mutex);
result =3D s_finished_count;
- pthread_spin_unlock(&s_spinlock);
+ pthread_mutex_unlock(&s_mutex);
return result;
}
=20
@@ -50,7 +50,7 @@
int detachstate;
pthread_attr_t attr;
=20
- pthread_spin_init(&s_spinlock, 0);
+ pthread_mutex_init(&s_mutex, 0);
=20
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
@@ -84,7 +84,7 @@
=20
printf("\n");
=20
- pthread_spin_destroy(&s_spinlock);
+ pthread_mutex_destroy(&s_mutex);
=20
return 0;
}
|
|
From: Bart V. A. <bar...@gm...> - 2006-12-18 17:48:47
|
On 12/18/06, Julian Seward <js...@ac...> wrote: > > Can you try the following patch? I think it should cause > post_thread_create to happen before thread_run, which is what > you want AIUI. > > Do you also need a thread-has-stopped-running event? This > might be useful since presently a tool can only know which was > the last thread to run. It cannot know that no thread is running, > because it is only told that a thread is running, and is never told > when that thread stops running. Although it would require a change > to the core/tool interface. [ ... ] > > Index: coregrind/m_scheduler/scheduler.c > =================================================================== > --- coregrind/m_scheduler/scheduler.c (revision 6408) > +++ coregrind/m_scheduler/scheduler.c (working copy) The drd tool works fine with this patch (I removed my own patch that caused thread_post_create to be called earlier). If VG_TRACK(thread_finished)() could be called from scheduler.c instead of m_syswrap, that would be a nice improvement as well. Bart. |
|
From: <sv...@va...> - 2006-12-18 16:48:16
|
Author: tom
Date: 2006-12-18 16:48:10 +0000 (Mon, 18 Dec 2006)
New Revision: 6411
Log:
Add support for some USB ioctls. Based on patches from Jon Burgess and
Marcus Meissner in bugs #136059 and #138896.
Modified:
trunk/coregrind/m_syswrap/syswrap-generic.c
trunk/include/vki/vki-linux.h
Modified: trunk/coregrind/m_syswrap/syswrap-generic.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_syswrap/syswrap-generic.c 2006-12-18 15:22:46 UTC (=
rev 6410)
+++ trunk/coregrind/m_syswrap/syswrap-generic.c 2006-12-18 16:48:10 UTC (=
rev 6411)
@@ -4015,7 +4015,80 @@
case VKI_VT_UNLOCKSWITCH:
break;
=20
- =20
+ case VKI_USBDEVFS_CONTROL:
+ if ( ARG3 ) {
+ struct vki_usbdevfs_ctrltransfer *vkuc =3D (struct vki_usbdevfs=
_ctrltransfer *)ARG3;
+ PRE_MEM_READ( "ioctl(USBDEVFS_CONTROL).bRequestType", (Addr)&vk=
uc->bRequestType, sizeof(vkuc->bRequestType));
+ PRE_MEM_READ( "ioctl(USBDEVFS_CONTROL).bRequest", (Addr)&vkuc->=
bRequest, sizeof(vkuc->bRequest));
+ PRE_MEM_READ( "ioctl(USBDEVFS_CONTROL).wValue", (Addr)&vkuc->wV=
alue, sizeof(vkuc->wValue));
+ PRE_MEM_READ( "ioctl(USBDEVFS_CONTROL).wIndex", (Addr)&vkuc->wI=
ndex, sizeof(vkuc->wIndex));
+ PRE_MEM_READ( "ioctl(USBDEVFS_CONTROL).wLength", (Addr)&vkuc->w=
Length, sizeof(vkuc->wLength));
+ PRE_MEM_READ( "ioctl(USBDEVFS_CONTROL).timeout", (Addr)&vkuc->t=
imeout, sizeof(vkuc->timeout));
+ if (vkuc->bRequestType & 0x80)
+ PRE_MEM_WRITE( "ioctl(USBDEVFS_CONTROL).data", (Addr)vkuc->d=
ata, vkuc->wLength);
+ else
+ PRE_MEM_READ( "ioctl(USBDEVFS_CONTROL).data", (Addr)vkuc->da=
ta, vkuc->wLength);
+ }
+ break;
+ case VKI_USBDEVFS_BULK:
+ if ( ARG3 ) {
+ struct vki_usbdevfs_bulktransfer *vkub =3D (struct vki_usbdevfs=
_bulktransfer *)ARG3;
+ PRE_MEM_READ( "ioctl(USBDEVFS_BULK)", ARG3, sizeof(struct vki_u=
sbdevfs_bulktransfer));
+ if (vkub->ep & 0x80)
+ PRE_MEM_WRITE( "ioctl(USBDEVFS_BULK).data", (Addr)vkub->data=
, vkub->len);
+ else
+ PRE_MEM_READ( "ioctl(USBDEVFS_BULK).data", (Addr)vkub->data,=
vkub->len);
+ break;
+ }
+ case VKI_USBDEVFS_GETDRIVER:
+ if ( ARG3 ) {
+ struct vki_usbdevfs_getdriver *vkugd =3D (struct vki_usbdevfs_g=
etdriver *) ARG3;
+ PRE_MEM_WRITE( "ioctl(USBDEVFS_GETDRIVER)", (Addr)&vkugd->drive=
r, sizeof(vkugd->driver));
+ break;
+ }
+ case VKI_USBDEVFS_SUBMITURB:
+ if ( ARG3 ) {
+ struct vki_usbdevfs_urb *vkuu =3D (struct vki_usbdevfs_urb *)AR=
G3;
+
+ /* Not the whole struct needs to be initialized */
+ PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).ep", (Addr)&vkuu->endp=
oint, sizeof(vkuu->endpoint));
+ PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).type", (Addr)&vkuu->ty=
pe, sizeof(vkuu->type));
+ PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).flags", (Addr)&vkuu->f=
lags, sizeof(vkuu->flags));
+ PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).buffer", (Addr)&vkuu->=
buffer, sizeof(vkuu->buffer));
+ PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).buffer_length", (Addr)=
&vkuu->buffer_length, sizeof(vkuu->buffer_length));
+ PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).usercontext", (Addr)&v=
kuu->usercontext, sizeof(vkuu->usercontext));
+ if (vkuu->endpoint & 0x80)
+ PRE_MEM_WRITE( "ioctl(USBDEVFS_URB).buffer", (Addr)vkuu->buf=
fer, vkuu->buffer_length);
+ else
+ PRE_MEM_READ( "ioctl(USBDEVFS_URB).buffer", (Addr)vkuu->buff=
er, vkuu->buffer_length);
+ /* FIXME: Does not handle all cases this ioctl can do, ISOs are=
missing. */
+ break;
+ }
+ case VKI_USBDEVFS_REAPURB:
+ case VKI_USBDEVFS_REAPURBNDELAY:
+ if ( ARG3 ) {
+ PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB)", ARG3, sizeof(struct =
vki_usbdevfs_urb *));
+ break;
+ }
+ case VKI_USBDEVFS_CONNECTINFO:
+ PRE_MEM_WRITE( "ioctl(USBDEVFS_CONNECTINFO)", ARG3, sizeof(struct =
vki_usbdevfs_connectinfo));
+ break;
+ case VKI_USBDEVFS_IOCTL:
+ if ( ARG3 ) {
+ struct vki_usbdevfs_ioctl *vkui =3D (struct vki_usbdevfs_ioctl =
*)ARG3;
+ UInt dir2, size2;
+ PRE_MEM_READ("ioctl(USBDEVFS_IOCTL)", (Addr)vkui, sizeof(struct=
vki_usbdevfs_ioctl));
+ dir2 =3D _VKI_IOC_DIR(vkui->ioctl_code);
+ size2 =3D _VKI_IOC_SIZE(vkui->ioctl_code);
+ if (size2 > 0) {
+ if (dir2 & _VKI_IOC_WRITE)
+ PRE_MEM_READ("ioctl(USBDEVFS_IOCTL).dataWrite", (Addr)vku=
i->data, size2);
+ else if (dir2 & _VKI_IOC_READ)
+ PRE_MEM_WRITE("ioctl(USBDEVFS_IOCTL).dataRead", (Addr)vku=
i->data, size2);
+ }
+ }
+ break;
+
/* We don't have any specific information on it, so
try to do something reasonable based on direction and
size bits. The encoding scheme is described in
@@ -4676,8 +4749,54 @@
case VKI_VT_LOCKSWITCH:
case VKI_VT_UNLOCKSWITCH:
break;
- =20
=20
+ case VKI_USBDEVFS_CONTROL:
+ if ( ARG3 ) {
+ struct vki_usbdevfs_ctrltransfer *vkuc =3D (struct vki_usbdevfs=
_ctrltransfer *)ARG3;
+ if (vkuc->bRequestType & 0x80)
+ POST_MEM_WRITE((Addr)vkuc->data, RES);
+ break;
+ }
+ case VKI_USBDEVFS_BULK:
+ if ( ARG3 ) {
+ struct vki_usbdevfs_bulktransfer *vkub =3D (struct vki_usbdevfs=
_bulktransfer *)ARG3;
+ if (vkub->ep & 0x80)
+ POST_MEM_WRITE((Addr)vkub->data, RES);
+ break;
+ }
+ case VKI_USBDEVFS_GETDRIVER:
+ if ( ARG3 ) {
+ struct vki_usbdevfs_getdriver *vkugd =3D (struct vki_usbdevfs_g=
etdriver *)ARG3;
+ POST_MEM_WRITE((Addr)&vkugd->driver, sizeof(vkugd->driver));
+ break;
+ }
+ case VKI_USBDEVFS_REAPURB:
+ case VKI_USBDEVFS_REAPURBNDELAY:
+ if ( ARG3 ) {
+ struct vki_usbdevfs_urb **vkuu =3D (struct vki_usbdevfs_urb**)A=
RG3;
+ if (!*vkuu)
+ break;
+ POST_MEM_WRITE((Addr) &((*vkuu)->status),sizeof((*vkuu)->status=
));
+ if ((*vkuu)->endpoint & 0x80)
+ POST_MEM_WRITE((Addr)(*vkuu)->buffer, (*vkuu)->actual_length=
);
+ break;
+ }
+ case VKI_USBDEVFS_CONNECTINFO:
+ POST_MEM_WRITE(ARG3, sizeof(struct vki_usbdevfs_connectinfo));
+ break;
+ case VKI_USBDEVFS_IOCTL:
+ if ( ARG3 ) {
+ struct vki_usbdevfs_ioctl *vkui =3D (struct vki_usbdevfs_ioctl =
*)ARG3;
+ UInt dir2, size2;
+ dir2 =3D _VKI_IOC_DIR(vkui->ioctl_code);
+ size2 =3D _VKI_IOC_SIZE(vkui->ioctl_code);
+ if (size2 > 0) {
+ if (dir2 & _VKI_IOC_READ)=20
+ POST_MEM_WRITE((Addr)vkui->data, size2);
+ }
+ }
+ break;
+
/* We don't have any specific information on it, so
try to do something reasonable based on direction and
size bits. The encoding scheme is described in
Modified: trunk/include/vki/vki-linux.h
=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/include/vki/vki-linux.h 2006-12-18 15:22:46 UTC (rev 6410)
+++ trunk/include/vki/vki-linux.h 2006-12-18 16:48:10 UTC (rev 6411)
@@ -2239,6 +2239,77 @@
# define VKI_PR_ENDIAN_LITTLE 1 /* True little endian mode */
# define VKI_PR_ENDIAN_PPC_LITTLE 2 /* "PowerPC" pseudo little endian */
=20
+//----------------------------------------------------------------------
+// From linux-2.6.19/include/linux/usbdevice_fs.h
+//----------------------------------------------------------------------
+
+struct vki_usbdevfs_ctrltransfer {
+ __vki_u8 bRequestType;
+ __vki_u8 bRequest;
+ __vki_u16 wValue;
+ __vki_u16 wIndex;
+ __vki_u16 wLength;
+ __vki_u32 timeout; /* in milliseconds */
+ void __user *data;
+};
+
+struct vki_usbdevfs_bulktransfer {
+ unsigned int ep;
+ unsigned int len;
+ unsigned int timeout; /* in milliseconds */
+ void __user *data;
+};
+
+#define VKI_USBDEVFS_MAXDRIVERNAME 255
+
+struct vki_usbdevfs_getdriver {
+ unsigned int interface;
+ char driver[VKI_USBDEVFS_MAXDRIVERNAME + 1];
+};
+
+struct vki_usbdevfs_connectinfo {
+ unsigned int devnum;
+ unsigned char slow;
+};
+
+struct vki_usbdevfs_iso_packet_desc {
+ unsigned int length;
+ unsigned int actual_length;
+ unsigned int status;
+};
+
+struct vki_usbdevfs_urb {
+ unsigned char type;
+ unsigned char endpoint;
+ int status;
+ unsigned int flags;
+ void __user *buffer;
+ int buffer_length;
+ int actual_length;
+ int start_frame;
+ int number_of_packets;
+ int error_count;
+ unsigned int signr; /* signal to be sent on error, -1 if none should b=
e sent */
+ void *usercontext;
+ struct vki_usbdevfs_iso_packet_desc iso_frame_desc[0];
+};
+
+struct vki_usbdevfs_ioctl {
+ int ifno; /* interface 0..N ; negative numbers reserved */
+ int ioctl_code; /* MUST encode size + direction of data so the
+ * macros in <asm/ioctl.h> give correct values */
+ void __user *data; /* param buffer (in, or out) */
+};
+
+#define VKI_USBDEVFS_CONTROL _VKI_IOWR('U', 0, struct vki_usbd=
evfs_ctrltransfer)
+#define VKI_USBDEVFS_BULK _VKI_IOWR('U', 2, struct vki_usbd=
evfs_bulktransfer)
+#define VKI_USBDEVFS_GETDRIVER _VKI_IOW('U', 8, struct vki_usbde=
vfs_getdriver)
+#define VKI_USBDEVFS_SUBMITURB _VKI_IOR('U', 10, struct vki_usbd=
evfs_urb)
+#define VKI_USBDEVFS_REAPURB _VKI_IOW('U', 12, void *)
+#define VKI_USBDEVFS_REAPURBNDELAY _VKI_IOW('U', 13, void *)
+#define VKI_USBDEVFS_CONNECTINFO _VKI_IOW('U', 17, struct vki_usbd=
evfs_connectinfo)
+#define VKI_USBDEVFS_IOCTL _VKI_IOWR('U', 18, struct vki_usb=
devfs_ioctl)
+
#endif // __VKI_LINUX_H
=20
/*--------------------------------------------------------------------*/
|
|
From: <sv...@va...> - 2006-12-18 15:22:51
|
Author: tom
Date: 2006-12-18 15:22:46 +0000 (Mon, 18 Dec 2006)
New Revision: 6410
Log:
Improve prctl support - based on patch from Eric Pouech in bug #138627.
Modified:
trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
trunk/coregrind/m_syswrap/syswrap-linux.c
trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c
trunk/coregrind/m_syswrap/syswrap-x86-linux.c
trunk/include/vki/vki-linux.h
Modified: trunk/coregrind/m_syswrap/syswrap-amd64-linux.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_syswrap/syswrap-amd64-linux.c 2006-12-17 19:36:06 U=
TC (rev 6409)
+++ trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2006-12-18 15:22:46 U=
TC (rev 6410)
@@ -1189,7 +1189,7 @@
=20
// (__NR_pivot_root, sys_pivot_root), // 155=20
LINXY(__NR__sysctl, sys_sysctl), // 156=20
- LINX_(__NR_prctl, sys_prctl), // 157=20
+ LINXY(__NR_prctl, sys_prctl), // 157=20
PLAX_(__NR_arch_prctl, sys_arch_prctl), // 158=20
// (__NR_adjtimex, sys_adjtimex), // 159=20
=20
Modified: trunk/coregrind/m_syswrap/syswrap-linux.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_syswrap/syswrap-linux.c 2006-12-17 19:36:06 UTC (re=
v 6409)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c 2006-12-18 15:22:46 UTC (re=
v 6410)
@@ -699,15 +699,99 @@
PRE(sys_prctl)
{
*flags |=3D SfMayBlock;
- PRINT( "prctl ( %d, %d, %d, %d, %d )", ARG1, ARG2, ARG3, ARG4, ARG5 )=
;
- // XXX: too simplistic, often not all args are used
- // Nb: can't use "ARG2".."ARG5" here because that's our own macro...
- PRE_REG_READ5(long, "prctl",
- int, option, unsigned long, arg2, unsigned long, arg3,
- unsigned long, arg4, unsigned long, arg5);
- // XXX: totally wrong... we need to look at the 'option' arg, and do
- // PRE_MEM_READs/PRE_MEM_WRITEs as necessary...
+ PRINT( "sys_prctl ( %d, %d, %d, %d, %d )", ARG1, ARG2, ARG3, ARG4, AR=
G5 );
+ switch (ARG1) {
+ case VKI_PR_SET_PDEATHSIG:
+ PRE_REG_READ2(int, "prctl", int, option, int, signal);
+ break;
+ case VKI_PR_GET_PDEATHSIG:
+ PRE_REG_READ2(int, "prctl", int, option, int *, signal);
+ PRE_MEM_WRITE("prctl(get-death-signal)", ARG2, sizeof(Int));
+ break;
+ case VKI_PR_GET_DUMPABLE:
+ PRE_REG_READ1(int, "prctl", int, option);
+ break;
+ case VKI_PR_SET_DUMPABLE:
+ PRE_REG_READ2(int, "prctl", int, option, int, dump);
+ break;
+ case VKI_PR_GET_UNALIGN:
+ PRE_REG_READ2(int, "prctl", int, option, int *, value);
+ PRE_MEM_WRITE("prctl(get-unalign)", ARG2, sizeof(Int));
+ break;
+ case VKI_PR_SET_UNALIGN:
+ PRE_REG_READ2(int, "prctl", int, option, int, value);
+ break;
+ case VKI_PR_GET_KEEPCAPS:
+ PRE_REG_READ1(int, "prctl", int, option);
+ break;
+ case VKI_PR_SET_KEEPCAPS:
+ PRE_REG_READ2(int, "prctl", int, option, int, keepcaps);
+ break;
+ case VKI_PR_GET_FPEMU:
+ PRE_REG_READ2(int, "prctl", int, option, int *, value);
+ PRE_MEM_WRITE("prctl(get-fpemu)", ARG2, sizeof(Int));
+ break;
+ case VKI_PR_SET_FPEMU:
+ PRE_REG_READ2(int, "prctl", int, option, int, value);
+ break;
+ case VKI_PR_GET_FPEXC:
+ PRE_REG_READ2(int, "prctl", int, option, int *, value);
+ PRE_MEM_WRITE("prctl(get-fpexc)", ARG2, sizeof(Int));
+ break;
+ case VKI_PR_SET_FPEXC:
+ PRE_REG_READ2(int, "prctl", int, option, int, value);
+ break;
+ case VKI_PR_GET_TIMING:
+ PRE_REG_READ1(int, "prctl", int, option);
+ break;
+ case VKI_PR_SET_TIMING:
+ PRE_REG_READ2(int, "prctl", int, option, int, timing);
+ break;
+ case VKI_PR_SET_NAME:
+ PRE_REG_READ2(int, "prctl", int, option, char *, name);
+ PRE_MEM_RASCIIZ("prctl(set-name)", ARG2);
+ break;
+ case VKI_PR_GET_NAME:
+ PRE_REG_READ2(int, "prctl", int, option, char *, name);
+ PRE_MEM_WRITE("prctl(get-name)", ARG2, VKI_TASK_COMM_LEN);
+ break;
+ case VKI_PR_GET_ENDIAN:
+ PRE_REG_READ2(int, "prctl", int, option, int *, value);
+ PRE_MEM_WRITE("prctl(get-endian)", ARG2, sizeof(Int));
+ break;
+ case VKI_PR_SET_ENDIAN:
+ PRE_REG_READ2(int, "prctl", int, option, int, value);
+ break;
+ default:
+ PRE_REG_READ5(long, "prctl",
+ int, option, unsigned long, arg2, unsigned long, arg=
3,
+ unsigned long, arg4, unsigned long, arg5);
+ break;
+ }
}
+POST(sys_prctl)
+{
+ switch (ARG1) {
+ case VKI_PR_GET_PDEATHSIG:
+ POST_MEM_WRITE(ARG2, sizeof(Int));
+ break;
+ case VKI_PR_GET_UNALIGN:
+ POST_MEM_WRITE(ARG2, sizeof(Int));
+ break;
+ case VKI_PR_GET_FPEMU:
+ POST_MEM_WRITE(ARG2, sizeof(Int));
+ break;
+ case VKI_PR_GET_FPEXC:
+ POST_MEM_WRITE(ARG2, sizeof(Int));
+ break;
+ case VKI_PR_GET_NAME:
+ POST_MEM_WRITE(ARG2, VKI_TASK_COMM_LEN);
+ break;
+ case VKI_PR_GET_ENDIAN:
+ POST_MEM_WRITE(ARG2, sizeof(Int));
+ break;
+ }
+}
=20
PRE(sys_sendfile)
{
Modified: trunk/coregrind/m_syswrap/syswrap-ppc32-linux.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_syswrap/syswrap-ppc32-linux.c 2006-12-17 19:36:06 U=
TC (rev 6409)
+++ trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c 2006-12-18 15:22:46 U=
TC (rev 6410)
@@ -1683,7 +1683,7 @@
//..=20
LINX_(__NR_setresgid, sys_setresgid), // 169
LINXY(__NR_getresgid, sys_getresgid), // 170
- LINX_(__NR_prctl, sys_prctl), // 171
+ LINXY(__NR_prctl, sys_prctl), // 171
PLAX_(__NR_rt_sigreturn, sys_rt_sigreturn), // 172
LINXY(__NR_rt_sigaction, sys_rt_sigaction), // 173
=20
Modified: trunk/coregrind/m_syswrap/syswrap-x86-linux.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_syswrap/syswrap-x86-linux.c 2006-12-17 19:36:06 UTC=
(rev 6409)
+++ trunk/coregrind/m_syswrap/syswrap-x86-linux.c 2006-12-18 15:22:46 UTC=
(rev 6410)
@@ -2004,7 +2004,7 @@
//zz=20
LINX_(__NR_setresgid, sys_setresgid16), // 170
LINXY(__NR_getresgid, sys_getresgid16), // 171
- LINX_(__NR_prctl, sys_prctl), // 172
+ LINXY(__NR_prctl, sys_prctl), // 172
PLAX_(__NR_rt_sigreturn, sys_rt_sigreturn), // 173 x86/Linux o=
nly?
LINXY(__NR_rt_sigaction, sys_rt_sigaction), // 174
=20
Modified: trunk/include/vki/vki-linux.h
=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/include/vki/vki-linux.h 2006-12-17 19:36:06 UTC (rev 6409)
+++ trunk/include/vki/vki-linux.h 2006-12-18 15:22:46 UTC (rev 6410)
@@ -314,6 +314,8 @@
int sched_priority;
};
=20
+#define VKI_TASK_COMM_LEN 16
+
//----------------------------------------------------------------------
// From linux-2.6.8.1/include/asm-generic/siginfo.h
//----------------------------------------------------------------------
@@ -2185,6 +2187,58 @@
#define VKI_VT_LOCKSWITCH 0x560B /* disallow vt switching */
#define VKI_VT_UNLOCKSWITCH 0x560C /* allow vt switching */
=20
+//----------------------------------------------------------------------
+// From linux-2.6.19/include/linux/prctl.h
+//----------------------------------------------------------------------
+
+#define VKI_PR_SET_PDEATHSIG 1 /* Second arg is a signal */
+#define VKI_PR_GET_PDEATHSIG 2 /* Second arg is a ptr to return the si=
gnal */
+
+#define VKI_PR_GET_DUMPABLE 3
+#define VKI_PR_SET_DUMPABLE 4
+
+#define VKI_PR_GET_UNALIGN 5
+#define VKI_PR_SET_UNALIGN 6
+# define VKI_PR_UNALIGN_NOPRINT 1 /* silently fix up unaligned user acce=
sses */
+# define VKI_PR_UNALIGN_SIGBUS 2 /* generate SIGBUS on unaligned user ac=
cess */
+
+#define VKI_PR_GET_KEEPCAPS 7
+#define VKI_PR_SET_KEEPCAPS 8
+
+#define VKI_PR_GET_FPEMU 9
+#define VKI_PR_SET_FPEMU 10
+# define VKI_PR_FPEMU_NOPRINT 1 /* silently emulate fp operations access=
es */
+# define VKI_PR_FPEMU_SIGFPE 2 /* don't emulate fp operations, send SIGF=
PE instead */
+
+#define VKI_PR_GET_FPEXC 11
+#define VKI_PR_SET_FPEXC 12
+# define VKI_PR_FP_EXC_SW_ENABLE 0x80 /* Use FPEXC for FP exception enab=
les */
+# define VKI_PR_FP_EXC_DIV 0x010000 /* floating point divide by zero */
+# define VKI_PR_FP_EXC_OVF 0x020000 /* floating point overflow */
+# define VKI_PR_FP_EXC_UND 0x040000 /* floating point underflow */
+# define VKI_PR_FP_EXC_RES 0x080000 /* floating point inexact result */
+# define VKI_PR_FP_EXC_INV 0x100000 /* floating point invalid operation=
*/
+# define VKI_PR_FP_EXC_DISABLED 0 /* FP exceptions disabled */
+# define VKI_PR_FP_EXC_NONRECOV 1 /* async non-recoverable exc. mode */
+# define VKI_PR_FP_EXC_ASYNC 2 /* async recoverable exception mode */
+# define VKI_PR_FP_EXC_PRECISE 3 /* precise exception mode */
+
+#define VKI_PR_GET_TIMING 13
+#define VKI_PR_SET_TIMING 14
+# define VKI_PR_TIMING_STATISTICAL 0 /* Normal, traditional,
+ statistical process t=
iming */
+# define VKI_PR_TIMING_TIMESTAMP 1 /* Accurate timestamp based
+ process timing */
+
+#define VKI_PR_SET_NAME 15 /* Set process name */
+#define VKI_PR_GET_NAME 16 /* Get process name */
+
+#define VKI_PR_GET_ENDIAN 19
+#define VKI_PR_SET_ENDIAN 20
+# define VKI_PR_ENDIAN_BIG 0
+# define VKI_PR_ENDIAN_LITTLE 1 /* True little endian mode */
+# define VKI_PR_ENDIAN_PPC_LITTLE 2 /* "PowerPC" pseudo little endian */
+
#endif // __VKI_LINUX_H
=20
/*--------------------------------------------------------------------*/
|
|
From: Julian S. <js...@ac...> - 2006-12-18 14:34:55
|
On Monday 18 December 2006 09:29, Josef Weidendorfer wrote: > This is wasteful, but unfortunately necessary; > VG_(thread_run) is not exhaustive for detecting thread > switches. There was some case with a signal handler > running in a new thread, and longjmp'ing into normal > code at the end. The latter, Valgrind can not detect itself. > However, I have to look this up again. I can not remember > the exact problem; it was with code generated by an ADA > compiler. That sounds like a bug in the core. You should have complained earlier :-) My proposed patch should make it possible for callgrind/drd to know exactly when client code is running and when it is not, and which thread it is. And no problems with longjmp etc. One thing to note (Bart too) is that the proposed change will cause VG_TRACK(thread_run) and the proposed VG_TRACK(thread_stopped) to be called very often, perhaps 1000 x more often than thread_run is called at present, in the worst case. So the callbacks in the callgrind/drd need to be fast. One other thing to note: there is a subtle change in semantics too. So far, a call to VG_TRACK(thread_run)(tid) means "thread tid has acquired the big CPU lock (and so can make translations, etc, all possible actions, as well as running client code)". In the proposed new scheme, the meaning is a subset: VG_TRACK(thread_run)(tid) means "thread tid has the CPU lock and is about to start running client code". VG_TRACK(thread_stopped)(tid) means "thread tid, which previously had the CPU lock and was running client code, is no longer running client code." J |
|
From: Julian S. <js...@ac...> - 2006-12-18 14:22:48
|
> > Don't you have a core change in your patch that addresses this? > > > > Nick > > What I did in the drd patch is to move the call to VG_TRACK ( > post_thread_create, tst->os_state.parent, tid ); just in front of the > call to VG_(set_running)(...). But if I understood Julian correctly, > the purpose of this last call is to acquire the "big lock". I'm afraid > that this means that I introduced a race condition this way, and that > I should revert this change. Yes ... can you try my proposed patch instead? If it is OK I'll commit it. J |
|
From: Bart V. A. <bar...@gm...> - 2006-12-18 12:01:33
|
On 12/18/06, Nicholas Nethercote <nj...@cs...> wrote: > On Sun, 17 Dec 2006, Bart Van Assche wrote: > > > The current behavior is not easy to work with in drd: the drd tool can > > only create a thread record if it has both the ThreadId of the newly > > created thread and the ThreadId of the parent thread. This information > > is only passed to tools via VG_TRACK(post_thread_create)(), and not > > via VG_TRACK(thread_run)(). Or: I would have to ignore any > > VG_TRACK(thread_run)() calls that happen before > > VG_TRACK(post_thread_create)(). This is something that should be done > > by the core IMHO. > > Don't you have a core change in your patch that addresses this? > > Nick What I did in the drd patch is to move the call to VG_TRACK ( post_thread_create, tst->os_state.parent, tid ); just in front of the call to VG_(set_running)(...). But if I understood Julian correctly, the purpose of this last call is to acquire the "big lock". I'm afraid that this means that I introduced a race condition this way, and that I should revert this change. Bart. |
|
From: Bart V. A. <bar...@gm...> - 2006-12-18 11:54:21
|
On 12/18/06, Julian Seward <js...@ac...> wrote: > > Do you also need a thread-has-stopped-running event? This > might be useful since presently a tool can only know which was > the last thread to run. It cannot know that no thread is running, > because it is only told that a thread is running, and is never told > when that thread stops running. Although it would require a change > to the core/tool interface. > > J I already defined such an event, and called it thread_finished. See also the most recent drd patch I posted (http://home.euphonynet.be/bvassche/valgrind/valgrind-6397-drd-2006-12-13.patch.gz). Bart. |
|
From: Josef W. <Jos...@gm...> - 2006-12-18 09:30:09
|
On Monday 18 December 2006 02:34, Julian Seward wrote: > Do you also need a thread-has-stopped-running event? This > might be useful since presently a tool can only know which was > the last thread to run. It cannot know that no thread is running, > because it is only told that a thread is running, and is never told > when that thread stops running. Although it would require a change > to the core/tool interface. > > Josef, I see that callgrind also uses the thread_run event. > Any problem if that event is moved to be a lot closer in time > to when a thread really runs? I use this event to track thread switches, and, totally unrelated, to do polling for a command (for interactivity with callgrind_control). The latter really should be done elsewhere. For the first use, I actually also check the thread ID at the beginning of every basic block, so tracking thread_run actually is not needed for this. This is wasteful, but unfortunately necessary; VG_(thread_run) is not exhaustive for detecting thread switches. There was some case with a signal handler running in a new thread, and longjmp'ing into normal code at the end. The latter, Valgrind can not detect itself. However, I have to look this up again. I can not remember the exact problem; it was with code generated by an ADA compiler. But regarding the order of VG_TRACK(thread_run)() and VG_TRACK(post_thread_create)(), I see no problem with callgrind. Cheers, Josef |
|
From: Nicholas N. <nj...@cs...> - 2006-12-18 09:19:23
|
On Mon, 18 Dec 2006, Julian Seward wrote: > Do you also need a thread-has-stopped-running event? This > might be useful since presently a tool can only know which was > the last thread to run. It cannot know that no thread is running, > because it is only told that a thread is running, and is never told > when that thread stops running. Although it would require a change > to the core/tool interface. The events part of the interface needs to change a bit for Bart's changes anyway, so this is not a problem. Seems like a good idea. Nick |
|
From: Nicholas N. <nj...@cs...> - 2006-12-18 05:16:59
|
On Sun, 17 Dec 2006, Bart Van Assche wrote: > The current behavior is not easy to work with in drd: the drd tool can > only create a thread record if it has both the ThreadId of the newly > created thread and the ThreadId of the parent thread. This information > is only passed to tools via VG_TRACK(post_thread_create)(), and not > via VG_TRACK(thread_run)(). Or: I would have to ignore any > VG_TRACK(thread_run)() calls that happen before > VG_TRACK(post_thread_create)(). This is something that should be done > by the core IMHO. Don't you have a core change in your patch that addresses this? Nick |
|
From: <js...@ac...> - 2006-12-18 05:10:13
|
Nightly build on minnie ( SuSE 10.0, ppc32 ) started at 2006-12-18 09:00:01 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 215 tests, 10 stderr failures, 6 stdout failures, 0 posttest failures == memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_changes (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) none/tests/ppc32/jm-fp (stdout) none/tests/ppc32/jm-fp (stderr) none/tests/ppc32/round (stdout) none/tests/ppc32/round (stderr) none/tests/ppc32/test_fx (stdout) none/tests/ppc32/test_fx (stderr) none/tests/ppc32/test_gx (stdout) |
|
From: <js...@ac...> - 2006-12-18 04:55:48
|
Nightly build on phoenix ( SuSE 10.0 ) started at 2006-12-18 04: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 Last 20 lines of verbose log follow echo pth_detached.c:12: error: syntax error before 's_spinlock' pth_detached.c:12: warning: type defaults to 'int' in declaration of 's_spinlock' pth_detached.c:12: warning: data definition has no type or storage class pth_detached.c: In function 'increment_finished_count': pth_detached.c:16: warning: implicit declaration of function 'pthread_spin_lock' pth_detached.c:18: warning: implicit declaration of function 'pthread_spin_unlock' pth_detached.c: In function 'main': pth_detached.c:53: warning: implicit declaration of function 'pthread_spin_init' pth_detached.c:87: warning: implicit declaration of function 'pthread_spin_destroy' make[5]: *** [pth_detached.o] Error 1 make[5]: Leaving directory `/home/sewardj/Nightly/valgrind/none/tests' make[4]: *** [check-am] Error 2 make[4]: Leaving directory `/home/sewardj/Nightly/valgrind/none/tests' make[3]: *** [check-recursive] Error 1 make[3]: Leaving directory `/home/sewardj/Nightly/valgrind/none/tests' make[2]: *** [check-recursive] Error 1 make[2]: Leaving directory `/home/sewardj/Nightly/valgrind/none' make[1]: *** [check-recursive] Error 1 make[1]: Leaving directory `/home/sewardj/Nightly/valgrind' make: *** [check] Error 2 ================================================= == Results from 24 hours ago == ================================================= 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 == 250 tests, 6 stderr failures, 1 stdout failure, 0 posttest failures == memcheck/tests/leak-tree (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Mon Dec 18 04:46:59 2006 --- new.short Mon Dec 18 04:55:56 2006 *************** *** 8,19 **** ! Regression test results follow ! ! == 250 tests, 6 stderr failures, 1 stdout failure, 0 posttest failures == ! memcheck/tests/leak-tree (stderr) ! memcheck/tests/pointer-trace (stderr) ! memcheck/tests/stack_switch (stderr) ! memcheck/tests/x86/scalar (stderr) ! memcheck/tests/x86/scalar_supp (stderr) ! none/tests/mremap (stderr) ! none/tests/mremap2 (stdout) ! --- 8,29 ---- ! Last 20 lines of verbose log follow echo ! pth_detached.c:12: error: syntax error before 's_spinlock' ! pth_detached.c:12: warning: type defaults to 'int' in declaration of 's_spinlock' ! pth_detached.c:12: warning: data definition has no type or storage class ! pth_detached.c: In function 'increment_finished_count': ! pth_detached.c:16: warning: implicit declaration of function 'pthread_spin_lock' ! pth_detached.c:18: warning: implicit declaration of function 'pthread_spin_unlock' ! pth_detached.c: In function 'main': ! pth_detached.c:53: warning: implicit declaration of function 'pthread_spin_init' ! pth_detached.c:87: warning: implicit declaration of function 'pthread_spin_destroy' ! make[5]: *** [pth_detached.o] Error 1 ! make[5]: Leaving directory `/home/sewardj/Nightly/valgrind/none/tests' ! make[4]: *** [check-am] Error 2 ! make[4]: Leaving directory `/home/sewardj/Nightly/valgrind/none/tests' ! make[3]: *** [check-recursive] Error 1 ! make[3]: Leaving directory `/home/sewardj/Nightly/valgrind/none/tests' ! make[2]: *** [check-recursive] Error 1 ! make[2]: Leaving directory `/home/sewardj/Nightly/valgrind/none' ! make[1]: *** [check-recursive] Error 1 ! make[1]: Leaving directory `/home/sewardj/Nightly/valgrind' ! make: *** [check] Error 2 |
|
From: Tom H. <to...@co...> - 2006-12-18 03:55:33
|
Nightly build on dunsmere ( athlon, Fedora Core 6 ) started at 2006-12-18 03:30:05 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 252 tests, 5 stderr failures, 2 stdout failures, 0 posttest failures == memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/xml1 (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) none/tests/pth_detached (stdout) |
|
From: Tom H. <th...@cy...> - 2006-12-18 03:23:29
|
Nightly build on dellow ( x86_64, Fedora Core 6 ) started at 2006-12-18 03:10:04 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 280 tests, 4 stderr failures, 2 stdout failures, 0 posttest failures == memcheck/tests/pointer-trace (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/xml1 (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) none/tests/pth_detached (stdout) |
|
From: Tom H. <th...@cy...> - 2006-12-18 03:22:17
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2006-12-18 03:15:01 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Last 20 lines of verbose log follow echo pth_detached.c:12: parse error before "s_spinlock" pth_detached.c:12: warning: type defaults to `int' in declaration of `s_spinlock' pth_detached.c:12: warning: data definition has no type or storage class pth_detached.c: In function `increment_finished_count': pth_detached.c:16: warning: implicit declaration of function `pthread_spin_lock' pth_detached.c:18: warning: implicit declaration of function `pthread_spin_unlock' pth_detached.c: In function `main': pth_detached.c:53: warning: implicit declaration of function `pthread_spin_init' pth_detached.c:87: warning: implicit declaration of function `pthread_spin_destroy' make[5]: *** [pth_detached.o] Error 1 make[5]: Leaving directory `/tmp/valgrind.13404/valgrind/none/tests' make[4]: *** [check-am] Error 2 make[4]: Leaving directory `/tmp/valgrind.13404/valgrind/none/tests' make[3]: *** [check-recursive] Error 1 make[3]: Leaving directory `/tmp/valgrind.13404/valgrind/none/tests' make[2]: *** [check-recursive] Error 1 make[2]: Leaving directory `/tmp/valgrind.13404/valgrind/none' make[1]: *** [check-recursive] Error 1 make[1]: Leaving directory `/tmp/valgrind.13404/valgrind' make: *** [check] Error 2 ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Last 20 lines of verbose log follow echo /tmp/cc1NpelJ.s:4393: Error: no such instruction: `fisttpq -56(%ebp)' /tmp/cc1NpelJ.s:4513: Error: no such instruction: `fisttpq -56(%ebp)' /tmp/cc1NpelJ.s:4633: Error: no such instruction: `fisttpq -56(%ebp)' /tmp/cc1NpelJ.s:4753: Error: no such instruction: `fisttpq -56(%ebp)' /tmp/cc1NpelJ.s:4873: Error: no such instruction: `fisttpq -56(%ebp)' /tmp/cc1NpelJ.s:4993: Error: no such instruction: `fisttpq -56(%ebp)' /tmp/cc1NpelJ.s:5113: Error: no such instruction: `fisttpq -56(%ebp)' /tmp/cc1NpelJ.s:5233: Error: no such instruction: `fisttpq -56(%ebp)' make[5]: *** [insn_sse3.o] Error 1 rm insn_mmx.c insn_sse2.c insn_fpu.c insn_mmxext.c insn_sse.c insn_sse3.c insn_cmov.c insn_basic.c make[5]: Leaving directory `/tmp/valgrind.13404/valgrind/none/tests/x86' make[4]: *** [check-am] Error 2 make[4]: Leaving directory `/tmp/valgrind.13404/valgrind/none/tests/x86' make[3]: *** [check-recursive] Error 1 make[3]: Leaving directory `/tmp/valgrind.13404/valgrind/none/tests' make[2]: *** [check-recursive] Error 1 make[2]: Leaving directory `/tmp/valgrind.13404/valgrind/none' make[1]: *** [check-recursive] Error 1 make[1]: Leaving directory `/tmp/valgrind.13404/valgrind' make: *** [check] Error 2 ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Mon Dec 18 03:18:42 2006 --- new.short Mon Dec 18 03:22:07 2006 *************** *** 7,21 **** Last 20 lines of verbose log follow echo ! /tmp/cc1NpelJ.s:4393: Error: no such instruction: `fisttpq -56(%ebp)' ! /tmp/cc1NpelJ.s:4513: Error: no such instruction: `fisttpq -56(%ebp)' ! /tmp/cc1NpelJ.s:4633: Error: no such instruction: `fisttpq -56(%ebp)' ! /tmp/cc1NpelJ.s:4753: Error: no such instruction: `fisttpq -56(%ebp)' ! /tmp/cc1NpelJ.s:4873: Error: no such instruction: `fisttpq -56(%ebp)' ! /tmp/cc1NpelJ.s:4993: Error: no such instruction: `fisttpq -56(%ebp)' ! /tmp/cc1NpelJ.s:5113: Error: no such instruction: `fisttpq -56(%ebp)' ! /tmp/cc1NpelJ.s:5233: Error: no such instruction: `fisttpq -56(%ebp)' ! make[5]: *** [insn_sse3.o] Error 1 ! rm insn_mmx.c insn_sse2.c insn_fpu.c insn_mmxext.c insn_sse.c insn_sse3.c insn_cmov.c insn_basic.c ! make[5]: Leaving directory `/tmp/valgrind.13404/valgrind/none/tests/x86' make[4]: *** [check-am] Error 2 ! make[4]: Leaving directory `/tmp/valgrind.13404/valgrind/none/tests/x86' make[3]: *** [check-recursive] Error 1 --- 7,21 ---- Last 20 lines of verbose log follow echo ! pth_detached.c:12: parse error before "s_spinlock" ! pth_detached.c:12: warning: type defaults to `int' in declaration of `s_spinlock' ! pth_detached.c:12: warning: data definition has no type or storage class ! pth_detached.c: In function `increment_finished_count': ! pth_detached.c:16: warning: implicit declaration of function `pthread_spin_lock' ! pth_detached.c:18: warning: implicit declaration of function `pthread_spin_unlock' ! pth_detached.c: In function `main': ! pth_detached.c:53: warning: implicit declaration of function `pthread_spin_init' ! pth_detached.c:87: warning: implicit declaration of function `pthread_spin_destroy' ! make[5]: *** [pth_detached.o] Error 1 ! make[5]: Leaving directory `/tmp/valgrind.13404/valgrind/none/tests' make[4]: *** [check-am] Error 2 ! make[4]: Leaving directory `/tmp/valgrind.13404/valgrind/none/tests' make[3]: *** [check-recursive] Error 1 |
|
From: Tom H. <th...@cy...> - 2006-12-18 03:14:54
|
Nightly build on lloyd ( x86_64, Fedora Core 3 ) started at 2006-12-18 03:05:10 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Last 20 lines of verbose log follow echo pth_detached.c:12: error: syntax error before "s_spinlock" pth_detached.c:12: warning: type defaults to `int' in declaration of `s_spinlock' pth_detached.c:12: warning: data definition has no type or storage class pth_detached.c: In function `increment_finished_count': pth_detached.c:16: warning: implicit declaration of function `pthread_spin_lock' pth_detached.c:18: warning: implicit declaration of function `pthread_spin_unlock' pth_detached.c: In function `main': pth_detached.c:53: warning: implicit declaration of function `pthread_spin_init' pth_detached.c:87: warning: implicit declaration of function `pthread_spin_destroy' make[5]: *** [pth_detached.o] Error 1 make[5]: Leaving directory `/tmp/valgrind.2011/valgrind/none/tests' make[4]: *** [check-am] Error 2 make[4]: Leaving directory `/tmp/valgrind.2011/valgrind/none/tests' make[3]: *** [check-recursive] Error 1 make[3]: Leaving directory `/tmp/valgrind.2011/valgrind/none/tests' make[2]: *** [check-recursive] Error 1 make[2]: Leaving directory `/tmp/valgrind.2011/valgrind/none' make[1]: *** [check-recursive] Error 1 make[1]: Leaving directory `/tmp/valgrind.2011/valgrind' make: *** [check] Error 2 ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 280 tests, 5 stderr failures, 1 stdout failure, 0 posttest failures == memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Mon Dec 18 03:12:05 2006 --- new.short Mon Dec 18 03:14:39 2006 *************** *** 6,16 **** ! Regression test results follow ! ! == 280 tests, 5 stderr failures, 1 stdout failure, 0 posttest failures == ! memcheck/tests/pointer-trace (stderr) ! memcheck/tests/stack_switch (stderr) ! memcheck/tests/x86/scalar (stderr) ! memcheck/tests/x86/scalar_supp (stderr) ! none/tests/mremap (stderr) ! none/tests/mremap2 (stdout) ! --- 6,27 ---- ! Last 20 lines of verbose log follow echo ! pth_detached.c:12: error: syntax error before "s_spinlock" ! pth_detached.c:12: warning: type defaults to `int' in declaration of `s_spinlock' ! pth_detached.c:12: warning: data definition has no type or storage class ! pth_detached.c: In function `increment_finished_count': ! pth_detached.c:16: warning: implicit declaration of function `pthread_spin_lock' ! pth_detached.c:18: warning: implicit declaration of function `pthread_spin_unlock' ! pth_detached.c: In function `main': ! pth_detached.c:53: warning: implicit declaration of function `pthread_spin_init' ! pth_detached.c:87: warning: implicit declaration of function `pthread_spin_destroy' ! make[5]: *** [pth_detached.o] Error 1 ! make[5]: Leaving directory `/tmp/valgrind.2011/valgrind/none/tests' ! make[4]: *** [check-am] Error 2 ! make[4]: Leaving directory `/tmp/valgrind.2011/valgrind/none/tests' ! make[3]: *** [check-recursive] Error 1 ! make[3]: Leaving directory `/tmp/valgrind.2011/valgrind/none/tests' ! make[2]: *** [check-recursive] Error 1 ! make[2]: Leaving directory `/tmp/valgrind.2011/valgrind/none' ! make[1]: *** [check-recursive] Error 1 ! make[1]: Leaving directory `/tmp/valgrind.2011/valgrind' ! make: *** [check] Error 2 |
|
From: Tom H. <th...@cy...> - 2006-12-18 03:09:06
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2006-12-18 03:00:03 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Last 20 lines of verbose log follow echo pth_detached.c:12: error: syntax error before "s_spinlock" pth_detached.c:12: warning: type defaults to `int' in declaration of `s_spinlock' pth_detached.c:12: warning: data definition has no type or storage class pth_detached.c: In function `increment_finished_count': pth_detached.c:16: warning: implicit declaration of function `pthread_spin_lock' pth_detached.c:18: warning: implicit declaration of function `pthread_spin_unlock' pth_detached.c: In function `main': pth_detached.c:53: warning: implicit declaration of function `pthread_spin_init' pth_detached.c:87: warning: implicit declaration of function `pthread_spin_destroy' make[5]: *** [pth_detached.o] Error 1 make[5]: Leaving directory `/tmp/valgrind.1631/valgrind/none/tests' make[4]: *** [check-am] Error 2 make[4]: Leaving directory `/tmp/valgrind.1631/valgrind/none/tests' make[3]: *** [check-recursive] Error 1 make[3]: Leaving directory `/tmp/valgrind.1631/valgrind/none/tests' make[2]: *** [check-recursive] Error 1 make[2]: Leaving directory `/tmp/valgrind.1631/valgrind/none' make[1]: *** [check-recursive] Error 1 make[1]: Leaving directory `/tmp/valgrind.1631/valgrind' make: *** [check] Error 2 ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 282 tests, 6 stderr failures, 1 stdout failure, 0 posttest failures == memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/fdleak_fcntl (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Mon Dec 18 03:05:22 2006 --- new.short Mon Dec 18 03:08:45 2006 *************** *** 6,17 **** ! Regression test results follow ! ! == 282 tests, 6 stderr failures, 1 stdout failure, 0 posttest failures == ! memcheck/tests/pointer-trace (stderr) ! memcheck/tests/stack_switch (stderr) ! memcheck/tests/x86/scalar (stderr) ! memcheck/tests/x86/scalar_supp (stderr) ! none/tests/fdleak_fcntl (stderr) ! none/tests/mremap (stderr) ! none/tests/mremap2 (stdout) ! --- 6,27 ---- ! Last 20 lines of verbose log follow echo ! pth_detached.c:12: error: syntax error before "s_spinlock" ! pth_detached.c:12: warning: type defaults to `int' in declaration of `s_spinlock' ! pth_detached.c:12: warning: data definition has no type or storage class ! pth_detached.c: In function `increment_finished_count': ! pth_detached.c:16: warning: implicit declaration of function `pthread_spin_lock' ! pth_detached.c:18: warning: implicit declaration of function `pthread_spin_unlock' ! pth_detached.c: In function `main': ! pth_detached.c:53: warning: implicit declaration of function `pthread_spin_init' ! pth_detached.c:87: warning: implicit declaration of function `pthread_spin_destroy' ! make[5]: *** [pth_detached.o] Error 1 ! make[5]: Leaving directory `/tmp/valgrind.1631/valgrind/none/tests' ! make[4]: *** [check-am] Error 2 ! make[4]: Leaving directory `/tmp/valgrind.1631/valgrind/none/tests' ! make[3]: *** [check-recursive] Error 1 ! make[3]: Leaving directory `/tmp/valgrind.1631/valgrind/none/tests' ! make[2]: *** [check-recursive] Error 1 ! make[2]: Leaving directory `/tmp/valgrind.1631/valgrind/none' ! make[1]: *** [check-recursive] Error 1 ! make[1]: Leaving directory `/tmp/valgrind.1631/valgrind' ! make: *** [check] Error 2 |
|
From: Julian S. <js...@ac...> - 2006-12-18 02:10:25
|
Am just looking into this. Is difficult. Maybe better to include pthread.h where needed (in drd, not the core) and we can tidy it up later when more of the other details are stabilised. J On Monday 11 December 2006 12:44, Bart Van Assche wrote: > Hello Julian, > > It would be nice if you could write such a configure test -- I'm > not that familiar with configure. By the way: I do not only need the > byte size of the pthread_t datatype, but also of pthread_mutex_t. > > On 12/10/06, Julian Seward <js...@ac...> wrote: > > > How do I make the pthread_t datatype available to the drd tool ? Is it > > > allowed to include header-files like <pthread.h> directly from a tool > > > source file ? Or should I introduce a typedef in the drd tool, which > > > might cause trouble when porting drd to other OS's than Linux ? > > > > Good question. So far we've avoided system header files as much as > > possible because of stability problems earlier in V's life. I suggest > > a fairly safe kludge is to assume that pthread_t is a machine word > > (C unsigned long, or 'UWord' in V's type system) and then add a configure > > test to check that. We can generalise later if needed. Bear in mind > > also that you can only pass word-sized parameters as arguments of > > client requests, so equating pthread_t with UWord is helpful there too. > > I'll write the relevant configure test if you want. > > > > J > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share > your opinions on IT & business topics through brief surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Valgrind-developers mailing list > Val...@li... > https://lists.sourceforge.net/lists/listinfo/valgrind-developers |
|
From: Julian S. <js...@ac...> - 2006-12-18 01:32:50
|
> and 64-bit architectures. Do you have an idea of how lookups in an > OSet compare with lookups in the three-level bitmap data structure I > defined ? They will certainly be a lot slower. So that's why I suggest to place a small cache of some sort "in front" of the main OSet - to catch and handle quickly 90+ % of accesses. > And how about memory consumption ? Probably pretty economical. I would say not noticeably different from the 3 level structure. J |
|
From: Julian S. <js...@ac...> - 2006-12-18 01:24:48
|
> > Anyway: does the existing sequence cause a problem for drd?
>
> The current behavior is not easy to work with in drd: the drd tool can
> only create a thread record if it has both the ThreadId of the newly
> created thread and the ThreadId of the parent thread. This information
> is only passed to tools via VG_TRACK(post_thread_create)(), and not
> via VG_TRACK(thread_run)(). Or: I would have to ignore any
> VG_TRACK(thread_run)() calls that happen before
> VG_TRACK(post_thread_create)(). This is something that should be done
> by the core IMHO.
I agree, the core is wrong. The problem is that the call
VG_TRACK( thread_run, tid ) in scheduler.c is done too early;
it is done as soon as the thread has the CPU lock, and a lot
can happen between getting the lock and running any code of
the thread. Maybe better would be to do it just before the
thread's code is really run.
Can you try the following patch? I think it should cause
post_thread_create to happen before thread_run, which is what
you want AIUI.
Do you also need a thread-has-stopped-running event? This
might be useful since presently a tool can only know which was
the last thread to run. It cannot know that no thread is running,
because it is only told that a thread is running, and is never told
when that thread stops running. Although it would require a change
to the core/tool interface.
Josef, I see that callgrind also uses the thread_run event.
Any problem if that event is moved to be a lot closer in time
to when a thread really runs?
J
Index: coregrind/m_scheduler/scheduler.c
===================================================================
--- coregrind/m_scheduler/scheduler.c (revision 6408)
+++ coregrind/m_scheduler/scheduler.c (working copy)
@@ -233,10 +233,6 @@
VG_(sprintf)(buf, " acquired lock (%s)", who);
print_sched_event(tid, buf);
}
-
- // While thre modeling is disable, issue thread_run events here
- // VG_(tm_thread_switchto)(tid);
- VG_TRACK( thread_run, tid );
}
/*
@@ -616,6 +612,9 @@
VG_(printf)("\n");
}
+ // Tell the tool this thread is about to run
+ VG_TRACK( thread_run, tid );
+
vg_assert(VG_(in_generated_code) == False);
VG_(in_generated_code) = True;
@@ -636,6 +635,8 @@
block_signals(tid);
}
+ // XXX if needed, we could tell the tool this thread has finished running
+
done_this_time = (Int)dispatch_ctr_SAVED - (Int)VG_(dispatch_ctr) - 0;
vg_assert(done_this_time >= 0);
@@ -652,6 +653,7 @@
volatile Int jumped;
volatile ThreadState* tst;
volatile UWord argblock[4];
+ volatile UInt retval;
/* Paranoia */
vg_assert(VG_(is_valid_tid)(tid));
@@ -686,6 +688,9 @@
argblock[2] = 0; /* next guest IP is written here */
argblock[3] = 0; /* guest state ptr afterwards is written here */
+ // Tell the tool this thread is about to run
+ VG_TRACK( thread_run, tid );
+
vg_assert(VG_(in_generated_code) == False);
VG_(in_generated_code) = True;
@@ -703,16 +708,20 @@
vg_assert(argblock[2] == 0); /* next guest IP was not written */
vg_assert(argblock[3] == 0); /* trc was not written */
block_signals(tid);
- return VG_TRC_FAULT_SIGNAL;
+ retval = VG_TRC_FAULT_SIGNAL;
} else {
/* store away the guest program counter */
VG_(set_IP)( tid, argblock[2] );
if (argblock[3] == argblock[1])
/* the guest state pointer afterwards was unchanged */
- return VG_TRC_BORING;
+ retval = VG_TRC_BORING;
else
- return (UInt)argblock[3];
+ retval = (UInt)argblock[3];
}
+
+ // XXX if needed, we could tell the tool this thread has finished running
+
+ return retval;
}
|
|
From: <js...@ac...> - 2006-12-18 01:16:29
|
Nightly build on g5 ( SuSE 10.1, ppc970 ) started at 2006-12-18 02:00:02 CET Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 221 tests, 6 stderr failures, 2 stdout failures, 0 posttest failures == memcheck/tests/deep_templates (stdout) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/pointer-trace (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) |