From 0de16adf3d48f56e7556df392c38bcfd2b8c9796 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Mon, 15 Dec 2014 08:47:35 +0100 Subject: [PATCH] Mark JS freed parts of the JS stack as undefined in valgrind Change-Id: Ibee3d95762bc0a0124b65ad8986ed643b9535529 Reviewed-by: Simon Hausmann --- src/qml/jsruntime/qv4engine.cpp | 8 ++++++++ src/qml/jsruntime/qv4scopedvalue_p.h | 11 +++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index 637947d..47e7236 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -82,6 +82,10 @@ #endif #endif +#ifdef V4_USE_VALGRIND +#include +#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(); diff --git a/src/qml/jsruntime/qv4scopedvalue_p.h b/src/qml/jsruntime/qv4scopedvalue_p.h index c33adca..461d499 100644 --- a/src/qml/jsruntime/qv4scopedvalue_p.h +++ b/src/qml/jsruntime/qv4scopedvalue_p.h @@ -38,6 +38,10 @@ #include "qv4persistent_p.h" #include "qv4property_p.h" +#ifdef V4_USE_VALGRIND +#include +#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; } -- 2.7.4