Hi Julian,
On Thu, 2011-06-23 at 11:59 +0200, Julian Seward wrote:
Oh, I think I missed answering the simple question here. Thusly:
Ah indeed :-) and I missed that in the headers.
#include "valgrind.h"
bool running_under_valgrind (void)
{
return (RUNNING_ON_VALGRIND) ? true : false;
}
Is that what you want, or did you mean something different?
Yes; that was what I wanted, sorry I couldn't find it in the header
somehow - though it is clearly there ;-)
Reading more carefully, it seems the #undef block at the bottom of a
recent svn's valgrind.h doesn't match the similar undef at the top - is
that intended ? [seems to miss eg. the s390 piece].
I wonder too whether (since the weak symbol thing doesn't seem to work
so well) whether exporting a type-safe function-pointer-table via a
single "get-me-the-fn-table-or-null" type method might be more readable;
though of course you'd still need the trap-doors in stubs behind that I
guess.
You might want to cache the result of RUNNING_ON_VALGRIND
so that the common (production) case overhead is reduced to
a load and conditional branch, rather than the strange sequence
of stores and rotates generated by the macro.
Yep; we'd do it once just at the beginning.
Caolan - what do you think of doing:
diff --git a/sal/rtl/source/alloc_global.c b/sal/rtl/source/alloc_global.c
index fb95e83..4923428 100644
--- a/sal/rtl/source/alloc_global.c
+++ b/sal/rtl/source/alloc_global.c
@@ -35,6 +35,7 @@
#include <stdio.h>
#if !defined(FORCE_SYSALLOC)
+#include "valgrind.h"
typedef enum { AMode_CUSTOM, AMode_SYSTEM, AMode_UNSET } AllocMode;
@@ -46,7 +47,13 @@ static void determine_alloc_mode(void)
if (alloc_mode != AMode_UNSET)
return;
- if (getenv("G_SLICE") != NULL)
+ if (RUNNING_ON_VALGRIND)
+ {
+ putenv ("G_SLICE=1");
+ fprintf(stderr, "LibreOffice: running under valgrind detected.\n");
+ alloc_mode = AMode_SYSTEM;
+ }
+ else if (getenv("G_SLICE") != NULL)
{
alloc_mode = AMode_SYSTEM;
fprintf(stderr, "LibreOffice: Using system memory allocator.\n");
And dropping the 'memcheck.h' and 'valgrind.h' headers straight into
sal - they are BSD licensed anyway, then we could loose a lot of that
fluff in configure.ac / makefile around valgrind (?) perhaps we'd want a
environment variable for "TRY_TO_VALGRIND_INTERNAL_ALLOCATORS" too ;-)
That might help the QA guys automagically generate better valgrind
traces with less effort ?
ATB,
Michael.
--
michael.meeks@novell.com <><, Pseudo Engineer, itinerant idiot
Context
- Re: [Libreoffice] crash in escherex.cxx in master (continued)
Re: [Libreoffice] crash in escherex.cxx in master · Caolán McNamara
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.