summaryrefslogtreecommitdiff
path: root/boehm-gc/mark_rts.c
diff options
context:
space:
mode:
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2001-08-18 01:04:43 +0000
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2001-08-18 01:04:43 +0000
commit8fee6c5ba203062646a84ef04770c79ba2be0a6a (patch)
tree0a038d94cc4acd44c0926f011247f6b7969fa84b /boehm-gc/mark_rts.c
parent75ae025532a15d2842c5401959ef6775e3ebe550 (diff)
downloadgcc-8fee6c5ba203062646a84ef04770c79ba2be0a6a.tar.gz
* Makefile.am, acinclude.m4, configure.in: Imported GC 6.0 and
merged local changes. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44994 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'boehm-gc/mark_rts.c')
-rw-r--r--boehm-gc/mark_rts.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/boehm-gc/mark_rts.c b/boehm-gc/mark_rts.c
index 8480a0e1a4a..251a0d1458f 100644
--- a/boehm-gc/mark_rts.c
+++ b/boehm-gc/mark_rts.c
@@ -471,8 +471,9 @@ ptr_t cold_gc_frame;
cold_gc_bs_pointer = bsp - 2048;
if (cold_gc_bs_pointer < BACKING_STORE_BASE) {
cold_gc_bs_pointer = BACKING_STORE_BASE;
+ } else {
+ GC_push_all_stack(BACKING_STORE_BASE, cold_gc_bs_pointer);
}
- GC_push_all_stack(BACKING_STORE_BASE, cold_gc_bs_pointer);
} else {
cold_gc_bs_pointer = BACKING_STORE_BASE;
}
@@ -501,6 +502,10 @@ void GC_push_gc_structures GC_PROTO((void))
# endif
}
+#ifdef THREAD_LOCAL_ALLOC
+ void GC_mark_thread_local_free_lists();
+#endif
+
/*
* Call the mark routines (GC_tl_push for a single pointer, GC_push_conditional
* on groups of pointers) on every top level accessible pointer.
@@ -552,6 +557,12 @@ ptr_t cold_gc_frame;
GC_push_gc_structures();
}
+ /* Mark thread local free lists, even if their mark */
+ /* descriptor excludes the link field. */
+# ifdef THREAD_LOCAL_ALLOC
+ GC_mark_thread_local_free_lists();
+# endif
+
/*
* Now traverse stacks.
*/