Mesa (master): glsl/blob: add valgrind checks that written data is defined

Nicolai Hähnle nh at kemper.freedesktop.org
Wed Jul 5 10:32:00 UTC 2017


Module: Mesa
Branch: master
Commit: 3628efedf29d2b5e181ea88f24db518038ab1a92
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=3628efedf29d2b5e181ea88f24db518038ab1a92

Author: Nicolai Hähnle <nicolai.haehnle at amd.com>
Date:   Sat Jun 24 10:26:29 2017 +0200

glsl/blob: add valgrind checks that written data is defined

Undefined data will eventually trigger a valgrind error while computing
its CRC32 while writing it into the disk cache, but at that point, it is
basically impossible to track down where the undefined data came from.

With this change, finding the origin of undefined data becomes easy.

v2: remove duplicate VALGRIND_CFLAGS (Emil)

Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>
Reviewed-by: Emil Velikov <emil.velikov at collabora.com>

---

 src/compiler/Makefile.am |  1 +
 src/compiler/glsl/blob.c | 12 ++++++++++++
 2 files changed, 13 insertions(+)

diff --git a/src/compiler/Makefile.am b/src/compiler/Makefile.am
index d52da91dab..4c83365094 100644
--- a/src/compiler/Makefile.am
+++ b/src/compiler/Makefile.am
@@ -36,6 +36,7 @@ AM_CPPFLAGS = \
 	-I$(top_srcdir)/src/gallium/include \
 	-I$(top_srcdir)/src/gallium/auxiliary \
 	-I$(top_srcdir)/src/gtest/include \
+	$(VALGRIND_CFLAGS) \
 	$(DEFINES)
 
 AM_CFLAGS = \
diff --git a/src/compiler/glsl/blob.c b/src/compiler/glsl/blob.c
index db36252065..3c4aed8524 100644
--- a/src/compiler/glsl/blob.c
+++ b/src/compiler/glsl/blob.c
@@ -26,6 +26,14 @@
 #include "main/macros.h"
 #include "blob.h"
 
+#ifdef HAVE_VALGRIND
+#include <valgrind.h>
+#include <memcheck.h>
+#define VG(x) x
+#else
+#define VG(x)
+#endif
+
 #define BLOB_INITIAL_SIZE 4096
 
 /* Ensure that \blob will be able to fit an additional object of size
@@ -110,6 +118,8 @@ blob_overwrite_bytes(struct blob *blob,
    if (blob->size < offset + to_write)
       return false;
 
+   VG(VALGRIND_CHECK_MEM_IS_DEFINED(bytes, to_write));
+
    memcpy(blob->data + offset, bytes, to_write);
 
    return true;
@@ -121,6 +131,8 @@ blob_write_bytes(struct blob *blob, const void *bytes, size_t to_write)
    if (! grow_to_fit(blob, to_write))
        return false;
 
+   VG(VALGRIND_CHECK_MEM_IS_DEFINED(bytes, to_write));
+
    memcpy(blob->data + blob->size, bytes, to_write);
    blob->size += to_write;
 




More information about the mesa-commit mailing list