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@itsqueeze.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
This commit is contained in:
Nicolai Hähnle 2017-06-24 10:26:29 +02:00
parent 210ebd4b9c
commit 3628efedf2
2 changed files with 13 additions and 0 deletions

View File

@ -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 = \

View File

@ -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;