sync with w3m-0.2.2-inu-1.1/gc
This commit is contained in:
32
gc/gcj_mlc.c
32
gc/gcj_mlc.c
@@ -54,6 +54,7 @@ ptr_t * GC_gcjdebugobjfreelist;
|
||||
void GC_init_gcj_malloc(int mp_index, void * /* really GC_mark_proc */mp)
|
||||
{
|
||||
register int i;
|
||||
GC_bool ignore_gcj_info;
|
||||
DCL_LOCK_STATE;
|
||||
|
||||
GC_init(); /* In case it's not already done. */
|
||||
@@ -65,6 +66,12 @@ void GC_init_gcj_malloc(int mp_index, void * /* really GC_mark_proc */mp)
|
||||
return;
|
||||
}
|
||||
GC_gcj_malloc_initialized = TRUE;
|
||||
ignore_gcj_info = (0 != GETENV("GC_IGNORE_GCJ_INFO"));
|
||||
# ifdef CONDPRINT
|
||||
if (GC_print_stats && ignore_gcj_info) {
|
||||
GC_printf0("Gcj-style type information is disabled!\n");
|
||||
}
|
||||
# endif
|
||||
GC_mark_procs[mp_index] = (GC_mark_proc)mp;
|
||||
if (mp_index >= GC_n_mark_procs) ABORT("GC_init_gcj_malloc: bad index");
|
||||
/* Set up object kind gcj-style indirect descriptor. */
|
||||
@@ -75,9 +82,17 @@ void GC_init_gcj_malloc(int mp_index, void * /* really GC_mark_proc */mp)
|
||||
GC_gcj_kind = GC_n_kinds++;
|
||||
GC_obj_kinds[GC_gcj_kind].ok_freelist = GC_gcjobjfreelist;
|
||||
GC_obj_kinds[GC_gcj_kind].ok_reclaim_list = 0;
|
||||
GC_obj_kinds[GC_gcj_kind].ok_descriptor =
|
||||
(((word)(-MARK_DESCR_OFFSET - GC_INDIR_PER_OBJ_BIAS)) | GC_DS_PER_OBJECT);
|
||||
GC_obj_kinds[GC_gcj_kind].ok_relocate_descr = FALSE;
|
||||
if (ignore_gcj_info) {
|
||||
/* Use a simple length-based descriptor, thus forcing a fully */
|
||||
/* conservative scan. */
|
||||
GC_obj_kinds[GC_gcj_kind].ok_descriptor = (0 | GC_DS_LENGTH);
|
||||
GC_obj_kinds[GC_gcj_kind].ok_relocate_descr = TRUE;
|
||||
} else {
|
||||
GC_obj_kinds[GC_gcj_kind].ok_descriptor =
|
||||
(((word)(-MARK_DESCR_OFFSET - GC_INDIR_PER_OBJ_BIAS))
|
||||
| GC_DS_PER_OBJECT);
|
||||
GC_obj_kinds[GC_gcj_kind].ok_relocate_descr = FALSE;
|
||||
}
|
||||
GC_obj_kinds[GC_gcj_kind].ok_init = TRUE;
|
||||
/* Set up object kind for objects that require mark proc call. */
|
||||
GC_gcjdebugobjfreelist = (ptr_t *)
|
||||
@@ -88,9 +103,14 @@ void GC_init_gcj_malloc(int mp_index, void * /* really GC_mark_proc */mp)
|
||||
GC_gcj_debug_kind = GC_n_kinds++;
|
||||
GC_obj_kinds[GC_gcj_debug_kind].ok_freelist = GC_gcjdebugobjfreelist;
|
||||
GC_obj_kinds[GC_gcj_debug_kind].ok_reclaim_list = 0;
|
||||
GC_obj_kinds[GC_gcj_debug_kind].ok_descriptor =
|
||||
GC_MAKE_PROC(mp_index, 1 /* allocated with debug info */);
|
||||
GC_obj_kinds[GC_gcj_debug_kind].ok_relocate_descr = FALSE;
|
||||
if (ignore_gcj_info) {
|
||||
GC_obj_kinds[GC_gcj_kind].ok_descriptor = (0 | GC_DS_LENGTH);
|
||||
GC_obj_kinds[GC_gcj_kind].ok_relocate_descr = TRUE;
|
||||
} else {
|
||||
GC_obj_kinds[GC_gcj_debug_kind].ok_descriptor =
|
||||
GC_MAKE_PROC(mp_index, 1 /* allocated with debug info */);
|
||||
GC_obj_kinds[GC_gcj_debug_kind].ok_relocate_descr = FALSE;
|
||||
}
|
||||
GC_obj_kinds[GC_gcj_debug_kind].ok_init = TRUE;
|
||||
UNLOCK();
|
||||
ENABLE_SIGNALS();
|
||||
|
||||
Reference in New Issue
Block a user