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
|
3
(1) |
4
|
5
|
6
(2) |
|
7
|
8
|
9
|
10
(2) |
11
(3) |
12
(3) |
13
(5) |
|
14
(1) |
15
|
16
|
17
|
18
(1) |
19
|
20
|
|
21
(2) |
22
(3) |
23
|
24
|
25
|
26
|
27
|
|
28
|
29
|
30
|
|
|
|
|
|
From: Дмитрий Д. <di...@gm...> - 2010-11-12 11:07:35
|
Thank You, Jakub and Tom
trunk/rev.11478 build on F14/x64, pass 'make regtest' w/o new
regressions and fix issue.
I am interesting -- what is the policy to update bug-fix-list in NEWS?
Only before release?
Looks it reasonable to update bug-fix-list at time when bugfix happened?
Dmitry
2010/11/12 <sv...@va...>:
> Author: tom
> Date: 2010-11-12 10:03:13 +0000 (Fri, 12 Nov 2010)
> New Revision: 11478
>
> Log:
> Add replacements for strcasecmp and related functions which have
> hyper-optimised versions which defeat valgrind in recent versions
> of glibc.
>
> Fixes #256600 based on patch from Dmitry Djachenko.
>
>
> Modified:
> trunk/configure.in
> trunk/memcheck/mc_replace_strmem.c
>
>
> Modified: trunk/configure.in
> ===================================================================
> --- trunk/configure.in 2010-10-25 18:18:54 UTC (rev 11477)
> +++ trunk/configure.in 2010-11-12 10:03:13 UTC (rev 11478)
> @@ -1549,6 +1549,7 @@
> strstr \
> syscall \
> timerfd \
> + tolower_l \
> utimensat \
> ])
>
>
> Modified: trunk/memcheck/mc_replace_strmem.c
> ===================================================================
> --- trunk/memcheck/mc_replace_strmem.c 2010-10-25 18:18:54 UTC (rev 11477)
> +++ trunk/memcheck/mc_replace_strmem.c 2010-11-12 10:03:13 UTC (rev 11478)
> @@ -35,10 +35,13 @@
> #include "pub_tool_redir.h"
> #include "pub_tool_tooliface.h"
> #include "valgrind.h"
> +#include "config.h"
>
> #include "mc_include.h"
> #include "memcheck.h"
>
> +#include <ctype.h>
> +
> /* ---------------------------------------------------------------------
> We have our own versions of these functions for two reasons:
> (a) it allows us to do overlap checking
> @@ -403,6 +406,120 @@
> #endif
>
>
> +#define STRCASECMP(soname, fnname) \
> + int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
> + ( const char* s1, const char* s2 ); \
> + int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
> + ( const char* s1, const char* s2 ) \
> + { \
> + register unsigned char c1; \
> + register unsigned char c2; \
> + while (True) { \
> + c1 = tolower(*(unsigned char *)s1); \
> + c2 = tolower(*(unsigned char *)s2); \
> + if (c1 != c2) break; \
> + if (c1 == 0) break; \
> + s1++; s2++; \
> + } \
> + if ((unsigned char)c1 < (unsigned char)c2) return -1; \
> + if ((unsigned char)c1 > (unsigned char)c2) return 1; \
> + return 0; \
> + }
> +
> +STRCASECMP(VG_Z_LIBC_SONAME, strcasecmp)
> +#if defined(VGO_linux)
> +STRCASECMP(VG_Z_LIBC_SONAME, __GI_strcasecmp)
> +#endif
> +
> +
> +#define STRNCASECMP(soname, fnname) \
> + int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
> + ( const char* s1, const char* s2, SizeT nmax ); \
> + int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
> + ( const char* s1, const char* s2, SizeT nmax ) \
> + { \
> + SizeT n = 0; \
> + while (True) { \
> + if (n >= nmax) return 0; \
> + if (*s1 == 0 && *s2 == 0) return 0; \
> + if (*s1 == 0) return -1; \
> + if (*s2 == 0) return 1; \
> + \
> + if (tolower(*(unsigned char*)s1) < tolower(*(unsigned char*)s2)) return -1; \
> + if (tolower(*(unsigned char*)s1) > tolower(*(unsigned char*)s2)) return 1; \
> + \
> + s1++; s2++; n++; \
> + } \
> + }
> +
> +STRNCASECMP(VG_Z_LIBC_SONAME, strncasecmp)
> +#if defined(VGO_linux)
> +STRNCASECMP(VG_Z_LIBC_SONAME, __GI_strncasecmp)
> +#elif defined(VGO_darwin)
> +STRNCASECMP(VG_Z_DYLD, strncasecmp)
> +#endif
> +
> +
> +#ifdef HAVE_TOLOWER_L
> +
> +
> +#define STRCASECMP_L(soname, fnname) \
> + int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
> + ( const char* s1, const char* s2, locale_t locale ); \
> + int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
> + ( const char* s1, const char* s2, locale_t locale ) \
> + { \
> + register unsigned char c1; \
> + register unsigned char c2; \
> + while (True) { \
> + c1 = tolower_l(*(unsigned char *)s1, locale); \
> + c2 = tolower_l(*(unsigned char *)s2, locale); \
> + if (c1 != c2) break; \
> + if (c1 == 0) break; \
> + s1++; s2++; \
> + } \
> + if ((unsigned char)c1 < (unsigned char)c2) return -1; \
> + if ((unsigned char)c1 > (unsigned char)c2) return 1; \
> + return 0; \
> + }
> +
> +STRCASECMP_L(VG_Z_LIBC_SONAME, strcasecmp_l)
> +#if defined(VGO_linux)
> +STRCASECMP_L(VG_Z_LIBC_SONAME, __GI_strcasecmp_l)
> +#endif
> +
> +
> +#define STRNCASECMP_L(soname, fnname) \
> + int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
> + ( const char* s1, const char* s2, SizeT nmax, locale_t locale ); \
> + int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
> + ( const char* s1, const char* s2, SizeT nmax, locale_t locale ) \
> + { \
> + SizeT n = 0; \
> + while (True) { \
> + if (n >= nmax) return 0; \
> + if (*s1 == 0 && *s2 == 0) return 0; \
> + if (*s1 == 0) return -1; \
> + if (*s2 == 0) return 1; \
> + \
> + if (tolower_l(*(unsigned char*)s1, locale) < tolower_l(*(unsigned char*)s2, locale)) return -1; \
> + if (tolower_l(*(unsigned char*)s1, locale) > tolower_l(*(unsigned char*)s2, locale)) return 1; \
> + \
> + s1++; s2++; n++; \
> + } \
> + }
> +
> +STRNCASECMP_L(VG_Z_LIBC_SONAME, strncasecmp_l)
> +#if defined(VGO_linux)
> +STRNCASECMP_L(VG_Z_LIBC_SONAME, __GI_strncasecmp_l)
> +#elif defined(VGO_darwin)
> +STRNCASECMP_L(VG_Z_DYLD, strncasecmp_l)
> +#endif
> +
> +
> +#endif
> +
> +
> #define STRCMP(soname, fnname) \
> int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
> ( const char* s1, const char* s2 ); \
>
>
> ------------------------------------------------------------------------------
> Centralized Desktop Delivery: Dell and VMware Reference Architecture
> Simplifying enterprise desktop deployment and management using
> Dell EqualLogic storage and VMware View: A highly scalable, end-to-end
> client virtualization framework. Read more!
> http://p.sf.net/sfu/dell-eql-dev2dev
> _______________________________________________
> Valgrind-developers mailing list
> Val...@li...
> https://lists.sourceforge.net/lists/listinfo/valgrind-developers
>
|
|
From: <sv...@va...> - 2010-11-12 10:40:32
|
Author: tom
Date: 2010-11-12 10:40:20 +0000 (Fri, 12 Nov 2010)
New Revision: 11479
Log:
Rework the strcasecmp stuff a little, based on Jakub Jelinek's patch
on bug #256600 because the original version turned out to somewhat
fragile across different glibc versions.
Modified:
trunk/configure.in
trunk/memcheck/mc_replace_strmem.c
Modified: trunk/configure.in
===================================================================
--- trunk/configure.in 2010-11-12 10:03:13 UTC (rev 11478)
+++ trunk/configure.in 2010-11-12 10:40:20 UTC (rev 11479)
@@ -1549,7 +1549,6 @@
strstr \
syscall \
timerfd \
- tolower_l \
utimensat \
])
Modified: trunk/memcheck/mc_replace_strmem.c
===================================================================
--- trunk/memcheck/mc_replace_strmem.c 2010-11-12 10:03:13 UTC (rev 11478)
+++ trunk/memcheck/mc_replace_strmem.c 2010-11-12 10:40:20 UTC (rev 11479)
@@ -35,13 +35,10 @@
#include "pub_tool_redir.h"
#include "pub_tool_tooliface.h"
#include "valgrind.h"
-#include "config.h"
#include "mc_include.h"
#include "memcheck.h"
-#include <ctype.h>
-
/* ---------------------------------------------------------------------
We have our own versions of these functions for two reasons:
(a) it allows us to do overlap checking
@@ -412,6 +409,7 @@
int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
( const char* s1, const char* s2 ) \
{ \
+ extern int tolower(int); \
register unsigned char c1; \
register unsigned char c2; \
while (True) { \
@@ -438,6 +436,7 @@
int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
( const char* s1, const char* s2, SizeT nmax ) \
{ \
+ extern int tolower(int); \
SizeT n = 0; \
while (True) { \
if (n >= nmax) return 0; \
@@ -460,15 +459,13 @@
#endif
-#ifdef HAVE_TOLOWER_L
-
-
#define STRCASECMP_L(soname, fnname) \
int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
- ( const char* s1, const char* s2, locale_t locale ); \
+ ( const char* s1, const char* s2, void* locale ); \
int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
- ( const char* s1, const char* s2, locale_t locale ) \
+ ( const char* s1, const char* s2, void* locale ) \
{ \
+ extern int tolower_l(int, void*) __attribute__((weak)); \
register unsigned char c1; \
register unsigned char c2; \
while (True) { \
@@ -491,10 +488,11 @@
#define STRNCASECMP_L(soname, fnname) \
int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
- ( const char* s1, const char* s2, SizeT nmax, locale_t locale ); \
+ ( const char* s1, const char* s2, SizeT nmax, void* locale ); \
int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
- ( const char* s1, const char* s2, SizeT nmax, locale_t locale ) \
+ ( const char* s1, const char* s2, SizeT nmax, void* locale ) \
{ \
+ extern int tolower_l(int, void*) __attribute__((weak)); \
SizeT n = 0; \
while (True) { \
if (n >= nmax) return 0; \
@@ -517,9 +515,6 @@
#endif
-#endif
-
-
#define STRCMP(soname, fnname) \
int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
( const char* s1, const char* s2 ); \
|
|
From: <sv...@va...> - 2010-11-12 10:03:26
|
Author: tom
Date: 2010-11-12 10:03:13 +0000 (Fri, 12 Nov 2010)
New Revision: 11478
Log:
Add replacements for strcasecmp and related functions which have
hyper-optimised versions which defeat valgrind in recent versions
of glibc.
Fixes #256600 based on patch from Dmitry Djachenko.
Modified:
trunk/configure.in
trunk/memcheck/mc_replace_strmem.c
Modified: trunk/configure.in
===================================================================
--- trunk/configure.in 2010-10-25 18:18:54 UTC (rev 11477)
+++ trunk/configure.in 2010-11-12 10:03:13 UTC (rev 11478)
@@ -1549,6 +1549,7 @@
strstr \
syscall \
timerfd \
+ tolower_l \
utimensat \
])
Modified: trunk/memcheck/mc_replace_strmem.c
===================================================================
--- trunk/memcheck/mc_replace_strmem.c 2010-10-25 18:18:54 UTC (rev 11477)
+++ trunk/memcheck/mc_replace_strmem.c 2010-11-12 10:03:13 UTC (rev 11478)
@@ -35,10 +35,13 @@
#include "pub_tool_redir.h"
#include "pub_tool_tooliface.h"
#include "valgrind.h"
+#include "config.h"
#include "mc_include.h"
#include "memcheck.h"
+#include <ctype.h>
+
/* ---------------------------------------------------------------------
We have our own versions of these functions for two reasons:
(a) it allows us to do overlap checking
@@ -403,6 +406,120 @@
#endif
+#define STRCASECMP(soname, fnname) \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2 ); \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2 ) \
+ { \
+ register unsigned char c1; \
+ register unsigned char c2; \
+ while (True) { \
+ c1 = tolower(*(unsigned char *)s1); \
+ c2 = tolower(*(unsigned char *)s2); \
+ if (c1 != c2) break; \
+ if (c1 == 0) break; \
+ s1++; s2++; \
+ } \
+ if ((unsigned char)c1 < (unsigned char)c2) return -1; \
+ if ((unsigned char)c1 > (unsigned char)c2) return 1; \
+ return 0; \
+ }
+
+STRCASECMP(VG_Z_LIBC_SONAME, strcasecmp)
+#if defined(VGO_linux)
+STRCASECMP(VG_Z_LIBC_SONAME, __GI_strcasecmp)
+#endif
+
+
+#define STRNCASECMP(soname, fnname) \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2, SizeT nmax ); \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2, SizeT nmax ) \
+ { \
+ SizeT n = 0; \
+ while (True) { \
+ if (n >= nmax) return 0; \
+ if (*s1 == 0 && *s2 == 0) return 0; \
+ if (*s1 == 0) return -1; \
+ if (*s2 == 0) return 1; \
+ \
+ if (tolower(*(unsigned char*)s1) < tolower(*(unsigned char*)s2)) return -1; \
+ if (tolower(*(unsigned char*)s1) > tolower(*(unsigned char*)s2)) return 1; \
+ \
+ s1++; s2++; n++; \
+ } \
+ }
+
+STRNCASECMP(VG_Z_LIBC_SONAME, strncasecmp)
+#if defined(VGO_linux)
+STRNCASECMP(VG_Z_LIBC_SONAME, __GI_strncasecmp)
+#elif defined(VGO_darwin)
+STRNCASECMP(VG_Z_DYLD, strncasecmp)
+#endif
+
+
+#ifdef HAVE_TOLOWER_L
+
+
+#define STRCASECMP_L(soname, fnname) \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2, locale_t locale ); \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2, locale_t locale ) \
+ { \
+ register unsigned char c1; \
+ register unsigned char c2; \
+ while (True) { \
+ c1 = tolower_l(*(unsigned char *)s1, locale); \
+ c2 = tolower_l(*(unsigned char *)s2, locale); \
+ if (c1 != c2) break; \
+ if (c1 == 0) break; \
+ s1++; s2++; \
+ } \
+ if ((unsigned char)c1 < (unsigned char)c2) return -1; \
+ if ((unsigned char)c1 > (unsigned char)c2) return 1; \
+ return 0; \
+ }
+
+STRCASECMP_L(VG_Z_LIBC_SONAME, strcasecmp_l)
+#if defined(VGO_linux)
+STRCASECMP_L(VG_Z_LIBC_SONAME, __GI_strcasecmp_l)
+#endif
+
+
+#define STRNCASECMP_L(soname, fnname) \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2, SizeT nmax, locale_t locale ); \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2, SizeT nmax, locale_t locale ) \
+ { \
+ SizeT n = 0; \
+ while (True) { \
+ if (n >= nmax) return 0; \
+ if (*s1 == 0 && *s2 == 0) return 0; \
+ if (*s1 == 0) return -1; \
+ if (*s2 == 0) return 1; \
+ \
+ if (tolower_l(*(unsigned char*)s1, locale) < tolower_l(*(unsigned char*)s2, locale)) return -1; \
+ if (tolower_l(*(unsigned char*)s1, locale) > tolower_l(*(unsigned char*)s2, locale)) return 1; \
+ \
+ s1++; s2++; n++; \
+ } \
+ }
+
+STRNCASECMP_L(VG_Z_LIBC_SONAME, strncasecmp_l)
+#if defined(VGO_linux)
+STRNCASECMP_L(VG_Z_LIBC_SONAME, __GI_strncasecmp_l)
+#elif defined(VGO_darwin)
+STRNCASECMP_L(VG_Z_DYLD, strncasecmp_l)
+#endif
+
+
+#endif
+
+
#define STRCMP(soname, fnname) \
int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
( const char* s1, const char* s2 ); \
|