diff options
author | Jeff Epler <jepler@gmail.com> | 2021-05-10 16:16:50 -0500 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2021-05-30 11:50:51 +1000 |
commit | 9a74546f8d2783502159cd99217c7d7e5d514261 (patch) | |
tree | ba52e456ce4232b61862cad241b49dfe3af96beb | |
parent | f2dbc9102251f092e93b7c87cd8ffa5e9e5b880b (diff) |
py/gc: Access the list of root pointers in an asan-compatible way.
Signed-off-by: Jeff Epler <jepler@gmail.com>
-rw-r--r-- | py/gc.c | 12 |
1 files changed, 11 insertions, 1 deletions
@@ -342,9 +342,19 @@ void gc_collect_start(void) { #endif } +// Address sanitizer needs to know that the access to ptrs[i] must always be +// considered OK, even if it's a load from an address that would normally be +// prohibited (due to being undefined, in a red zone, etc). +#ifdef __GNUC__ +__attribute__((no_sanitize_address)) +#endif +static void *gc_get_ptr(void **ptrs, int i) { + return ptrs[i]; +} + void gc_collect_root(void **ptrs, size_t len) { for (size_t i = 0; i < len; i++) { - void *ptr = ptrs[i]; + void *ptr = gc_get_ptr(ptrs, i); if (VERIFY_PTR(ptr)) { size_t block = BLOCK_FROM_PTR(ptr); if (ATB_GET_KIND(block) == AT_HEAD) { |