summaryrefslogtreecommitdiff
path: root/runtime/GC/GCInterface.h
blob: a62ac3c7146a199965a783019cf0cd8f18a42453 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/*===-- GCInterface.h - Public interface exposed by garbage collectors ----===*\
|*
|*                     The LLVM Compiler Infrastructure
|*
|* This file is distributed under the University of Illinois Open Source
|* License. See LICENSE.TXT for details.
|*
|*===----------------------------------------------------------------------===*|
|*
|* This file defines the common public interface that must be exposed by all
|* LLVM garbage collectors.
|*
\*===----------------------------------------------------------------------===*/

#ifndef GCINTERFACE_H
#define GCINTERFACE_H

/* llvm_cg_walk_gcroots - This function is exposed by the LLVM code generator,
 * and allows us to traverse the roots on the stack.
 */
void llvm_cg_walk_gcroots(void (*FP)(void **Root, void *Meta));


/* llvm_gc_initialize - This function is called to initalize the garbage
 * collector.
 */
void llvm_gc_initialize(unsigned InitialHeapSize);

/* llvm_gc_allocate - This function allocates Size bytes from the heap and
 * returns a pointer to it.
 */
void *llvm_gc_allocate(unsigned Size);

/* llvm_gc_collect - This function forces a garbage collection cycle.
 */
void llvm_gc_collect();

/* llvm_gc_read - This function should be implemented to include any read
 * barrier code that is needed by the garbage collector.
 */
void *llvm_gc_read(void *ObjPtr, void **FieldPtr);

/* llvm_gc_write - This function should be implemented to include any write
 * barrier code that is needed by the garbage collector.
 */
void llvm_gc_write(void *V, void *ObjPtr, void **FieldPtr);

#endif