GC_API void GC_CALL GC_clear_mark_bit(const void *) GC_ATTR_NONNULL(1);
GC_API void GC_CALL GC_set_mark_bit(const void *) GC_ATTR_NONNULL(1);
+/* Helpers for dynamically changing roots. */
+GC_API void GC_push_all(char * /* bottom */, char * /* top */);
+ /* Push everything in a range */
+ /* onto mark stack. */
+#ifndef GC_DISABLE_INCREMENTAL
+ GC_API void GC_push_conditional(char * /* b */, char * /* t */,
+ int /* all */);
+#else
+# define GC_push_conditional(b, t, all) GC_push_all(b, t)
+#endif
+ /* Do either of the above, depending */
+ /* on the third arg. */
+
+GC_API void (*GC_push_other_roots)(void);
+ /* Push system or application specific roots */
+ /* onto the mark stack. In some environments */
+ /* (e.g. threads environments) this is */
+ /* predefined to be non-zero. A client */
+ /* supplied replacement should also call the */
+ /* original function. */
+
#ifdef __cplusplus
} /* end of extern "C" */
#endif
GC_INNER GC_bool GC_collection_in_progress(void);
/* Collection is in progress, or was abandoned. */
-GC_INNER void GC_push_all(ptr_t bottom, ptr_t top);
- /* Push everything in a range */
- /* onto mark stack. */
-#ifndef GC_DISABLE_INCREMENTAL
- GC_INNER void GC_push_conditional(ptr_t b, ptr_t t, GC_bool all);
-#else
-# define GC_push_conditional(b, t, all) GC_push_all(b, t)
-#endif
- /* Do either of the above, depending */
- /* on the third arg. */
GC_INNER void GC_push_all_stack(ptr_t b, ptr_t t);
- /* As above, but consider */
- /* interior pointers as valid */
+ /* Same as GC_push_all, but */
+ /* consider interior pointers as */
+ /* valid. */
GC_INNER void GC_push_all_eager(ptr_t b, ptr_t t);
/* Same as GC_push_all_stack, but */
/* ensures that stack is scanned */
GC_INNER void GC_push_roots(GC_bool all, ptr_t cold_gc_frame);
/* Push all or dirty roots. */
-GC_EXTERN void (*GC_push_other_roots)(void);
- /* Push system or application specific roots */
- /* onto the mark stack. In some environments */
- /* (e.g. threads environments) this is */
- /* predefined to be non-zero. A client */
- /* supplied replacement should also call the */
- /* original function. */
-
#ifdef THREADS
void GC_push_thread_structures(void);
#endif
* Should only be used if there is no possibility of mark stack
* overflow.
*/
-GC_INNER void GC_push_all(ptr_t bottom, ptr_t top)
+GC_API void GC_push_all(ptr_t bottom, ptr_t top)
{
register word length;
}
}
- GC_INNER void GC_push_conditional(ptr_t bottom, ptr_t top, GC_bool all)
+ GC_API void GC_push_conditional(ptr_t bottom, ptr_t top, GC_bool all)
{
if (!all) {
GC_push_selected(bottom, top, GC_page_was_dirty);
/* environment, this is also responsible for marking from */
/* thread stacks. */
#ifndef THREADS
- GC_INNER void (*GC_push_other_roots)(void) = 0;
+ GC_API void (*GC_push_other_roots)(void) = 0;
#else /* THREADS */
# ifdef PCR
}
# endif /* SN_TARGET_PS3 */
- GC_INNER void (*GC_push_other_roots)(void) = GC_default_push_other_roots;
+ GC_API void (*GC_push_other_roots)(void) = GC_default_push_other_roots;
#endif /* THREADS */
/*