py/gc: Avoid valgrind false positives.
When you want to use the valgrind memory analysis tool on MicroPython, you can arrange to define MICROPY_DEBUG_VALGRIND to enable use of special valgrind macros. For now, this only fixes `gc_get_ptr` so that it never emits the diagnostic "Conditional jump or move depends on uninitialised value(s)". Signed-off-by: Jeff Epler <jepler@gmail.com>
This commit is contained in:
parent
2283b6d68f
commit
84071590b3
9
py/gc.c
9
py/gc.c
|
@ -32,6 +32,10 @@
|
||||||
#include "py/gc.h"
|
#include "py/gc.h"
|
||||||
#include "py/runtime.h"
|
#include "py/runtime.h"
|
||||||
|
|
||||||
|
#if MICROPY_DEBUG_VALGRIND
|
||||||
|
#include <valgrind/memcheck.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if MICROPY_ENABLE_GC
|
#if MICROPY_ENABLE_GC
|
||||||
|
|
||||||
#if MICROPY_DEBUG_VERBOSE // print debugging info
|
#if MICROPY_DEBUG_VERBOSE // print debugging info
|
||||||
|
@ -449,6 +453,11 @@ void gc_collect_start(void) {
|
||||||
__attribute__((no_sanitize_address))
|
__attribute__((no_sanitize_address))
|
||||||
#endif
|
#endif
|
||||||
static void *gc_get_ptr(void **ptrs, int i) {
|
static void *gc_get_ptr(void **ptrs, int i) {
|
||||||
|
#if MICROPY_DEBUG_VALGRIND
|
||||||
|
if (!VALGRIND_CHECK_MEM_IS_ADDRESSABLE(&ptrs[i], sizeof(*ptrs))) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
return ptrs[i];
|
return ptrs[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -510,6 +510,11 @@
|
||||||
#define MICROPY_DEBUG_VM_STACK_OVERFLOW (0)
|
#define MICROPY_DEBUG_VM_STACK_OVERFLOW (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Whether to enable extra instrumentation for valgrind
|
||||||
|
#ifndef MICROPY_DEBUG_VALGRIND
|
||||||
|
#define MICROPY_DEBUG_VALGRIND (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* Optimisations */
|
/* Optimisations */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue