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
(9) |
|
2
(5) |
3
(8) |
4
(9) |
5
(9) |
6
(8) |
7
(4) |
8
(18) |
|
9
(9) |
10
(15) |
11
(4) |
12
(9) |
13
(9) |
14
(5) |
15
(4) |
|
16
(7) |
17
(15) |
18
(7) |
19
(13) |
20
(10) |
21
(10) |
22
(8) |
|
23
(4) |
24
(4) |
25
(6) |
26
(6) |
27
(5) |
28
(4) |
29
(4) |
|
30
(4) |
|
|
|
|
|
|
|
From: Ashley P. <api...@co...> - 2008-11-13 22:05:50
|
On Thu, 2008-11-13 at 13:58 -0800, Dan Kegel wrote: > I ran into a situation where I wanted to use --log-file > and --trace-children=yes together. Not surprisingly, > this didn't work so well. I added the following hack > to cause a '$' in the log file name to be expanded to > the pid. This avoids log file corruption by multiple > processes writing to same file. Is there a better > way to do this? Does --log-file=log.%p do what you want? Ashley. |
|
From: Dan K. <da...@ke...> - 2008-11-13 21:58:30
|
I ran into a situation where I wanted to use --log-file and --trace-children=yes together. Not surprisingly, this didn't work so well. I added the following hack to cause a '$' in the log file name to be expanded to the pid. This avoids log file corruption by multiple processes writing to same file. Is there a better way to do this? Thanks, Dan |
|
From: <sv...@va...> - 2008-11-13 13:33:13
|
Author: sewardj
Date: 2008-11-13 13:33:09 +0000 (Thu, 13 Nov 2008)
New Revision: 8766
Log:
Add initial support for POSIX barriers (pthread_barrier_{init,wait,destroy}).
Modified:
trunk/glibc-2.34567-NPTL-helgrind.supp
trunk/helgrind/helgrind.h
trunk/helgrind/hg_intercepts.c
trunk/helgrind/hg_main.c
Modified: trunk/glibc-2.34567-NPTL-helgrind.supp
===================================================================
--- trunk/glibc-2.34567-NPTL-helgrind.supp 2008-11-13 13:17:06 UTC (rev 8765)
+++ trunk/glibc-2.34567-NPTL-helgrind.supp 2008-11-13 13:33:09 UTC (rev 8766)
@@ -215,6 +215,11 @@
Helgrind:Race
fun:pthread_create@*
}
+{
+ helgrind-glibc28-113
+ Helgrind:Race
+ fun:pthread_barrier_wait*
+}
######------------ glibc-2.7 specific ---------######
#
Modified: trunk/helgrind/helgrind.h
===================================================================
--- trunk/helgrind/helgrind.h 2008-11-13 13:17:06 UTC (rev 8765)
+++ trunk/helgrind/helgrind.h 2008-11-13 13:33:09 UTC (rev 8766)
@@ -93,7 +93,9 @@
_VG_USERREQ__HG_POSIX_SEM_DESTROY_PRE, /* sem_t* */
_VG_USERREQ__HG_POSIX_SEM_POST_PRE, /* sem_t* */
_VG_USERREQ__HG_POSIX_SEM_WAIT_POST, /* sem_t* */
- _VG_USERREQ__HG_GET_MY_SEGMENT /* -> Segment* */
+ _VG_USERREQ__HG_PTHREAD_BARRIER_INIT_PRE, /* pth_bar_t*, ulong */
+ _VG_USERREQ__HG_PTHREAD_BARRIER_WAIT_PRE, /* pth_bar_t* */
+ _VG_USERREQ__HG_PTHREAD_BARRIER_DESTROY_PRE /* pth_bar_t* */
} Vg_TCheckClientRequest;
/* Clean memory state. This makes Helgrind forget everything it knew
Modified: trunk/helgrind/hg_intercepts.c
===================================================================
--- trunk/helgrind/hg_intercepts.c 2008-11-13 13:17:06 UTC (rev 8765)
+++ trunk/helgrind/hg_intercepts.c 2008-11-13 13:33:09 UTC (rev 8766)
@@ -755,30 +755,76 @@
/*--- pthread_barrier_t functions ---*/
/*----------------------------------------------------------------*/
-PTH_FUNC(int, pthreadZubarrierZuwait, // pthread_barrier_wait.
- pthread_barrier_t* b)
+/* Handled: pthread_barrier_init
+ pthread_barrier_wait
+ pthread_barrier_destroy
+
+ Unhandled: pthread_barrierattr_destroy
+ pthread_barrierattr_getpshared
+ pthread_barrierattr_init
+ pthread_barrierattr_setpshared
+ -- are these important?
+*/
+
+PTH_FUNC(int, pthreadZubarrierZuinit, // pthread_barrier_init
+ pthread_barrier_t* bar,
+ pthread_barrierattr_t* attr, unsigned long count)
{
int ret;
OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
if (TRACE_PTH_FNS) {
- fprintf(stderr, "<< pthread_barrier_wait %p", b);
+ fprintf(stderr, "<< pthread_barrier_init %p %p %lu",
+ bar, attr, count);
fflush(stderr);
}
- // We blocked, signal.
- DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_COND_BROADCAST_PRE,
- void*,b);
- CALL_FN_W_W(ret, fn, b);
+ DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_BARRIER_INIT_PRE,
+ pthread_barrier_t*,bar,
+ unsigned long,count);
- // FIXME: handle ret
+ CALL_FN_W_WWW(ret, fn, bar,attr,count);
- // We unblocked, finish wait.
- DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_COND_WAIT_POST,
- void *, b, void *, b);
+ if (ret != 0) {
+ DO_PthAPIerror( "pthread_barrier_init", ret );
+ }
if (TRACE_PTH_FNS) {
+ fprintf(stderr, " pthread_barrier_init -> %d >>\n", ret);
+ }
+
+ return ret;
+}
+
+
+PTH_FUNC(int, pthreadZubarrierZuwait, // pthread_barrier_wait
+ pthread_barrier_t* bar)
+{
+ int ret;
+ OrigFn fn;
+ VALGRIND_GET_ORIG_FN(fn);
+
+ if (TRACE_PTH_FNS) {
+ fprintf(stderr, "<< pthread_barrier_wait %p", bar);
+ fflush(stderr);
+ }
+
+ /* That this works correctly, and doesn't screw up when a thread
+ leaving the barrier races round to the front and re-enters while
+ other threads are still leaving it, is quite subtle. See
+ comments in the handler for PTHREAD_BARRIER_WAIT_PRE in
+ hg_main.c. */
+ DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_BARRIER_WAIT_PRE,
+ pthread_barrier_t*,bar);
+
+ CALL_FN_W_W(ret, fn, bar);
+
+ if (ret != 0 && ret != PTHREAD_BARRIER_SERIAL_THREAD) {
+ DO_PthAPIerror( "pthread_barrier_wait", ret );
+ }
+
+ if (TRACE_PTH_FNS) {
fprintf(stderr, " pthread_barrier_wait -> %d >>\n", ret);
}
@@ -786,7 +832,34 @@
}
+PTH_FUNC(int, pthreadZubarrierZudestroy, // pthread_barrier_destroy
+ pthread_barrier_t* bar)
+{
+ int ret;
+ OrigFn fn;
+ VALGRIND_GET_ORIG_FN(fn);
+ if (TRACE_PTH_FNS) {
+ fprintf(stderr, "<< pthread_barrier_destroy %p", bar);
+ fflush(stderr);
+ }
+
+ DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_BARRIER_DESTROY_PRE,
+ pthread_barrier_t*,bar);
+
+ CALL_FN_W_W(ret, fn, bar);
+
+ if (ret != 0) {
+ DO_PthAPIerror( "pthread_barrier_destroy", ret );
+ }
+
+ if (TRACE_PTH_FNS) {
+ fprintf(stderr, " pthread_barrier_destroy -> %d >>\n", ret);
+ }
+
+ return ret;
+}
+
/*----------------------------------------------------------------*/
/*--- pthread_rwlock_t functions ---*/
/*----------------------------------------------------------------*/
Modified: trunk/helgrind/hg_main.c
===================================================================
--- trunk/helgrind/hg_main.c 2008-11-13 13:17:06 UTC (rev 8765)
+++ trunk/helgrind/hg_main.c 2008-11-13 13:33:09 UTC (rev 8766)
@@ -1397,7 +1397,9 @@
}
-/*--------- Event handlers proper (evh__* functions) ---------*/
+/* ---------------------------------------------------------- */
+/* -------- Event handlers proper (evh__* functions) -------- */
+/* ---------------------------------------------------------- */
/* What is the Thread* for the currently running thread? This is
absolutely performance critical. We receive notifications from the
@@ -1814,8 +1816,9 @@
// evhH__pre_thread_releases_lock( thr, (Addr)&__bus_lock, False/*!isRDWR*/ );
//}
-
+/* ------------------------------------------------------- */
/* -------------- events to do with mutexes -------------- */
+/* ------------------------------------------------------- */
/* EXPOSITION only: by intercepting lock init events we can show the
user where the lock was initialised, rather than only being able to
@@ -1964,7 +1967,9 @@
}
+/* ----------------------------------------------------- */
/* --------------- events to do with CVs --------------- */
+/* ----------------------------------------------------- */
/* A mapping from CV to the SO associated with it. When the CV is
signalled/broadcasted upon, we do a 'send' into the SO, and when a
@@ -1978,7 +1983,8 @@
static void map_cond_to_SO_INIT ( void ) {
if (UNLIKELY(map_cond_to_SO == NULL)) {
- map_cond_to_SO = VG_(newFM)( HG_(zalloc), "hg.mctSI.1", HG_(free), NULL );
+ map_cond_to_SO = VG_(newFM)( HG_(zalloc),
+ "hg.mctSI.1", HG_(free), NULL );
tl_assert(map_cond_to_SO != NULL);
}
}
@@ -2137,7 +2143,9 @@
}
+/* ------------------------------------------------------- */
/* -------------- events to do with rwlocks -------------- */
+/* ------------------------------------------------------- */
/* EXPOSITION only */
static
@@ -2274,7 +2282,9 @@
}
-/* --------------- events to do with semaphores --------------- */
+/* ---------------------------------------------------------- */
+/* -------------- events to do with semaphores -------------- */
+/* ---------------------------------------------------------- */
/* This is similar to but not identical to the handling for condition
variables. */
@@ -2500,6 +2510,213 @@
}
+/* -------------------------------------------------------- */
+/* -------------- events to do with barriers -------------- */
+/* -------------------------------------------------------- */
+
+typedef
+ struct {
+ Bool initted; /* has it yet been initted by guest? */
+ UWord size; /* declared size */
+ XArray* waiting; /* XA of Thread*. # present is 0 .. .size */
+ }
+ Bar;
+
+static Bar* new_Bar ( void ) {
+ Bar* bar = HG_(zalloc)( "hg.nB.1 (new_Bar)", sizeof(Bar) );
+ tl_assert(bar);
+ /* all fields are zero */
+ tl_assert(bar->initted == False);
+ return bar;
+}
+
+static void delete_Bar ( Bar* bar ) {
+ tl_assert(bar);
+ if (bar->waiting)
+ VG_(deleteXA)(bar->waiting);
+ HG_(free)(bar);
+}
+
+/* A mapping which stores auxiliary data for barriers. */
+
+/* pthread_barrier_t* -> Bar* */
+static WordFM* map_barrier_to_Bar = NULL;
+
+static void map_barrier_to_Bar_INIT ( void ) {
+ if (UNLIKELY(map_barrier_to_Bar == NULL)) {
+ map_barrier_to_Bar = VG_(newFM)( HG_(zalloc),
+ "hg.mbtBI.1", HG_(free), NULL );
+ tl_assert(map_barrier_to_Bar != NULL);
+ }
+}
+
+static Bar* map_barrier_to_Bar_lookup_or_alloc ( void* barrier ) {
+ UWord key, val;
+ map_barrier_to_Bar_INIT();
+ if (VG_(lookupFM)( map_barrier_to_Bar, &key, &val, (UWord)barrier )) {
+ tl_assert(key == (UWord)barrier);
+ return (Bar*)val;
+ } else {
+ Bar* bar = new_Bar();
+ VG_(addToFM)( map_barrier_to_Bar, (UWord)barrier, (UWord)bar );
+ return bar;
+ }
+}
+
+static void map_barrier_to_Bar_delete ( void* barrier ) {
+ UWord keyW, valW;
+ map_barrier_to_Bar_INIT();
+ if (VG_(delFromFM)( map_barrier_to_Bar, &keyW, &valW, (UWord)barrier )) {
+ Bar* bar = (Bar*)valW;
+ tl_assert(keyW == (UWord)barrier);
+ delete_Bar(bar);
+ }
+}
+
+
+static void evh__HG_PTHREAD_BARRIER_INIT_PRE ( ThreadId tid,
+ void* barrier,
+ UWord count )
+{
+ Thread* thr;
+ Bar* bar;
+
+ if (SHOW_EVENTS >= 1)
+ VG_(printf)("evh__HG_PTHREAD_BARRIER_INIT_PRE"
+ "(tid=%d, barrier=%p, count=%lu)\n",
+ (Int)tid, (void*)barrier, count );
+
+ thr = map_threads_maybe_lookup( tid );
+ tl_assert(thr); /* cannot fail - Thread* must already exist */
+
+ if (count == 0) {
+ HG_(record_error_Misc)(
+ thr, "pthread_barrier_init: 'count' argument is zero"
+ );
+ }
+
+ bar = map_barrier_to_Bar_lookup_or_alloc(barrier);
+ tl_assert(bar);
+
+ if (bar->initted) {
+ HG_(record_error_Misc)(
+ thr, "pthread_barrier_init: barrier is already initialised"
+ );
+ }
+
+ if (bar->waiting && VG_(sizeXA)(bar->waiting) > 0) {
+ tl_assert(bar->initted);
+ HG_(record_error_Misc)(
+ thr, "pthread_barrier_init: barrier still has waiting threads"
+ );
+ VG_(dropTailXA)(bar->waiting, VG_(sizeXA)(bar->waiting));
+ }
+ if (!bar->waiting) {
+ bar->waiting = VG_(newXA)( HG_(zalloc), "hg.eHPBIP.1", HG_(free),
+ sizeof(Thread*) );
+ }
+
+ tl_assert(bar->waiting);
+ tl_assert(VG_(sizeXA)(bar->waiting) == 0);
+ bar->initted = True;
+ bar->size = count;
+}
+
+
+static void evh__HG_PTHREAD_BARRIER_DESTROY_PRE ( ThreadId tid,
+ void* barrier )
+{
+ /* Deal with destroy events. The only purpose is to free storage
+ associated with the barrier, so as to avoid any possible
+ resource leaks. */
+ if (SHOW_EVENTS >= 1)
+ VG_(printf)("evh__HG_PTHREAD_BARRIER_DESTROY_PRE"
+ "(tid=%d, barrier=%p)\n",
+ (Int)tid, (void*)barrier );
+
+ /* Maybe we shouldn't do this; just let it persist, so that when it
+ is reinitialised we don't need to do any dynamic memory
+ allocation? The downside is a potentially unlimited space leak,
+ if the client creates (in turn) a large number of barriers all
+ at different locations. Note that if we do later move to the
+ don't-delete-it scheme, we need to mark the barrier as
+ uninitialised again since otherwise a later _init call will
+ elicit a duplicate-init error. */
+ map_barrier_to_Bar_delete( barrier );
+}
+
+
+static void evh__HG_PTHREAD_BARRIER_WAIT_PRE ( ThreadId tid,
+ void* barrier )
+{
+ Thread* thr;
+ Bar* bar;
+ SO* so;
+ UWord present, i;
+
+ if (SHOW_EVENTS >= 1)
+ VG_(printf)("evh__HG_PTHREAD_BARRIER_WAIT_PRE"
+ "(tid=%d, barrier=%p)\n",
+ (Int)tid, (void*)barrier );
+
+ thr = map_threads_maybe_lookup( tid );
+ tl_assert(thr); /* cannot fail - Thread* must already exist */
+
+ bar = map_barrier_to_Bar_lookup_or_alloc(barrier);
+ tl_assert(bar);
+
+ if (!bar->initted) {
+ HG_(record_error_Misc)(
+ thr, "pthread_barrier_wait: barrier is uninitialised"
+ );
+ return; /* client is broken .. avoid assertions below */
+ }
+
+ /* guaranteed by _INIT_PRE above */
+ tl_assert(bar->size > 0);
+ tl_assert(bar->waiting);
+
+ VG_(addToXA)( bar->waiting, &thr );
+
+ /* guaranteed by this function */
+ present = VG_(sizeXA)(bar->waiting);
+ tl_assert(present > 0 && present <= bar->size);
+
+ if (present < bar->size)
+ return;
+
+ /* All the threads have arrived. Now do the Interesting bit. Get
+ a new synchronisation object and do a weak send to it from all
+ the participating threads. This makes its vector clocks be the
+ join of all the individual thread's vector clocks. Then do a
+ strong receive from it back to all threads, so that their VCs
+ are a copy of it (hence are all equal to the join of their
+ original VCs.) */
+ so = libhb_so_alloc();
+
+ /* XXX check ->waiting has no duplicates */
+
+ tl_assert(bar->waiting);
+ tl_assert(VG_(sizeXA)(bar->waiting) == bar->size);
+
+ /* compute the join ... */
+ for (i = 0; i < bar->size; i++) {
+ Thread* t = *(Thread**)VG_(indexXA)(bar->waiting, i);
+ Thr* hbthr = t->hbthr;
+ libhb_so_send( hbthr, so, False/*weak send*/ );
+ }
+ /* ... and distribute to all threads */
+ for (i = 0; i < bar->size; i++) {
+ Thread* t = *(Thread**)VG_(indexXA)(bar->waiting, i);
+ Thr* hbthr = t->hbthr;
+ libhb_so_recv( hbthr, so, True/*strong recv*/ );
+ }
+
+ /* finally, we must empty out the waiting vector */
+ VG_(dropTailXA)(bar->waiting, VG_(sizeXA)(bar->waiting));
+}
+
+
/*--------------------------------------------------------------*/
/*--- Lock acquisition order monitoring ---*/
/*--------------------------------------------------------------*/
@@ -3658,20 +3875,21 @@
evh__HG_POSIX_SEM_WAIT_POST( tid, (void*)args[1] );
break;
-//zz case _VG_USERREQ__HG_GET_MY_SEGMENT: { // -> Segment*
-//zz Thread* thr;
-//zz SegmentID segid;
-//zz Segment* seg;
-//zz thr = map_threads_maybe_lookup( tid );
-//zz tl_assert(thr); /* cannot fail */
-//zz segid = thr->csegid;
-//zz tl_assert(is_sane_SegmentID(segid));
-//zz seg = map_segments_lookup( segid );
-//zz tl_assert(seg);
-//zz *ret = (UWord)seg;
-//zz break;
-//zz }
+ case _VG_USERREQ__HG_PTHREAD_BARRIER_INIT_PRE:
+ /* pth_bar_t*, ulong */
+ evh__HG_PTHREAD_BARRIER_INIT_PRE( tid, (void*)args[1], args[2] );
+ break;
+ case _VG_USERREQ__HG_PTHREAD_BARRIER_WAIT_PRE:
+ /* pth_bar_t* */
+ evh__HG_PTHREAD_BARRIER_WAIT_PRE( tid, (void*)args[1] );
+ break;
+
+ case _VG_USERREQ__HG_PTHREAD_BARRIER_DESTROY_PRE:
+ /* pth_bar_t* */
+ evh__HG_PTHREAD_BARRIER_DESTROY_PRE( tid, (void*)args[1] );
+ break;
+
default:
/* Unhandled Helgrind client request! */
tl_assert2(0, "unhandled Helgrind client request 0x%lx",
|
|
From: <sv...@va...> - 2008-11-13 13:17:13
|
Author: sewardj
Date: 2008-11-13 13:17:06 +0000 (Thu, 13 Nov 2008)
New Revision: 8765
Log:
Add performance comments to VG_(sizeFM), and add new method
VG_(isEmptyFM), currently commented out.
Modified:
trunk/coregrind/m_wordfm.c
trunk/include/pub_tool_wordfm.h
Modified: trunk/coregrind/m_wordfm.c
===================================================================
--- trunk/coregrind/m_wordfm.c 2008-11-13 13:14:00 UTC (rev 8764)
+++ trunk/coregrind/m_wordfm.c 2008-11-13 13:17:06 UTC (rev 8765)
@@ -683,12 +683,19 @@
key, fm->kCmp );
}
+// See comment in pub_tool_wordfm.h for performance warning
UWord VG_(sizeFM) ( WordFM* fm )
{
// Hmm, this is a bad way to do this
return fm->root ? size_avl_nonNull( fm->root ) : 0;
}
+// NB UNTESTED! TEST BEFORE USE!
+//Bool VG_(isEmptyFM)( WordFM* fm )
+//{
+// return fm->root ? False : True;
+//}
+
// set up FM for iteration
void VG_(initIterFM) ( WordFM* fm )
{
Modified: trunk/include/pub_tool_wordfm.h
===================================================================
--- trunk/include/pub_tool_wordfm.h 2008-11-13 13:14:00 UTC (rev 8764)
+++ trunk/include/pub_tool_wordfm.h 2008-11-13 13:17:06 UTC (rev 8765)
@@ -122,9 +122,16 @@
UWord maxKey, UWord maxVal,
UWord key );
-// How many elements are there in fm?
+// How many elements are there in fm? NOTE: dangerous in the
+// sense that this is not an O(1) operation but rather O(N),
+// since it involves walking the whole tree.
UWord VG_(sizeFM) ( WordFM* fm );
+// Is fm empty? This at least is an O(1) operation.
+// Code is present in m_wordfm.c but commented out due to no
+// current usage. Un-comment (and TEST IT) if required.
+//Bool VG_(isEmptyFM)( WordFM* fm );
+
// set up FM for iteration
void VG_(initIterFM) ( WordFM* fm );
|
|
From: <sv...@va...> - 2008-11-13 13:14:08
|
Author: sewardj
Date: 2008-11-13 13:14:00 +0000 (Thu, 13 Nov 2008)
New Revision: 8764
Log:
Fix debug printing of fd in mmap system calls.
Modified:
trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
Modified: trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2008-11-10 18:54:46 UTC (rev 8763)
+++ trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2008-11-13 13:14:00 UTC (rev 8764)
@@ -948,8 +948,8 @@
{
SysRes r;
- PRINT("sys_mmap ( %#lx, %llu, %ld, %ld, %ld, %ld )",
- ARG1, (ULong)ARG2, ARG3, ARG4, ARG5, ARG6 );
+ PRINT("sys_mmap ( %#lx, %llu, %ld, %ld, %d, %ld )",
+ ARG1, (ULong)ARG2, ARG3, ARG4, (Int)ARG5, ARG6 );
PRE_REG_READ6(long, "mmap",
unsigned long, start, unsigned long, length,
unsigned long, prot, unsigned long, flags,
|
|
From: Tom H. <th...@cy...> - 2008-11-13 04:12:46
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2008-11-13 03:15:03 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 == 369 tests, 84 stderr failures, 1 stdout failure, 29 post failures == exp-ptrcheck/tests/bad_percentify (stderr) exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/fp (stderr) exp-ptrcheck/tests/globalerr (stderr) exp-ptrcheck/tests/hackedbz2 (stderr) exp-ptrcheck/tests/hp_bounds (stderr) exp-ptrcheck/tests/hp_dangle (stderr) exp-ptrcheck/tests/justify (stderr) exp-ptrcheck/tests/partial_bad (stderr) exp-ptrcheck/tests/partial_good (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) exp-ptrcheck/tests/realloc (stderr) exp-ptrcheck/tests/stackerr (stderr) exp-ptrcheck/tests/strcpy (stderr) exp-ptrcheck/tests/supp (stderr) exp-ptrcheck/tests/tricky (stderr) exp-ptrcheck/tests/unaligned (stderr) exp-ptrcheck/tests/zero (stderr) helgrind/tests/hg01_all_ok (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/hg06_readshared (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/rwlock_test (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc02_simple_tls (stderr) helgrind/tests/tc03_re_excl (stderr) helgrind/tests/tc04_free_lock (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc07_hbl1 (stderr) helgrind/tests/tc08_hbl2 (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc11_XCHG (stderr) helgrind/tests/tc12_rwl_trivial (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) helgrind/tests/tc24_nonzero_sem (stderr) massif/tests/alloc-fns-A (post) massif/tests/alloc-fns-B (post) massif/tests/basic (post) massif/tests/basic2 (post) massif/tests/big-alloc (post) massif/tests/culling1 (stderr) massif/tests/culling2 (stderr) massif/tests/custom_alloc (post) massif/tests/deep-A (post) massif/tests/deep-B (stderr) massif/tests/deep-B (post) massif/tests/deep-C (stderr) massif/tests/deep-C (post) massif/tests/deep-D (post) massif/tests/ignoring (post) massif/tests/insig (post) massif/tests/long-names (post) massif/tests/long-time (post) massif/tests/new-cpp (post) massif/tests/null (post) massif/tests/one (post) massif/tests/overloaded-new (post) massif/tests/peak (post) massif/tests/peak2 (stderr) massif/tests/peak2 (post) massif/tests/realloc (stderr) massif/tests/realloc (post) massif/tests/thresholds_0_0 (post) massif/tests/thresholds_0_10 (post) massif/tests/thresholds_10_0 (post) massif/tests/thresholds_10_10 (post) massif/tests/thresholds_5_0 (post) massif/tests/thresholds_5_10 (post) massif/tests/zero1 (post) massif/tests/zero2 (post) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/long_namespace_xml (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/mismatches (stderr) memcheck/tests/origin1-yes (stderr) memcheck/tests/origin4-many (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_changes (stderr) memcheck/tests/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/x86/bug152022 (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/xor-undef-x86 (stderr) memcheck/tests/xml1 (stderr) none/tests/blockfault (stderr) none/tests/mremap2 (stdout) none/tests/shell (stderr) none/tests/shell_valid1 (stderr) none/tests/shell_valid2 (stderr) none/tests/shell_valid3 (stderr) |
|
From: Tom H. <th...@cy...> - 2008-11-13 04:01:49
|
Nightly build on lloyd ( x86_64, Fedora 7 ) started at 2008-11-13 03:05:06 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 == 464 tests, 20 stderr failures, 0 stdout failures, 0 post failures == exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) memcheck/tests/x86/scalar (stderr) none/tests/blockfault (stderr) |
|
From: Tom H. <th...@cy...> - 2008-11-13 03:52:08
|
Nightly build on trojan ( x86_64, Fedora Core 6 ) started at 2008-11-13 03:25:06 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 == 468 tests, 20 stderr failures, 4 stdout failures, 0 post failures == exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) memcheck/tests/x86/bug133694 (stdout) memcheck/tests/x86/bug133694 (stderr) memcheck/tests/x86/scalar (stderr) none/tests/blockfault (stderr) none/tests/cmdline1 (stdout) none/tests/cmdline2 (stdout) none/tests/mremap2 (stdout) |
|
From: Tom H. <th...@cy...> - 2008-11-13 03:32:52
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2008-11-13 03:00:03 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 == 470 tests, 34 stderr failures, 3 stdout failures, 0 post failures == drd/tests/pth_cancel_locked (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/hackedbz2 (stderr) helgrind/tests/hg01_all_ok (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/rwlock_test (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/amd64/insn_ssse3 (stdout) none/tests/amd64/insn_ssse3 (stderr) none/tests/amd64/ssse3_misaligned (stderr) none/tests/blockfault (stderr) none/tests/fdleak_fcntl (stderr) none/tests/mremap2 (stdout) none/tests/x86/insn_ssse3 (stdout) none/tests/x86/insn_ssse3 (stderr) none/tests/x86/ssse3_misaligned (stderr) |