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
(8) |
2
(11) |
3
(21) |
4
(15) |
5
(10) |
|
6
(7) |
7
(7) |
8
(5) |
9
(7) |
10
(5) |
11
(1) |
12
(21) |
|
13
(8) |
14
(17) |
15
(6) |
16
(10) |
17
(7) |
18
(6) |
19
(15) |
|
20
(12) |
21
(16) |
22
(25) |
23
(14) |
24
(10) |
25
(7) |
26
(6) |
|
27
(34) |
28
(13) |
29
(10) |
30
(8) |
|
|
|
|
From: Robert W. <rj...@du...> - 2004-06-19 18:12:52
|
CVS commit by rjwalsh:
Memory pool support.
A memcheck/tests/mempool.c 1.1 [no copyright]
A memcheck/tests/mempool.stderr.exp 1.1
A memcheck/tests/mempool.vgtest 1.1
M +5 -1 addrcheck/ac_main.c 1.62
M +17 -0 coregrind/docs/coregrind_core.html 1.29
M +37 -0 include/valgrind.h 1.26
M +138 -17 memcheck/mac_malloc_wrappers.c 1.11
M +70 -4 memcheck/mac_needs.c 1.27
M +31 -5 memcheck/mac_shared.h 1.18
M +36 -1 memcheck/mc_clientreqs.c 1.20
M +4 -2 memcheck/tests/Makefile.am 1.36
--- valgrind/addrcheck/ac_main.c #1.61:1.62
@@ -1186,5 +1186,9 @@ Bool SK_(handle_client_request) ( Thread
if (!VG_IS_SKIN_USERREQ('M','C',arg[0])
&& VG_USERREQ__MALLOCLIKE_BLOCK != arg[0]
- && VG_USERREQ__FREELIKE_BLOCK != arg[0])
+ && VG_USERREQ__FREELIKE_BLOCK != arg[0]
+ && VG_USERREQ__CREATE_MEMPOOL != arg[0]
+ && VG_USERREQ__DESTROY_MEMPOOL != arg[0]
+ && VG_USERREQ__MEMPOOL_ALLOC != arg[0]
+ && VG_USERREQ__MEMPOOL_FREE != arg[0])
return False;
--- valgrind/coregrind/docs/coregrind_core.html #1.28:1.29
@@ -985,4 +985,21 @@
<code>memcheck/memcheck.h</code> for information on how to use it.
<p>
+<li><code>VALGRIND_CREATE_MEMPOOL</code>: This is similar to
+ <code>VALGRIND_MALLOCLIKE_BLOCK</code>, but is tailored towards code
+ that uses memory pools. See the comments in <code>valgrind.h</code>
+ for information on how to use it.
+<p>
+<li><code>VALGRIND_DESTROY_MEMPOOL</code>: This should be used in
+ conjunction with <code>VALGRIND_CREATE_MEMPOOL</code> Again, see the
+ comments in <code>valgrind.h</code> for information on how to use it.
+<p>
+<li><code>VALGRIND_MEMPOOL_ALLOC</code>: This should be used in
+ conjunction with <code>VALGRIND_CREATE_MEMPOOL</code> Again, see the
+ comments in <code>valgrind.h</code> for information on how to use it.
+<p>
+<li><code>VALGRIND_MEMPOOL_FREE</code>: This should be used in
+ conjunction with <code>VALGRIND_CREATE_MEMPOOL</code> Again, see the
+ comments in <code>valgrind.h</code> for information on how to use it.
+<p>
<li><code>VALGRIND_NON_SIMD_CALL[0123]</code>: executes a function of 0, 1, 2
or 3 args in the client program on the <i>real</i> CPU, not the virtual
--- valgrind/include/valgrind.h #1.25:1.26
@@ -164,4 +164,9 @@ typedef
VG_USERREQ__MALLOCLIKE_BLOCK = 0x1301,
VG_USERREQ__FREELIKE_BLOCK = 0x1302,
+ /* Memory pool support. */
+ VG_USERREQ__CREATE_MEMPOOL = 0x1303,
+ VG_USERREQ__DESTROY_MEMPOOL = 0x1304,
+ VG_USERREQ__MEMPOOL_ALLOC = 0x1305,
+ VG_USERREQ__MEMPOOL_FREE = 0x1306,
/* Allow printfs to valgrind log. */
@@ -323,3 +328,35 @@ VALGRIND_PRINTF_BACKTRACE(const char *fo
}
+/* Create a memory pool. */
+#define VALGRIND_CREATE_MEMPOOL(pool, rzB, is_zeroed) \
+ {unsigned int _qzz_res; \
+ VALGRIND_MAGIC_SEQUENCE(_qzz_res, 0, \
+ VG_USERREQ__CREATE_MEMPOOL, \
+ pool, rzB, is_zeroed, 0); \
+ }
+
+/* Destroy a memory pool. */
+#define VALGRIND_DESTROY_MEMPOOL(pool) \
+ {unsigned int _qzz_res; \
+ VALGRIND_MAGIC_SEQUENCE(_qzz_res, 0, \
+ VG_USERREQ__DESTROY_MEMPOOL, \
+ pool, 0, 0, 0); \
+ }
+
+/* Associate a piece of memory with a memory pool. */
+#define VALGRIND_MEMPOOL_ALLOC(pool, addr, size) \
+ {unsigned int _qzz_res; \
+ VALGRIND_MAGIC_SEQUENCE(_qzz_res, 0, \
+ VG_USERREQ__MEMPOOL_ALLOC, \
+ pool, addr, size, 0); \
+ }
+
+/* Disassociate a piece of memory from a memory pool. */
+#define VALGRIND_MEMPOOL_FREE(pool, addr) \
+ {unsigned int _qzz_res; \
+ VALGRIND_MAGIC_SEQUENCE(_qzz_res, 0, \
+ VG_USERREQ__MEMPOOL_FREE, \
+ pool, addr, 0, 0); \
+ }
+
#endif /* __VALGRIND_H */
--- valgrind/memcheck/mac_malloc_wrappers.c #1.10:1.11
@@ -63,4 +63,8 @@ Bool (*MAC_(check_noaccess))( Addr a, UI
VgHashTable MAC_(malloc_list) = NULL;
+/* Memory pools. Nb: Addrcheck and Memcheck construct this separately
+ in their respective initialisation functions. */
+VgHashTable MAC_(mempool_list) = NULL;
+
/* Records blocks after freeing. */
static MAC_Chunk* freed_list_start = NULL;
@@ -128,5 +132,6 @@ MAC_Chunk* MAC_(first_matching_freed_MAC
/* Allocate its shadow chunk, put it on the appropriate list. */
static
-void add_MAC_Chunk ( Addr p, UInt size, MAC_AllocKind kind )
+MAC_Chunk* add_MAC_Chunk ( Addr p, UInt size, MAC_AllocKind kind,
+ VgHashTable table)
{
MAC_Chunk* mc;
@@ -147,5 +152,7 @@ void add_MAC_Chunk ( Addr p, UInt size,
}
- VG_(HT_add_node)( MAC_(malloc_list), (VgHashNode*)mc );
+ VG_(HT_add_node)( table, (VgHashNode*)mc );
+
+ return mc;
}
@@ -156,7 +163,10 @@ void add_MAC_Chunk ( Addr p, UInt size,
/* Allocate memory and note change in memory available */
__inline__
-void MAC_(new_block) ( Addr p, UInt size,
- UInt rzB, Bool is_zeroed, MAC_AllocKind kind )
+MAC_Chunk* MAC_(new_block) ( Addr p, UInt size,
+ UInt rzB, Bool is_zeroed, MAC_AllocKind kind,
+ VgHashTable table)
{
+ MAC_Chunk *mc;
+
VGP_PUSHCC(VgpCliMalloc);
@@ -164,5 +174,5 @@ void MAC_(new_block) ( Addr p, UInt size
cmalloc_bs_mallocd += size;
- add_MAC_Chunk( p, size, kind );
+ mc = add_MAC_Chunk( p, size, kind, table );
MAC_(ban_mem_heap)( p-rzB, rzB );
@@ -171,4 +181,6 @@ void MAC_(new_block) ( Addr p, UInt size
VGP_POPCC(VgpCliMalloc);
+
+ return mc;
}
@@ -181,5 +193,6 @@ void* SK_(malloc) ( Int n )
Addr p = (Addr)VG_(cli_malloc)( VG_(clo_alignment), n );
MAC_(new_block) ( p, n, VG_(vg_malloc_redzone_szB),
- /*is_zeroed*/False, MAC_AllocMalloc );
+ /*is_zeroed*/False, MAC_AllocMalloc,
+ MAC_(malloc_list));
return (void*)p;
}
@@ -194,5 +207,6 @@ void* SK_(__builtin_new) ( Int n )
Addr p = (Addr)VG_(cli_malloc)( VG_(clo_alignment), n );
MAC_(new_block) ( p, n, VG_(vg_malloc_redzone_szB),
- /*is_zeroed*/False, MAC_AllocNew );
+ /*is_zeroed*/False, MAC_AllocNew,
+ MAC_(malloc_list));
return (void*)p;
}
@@ -208,5 +222,6 @@ void* SK_(__builtin_vec_new) ( Int n )
Addr p = (Addr)VG_(cli_malloc)( VG_(clo_alignment), n );
MAC_(new_block) ( p, n, VG_(vg_malloc_redzone_szB),
- /*is_zeroed*/False, MAC_AllocNewVec );
+ /*is_zeroed*/False, MAC_AllocNewVec,
+ MAC_(malloc_list));
return (void*)p;
}
@@ -221,5 +236,6 @@ void* SK_(memalign) ( Int align, Int n )
Addr p = (Addr)VG_(cli_malloc)( align, n );
MAC_(new_block) ( p, n, VG_(vg_malloc_redzone_szB),
- /*is_zeroed*/False, MAC_AllocMalloc );
+ /*is_zeroed*/False, MAC_AllocMalloc,
+ MAC_(malloc_list));
return (void*)p;
}
@@ -239,5 +255,6 @@ void* SK_(calloc) ( Int nmemb, Int size1
Addr p = (Addr)VG_(cli_malloc)( VG_(clo_alignment), n );
MAC_(new_block) ( p, n, VG_(vg_malloc_redzone_szB),
- /*is_zeroed*/True, MAC_AllocMalloc );
+ /*is_zeroed*/True, MAC_AllocMalloc,
+ MAC_(malloc_list));
for (i = 0; i < n; i++)
((UChar*)p)[i] = 0;
@@ -262,11 +279,10 @@ void die_and_free_mem ( MAC_Chunk* mc,
*prev_chunks_next_ptr = mc->next;
+ /* Put it out of harm's way for a while, if not from a client request */
+ if (MAC_AllocCustom != mc->allockind) {
/* Record where freed */
mc->where = VG_(get_ExeContext) ( VG_(get_current_or_recent_tid)() );
-
- /* Put it out of harm's way for a while, if not from a client request */
- if (MAC_AllocCustom != mc->allockind)
add_to_freed_queue ( mc );
- else
+ } else
VG_(free) ( mc );
}
@@ -393,5 +408,5 @@ void* SK_(realloc) ( void* p, Int new_si
former succeeds in shorting out the new block, not the
old, in the case when both are on the same list. */
- add_MAC_Chunk ( p_new, new_size, MAC_AllocMalloc );
+ add_MAC_Chunk ( p_new, new_size, MAC_AllocMalloc, MAC_(malloc_list) );
VGP_POPCC(VgpCliMalloc);
@@ -400,4 +415,110 @@ void* SK_(realloc) ( void* p, Int new_si
}
+/* Memory pool stuff. */
+
+void MAC_(create_mempool)(Addr pool, UInt rzB, Bool is_zeroed)
+{
+ MAC_Mempool* mp;
+
+ mp = VG_(malloc)(sizeof(MAC_Mempool));
+ mp->pool = pool;
+ mp->rzB = rzB;
+ mp->is_zeroed = is_zeroed;
+ mp->chunks = VG_(HT_construct)();
+
+ /* Paranoia ... ensure this area is off-limits to the client, so
+ the mp->data field isn't visible to the leak checker. If memory
+ management is working correctly, anything pointer returned by
+ VG_(malloc) should be noaccess as far as the client is
+ concerned. */
+ if (!MAC_(check_noaccess)( (Addr)mp, sizeof(MAC_Mempool), NULL )) {
+ VG_(skin_panic)("MAC_(create_mempool): shadow area is accessible");
+ }
+
+ VG_(HT_add_node)( MAC_(mempool_list), (VgHashNode*)mp );
+
+}
+
+void MAC_(destroy_mempool)(Addr pool)
+{
+ MAC_Mempool* mp;
+ MAC_Mempool** prev_next;
+
+ void nuke_chunk(VgHashNode *node)
+ {
+ MAC_Chunk *mc = (MAC_Chunk *)node;
+
+ /* Note: ban redzones again -- just in case user de-banned them
+ with a client request... */
+ MAC_(ban_mem_heap)(mc->data-mp->rzB, mp->rzB );
+ MAC_(die_mem_heap)(mc->data, mc->size );
+ MAC_(ban_mem_heap)(mc->data+mc->size, mp->rzB );
+ }
+
+ mp = (MAC_Mempool*)VG_(HT_get_node) ( MAC_(mempool_list), (UInt)pool,
+ (VgHashNode***)&prev_next );
+
+ if (mp == NULL) {
+ ThreadId tid = VG_(get_current_or_recent_tid)();
+
+ MAC_(record_illegal_mempool_error) ( tid, pool );
+ return;
+ }
+
+ *prev_next = mp->next;
+ VG_(HT_apply_to_all_nodes)(mp->chunks, nuke_chunk);
+ VG_(HT_destruct)(mp->chunks);
+
+ VG_(free)(mp);
+}
+
+void MAC_(mempool_alloc)(Addr pool, Addr addr, UInt size)
+{
+ MAC_Mempool* mp;
+ MAC_Mempool** prev_next;
+ MAC_Chunk* mc;
+
+ mp = (MAC_Mempool*)VG_(HT_get_node) ( MAC_(mempool_list), (UInt)pool,
+ (VgHashNode***)&prev_next );
+
+ if (mp == NULL) {
+ ThreadId tid = VG_(get_current_or_recent_tid)();
+
+ MAC_(record_illegal_mempool_error) ( tid, pool );
+ return;
+ }
+
+ mc = MAC_(new_block)(addr, size, mp->rzB, mp->is_zeroed, MAC_AllocCustom,
+ mp->chunks);
+}
+
+void MAC_(mempool_free)(Addr pool, Addr addr)
+{
+ MAC_Mempool* mp;
+ MAC_Mempool** prev_pool;
+ MAC_Chunk* mc;
+ MAC_Chunk** prev_chunk;
+ ThreadId tid = VG_(get_current_or_recent_tid)();
+
+
+ mp = (MAC_Mempool*)VG_(HT_get_node)(MAC_(mempool_list), (UInt)pool,
+ (VgHashNode***)&prev_pool);
+
+ if (mp == NULL) {
+ MAC_(record_illegal_mempool_error)(tid, pool);
+ return;
+ }
+
+ mc = (MAC_Chunk*)VG_(HT_get_node)(mp->chunks, (UInt)addr,
+ (VgHashNode***)&prev_chunk);
+
+ if (mc == NULL) {
+ MAC_(record_free_error)(tid, (Addr)addr);
+ return;
+ }
+
+ die_and_free_mem(mc, prev_chunk, mp->rzB);
+}
+
void MAC_(print_malloc_stats) ( void )
{
--- valgrind/memcheck/mac_needs.c #1.26:1.27
@@ -197,4 +197,7 @@ Bool SK_(eq_SkinError) ( VgRes res, Erro
"since it's handled with VG_(unique_error)()!");
+ case IllegalMempoolErr:
+ return True;
+
default:
VG_(printf)("Error:\n unknown error code %d\n",
@@ -224,7 +227,13 @@ void MAC_(pp_AddrInfo) ( Addr a, AddrInf
}
break;
- case Freed: case Mallocd: case UserG: {
+ case Freed: case Mallocd: case UserG: case Mempool: {
UInt delta;
UChar* relative;
+ UChar* kind;
+ if (ai->akind == Mempool) {
+ kind = "mempool";
+ } else {
+ kind = "block";
+ }
if (ai->rwoffset < 0) {
delta = (UInt)(- ai->rwoffset);
@@ -238,6 +247,6 @@ void MAC_(pp_AddrInfo) ( Addr a, AddrInf
}
VG_(message)(Vg_UserMsg,
- " Address 0x%x is %d bytes %s a block of size %d %s",
- a, delta, relative,
+ " Address 0x%x is %d bytes %s a %s of size %d %s",
+ a, delta, relative, kind,
ai->blksize,
ai->akind==Mallocd ? "alloc'd"
@@ -315,4 +324,10 @@ void MAC_(pp_shared_SkinError) ( Error*
}
+ case IllegalMempoolErr:
+ VG_(message)(Vg_UserMsg, "Illegal memory pool address");
+ VG_(pp_ExeContext)( VG_(get_error_where)(err) );
+ MAC_(pp_AddrInfo)(VG_(get_error_address)(err), &err_extra->addrinfo);
+ break;
+
default:
VG_(printf)("Error:\n unknown Memcheck/Addrcheck error code %d\n",
@@ -471,4 +486,14 @@ void MAC_(record_free_error) ( ThreadId
}
+void MAC_(record_illegal_mempool_error) ( ThreadId tid, Addr a )
+{
+ MAC_Error err_extra;
+
+ sk_assert(VG_INVALID_THREADID != tid);
+ MAC_(clear_MAC_Error)( &err_extra );
+ err_extra.addrinfo.akind = Undescribed;
+ VG_(maybe_record_error)( tid, IllegalMempoolErr, a, /*s*/NULL, &err_extra );
+}
+
void MAC_(record_freemismatch_error) ( ThreadId tid, Addr a )
{
@@ -500,4 +525,5 @@ UInt SK_(update_extra)( Error* err )
case UserErr:
case FreeErr:
+ case IllegalMempoolErr:
case FreeMismatchErr: {
MAC_Error* extra = (MAC_Error*)VG_(get_error_extra)(err);
@@ -534,4 +560,5 @@ Bool MAC_(shared_recognised_suppression)
else if (VG_STREQ(name, "Leak")) skind = LeakSupp;
else if (VG_STREQ(name, "Overlap")) skind = OverlapSupp;
+ else if (VG_STREQ(name, "Mempool")) skind = MempoolSupp;
else
return False;
@@ -596,4 +623,7 @@ Bool SK_(error_matches_suppression)(Erro
return (ekind == LeakErr);
+ case MempoolSupp:
+ return (ekind == IllegalMempoolErr);
+
default:
VG_(printf)("Error:\n"
@@ -612,4 +642,5 @@ Char* SK_(get_error_name) ( Error* err )
case UserErr: return NULL; /* Can't suppress User errors */
case FreeMismatchErr: return "Free";
+ case IllegalMempoolErr: return "Mempool";
case FreeErr: return "Free";
case AddrErr:
@@ -785,4 +816,5 @@ void MAC_(common_pre_clo_init)(void)
{
MAC_(malloc_list) = VG_(HT_construct)();
+ MAC_(mempool_list) = VG_(HT_construct)();
init_prof_mem();
}
@@ -845,5 +877,6 @@ Bool MAC_(handle_common_client_requests)
Bool is_zeroed = (Bool)arg[4];
- MAC_(new_block) ( p, sizeB, rzB, is_zeroed, MAC_AllocCustom );
+ MAC_(new_block) ( p, sizeB, rzB, is_zeroed, MAC_AllocCustom,
+ MAC_(malloc_list) );
return True;
}
@@ -860,4 +893,37 @@ Bool MAC_(handle_common_client_requests)
return True;
+ case VG_USERREQ__CREATE_MEMPOOL: {
+ Addr pool = (Addr)arg[1];
+ UInt rzB = arg[2];
+ Bool is_zeroed = (Bool)arg[3];
+
+ MAC_(create_mempool) ( pool, rzB, is_zeroed );
+ return True;
+ }
+
+ case VG_USERREQ__DESTROY_MEMPOOL: {
+ Addr pool = (Addr)arg[1];
+
+ MAC_(destroy_mempool) ( pool );
+ return True;
+ }
+
+ case VG_USERREQ__MEMPOOL_ALLOC: {
+ Addr pool = (Addr)arg[1];
+ Addr addr = (Addr)arg[2];
+ UInt size = arg[3];
+
+ MAC_(mempool_alloc) ( pool, addr, size );
+ return True;
+ }
+
+ case VG_USERREQ__MEMPOOL_FREE: {
+ Addr pool = (Addr)arg[1];
+ Addr addr = (Addr)arg[2];
+
+ MAC_(mempool_free) ( pool, addr );
+ return True;
+ }
+
default:
return False;
--- valgrind/memcheck/mac_shared.h #1.17:1.18
@@ -52,5 +52,6 @@ typedef
Unknown, /* classification yielded nothing useful */
Freed, Mallocd,
- UserG /* in a user-defined block; Addrcheck & Memcheck only */
+ UserG, /* in a user-defined block; Addrcheck & Memcheck only */
+ Mempool, /* in a mempool; Addrcheck & Memcheck only */
}
AddrKind;
@@ -89,5 +90,7 @@ typedef
OverlapSupp,
/* Something to be suppressed in a leak check. */
- LeakSupp
+ LeakSupp,
+ /* Memory pool suppression. */
+ MempoolSupp,
}
MAC_SuppKind;
@@ -101,5 +104,6 @@ typedef
FreeErr, FreeMismatchErr,
OverlapErr,
- LeakErr
+ LeakErr,
+ IllegalMempoolErr,
}
MAC_ErrorKind;
@@ -154,4 +158,16 @@ typedef
MAC_Chunk;
+/* Memory pool. Nb: first two fields must match core's VgHashNode. */
+typedef
+ struct _MAC_Mempool {
+ struct _MAC_Mempool* next;
+ Addr pool; /* pool identifier */
+ UInt rzB; /* pool red-zone size */
+ Bool is_zeroed; /* allocations from this pool are zeroed */
+ VgHashTable chunks; /* chunks associated with this pool */
+ }
+ MAC_Mempool;
+
+
/*------------------------------------------------------------*/
/*--- Profiling of tools and memory events ---*/
@@ -271,4 +287,7 @@ extern void MAC_(print_common_debug_usag
extern VgHashTable MAC_(malloc_list);
+/* For tracking memory pools. */
+extern VgHashTable MAC_(mempool_list);
+
/* Function pointers for the two tools to track interesting events. */
extern void (*MAC_(new_mem_heap)) ( Addr a, UInt len, Bool is_inited );
@@ -299,8 +318,14 @@ extern void MAC_(clear_MAC_Error)
extern Bool MAC_(shared_recognised_suppression) ( Char* name, Supp* su );
-extern void MAC_(new_block) ( Addr p, UInt size, UInt rzB,
- Bool is_zeroed, MAC_AllocKind kind );
+extern MAC_Chunk* MAC_(new_block) ( Addr p, UInt size, UInt rzB,
+ Bool is_zeroed, MAC_AllocKind kind,
+ VgHashTable table);
extern void MAC_(handle_free) ( Addr p, UInt rzB, MAC_AllocKind kind );
+extern void MAC_(create_mempool)(Addr pool, UInt rzB, Bool is_zeroed);
+extern void MAC_(destroy_mempool)(Addr pool);
+extern void MAC_(mempool_alloc)(Addr pool, Addr addr, UInt size);
+extern void MAC_(mempool_free)(Addr pool, Addr addr);
+
extern void MAC_(record_address_error) ( ThreadId tid, Addr a,
Int size, Bool isWrite );
@@ -313,4 +338,5 @@ extern void MAC_(record_free_error)
extern void MAC_(record_freemismatch_error)( ThreadId tid, Addr a );
extern void MAC_(record_overlap_error) ( Char* function, OverlapExtra* oe );
+extern void MAC_(record_illegal_mempool_error) ( ThreadId tid, Addr pool );
extern void MAC_(pp_shared_SkinError) ( Error* err);
--- valgrind/memcheck/mc_clientreqs.c #1.19:1.20
@@ -135,4 +135,35 @@ Bool MC_(client_perm_maybe_describe)( Ad
continue;
if (VG_(addr_is_in_block)(a, vg_cgbs[i].start, vg_cgbs[i].size)) {
+ MAC_Mempool **d, *mp;
+
+ /* OK - maybe it's a mempool, too? */
+ mp = (MAC_Mempool*)VG_(HT_get_node)(MAC_(mempool_list),
+ (UInt)vg_cgbs[i].start,
+ (VgHashNode***)&d);
+ if(mp != NULL) {
+ if(mp->chunks != NULL) {
+ MAC_Chunk *mc;
+
+ Bool find_addr(VgHashNode* sh_ch)
+ {
+ MAC_Chunk *m = (MAC_Chunk*)sh_ch;
+ return VG_(addr_is_in_block)(a, m->data, m->size);
+ }
+
+ mc = (MAC_Chunk*)VG_(HT_first_match)(mp->chunks, find_addr);
+ if(mc != NULL) {
+ ai->akind = UserG;
+ ai->blksize = mc->size;
+ ai->rwoffset = (Int)(a) - (Int)mc->data;
+ ai->lastchange = mc->where;
+ return True;
+ }
+ }
+ ai->akind = Mempool;
+ ai->blksize = vg_cgbs[i].size;
+ ai->rwoffset = (Int)(a) - (Int)(vg_cgbs[i].start);
+ ai->lastchange = vg_cgbs[i].where;
+ return True;
+ }
ai->akind = UserG;
ai->blksize = vg_cgbs[i].size;
@@ -153,5 +184,9 @@ Bool SK_(handle_client_request) ( Thread
if (!VG_IS_SKIN_USERREQ('M','C',arg[0])
&& VG_USERREQ__MALLOCLIKE_BLOCK != arg[0]
- && VG_USERREQ__FREELIKE_BLOCK != arg[0])
+ && VG_USERREQ__FREELIKE_BLOCK != arg[0]
+ && VG_USERREQ__CREATE_MEMPOOL != arg[0]
+ && VG_USERREQ__DESTROY_MEMPOOL != arg[0]
+ && VG_USERREQ__MEMPOOL_ALLOC != arg[0]
+ && VG_USERREQ__MEMPOOL_FREE != arg[0])
return False;
--- valgrind/memcheck/tests/Makefile.am #1.35:1.36
@@ -44,4 +44,5 @@
memalign_test.stderr.exp memalign_test.vgtest \
memcmptest.stderr.exp memcmptest.stdout.exp memcmptest.vgtest \
+ mempool.stderr.exp mempool.vgtest \
mismatches.stderr.exp mismatches.vgtest \
mmaptest.stderr.exp mmaptest.vgtest \
@@ -79,6 +80,6 @@
fpeflags fprw fwrite inits inline \
malloc1 malloc2 malloc3 manuel1 manuel2 manuel3 \
- memalign_test memcmptest mmaptest nanoleak new_nothrow null_socket \
- overlap pushfpopf \
+ memalign_test memcmptest mempool mmaptest nanoleak new_nothrow \
+ null_socket overlap pushfpopf \
realloc1 realloc2 realloc3 sigaltstack signal2 supp1 supp2 suppfree \
trivialleak tronical weirdioctl \
@@ -118,4 +119,5 @@
memalign_test_SOURCES = memalign_test.c
memcmptest_SOURCES = memcmptest.c
+mempool_SOURCES = mempool.c
nanoleak_SOURCES = nanoleak.c
null_socket_SOURCES = null_socket.c
|
|
From: Robert W. <rj...@du...> - 2004-06-19 17:59:33
|
> Argh, I give up; I can't find a sensible way to factor out the similar > shadow chunk bits in the presence of custom allocators and realloc(). If > realloc() didn't exist, life would be much easier... I'm happy for you t= o > commit. OK - I'm going to run a final set of tests, and if things are OK, I'll check it in in the next hour or so. Regards, Robert. --=20 Robert Walsh Amalgamated Durables, Inc. - "We don't make the things you buy." Email: rj...@du... |
|
From: Nicholas N. <nj...@ca...> - 2004-06-19 15:56:06
|
On Sat, 19 Jun 2004, Nicholas Nethercote wrote: > Can you just wait a day or two while I look again to see if it's possible > to streamline the malloc replacement code used by tools? If I don't find > anything useful, I'll be happy with your commit. Argh, I give up; I can't find a sensible way to factor out the similar shadow chunk bits in the presence of custom allocators and realloc(). If realloc() didn't exist, life would be much easier... I'm happy for you to commit. N |
|
From: Tom H. <th...@cy...> - 2004-06-19 13:02:46
|
CVS commit by thughes:
Don't try and validate the contents of the environment passed to
the execve system call if the envp pointer is null as it causes
valgrind to die with a segmentation fault.
CCMAIL: 835...@bu...
A none/tests/execve.c 1.1 [no copyright]
A none/tests/execve.stderr.exp 1.1
A none/tests/execve.stdout.exp 1.1
A none/tests/execve.vgtest 1.1
M +2 -1 coregrind/vg_syscalls.c 1.101
M +4 -2 none/tests/Makefile.am 1.38
--- valgrind/coregrind/vg_syscalls.c #1.100:1.101
@@ -1839,4 +1839,5 @@ PRE(execve)
SYSCALL_TRACK( pre_mem_read_asciiz, tid, "execve(filename)", arg1 );
pre_argv_envp( arg2, tid, "execve(argv)", "execve(argv[i])" );
+ if (arg3 != (UInt)NULL)
pre_argv_envp( arg3, tid, "execve(envp)", "execve(envp[i])" );
--- valgrind/none/tests/Makefile.am #1.37:1.38
@@ -28,4 +28,5 @@
discard.vgtest \
exec-sigmask.vgtest exec-sigmask.stdout.exp exec-sigmask.stderr.exp \
+ execve.vgtext execve.stdout.exp execve.stderr.exp \
floored.stderr.exp floored.stdout.exp \
floored.vgtest \
@@ -67,6 +68,6 @@
check_PROGRAMS = \
args badseg bitfield1 bt_everything bt_literal closeall coolo_strlen \
- cpuid dastest discard exec-sigmask floored fork fpu_lazy_eflags \
- fucomip $(INSN_TESTS) \
+ cpuid dastest discard exec-sigmask execve floored fork \
+ fpu_lazy_eflags fucomip $(INSN_TESTS) \
int munmap_exe map_unmap mremap rcl_assert \
rcrl readline1 resolv seg_override sem semlimit sha1_test \
@@ -90,4 +91,5 @@
discard_SOURCES = discard.c
exec_sigmask_SOURCES = exec-sigmask.c
+execve = execve.c
fork_SOURCES = fork.c
floored_SOURCES = floored.c
|
|
From: Tom H. <th...@cy...> - 2004-06-19 12:41:11
|
CVS commit by thughes:
Add support for the FIGETBSZ and FIBMAP ioctls based on a patch
from Joseph D Wagner <th...@jo...>.
CCMAIL: 830...@bu...
M +25 -7 coregrind/vg_syscalls.c 1.100
M +1 -0 coregrind/vg_unsafe.h 1.30
M +2 -2 include/vg_kerneliface.h 1.18
--- valgrind/coregrind/vg_syscalls.c #1.99:1.100
@@ -1735,10 +1735,10 @@ PRE(fstatfs)
MAYBE_PRINTF("fstatfs ( %d, %p )\n",arg1,arg2);
SYSCALL_TRACK( pre_mem_write, tid, "stat(buf)",
- arg2, sizeof(struct statfs) );
+ arg2, sizeof(struct vki_statfs) );
}
POST(fstatfs)
{
- VG_TRACK( post_mem_write, arg2, sizeof(struct statfs) );
+ VG_TRACK( post_mem_write, arg2, sizeof(struct vki_statfs) );
}
@@ -3382,4 +3382,13 @@ PRE(ioctl)
break;
+ case FIGETBSZ:
+ SYSCALL_TRACK( pre_mem_write,tid, "ioctl(FIGETBSZ)", arg3,
+ sizeof(unsigned long));
+ break;
+ case FIBMAP:
+ SYSCALL_TRACK( pre_mem_read,tid, "ioctl(FIBMAP)", arg3,
+ sizeof(unsigned long));
+ break;
+
#ifdef HAVE_LINUX_FB_H
case FBIOGET_VSCREENINFO: /* 0x4600 */
@@ -3814,4 +3823,13 @@ POST(ioctl)
break;
+ case FIGETBSZ:
+ if (res == 0)
+ VG_TRACK( post_mem_write,arg3, sizeof(unsigned long));
+ break;
+ case FIBMAP:
+ if (res == 0)
+ VG_TRACK( post_mem_write,arg3, sizeof(unsigned long));
+ break;
+
#ifdef HAVE_LINUX_FB_H
case FBIOGET_VSCREENINFO: //0x4600
@@ -4915,10 +4933,10 @@ PRE(statfs)
SYSCALL_TRACK( pre_mem_read_asciiz, tid, "statfs(path)", arg1 );
SYSCALL_TRACK( pre_mem_write, tid, "statfs(buf)",
- arg2, sizeof(struct statfs) );
+ arg2, sizeof(struct vki_statfs) );
}
POST(statfs)
{
- VG_TRACK( post_mem_write, arg2, sizeof(struct statfs) );
+ VG_TRACK( post_mem_write, arg2, sizeof(struct vki_statfs) );
}
@@ -4929,10 +4947,10 @@ PRE(statfs64)
SYSCALL_TRACK( pre_mem_read_asciiz, tid, "statfs64(path)", arg1 );
SYSCALL_TRACK( pre_mem_write, tid, "statfs64(buf)",
- arg2, sizeof(struct statfs64) );
+ arg2, sizeof(struct vki_statfs64) );
}
POST(statfs64)
{
- VG_TRACK( post_mem_write, arg2, sizeof(struct statfs64) );
+ VG_TRACK( post_mem_write, arg2, sizeof(struct vki_statfs64) );
}
--- valgrind/coregrind/vg_unsafe.h #1.29:1.30
@@ -65,4 +65,5 @@
#include <linux/timex.h> /* for adjtimex */
#include <linux/hdreg.h> /* for hard drive ioctls */
+#include <linux/fs.h> /* for filing system ioctls */
#ifdef HAVE_LINUX_FB_H
#include <linux/fb.h> /* for fb_* structs */
--- valgrind/include/vg_kerneliface.h #1.17:1.18
@@ -727,5 +727,5 @@ struct vki_sockaddr {
*/
-struct statfs {
+struct vki_statfs {
unsigned int f_type;
unsigned int f_bsize;
@@ -741,5 +741,5 @@ struct statfs {
};
-struct statfs64 {
+struct vki_statfs64 {
unsigned int f_type;
unsigned int f_bsize;
|
|
From: Tom H. <th...@cy...> - 2004-06-19 12:12:12
|
CVS commit by thughes:
Add support for the HDIO_GET_IDENTITY ioctl based on patch
from Jim McDonald <ji...@mc...>.
CCMAIL: 833...@bu...
M +12 -0 vg_syscalls.c 1.99
M +1 -0 vg_unsafe.h 1.29
--- valgrind/coregrind/vg_syscalls.c #1.98:1.99
@@ -3326,4 +3326,10 @@ PRE(ioctl)
# endif /* BLKGETSIZE */
+ /* Hard disks */
+ case HDIO_GET_IDENTITY: /* 0x030d */
+ SYSCALL_TRACK( pre_mem_write,tid, "ioctl(HDIO_GET_IDENTITY)", arg3,
+ sizeof(struct hd_driveid) );
+ break;
+
/* CD ROM stuff (??) */
case CDROM_GET_MCN:
@@ -3781,4 +3787,10 @@ POST(ioctl)
# endif /* BLKGETSIZE */
+ /* Hard disks */
+ case HDIO_GET_IDENTITY: /* 0x030d */
+ if (res == 0)
+ VG_TRACK( post_mem_write,arg3, sizeof(struct hd_driveid));
+ break;
+
/* CD ROM stuff (??) */
case CDROMSUBCHNL:
--- valgrind/coregrind/vg_unsafe.h #1.28:1.29
@@ -64,4 +64,5 @@
#include <signal.h> /* for siginfo_t */
#include <linux/timex.h> /* for adjtimex */
+#include <linux/hdreg.h> /* for hard drive ioctls */
#ifdef HAVE_LINUX_FB_H
#include <linux/fb.h> /* for fb_* structs */
|
|
From: Tom H. <th...@cy...> - 2004-06-19 12:03:34
|
In message <Pin...@or...>
Nicholas Nethercote <nj...@ca...> wrote:
> On Sat, 19 Jun 2004, Tom Hughes wrote:
>
> > > > configure: WARNING: linux/mii.h: present but cannot be compiled
> >
> > That's probably because it uses the u16 type but doesn't define it
> > or pull in any header that does. In fact there aren't really any
> > sensible headers to pull in that do define it.
>
> So mii.h is just naturally broken?
Pretty much, yes.
Tom
--
Tom Hughes (th...@cy...)
Software Engineer, Cyberscience Corporation
http://www.cyberscience.com/
|
|
From: Nicholas N. <nj...@ca...> - 2004-06-19 10:31:38
|
On Fri, 18 Jun 2004, Robert Walsh wrote: > > Also, it looks like Addrcheck and Memcheck handle pools, but Massif and > > Helgrind don't. The amount of code that must be written for any tool to > > do malloc interception is already unfortunately high (I've tried several > > times to reduce it, but have never got anywhere) and it looks like > > supporting mempools requires a decent amount of pretty boilerplate-ish > > code to be added (viz that in mac_malloc_wrappers.c)... hmm. > > Hmm. I hadn't really paid much attention to anything other than > Addrcheck and Memcheck, I have to admit. The mempool stuff should not > effect them negatively if it's not handled in there, so that's something > else that could be added in later, too, if needed. > > For the moment, I'd just like to get the current mempool implementation > in place, so that: 1) other people can play with it and suggest > improvements; 2) someone else might get to finish off the missing bits > for the other skins... ;-) Can you just wait a day or two while I look again to see if it's possible to streamline the malloc replacement code used by tools? If I don't find anything useful, I'll be happy with your commit. N |
|
From: Nicholas N. <nj...@ca...> - 2004-06-19 10:29:14
|
On Sat, 19 Jun 2004, Tom Hughes wrote: > > > configure: WARNING: linux/mii.h: present but cannot be compiled > > That's probably because it uses the u16 type but doesn't define it > or pull in any header that does. In fact there aren't really any > sensible headers to pull in that do define it. So mii.h is just naturally broken? N |
|
From: Tom H. <th...@cy...> - 2004-06-19 10:07:43
|
In message <Pin...@or...>
Nicholas Nethercote <nj...@ca...> wrote:
> On Sat, 19 Jun 2004, Cron Daemon wrote:
>
> > checking linux/mii.h usability... no
> > checking linux/mii.h presence... yes
> > configure: WARNING: linux/mii.h: present but cannot be compiled
> > configure: WARNING: linux/mii.h: check for missing prerequisite headers?
> > configure: WARNING: linux/mii.h: proceeding with the preprocessor's result
> > configure: WARNING: ## ------------------------------------ ##
> > configure: WARNING: ## Report this to bug...@gn.... ##
> > configure: WARNING: ## ------------------------------------ ##
>
> Does anyone else get the above warning when running ./configure?
> Everything still seems to work ok, though.
That's probably because it uses the u16 type but doesn't define it
or pull in any header that does. In fact there aren't really any
sensible headers to pull in that do define it.
That's why I made configure also check for u16 so that vg_unsafe.h
can define it before including linux/mii.h if necessary ;-)
Tom
--
Tom Hughes (th...@cy...)
Software Engineer, Cyberscience Corporation
http://www.cyberscience.com/
|
|
From: Nicholas N. <nj...@ca...> - 2004-06-19 09:11:14
|
On Sat, 19 Jun 2004, Cron Daemon wrote: > checking linux/mii.h usability... no > checking linux/mii.h presence... yes > configure: WARNING: linux/mii.h: present but cannot be compiled > configure: WARNING: linux/mii.h: check for missing prerequisite headers? > configure: WARNING: linux/mii.h: proceeding with the preprocessor's result > configure: WARNING: ## ------------------------------------ ## > configure: WARNING: ## Report this to bug...@gn.... ## > configure: WARNING: ## ------------------------------------ ## Does anyone else get the above warning when running ./configure? Everything still seems to work ok, though. N |
|
From: Tom H. <to...@co...> - 2004-06-19 02:24:56
|
Nightly build on dunsmere ( Fedora Core 2 ) started at 2004-06-19 03:20:02 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow shorts: valgrind ./shorts smc1: valgrind ./smc1 susphello: valgrind ./susphello syscall-restart1: valgrind ./syscall-restart1 syscall-restart2: valgrind ./syscall-restart2 system: valgrind ./system yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 166 tests, 7 stderr failures, 1 stdout failure ================= corecheck/tests/fdleak_cmsg (stderr) corecheck/tests/fdleak_fcntl (stderr) corecheck/tests/fdleak_ipv4 (stderr) corecheck/tests/fdleak_socketpair (stderr) memcheck/tests/buflen_check (stderr) memcheck/tests/execve (stderr) memcheck/tests/writev (stderr) none/tests/exec-sigmask (stdout) make: *** [regtest] Error 1 |
|
From: Tom H. <th...@cy...> - 2004-06-19 02:19:16
|
Nightly build on audi ( Red Hat 9 ) started at 2004-06-19 03:15:03 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow shortpush: valgrind ./shortpush shorts: valgrind ./shorts smc1: valgrind ./smc1 susphello: valgrind ./susphello syscall-restart1: valgrind ./syscall-restart1 syscall-restart2: valgrind ./syscall-restart2 system: valgrind ./system yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 166 tests, 7 stderr failures, 0 stdout failures ================= corecheck/tests/fdleak_cmsg (stderr) corecheck/tests/fdleak_fcntl (stderr) corecheck/tests/fdleak_ipv4 (stderr) corecheck/tests/fdleak_socketpair (stderr) memcheck/tests/buflen_check (stderr) memcheck/tests/execve (stderr) memcheck/tests/writev (stderr) make: *** [regtest] Error 1 |
|
From: Tom H. <th...@cy...> - 2004-06-19 02:08:17
|
Nightly build on alvis ( Red Hat 7.3 ) started at 2004-06-19 03:05:02 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow smc1: valgrind ./smc1 susphello: valgrind ./susphello syscall-restart1: valgrind ./syscall-restart1 syscall-restart2: valgrind ./syscall-restart2 system: valgrind ./system yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 166 tests, 8 stderr failures, 1 stdout failure ================= helgrind/tests/deadlock (stderr) helgrind/tests/race (stderr) helgrind/tests/race2 (stderr) memcheck/tests/badfree-2trace (stderr) memcheck/tests/badjump (stderr) memcheck/tests/brk (stderr) memcheck/tests/error_counts (stdout) memcheck/tests/new_nothrow (stderr) memcheck/tests/writev (stderr) make: *** [regtest] Error 1 |
|
From: Tom H. <th...@cy...> - 2004-06-19 02:06:43
|
Nightly build on standard ( Red Hat 7.2 ) started at 2004-06-19 03:00:02 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow readline1: valgrind ./readline1 resolv: valgrind ./resolv seg_override: valgrind ./seg_override sem: valgrind ./sem semlimit: valgrind ./semlimit sha1_test: valgrind ./sha1_test shortpush: valgrind ./shortpush shorts: valgrind ./shorts smc1: valgrind ./smc1 susphello: valgrind ./susphello syscall-restart1: valgrind ./syscall-restart1 syscall-restart2: valgrind ./syscall-restart2 system: valgrind ./system yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 166 tests, 1 stderr failure, 0 stdout failures ================= memcheck/tests/badfree-2trace (stderr) make: *** [regtest] Error 1 |