]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | /* |
2 | * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers | |
3 | * Copyright (c) 1991-1995 by Xerox Corporation. All rights reserved. | |
4 | * Copyright 1996-1999 by Silicon Graphics. All rights reserved. | |
5 | * Copyright 1999 by Hewlett-Packard Company. All rights reserved. | |
6 | * | |
7 | * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED | |
8 | * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. | |
9 | * | |
10 | * Permission is hereby granted to use or copy this program | |
11 | * for any purpose, provided the above notices are retained on all copies. | |
12 | * Permission to modify the code and to distribute modified code is granted, | |
13 | * provided the above notices are retained, and a notice that the code was | |
14 | * modified is included with the above copyright notice. | |
15 | */ | |
16 | ||
17 | /* This file assumes the collector has been compiled with GC_GCJ_SUPPORT */ | |
18 | /* and that an ANSI C compiler is available. */ | |
19 | ||
20 | /* | |
21 | * We allocate objects whose first word contains a pointer to a struct | |
22 | * describing the object type. This struct contains a garbage collector mark | |
23 | * descriptor at offset MARK_DESCR_OFFSET. Alternatively, the objects | |
24 | * may be marked by the mark procedure passed to GC_init_gcj_malloc. | |
25 | */ | |
26 | ||
27 | #ifndef GC_GCJ_H | |
28 | ||
29 | #define GC_GCJ_H | |
30 | ||
31 | #ifndef MARK_DESCR_OFFSET | |
32 | # define MARK_DESCR_OFFSET sizeof(word) | |
33 | #endif | |
34 | /* Gcj keeps GC descriptor as second word of vtable. This */ | |
35 | /* probably needs to be adjusted for other clients. */ | |
36 | /* We currently assume that this offset is such that: */ | |
37 | /* - all objects of this kind are large enough to have */ | |
38 | /* a value at that offset, and */ | |
39 | /* - it is not zero. */ | |
40 | /* These assumptions allow objects on the free list to be */ | |
41 | /* marked normally. */ | |
42 | ||
43 | #ifndef _GC_H | |
44 | # include "gc.h" | |
45 | #endif | |
46 | ||
47 | /* The following allocators signal an out of memory condition with */ | |
48 | /* return GC_oom_fn(bytes); */ | |
49 | ||
50 | /* The following function must be called before the gcj allocators */ | |
51 | /* can be invoked. */ | |
52 | /* mp_index and mp are the index and mark_proc (see gc_mark.h) */ | |
53 | /* respectively for the allocated objects. Mark_proc will be */ | |
54 | /* used to build the descriptor for objects allocated through the */ | |
55 | /* debugging interface. The mark_proc will be invoked on all such */ | |
56 | /* objects with an "environment" value of 1. The client may choose */ | |
57 | /* to use the same mark_proc for some of its generated mark descriptors.*/ | |
58 | /* In that case, it should use a different "environment" value to */ | |
59 | /* detect the presence or absence of the debug header. */ | |
60 | /* Mp is really of type mark_proc, as defined in gc_mark.h. We don't */ | |
61 | /* want to include that here for namespace pollution reasons. */ | |
62 | extern void GC_init_gcj_malloc(int mp_index, void * /* really mark_proc */mp); | |
63 | ||
64 | /* Allocate an object, clear it, and store the pointer to the */ | |
65 | /* type structure (vtable in gcj). */ | |
66 | /* This adds a byte at the end of the object if GC_malloc would.*/ | |
67 | extern void * GC_gcj_malloc(size_t lb, void * ptr_to_struct_containing_descr); | |
68 | /* The debug versions allocate such that the specified mark_proc */ | |
69 | /* is always invoked. */ | |
70 | extern void * GC_debug_gcj_malloc(size_t lb, | |
71 | void * ptr_to_struct_containing_descr, | |
72 | GC_EXTRA_PARAMS); | |
73 | ||
74 | /* Similar to GC_gcj_malloc, but assumes that a pointer to near the */ | |
75 | /* beginning of the resulting object is always maintained. */ | |
76 | extern void * GC_gcj_malloc_ignore_off_page(size_t lb, | |
77 | void * ptr_to_struct_containing_descr); | |
78 | ||
79 | /* The kind numbers of normal and debug gcj objects. */ | |
80 | /* Useful only for debug support, we hope. */ | |
81 | extern int GC_gcj_kind; | |
82 | ||
83 | extern int GC_gcj_debug_kind; | |
84 | ||
85 | # ifdef GC_DEBUG | |
86 | # define GC_GCJ_MALLOC(s,d) GC_debug_gcj_malloc(s,d,GC_EXTRAS) | |
87 | # define GC_GCJ_MALLOC_IGNORE_OFF_PAGE(s,d) GC_debug_gcj_malloc(s,d,GC_EXTRAS) | |
88 | # else | |
89 | # define GC_GCJ_MALLOC(s,d) GC_gcj_malloc(s,d) | |
90 | # define GC_GCJ_MALLOC_IGNORE_OFF_PAGE(s,d) \ | |
91 | GC_gcj_malloc_ignore_off_page(s,d) | |
92 | # endif | |
93 | ||
94 | #endif /* GC_GCJ_H */ |