Date: prev next · Thread: first prev next last
2011 Archives by date, by thread · List index


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


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.