void* val; /* pointer to the original cell value */
} entry_t;
-size_t EntryCount;
-entry_t EntryLog[NENTRIES];
-
-void gc_init(void* stkbtm) {
- EntryCount = 0;
-}
+size_t EntryCount = 0;
+entry_t EntryLog[NENTRIES] = {0};
void gc_collect(void) {
if (obj) {
obj->dtor = dtor;
obj->refs = 0u;
+ EntryLog[EntryCount].ref = NULL;
+ EntryLog[EntryCount].val = obj->data;
+ if (++EntryCount == NENTRIES)
+ gc_collect();
} else {
perror("refcreate() failed :");
abort();
void* gc_getref(void** ref) {
return (void*)((uintptr_t)*ref & ~DIRTY_BIT);
}
-
-
--- /dev/null
+#include <stdint.h>
+
+uintptr_t* StackBot;
+
+int main(int argc, char** argv) {
+ { StackBot = (uintptr_t*)&(int){0}; }
+ extern int usermain(int argc, char** argv);
+ return usermain(argc, argv);
+}