|
From: <sv...@va...> - 2006-01-19 03:38:24
|
Author: sewardj
Date: 2006-01-19 03:38:19 +0000 (Thu, 19 Jan 2006)
New Revision: 5553
Log:
Rationalise demangling a bit more, so that suppression matching works
properly again.
Modified:
trunk/coregrind/m_debuginfo/symtab.c
trunk/coregrind/m_demangle/demangle.c
trunk/coregrind/pub_core_demangle.h
Modified: trunk/coregrind/m_debuginfo/symtab.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_debuginfo/symtab.c 2006-01-19 03:36:52 UTC (rev 555=
2)
+++ trunk/coregrind/m_debuginfo/symtab.c 2006-01-19 03:38:19 UTC (rev 555=
3)
@@ -2478,7 +2478,8 @@
if (si =3D=3D NULL)=20
return False;
if (demangle) {
- VG_(demangle) ( si->symtab[sno].name, buf, nbuf );
+ VG_(demangle) ( True/*do C++ demangle*/,
+ si->symtab[sno].name, buf, nbuf );
} else {
VG_(strncpy_safely) ( buf, si->symtab[sno].name, nbuf );
}
@@ -2571,12 +2572,10 @@
tmpbuf[N_TMPBUF-1] =3D 0; /* paranoia */
if (!ok)=20
return False;
+
/* We have something, at least. Try to Z-demangle it. */
- ok =3D VG_(maybe_Z_demangle)(tmpbuf, NULL, 0, buf, nbuf, NULL);
- if (!ok) {
- /* Didn't Z-demangle, so just return whatever we have. */
- VG_(strncpy)(buf, tmpbuf, nbuf);
- }
+ VG_(demangle)( False/*don't do C++ demangling*/, tmpbuf, buf, nbuf);
+
buf[nbuf-1] =3D 0; /* paranoia */
return True;
# undef N_TMPBUF
Modified: trunk/coregrind/m_demangle/demangle.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_demangle/demangle.c 2006-01-19 03:36:52 UTC (rev 55=
52)
+++ trunk/coregrind/m_demangle/demangle.c 2006-01-19 03:38:19 UTC (rev 55=
53)
@@ -51,11 +51,27 @@
Therefore, VG_(demangle) first tries to undo (2). If successful,
the soname part is discarded (humans don't want to see that).
Then, it tries to undo (1) (using demangling code from GNU/FSF).
+
+ Finally, change the name of all symbols which are known to be
+ functions below main() to "(below main)". This helps reduce
+ variability of stack traces, something which has been a problem for
+ the testsuite for a long time.
+
+ --------
+ If do_cxx_demangle =3D=3D True, does all the above stages:
+ - undo (2) [Z-encoding]
+ - undo (1) [C++ mangling]
+ - do the below-main hack
+
+ If do_cxx_demangle =3D=3D False, the middle stage is skipped:
+ - undo (2) [Z-encoding]
+ - do the below-main hack
*/
=20
/* This is the main, standard demangler entry point. */
=20
-void VG_(demangle) ( Char* orig, Char* result, Int result_size )
+void VG_(demangle) ( Bool do_cxx_demangle,=20
+ Char* orig, Char* result, Int result_size )
{
# define N_ZBUF 4096
HChar* demangled =3D NULL;
@@ -66,6 +82,7 @@
return;
}
=20
+ /* Undo (2) */
/* Demangling was requested. First see if it's a Z-mangled
intercept specification. The fastest way is just to attempt a
Z-demangling (with NULL soname buffer, since we're not
@@ -75,7 +92,11 @@
orig =3D z_demangled;
}
=20
- demangled =3D VG_(cplus_demangle) ( orig, DMGL_ANSI | DMGL_PARAMS );
+ /* Possibly undo (1) */
+ if (do_cxx_demangle)
+ demangled =3D VG_(cplus_demangle) ( orig, DMGL_ANSI | DMGL_PARAMS =
);
+ else
+ demangled =3D NULL;
=20
if (demangled) {
VG_(strncpy_safely)(result, demangled, result_size);
@@ -84,6 +105,7 @@
VG_(strncpy_safely)(result, orig, result_size);
}
=20
+ /* Do the below-main hack */
// 13 Mar 2005: We used to check here that the demangler wasn't leaki=
ng
// by calling the (now-removed) function VG_(is_empty_arena)(). But,
// very rarely (ie. I've heard of it twice in 3 years), the demangler
Modified: trunk/coregrind/pub_core_demangle.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/pub_core_demangle.h 2006-01-19 03:36:52 UTC (rev 5552=
)
+++ trunk/coregrind/pub_core_demangle.h 2006-01-19 03:38:19 UTC (rev 5553=
)
@@ -39,7 +39,8 @@
/* This is the main, standard demangler entry point. */
=20
extern=20
-void VG_(demangle) ( Char* orig, Char* result, Int result_size );
+void VG_(demangle) ( Bool do_cxx_demangle,
+ Char* orig, Char* result, Int result_size );
=20
/* Demangle a Z-encoded name as described in pub_tool_redir.h.=20
Z-encoded names are used by Valgrind for doing function=20
|