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
|
2
(1) |
3
(1) |
4
(5) |
5
|
6
(1) |
7
|
|
8
(10) |
9
(7) |
10
(2) |
11
(10) |
12
(1) |
13
|
14
(1) |
|
15
(3) |
16
|
17
|
18
|
19
|
20
|
21
(5) |
|
22
(2) |
23
(2) |
24
(4) |
25
(2) |
26
|
27
(7) |
28
(4) |
|
29
(5) |
30
(5) |
31
(1) |
|
|
|
|
|
From: Julian S. <se...@so...> - 2023-01-04 15:34:55
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=d99a6f70e2e8bce1eaef0038f3b36e627255d68f commit d99a6f70e2e8bce1eaef0038f3b36e627255d68f Author: Julian Seward <js...@ac...> Date: Wed Jan 4 16:32:03 2023 +0100 Memcheck: handle origin data for 8-/16-bit shadow stores a bit more accurately. With origin tracking enabled, 8- and 16-bit stores could sometimes lose origin info unnecessarily. This patch removes this avoidable lossage. (Since MC only stores 1 origin value for each 32-bit word of address space, there is still unavoidable lossage of origins in some cases; this patch does not help in those cases since it's a fundamental design limitation.) Diff: --- memcheck/mc_main.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/memcheck/mc_main.c b/memcheck/mc_main.c index fe15d23321..8efd7cb40c 100644 --- a/memcheck/mc_main.c +++ b/memcheck/mc_main.c @@ -79,6 +79,10 @@ static void ocache_sarp_Clear_Origins ( Addr, UWord ); /* fwds */ paths */ #define OC_ENABLE_ASSERTIONS 0 +/* Change this to 1 for experimental, higher precision origin tracking + 8- and 16-bit store handling. */ +#define OC_PRECISION_STORE 1 + /*------------------------------------------------------------*/ /*--- Comments on the origin tracking implementation ---*/ @@ -7655,12 +7659,31 @@ void VG_REGPARM(2) MC_(helperc_b_store1)( Addr a, UWord d32 ) { line = find_OCacheLine( a ); +#if OC_PRECISION_STORE + if (LIKELY(d32 == 0)) { + // The byte is defined. Just mark it as so in the descr and leave the w32 + // unchanged. This may make the descr become zero, so the line no longer + // contains useful info, but that's OK. No loss of information. + line->u.main.descr[lineoff] &= ~(1 << byteoff); + } else if (d32 == line->u.main.w32[lineoff]) { + // At least one of the four bytes in the w32 is undefined with the same + // origin. Just extend the mask. No loss of information. + line->u.main.descr[lineoff] |= (1 << byteoff); + } else { + // Here, we have a conflict: at least one byte in the group is undefined + // but with some other origin. We can't represent both origins, so we + // forget about the previous origin and install this one instead. + line->u.main.descr[lineoff] = (1 << byteoff); + line->u.main.w32[lineoff] = d32; + } +#else if (d32 == 0) { line->u.main.descr[lineoff] &= ~(1 << byteoff); } else { line->u.main.descr[lineoff] |= (1 << byteoff); line->u.main.w32[lineoff] = d32; } +#endif } void VG_REGPARM(2) MC_(helperc_b_store2)( Addr a, UWord d32 ) { @@ -7683,12 +7706,25 @@ void VG_REGPARM(2) MC_(helperc_b_store2)( Addr a, UWord d32 ) { line = find_OCacheLine( a ); +#if OC_PRECISION_STORE + // Same logic as in the store1 case above. + if (LIKELY(d32 == 0)) { + line->u.main.descr[lineoff] &= ~(3 << byteoff); + } else if (d32 == line->u.main.w32[lineoff]) { + line->u.main.descr[lineoff] |= (3 << byteoff); + line->u.main.w32[lineoff] = d32; + } else { + line->u.main.descr[lineoff] = (3 << byteoff); + line->u.main.w32[lineoff] = d32; + } +#else if (d32 == 0) { line->u.main.descr[lineoff] &= ~(3 << byteoff); } else { line->u.main.descr[lineoff] |= (3 << byteoff); line->u.main.w32[lineoff] = d32; } +#endif } void VG_REGPARM(2) MC_(helperc_b_store4)( Addr a, UWord d32 ) { |
|
From: Julian S. <se...@so...> - 2023-01-04 15:12:14
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=fa3a9cc43c22593c70796a99aff33bb9436ad448 commit fa3a9cc43c22593c70796a99aff33bb9436ad448 Author: Julian Seward <js...@ac...> Date: Wed Jan 4 15:38:12 2023 +0100 DHAT: increase the size of the cache for `find_Block_containing` from 2 to 3. In the hope of making DHAT a bit faster. Diff: --- dhat/dh_main.c | 52 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/dhat/dh_main.c b/dhat/dh_main.c index 69e6fb6d01..5ae3fd29ac 100644 --- a/dhat/dh_main.c +++ b/dhat/dh_main.c @@ -151,11 +151,14 @@ static Word interval_tree_Cmp ( UWord k1, UWord k2 ) return 0; } -// 2-entry cache for find_Block_containing +// 3-entry cache for find_Block_containing static Block* fbc_cache0 = NULL; static Block* fbc_cache1 = NULL; +static Block* fbc_cache2 = NULL; -static UWord stats__n_fBc_cached = 0; +static UWord stats__n_fBc_cached0 = 0; +static UWord stats__n_fBc_cached1 = 0; +static UWord stats__n_fBc_cached2 = 0; static UWord stats__n_fBc_uncached = 0; static UWord stats__n_fBc_notfound = 0; @@ -167,19 +170,30 @@ static Block* find_Block_containing ( Addr a ) && fbc_cache0->payload <= a && a < fbc_cache0->payload + fbc_cache0->req_szB)) { // found at 0 - stats__n_fBc_cached++; + stats__n_fBc_cached0++; return fbc_cache0; } if (LIKELY(fbc_cache1 && fbc_cache1->payload <= a && a < fbc_cache1->payload + fbc_cache1->req_szB)) { // found at 1; swap 0 and 1 - Block* tmp = fbc_cache0; - fbc_cache0 = fbc_cache1; + Block* tmp = fbc_cache1; + fbc_cache1 = fbc_cache0; + fbc_cache0 = tmp; + stats__n_fBc_cached1++; + return tmp; + } + if (LIKELY(fbc_cache2 + && fbc_cache2->payload <= a + && a < fbc_cache2->payload + fbc_cache2->req_szB)) { + // found at 2; swap 1 and 2 + Block* tmp = fbc_cache2; + fbc_cache2 = fbc_cache1; fbc_cache1 = tmp; - stats__n_fBc_cached++; - return fbc_cache0; + stats__n_fBc_cached2++; + return tmp; } + Block fake; fake.payload = a; fake.req_szB = 1; @@ -196,6 +210,7 @@ static Block* find_Block_containing ( Addr a ) Block* res = (Block*)foundkey; tl_assert(res != &fake); // put at the top position + fbc_cache2 = fbc_cache1; fbc_cache1 = fbc_cache0; fbc_cache0 = res; stats__n_fBc_uncached++; @@ -214,7 +229,7 @@ static void delete_Block_starting_at ( Addr a ) Bool found = VG_(delFromFM)( interval_tree, NULL, NULL, (Addr)&fake ); tl_assert(found); - fbc_cache0 = fbc_cache1 = NULL; + fbc_cache0 = fbc_cache1 = fbc_cache2 = NULL; } //------------------------------------------------------------// @@ -600,7 +615,7 @@ void* new_block ( ThreadId tid, void* p, SizeT req_szB, SizeT req_alignB, Bool present = VG_(addToFM)( interval_tree, (UWord)bk, (UWord)0/*no val*/); tl_assert(!present); - fbc_cache0 = fbc_cache1 = NULL; + fbc_cache0 = fbc_cache1 = fbc_cache2 = NULL; intro_Block(bk); @@ -727,7 +742,7 @@ void* renew_block ( ThreadId tid, void* p_old, SizeT new_req_szB ) Bool present = VG_(addToFM)( interval_tree, (UWord)bk, (UWord)0/*no val*/); tl_assert(!present); - fbc_cache0 = fbc_cache1 = NULL; + fbc_cache0 = fbc_cache1 = fbc_cache2 = NULL; } return p_new; @@ -1230,6 +1245,7 @@ static Bool dh_handle_client_request(ThreadId tid, UWord* arg, UWord* ret) } default: + if (0) VG_(message)( Vg_UserMsg, "Warning: unknown DHAT client request code %llx\n", @@ -1609,11 +1625,17 @@ static void dh_fini(Int exit_status) // Stats. if (VG_(clo_stats)) { VG_(dmsg)(" dhat: find_Block_containing:\n"); - VG_(dmsg)(" found: %'lu (%'lu cached + %'lu uncached)\n", - stats__n_fBc_cached + stats__n_fBc_uncached, - stats__n_fBc_cached, + VG_(dmsg)(" dhat: found: %'lu\n", + stats__n_fBc_cached0 + stats__n_fBc_cached1 + + stats__n_fBc_cached2 + + stats__n_fBc_uncached); + VG_(dmsg)(" dhat: at cache0 %'14lu at cache1 %'14lu\n", + stats__n_fBc_cached0, + stats__n_fBc_cached1); + VG_(dmsg)(" dhat: at cache2 %'14lu uncached %'14lu\n", + stats__n_fBc_cached2, stats__n_fBc_uncached); - VG_(dmsg)(" notfound: %'lu\n", stats__n_fBc_notfound); + VG_(dmsg)(" dhat: notfound: %'lu\n", stats__n_fBc_notfound); VG_(dmsg)("\n"); } } @@ -1777,6 +1799,7 @@ static void dh_pre_clo_init(void) VG_(details_copyright_author)( "Copyright (C) 2010-2018, and GNU GPL'd, by Mozilla Foundation"); VG_(details_bug_reports_to) (VG_BUGS_TO); + VG_(details_avg_translation_sizeB) ( 600 ); // Basic functions. VG_(basic_tool_funcs) (dh_post_clo_init, @@ -1811,6 +1834,7 @@ static void dh_pre_clo_init(void) tl_assert(!interval_tree); tl_assert(!fbc_cache0); tl_assert(!fbc_cache1); + tl_assert(!fbc_cache2); interval_tree = VG_(newFM)( VG_(malloc), "dh.interval_tree.1", |
|
From: Paul F. <pa...@so...> - 2023-01-03 20:29:31
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=74e20007467b930fb14264519f74a45179b5f740 commit 74e20007467b930fb14264519f74a45179b5f740 Author: Paul Floyd <pj...@wa...> Date: Tue Jan 3 21:28:42 2023 +0100 Bug 327548 - false positive while destroying mutex Diff: --- .gitignore | 1 + NEWS | 1 + helgrind/hg_intercepts.c | 4 +++ helgrind/tests/Makefile.am | 2 ++ helgrind/tests/bug327548.c | 50 +++++++++++++++++++++++++++++++++++++ helgrind/tests/bug327548.stderr.exp | 0 helgrind/tests/bug327548.vgtest | 2 ++ 7 files changed, 60 insertions(+) diff --git a/.gitignore b/.gitignore index 20282b8a20..4277dd2a6f 100644 --- a/.gitignore +++ b/.gitignore @@ -653,6 +653,7 @@ /helgrind/tests/bar_bad /helgrind/tests/bar_trivial /helgrind/tests/bug322621 +/helgrind/tests/bug327548 /helgrind/tests/bug392331 /helgrind/tests/cond_init_destroy /helgrind/tests/cond_timedwait_invalid diff --git a/NEWS b/NEWS index f73541187a..27fe0df194 100644 --- a/NEWS +++ b/NEWS @@ -40,6 +40,7 @@ than mailing the developers (or mailing lists) directly -- bugs that are not entered into bugzilla tend to get forgotten about or ignored. 170510 Don't warn about ioctl of size 0 without direction hint +327548 false positive while destroying mutex 351857 confusing error message about valid command line option 392331 Spurious lock not held error from inside pthread_cond_timedwait 400793 pthread_rwlock_timedwrlock false positive diff --git a/helgrind/hg_intercepts.c b/helgrind/hg_intercepts.c index 5a83996e36..8c98e4ee03 100644 --- a/helgrind/hg_intercepts.c +++ b/helgrind/hg_intercepts.c @@ -879,7 +879,9 @@ static int mutex_destroy_WRK(pthread_mutex_t *mutex) if (mutex != NULL) { static const pthread_mutex_t mutex_init = PTHREAD_MUTEX_INITIALIZER; + VALGRIND_HG_DISABLE_CHECKING(mutex, sizeof(*mutex)); mutex_is_init = my_memcmp(mutex, &mutex_init, sizeof(*mutex)) == 0; + VALGRIND_HG_ENABLE_CHECKING(mutex, sizeof(*mutex)); } else { mutex_is_init = 0; } @@ -1785,7 +1787,9 @@ static int pthread_cond_destroy_WRK(pthread_cond_t* cond) if (cond != NULL) { const pthread_cond_t cond_init = PTHREAD_COND_INITIALIZER; + VALGRIND_HG_DISABLE_CHECKING(cond, sizeof(*cond)); cond_is_init = my_memcmp(cond, &cond_init, sizeof(*cond)) == 0; + VALGRIND_HG_ENABLE_CHECKING(cond, sizeof(*cond)); } else { cond_is_init = 0; } diff --git a/helgrind/tests/Makefile.am b/helgrind/tests/Makefile.am index ac6b15af77..721749f1ce 100755 --- a/helgrind/tests/Makefile.am +++ b/helgrind/tests/Makefile.am @@ -16,6 +16,7 @@ EXTRA_DIST = \ annotate_smart_pointer.vgtest annotate_smart_pointer.stdout.exp \ annotate_smart_pointer.stderr.exp \ bug322621.vgtest bug322621.stderr.exp \ + bug327548.vgtest bug327548.stderr.exp \ bug392331.vgtest bug392331.stdout.exp bug392331.stderr.exp \ bug392331_supp.vgtest bug392331_supp.stdout.exp bug392331_supp.stderr.exp \ bug392331.supp \ @@ -146,6 +147,7 @@ noinst_HEADERS = safe-pthread.h safe-semaphore.h # should be conditionally compiled like tc20_verifywrap is. check_PROGRAMS = \ annotate_hbefore \ + bug327548 \ cond_init_destroy \ cond_timedwait_invalid \ cond_timedwait_test \ diff --git a/helgrind/tests/bug327548.c b/helgrind/tests/bug327548.c new file mode 100644 index 0000000000..7b6e8a9ced --- /dev/null +++ b/helgrind/tests/bug327548.c @@ -0,0 +1,50 @@ +#include <pthread.h> +#include <stdio.h> +#include <semaphore.h> + +sem_t sem; +pthread_cond_t cond; +pthread_mutex_t mutex; +int finished; + +void *f(void *foo) { + while(1) + { + /* Wait for main() to have built mutex/cond */ + sem_wait(&sem); + + pthread_mutex_lock(&mutex); + finished = 1; + pthread_cond_signal(&cond); + pthread_mutex_unlock(&mutex); + } + return NULL; +} + +int main(void) { + pthread_t t; + sem_init(&sem, 0, 0); + int count = 1000; + + pthread_create(&t, NULL, f, NULL); + + while (count--) + { + pthread_mutex_init(&mutex, NULL); + pthread_cond_init(&cond, NULL); + + pthread_mutex_lock(&mutex); + /* Tell thread there is a new item to process */ + sem_post(&sem); + while (!finished) + pthread_cond_wait(&cond, &mutex); + pthread_mutex_unlock(&mutex); + + finished = 0; + + pthread_cond_destroy(&cond); + pthread_mutex_destroy(&mutex); + } + + return 0; +} diff --git a/helgrind/tests/bug327548.stderr.exp b/helgrind/tests/bug327548.stderr.exp new file mode 100644 index 0000000000..e69de29bb2 diff --git a/helgrind/tests/bug327548.vgtest b/helgrind/tests/bug327548.vgtest new file mode 100644 index 0000000000..e064b32572 --- /dev/null +++ b/helgrind/tests/bug327548.vgtest @@ -0,0 +1,2 @@ +vgopts: -q +prog: bug327548 |
|
From: Philippe W. <phi...@so...> - 2023-01-02 22:06:36
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=56971834a79eff2decd16cdb23f16a2d4d37181a commit 56971834a79eff2decd16cdb23f16a2d4d37181a Author: Philippe Waroquiers <phi...@sk...> Date: Mon Jan 2 23:04:44 2023 +0100 Small improvement to documentation. Diff: --- docs/xml/manual-core-adv.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/xml/manual-core-adv.xml b/docs/xml/manual-core-adv.xml index 1fa801edc1..6991a95e06 100644 --- a/docs/xml/manual-core-adv.xml +++ b/docs/xml/manual-core-adv.xml @@ -308,9 +308,9 @@ tool-specific macros).</para> xreflabel="&vg-gdbserver-label;"> <title>Debugging your program using Valgrind gdbserver and GDB</title> -<para>A program running under Valgrind is not executed directly by the -CPU. Instead it runs on a synthetic CPU provided by Valgrind. This is -why a debugger cannot debug your program when it runs on Valgrind. +<para>A program running under Valgrind is not executed directly by the CPU. +Instead it runs on a synthetic CPU provided by Valgrind. This is why a debugger +cannot natively debug your program when it runs on Valgrind. </para> <para> This section describes how GDB can interact with the |