Mark JS freed parts of the JS stack as undefined in valgrind
authorLars Knoll <lars.knoll@theqtcompany.com>
Mon, 15 Dec 2014 07:47:35 +0000 (08:47 +0100)
committerSimon Hausmann <simon.hausmann@digia.com>
Fri, 19 Dec 2014 15:30:10 +0000 (16:30 +0100)
Change-Id: Ibee3d95762bc0a0124b65ad8986ed643b9535529
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
src/qml/jsruntime/qv4engine.cpp
src/qml/jsruntime/qv4scopedvalue_p.h

index 637947d..47e7236 100644 (file)
 #endif
 #endif
 
+#ifdef V4_USE_VALGRIND
+#include <valgrind/memcheck.h>
+#endif
+
 QT_BEGIN_NAMESPACE
 
 using namespace QV4;
@@ -206,6 +210,10 @@ ExecutionEngine::ExecutionEngine(EvalISelFactory *factory)
     jsStackBase = (Value *)jsStack->base();
     jsStackTop = jsStackBase;
 
+#ifdef V4_USE_VALGRIND
+    VALGRIND_MAKE_MEM_UNDEFINED(jsStackBase, 2*JSStackLimit);
+#endif
+
     // set up stack limits
     jsStackLimit = jsStackBase + JSStackLimit/sizeof(Value);
     cStackLimit = getStackLimit();
index c33adca..461d499 100644 (file)
 #include "qv4persistent_p.h"
 #include "qv4property_p.h"
 
+#ifdef V4_USE_VALGRIND
+#include <valgrind/memcheck.h>
+#endif
+
 QT_BEGIN_NAMESPACE
 
 #define SAVE_JS_STACK(ctx) Value *__jsStack = ctx->engine->jsStackTop
@@ -50,9 +54,9 @@ struct ScopedValue;
 struct Scope {
     inline Scope(ExecutionContext *ctx)
         : engine(ctx->d()->engine)
-    #ifndef QT_NO_DEBUG
+#ifndef QT_NO_DEBUG
         , size(0)
-    #endif
+#endif
     {
         mark = engine->jsStackTop;
     }
@@ -71,6 +75,9 @@ struct Scope {
         Q_ASSERT(engine->jsStackTop >= mark);
         memset(mark, 0, (engine->jsStackTop - mark)*sizeof(Value));
 #endif
+#ifdef V4_USE_VALGRIND
+        VALGRIND_MAKE_MEM_UNDEFINED(mark, engine->jsStackLimit - mark);
+#endif
         engine->jsStackTop = mark;
     }