From 5c0b2171844cee7a5344c535c2793e362d925e0c Mon Sep 17 00:00:00 2001 From: Pierre-Marie Pédrot Date: Mon, 26 Mar 2018 10:02:54 +0200 Subject: Adapt the VM GC hook to handle the no-naked-pointers option flag. The Coq VM stack is scanned by the OCaml GC, but it can contain raw pointers to C-allocated strings standing for VM bytecode. If the the no-naked-pointers option is set, we perform the check that a stack value lives on the OCaml heap ourselves. --- kernel/byterun/coq_memory.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/kernel/byterun/coq_memory.c b/kernel/byterun/coq_memory.c index 3cf5fc092..542a05fd2 100644 --- a/kernel/byterun/coq_memory.c +++ b/kernel/byterun/coq_memory.c @@ -11,6 +11,7 @@ #include #include #include +#include #include "coq_gc.h" #include "coq_instruct.h" #include "coq_fix_code.h" @@ -61,6 +62,10 @@ static void coq_scan_roots(scanning_action action) register value * i; /* Scan the stack */ for (i = coq_sp; i < coq_stack_high; i++) { +#ifdef NO_NAKED_POINTERS + /* The VM stack may contain C-allocated bytecode */ + if (Is_block(*i) && !Is_in_heap_or_young(*i)) continue; +#endif (*action) (*i, i); }; /* Hook */ -- cgit v1.2.3