32
32
#include "py/gc.h"
33
33
#include "py/runtime.h"
34
34
35
+ #if MICROPY_DEBUG_VALGRIND
36
+ #include <valgrind/memcheck.h>
37
+ #endif
38
+
35
39
#include "supervisor/shared/safe_mode.h"
36
40
37
41
#if CIRCUITPY_MEMORYMONITOR
@@ -126,7 +130,7 @@ void gc_init(void *start, void *end) {
126
130
// => T = A * (1 + BLOCKS_PER_ATB / BLOCKS_PER_FTB + BLOCKS_PER_ATB * BYTES_PER_BLOCK)
127
131
size_t total_byte_len = (byte * )end - (byte * )start ;
128
132
#if MICROPY_ENABLE_FINALISER
129
- MP_STATE_MEM (gc_alloc_table_byte_len ) = total_byte_len * MP_BITS_PER_BYTE / (MP_BITS_PER_BYTE + MP_BITS_PER_BYTE * BLOCKS_PER_ATB / BLOCKS_PER_FTB + MP_BITS_PER_BYTE * BLOCKS_PER_ATB * BYTES_PER_BLOCK );
133
+ MP_STATE_MEM (gc_alloc_table_byte_len ) = ( total_byte_len - 1 ) * MP_BITS_PER_BYTE / (MP_BITS_PER_BYTE + MP_BITS_PER_BYTE * BLOCKS_PER_ATB / BLOCKS_PER_FTB + MP_BITS_PER_BYTE * BLOCKS_PER_ATB * BYTES_PER_BLOCK );
130
134
#else
131
135
MP_STATE_MEM (gc_alloc_table_byte_len ) = total_byte_len / (1 + MP_BITS_PER_BYTE / 2 * BYTES_PER_BLOCK );
132
136
#endif
@@ -135,7 +139,7 @@ void gc_init(void *start, void *end) {
135
139
136
140
#if MICROPY_ENABLE_FINALISER
137
141
size_t gc_finaliser_table_byte_len = (MP_STATE_MEM (gc_alloc_table_byte_len ) * BLOCKS_PER_ATB + BLOCKS_PER_FTB - 1 ) / BLOCKS_PER_FTB ;
138
- MP_STATE_MEM (gc_finaliser_table_start ) = MP_STATE_MEM (gc_alloc_table_start ) + MP_STATE_MEM (gc_alloc_table_byte_len );
142
+ MP_STATE_MEM (gc_finaliser_table_start ) = MP_STATE_MEM (gc_alloc_table_start ) + MP_STATE_MEM (gc_alloc_table_byte_len ) + 1 ;
139
143
#endif
140
144
141
145
size_t gc_pool_block_len = MP_STATE_MEM (gc_alloc_table_byte_len ) * BLOCKS_PER_ATB ;
@@ -391,6 +395,11 @@ void gc_collect_ptr(void *ptr) {
391
395
__attribute__((no_sanitize_address ))
392
396
#endif
393
397
static void * gc_get_ptr (void * * ptrs , int i ) {
398
+ #if MICROPY_DEBUG_VALGRIND
399
+ if (!VALGRIND_CHECK_MEM_IS_ADDRESSABLE (& ptrs [i ], sizeof (* ptrs ))) {
400
+ return NULL ;
401
+ }
402
+ #endif
394
403
return ptrs [i ];
395
404
}
396
405
0 commit comments