blob: 03523dc61b0035e7b6ac388daa0c637930503ed4 [file] [log] [blame]
//===----------- GC.h - Garbage Collection Interface -----------------------===//
//
// The Micro Virtual Machine
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef MVM_GC_H
#define MVM_GC_H
#include <sys/types.h>
typedef void (*gc_lock_recovery_fct_t)(int, int, int, int, int, int, int, int);
class gc;
typedef void VirtualTable;
#define gc_new(Class) __gc_new(Class::VT) Class
class gc_header {
public:
VirtualTable *_XXX_vt;
inline gc *_2gc() { return (gc *)this; }
};
class gc {
public:
typedef void (*markerFn)(void);
inline gc() {}
virtual ~gc() {}
static void initialise(markerFn mark, void *base_sp);
static void destroy();
void setVT(VirtualTable* VT) {
((void**)this)[0] = VT;
}
void markAndTrace() const;
size_t objectSize() const;
void * operator new(size_t sz, VirtualTable *VT);
void operator delete(void *);
void * realloc(size_t n);
static void die_if_sigsegv_occured_during_collection(void *addr);
static int isStable(gc_lock_recovery_fct_t, int, int, int, int,
int, int, int, int);
static unsigned int enable(unsigned int n);
static void gcStats(size_t &no, size_t &nbb);
static void maybeCollect();
static void collect(void);
static void inject_my_thread(void *sp);
static void remove_my_thread();
static gc *begOf(const void *o);
static int byteOffset(void *o);
inline static bool isObject(const void *o) { return begOf((void*)o); }
static void applyFunc(void (*func)(gc *o, void *data), void *data);
static void registerMemoryError(void (*func)(unsigned int));
static int getMaxMemory(void);
static int getFreeMemory(void);
static int getTotalMemory(void);
static void setMaxMemory(size_t);
static void setMinMemory(size_t);
virtual void destroyer(size_t sz) {} ;
virtual void tracer(size_t sz) {};
};
#define __gc_new new
#endif