Added support for multi-skin suppressions, of the form:
skin_name1,skin_name2:supp_name
No spaces are allowed on either side of the comma.
This is useful for sharing suppressions between Addrcheck and Memcheck.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1205 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/vg_errcontext.c b/coregrind/vg_errcontext.c
index af447ef..b01ca57 100644
--- a/coregrind/vg_errcontext.c
+++ b/coregrind/vg_errcontext.c
@@ -517,20 +517,36 @@
}
+/* Look for "skin" in a string like "skin1,skin2,skin3" */
+static __inline__
+Bool skin_name_present(Char *name, Char *names)
+{
+ Bool found;
+ Char *s = NULL; /* Shut gcc up */
+ Int len = VG_(strlen)(name);
+
+ found = (NULL != (s = VG_(strstr)(names, name)) &&
+ (s == names || *(s-1) == ',') &&
+ (*(s+len) == ',' || *(s+len) == '\0')
+ );
+
+ return found;
+}
+
+#define STREQ(s1,s2) (s1 != NULL && s2 != NULL \
+ && VG_(strcmp)((s1),(s2))==0)
+
/* Read suppressions from the file specified in vg_clo_suppressions
and place them in the suppressions list. If there's any difficulty
doing this, just give up -- there's no point in trying to recover.
*/
-#define STREQ(s1,s2) (s1 != NULL && s2 != NULL \
- && VG_(strcmp)((s1),(s2))==0)
-
static void load_one_suppressions_file ( Char* filename )
{
# define N_BUF 200
Int fd, i;
Bool eof;
Char buf[N_BUF+1];
- Char* skin_name;
+ Char* skin_names;
Char* supp_name;
fd = VG_(open)( filename, VKI_O_RDONLY, 0 );
@@ -561,7 +577,7 @@
if (eof) goto syntax_error;
- /* Check it has the "skin_name:supp_name" form (ie. look for ':') */
+ /* Check it has the "skin1,skin2,...:supp" form (look for ':') */
i = 0;
while (True) {
if (buf[i] == ':') break;
@@ -570,20 +586,21 @@
}
buf[i] = '\0'; /* Replace ':', splitting into two strings */
- skin_name = & buf[0];
- supp_name = & buf[i+1];
+ skin_names = & buf[0];
+ supp_name = & buf[i+1];
- /* Is it a core suppression? (core:<supp_name>) */
- if (VG_(needs).core_errors && STREQ(skin_name, "core"))
+ /* Is it a core suppression? */
+ if (VG_(needs).core_errors && skin_name_present("core", skin_names))
{
- if (STREQ(supp_name, "PThread"))
+ if (STREQ(supp_name, "PThread"))
supp->skin_supp.skind = PThreadSupp;
else
goto syntax_error;
}
- /* Is it a skin suppression? (<skin_name>:<supp_name>") */
- else if (VG_(needs).skin_errors && STREQ(skin_name, VG_(details).name))
+ /* Is it a skin suppression? */
+ else if (VG_(needs).skin_errors &&
+ skin_name_present(VG_(details).name, skin_names))
{
if (SK_(recognised_suppression)(supp_name, & supp->skin_supp.skind))
{
@@ -631,7 +648,7 @@
filename );
} else {
VG_(message)(Vg_UserMsg,
- "FATAL: in suppressions file `%s': syntax error on: %s",
+ "FATAL: in suppressions file: `%s': syntax error on: %s",
filename, buf );
}
VG_(close)(fd);
@@ -718,8 +735,6 @@
*/
static CoreSupp* is_suppressible_error ( CoreError* err )
{
-# define STREQ(s1,s2) (s1 != NULL && s2 != NULL \
- && VG_(strcmp)((s1),(s2))==0)
Int i;
Char caller_obj[VG_N_SUPP_CALLERS][M_VG_ERRTXT];
@@ -751,10 +766,10 @@
}
}
return NULL; /* no matches */
-
-# undef STREQ
}
+#undef STREQ
+
/*--------------------------------------------------------------------*/
/*--- end vg_errcontext.c ---*/
/*--------------------------------------------------------------------*/
diff --git a/glibc-2.1.supp b/glibc-2.1.supp
index 53a2e54..93935ca 100644
--- a/glibc-2.1.supp
+++ b/glibc-2.1.supp
@@ -28,7 +28,7 @@
{
__libc_freeres/free_mem(Addr4)
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
fun:free_mem
fun:__libc_freeres
}
@@ -45,7 +45,7 @@
{
socketcall.connect(serv_addr)/__libc_connect/*(Param)
- Memcheck:Param
+ Addrcheck,Memcheck:Param
socketcall.connect(serv_addr)
fun:__libc_connect
fun:*
@@ -53,7 +53,7 @@
{
strrchr/_dl_map_object_from_fd/_dl_map_object(Addr4)
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
fun:strrchr
fun:_dl_map_object_from_fd
fun:_dl_map_object
@@ -69,7 +69,7 @@
{
llseek(result)/__libc_lseek64/_IO_file_seek(Param)
- Memcheck:Param
+ Addrcheck,Memcheck:Param
llseek(result)
fun:__libc_lseek64
fun:_IO_file_seek
@@ -77,7 +77,7 @@
{
__rawmemchr/_nl_*/*locale(Addr4)
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
fun:__rawmemchr
fun:_nl_*
fun:*locale
@@ -165,7 +165,7 @@
{
socketcall.connect(serv_addr)/__libc_connect/*(Param)
- Memcheck:Param
+ Addrcheck,Memcheck:Param
socketcall.connect(serv_addr)
obj:*libc-2.1.3.so
obj:*libX11.so*
diff --git a/glibc-2.2.supp b/glibc-2.2.supp
index b82aee7..a18cfbc 100644
--- a/glibc-2.2.supp
+++ b/glibc-2.2.supp
@@ -47,13 +47,13 @@
}
{
trecurse/__gconv_release_shlib(Addr4)
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
fun:trecurse
fun:__gconv_release_shlib
}
{
do_release_shlib/trecurse(Addr4)
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
fun:do_release_shlib
fun:trecurse
}
@@ -91,20 +91,20 @@
{
__twalk/*(Addr4)
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
fun:__twalk
}
{
do_release_shlib/__twalk(Addr4)
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
fun:do_release_shlib
fun:__twalk
}
{
__libc_freeres/free_mem/free(Free)
- Memcheck:Free
+ Addrcheck,Memcheck:Free
fun:free
fun:free_mem
fun:__libc_freeres
@@ -237,13 +237,13 @@
# two:
{
__mpn_construct_double/*(Addr4)
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
fun:__mpn_construct_double
fun:*
}
{
__mpn_construct_double/*(Addr8)
- Memcheck:Addr8
+ Addrcheck,Memcheck:Addr8
fun:__mpn_construct_double
fun:*
}
@@ -251,13 +251,13 @@
# More of the same (gcc bug, I'm pretty sure)
{
__fabs/*(Addr4)
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
fun:__fabs
fun:*
}
{
__fabs/*(Addr8)
- Memcheck:Addr8
+ Addrcheck,Memcheck:Addr8
fun:__fabs
fun:*
}
@@ -266,7 +266,7 @@
# Not sure what this is about ... but anyway
{
pthread_sighandler/*(Addr4)
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
fun:pthread_sighandler
fun:*
}
@@ -309,14 +309,14 @@
#-------------------
{
socketcall.connect(serv_addr)/__libc_connect/*
- Memcheck:Param
+ Addrcheck,Memcheck:Param
socketcall.connect(serv_addr)
fun:__libc_connect
fun:*
}
{
socketcall.connect(serv_addr)/libc-2.2.4.so/libc-2.2.4.so
- Memcheck:Param
+ Addrcheck,Memcheck:Param
socketcall.connect(serv_addr)
obj:*libc-2.2.?.so
obj:*libc-2.2.?.so
@@ -325,7 +325,7 @@
#----------------------
{
write(buf)/__libc_write/libX11.so.6.2/libX11.so.6.2(Param)
- Memcheck:Param
+ Addrcheck,Memcheck:Param
write(buf)
fun:__libc_write
obj:/usr/X11R6/lib/libX11.so.6.2
@@ -333,7 +333,7 @@
}
{
write(buf)/libc-2.2.4.so/libX11.so.6.2/libX11.so.6.2(Param)
- Memcheck:Param
+ Addrcheck,Memcheck:Param
write(buf)
obj:*libc-2.2.?.so
obj:/usr/X11R6/lib/libX11.so.6.2
@@ -350,7 +350,7 @@
{
writev(vector[...])/__writev/libX11.so.6.2/libX11.so.6.2
- Memcheck:Param
+ Addrcheck,Memcheck:Param
writev(vector[...])
fun:__writev
obj:/usr/X11R6/lib/libX11.so.6.2
diff --git a/linux22.supp b/linux22.supp
index 9260b94..3210817 100644
--- a/linux22.supp
+++ b/linux22.supp
@@ -29,7 +29,7 @@
{
socketcall.connect(serv_addr)/__libc_connect/*(Param)
- Memcheck:Param
+ Addrcheck,Memcheck:Param
socketcall.connect(serv_addr)
fun:__libc_connect
fun:*
@@ -37,7 +37,7 @@
{
strrchr/_dl_map_object_from_fd/_dl_map_object(Addr4)
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
fun:strrchr
fun:_dl_map_object_from_fd
fun:_dl_map_object
@@ -53,7 +53,7 @@
{
llseek(result)/__libc_lseek64/_IO_file_seek(Param)
- Memcheck:Param
+ Addrcheck,Memcheck:Param
llseek(result)
fun:__libc_lseek64
fun:_IO_file_seek
@@ -61,7 +61,7 @@
{
__rawmemchr/_nl_*/*locale(Addr4)
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
fun:__rawmemchr
fun:_nl_*
fun:*locale
@@ -149,7 +149,7 @@
{
socketcall.connect(serv_addr)/__libc_connect/*(Param)
- Memcheck:Param
+ Addrcheck,Memcheck:Param
socketcall.connect(serv_addr)
obj:*libc-2.1.3.so
obj:*libX11.so*
@@ -178,7 +178,7 @@
{
X11-Addr4-1
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libX11.so.6.1
@@ -186,7 +186,7 @@
{
X11-Addr4-2
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libXt.so.6.0
@@ -194,7 +194,7 @@
{
X11-Addr4-3
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
@@ -202,7 +202,7 @@
{
X11-Addr4-4
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
@@ -210,7 +210,7 @@
{
X11-Addr4-5
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
fun:__rawmemchr
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
@@ -218,7 +218,7 @@
{
X11-Addr4-6
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libXmu.so.6.0
obj:/usr/X11R6/lib/libXmu.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
@@ -226,7 +226,7 @@
{
X11-Addr4-7
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXawXpm_posing_as_Xaw.so.6.1
@@ -234,7 +234,7 @@
{
X11-Param-1
- Memcheck:Param
+ Addrcheck,Memcheck:Param
write(buf)
fun:__libc_write
obj:/usr/X11R6/lib/libX11.so.6.1
@@ -243,7 +243,7 @@
{
X11-Addr4-8
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libXpm.so.4.11
obj:/usr/X11R6/lib/libXpm.so.4.11
@@ -251,7 +251,7 @@
{
X11-Addr4-8
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXawXpm_posing_as_Xaw.so.6.1
obj:/usr/X11R6/lib/libXt.so.6.0
@@ -259,7 +259,7 @@
{
X11-Addr4-9
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libXaw.so.6.1
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
@@ -267,7 +267,7 @@
{
X11-Addr4-10
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libXaw.so.6.1
obj:/usr/X11R6/lib/libXaw.so.6.1
obj:/usr/X11R6/lib/libXt.so.6.0
@@ -275,7 +275,7 @@
{
X11-Addr4-11
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXaw.so.6.1
diff --git a/linux24.supp b/linux24.supp
index 0af3294..37e5648 100644
--- a/linux24.supp
+++ b/linux24.supp
@@ -107,13 +107,13 @@
# two:
{
__mpn_construct_double/*(Addr4)
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
fun:__mpn_construct_double
fun:*
}
{
__mpn_construct_double/*(Addr8)
- Memcheck:Addr8
+ Addrcheck,Memcheck:Addr8
fun:__mpn_construct_double
fun:*
}
@@ -121,13 +121,13 @@
# More of the same (gcc bug, I'm pretty sure)
{
__fabs/*(Addr4)
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
fun:__fabs
fun:*
}
{
__fabs/*(Addr8)
- Memcheck:Addr8
+ Addrcheck,Memcheck:Addr8
fun:__fabs
fun:*
}
@@ -136,7 +136,7 @@
# Not sure what this is about ... but anyway
{
pthread_sighandler/*(Addr4)
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
fun:pthread_sighandler
fun:*
}
@@ -179,14 +179,14 @@
#-------------------
{
socketcall.connect(serv_addr)/__libc_connect/*
- Memcheck:Param
+ Addrcheck,Memcheck:Param
socketcall.connect(serv_addr)
fun:__libc_connect
fun:*
}
{
socketcall.connect(serv_addr)/libc-2.2.4.so/libc-2.2.4.so
- Memcheck:Param
+ Addrcheck,Memcheck:Param
socketcall.connect(serv_addr)
obj:*libc-2.2.4.so
obj:*libc-2.2.4.so
@@ -252,7 +252,7 @@
#----------------------
{
write(buf)/__libc_write/libX11.so.6.2/libX11.so.6.2(Param)
- Memcheck:Param
+ Addrcheck,Memcheck:Param
write(buf)
fun:__libc_write
obj:/usr/X11R6/lib/libX11.so.6.2
@@ -260,7 +260,7 @@
}
{
write(buf)/libc-2.2.4.so/libX11.so.6.2/libX11.so.6.2(Param)
- Memcheck:Param
+ Addrcheck,Memcheck:Param
write(buf)
obj:*libc-2.2.4.so
obj:/usr/X11R6/lib/libX11.so.6.2
@@ -269,7 +269,7 @@
#{
# llseek(result)/__libc_lseek64/_IO_file_seek(Param)
-# Memcheck:Param
+# Addrcheck,Memcheck:Param
# llseek(result)
# fun:__libc_lseek64
# fun:_IO_file_seek
@@ -277,7 +277,7 @@
{
writev(vector[...])/__writev/libX11.so.6.2/libX11.so.6.2
- Memcheck:Param
+ Addrcheck,Memcheck:Param
writev(vector[...])
fun:__writev
obj:/usr/X11R6/lib/libX11.so.6.2
diff --git a/memcheck/tests/supp.supp b/memcheck/tests/supp.supp
index 916b353..c9befdc 100644
--- a/memcheck/tests/supp.supp
+++ b/memcheck/tests/supp.supp
@@ -1,6 +1,6 @@
{
name_of_this_suppression
- memcheck:Cond
+ Addrcheck,Memcheck:Cond
obj:*supp1
fun:__libc_start_main
}
diff --git a/xfree-3.supp b/xfree-3.supp
index ae7e3b9..b735b73 100644
--- a/xfree-3.supp
+++ b/xfree-3.supp
@@ -46,7 +46,7 @@
{
X11-Addr4-1
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libX11.so.6.1
@@ -54,7 +54,7 @@
{
X11-Addr4-2
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libXt.so.6.0
@@ -62,7 +62,7 @@
{
X11-Addr4-3
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
@@ -70,7 +70,7 @@
{
X11-Addr4-4
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
@@ -78,7 +78,7 @@
{
X11-Addr4-5
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
fun:__rawmemchr
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
@@ -86,7 +86,7 @@
{
X11-Addr4-6
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libXmu.so.6.0
obj:/usr/X11R6/lib/libXmu.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
@@ -94,7 +94,7 @@
{
X11-Addr4-7
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXawXpm_posing_as_Xaw.so.6.1
@@ -102,7 +102,7 @@
{
X11-Param-1
- Memcheck:Param
+ Addrcheck,Memcheck:Param
write(buf)
fun:__libc_write
obj:/usr/X11R6/lib/libX11.so.6.1
@@ -111,7 +111,7 @@
{
X11-Addr4-8
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libXpm.so.4.11
obj:/usr/X11R6/lib/libXpm.so.4.11
@@ -119,7 +119,7 @@
{
X11-Addr4-8
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXawXpm_posing_as_Xaw.so.6.1
obj:/usr/X11R6/lib/libXt.so.6.0
@@ -127,7 +127,7 @@
{
X11-Addr4-9
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libXaw.so.6.1
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
@@ -135,7 +135,7 @@
{
X11-Addr4-10
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libXaw.so.6.1
obj:/usr/X11R6/lib/libXaw.so.6.1
obj:/usr/X11R6/lib/libXt.so.6.0
@@ -143,7 +143,7 @@
{
X11-Addr4-11
- Memcheck:Addr4
+ Addrcheck,Memcheck:Addr4
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXaw.so.6.1