Make it possible to match against "???" line in suppressions,
using "obj:*" or "fun:*". Also generate "obj:*" for such lines
with --gen-suppressions. Includes a regtest.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4447 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/m_errormgr.c b/coregrind/m_errormgr.c
index c41d03d..8149b70 100644
--- a/coregrind/m_errormgr.c
+++ b/coregrind/m_errormgr.c
@@ -391,8 +391,7 @@
} else if ( VG_(get_objname)(ip, buf, ERRTXT_LEN) ) {
VG_(printf)(" obj:%s\n", buf);
} else {
- VG_(printf)(" ???:??? "
- "# unknown, suppression will not work, sorry\n");
+ VG_(printf)(" obj:*\n");
}
}
@@ -1093,16 +1092,20 @@
for (i = 0; i < su->n_callers; i++) {
Addr a = ips[i];
vg_assert(su->callers[i].name != NULL);
+ // The string to be used in the unknown case ("???") can be anything
+ // that couldn't be a valid function or objname. --gen-suppressions
+ // prints 'obj:*' for such an entry, which will match any string we
+ // use.
switch (su->callers[i].ty) {
case ObjName:
if (!VG_(get_objname)(a, caller_name, ERRTXT_LEN))
- return False;
+ VG_(strcpy)(caller_name, "???");
break;
case FunName:
// Nb: mangled names used in suppressions
if (!VG_(get_fnname_nodemangle)(a, caller_name, ERRTXT_LEN))
- return False;
+ VG_(strcpy)(caller_name, "???");
break;
default: VG_(tool_panic)("supp_matches_callers");
}