gettimeofday(&start_tv, (struct timezone *) 0);
#endif
+ /* it's possible that signals are blocked already if this was called
+ * from a signal handler (e.g. with the sigsegv gc_trigger stuff) */
sigemptyset(&tmp);
sigaddset_blockable(&tmp);
sigprocmask(SIG_BLOCK, &tmp, &old);
return WEAK_POINTER_NWORDS;
}
+\f
+lispobj *
+search_read_only_space(void *pointer)
+{
+ lispobj* start = (lispobj*)READ_ONLY_SPACE_START;
+ lispobj* end = (lispobj*)SymbolValue(READ_ONLY_SPACE_FREE_POINTER,0);
+ if ((pointer < (void *)start) || (pointer >= (void *)end))
+ return NULL;
+ return (search_space(start,
+ (((lispobj *)pointer)+2)-start,
+ (lispobj *)pointer));
+}
+
+lispobj *
+search_static_space(void *pointer)
+{
+ lispobj* start = (lispobj*)STATIC_SPACE_START;
+ lispobj* end = (lispobj*)SymbolValue(STATIC_SPACE_FREE_POINTER,0);
+ if ((pointer < (void *)start) || (pointer >= (void *)end))
+ return NULL;
+ return (search_space(start,
+ (((lispobj *)pointer)+2)-start,
+ (lispobj *)pointer));
+}
+lispobj *
+search_dynamic_space(void *pointer)
+{
+ lispobj *start = (lispobj *) current_dynamic_space;
+ lispobj *end = (lispobj *) dynamic_space_free_pointer;
+ if ((pointer < (void *)start) || (pointer >= (void *)end))
+ return NULL;
+ return (search_space(start,
+ (((lispobj *)pointer)+2)-start,
+ (lispobj *)pointer));
+}
\f
/* initialization. if gc_init can be moved to after core load, we could
* combine these two functions */