thread_sigmask(SIG_SETMASK, os_context_sigmask_addr(context), 0);
#endif
- funcall3(SymbolFunction(HANDLE_BREAKPOINT),
+ funcall3(StaticSymbolFunction(HANDLE_BREAKPOINT),
compute_offset(context, code),
code,
context_sap);
thread_sigmask(SIG_SETMASK, os_context_sigmask_addr(context), 0);
#endif
- funcall3(SymbolFunction(HANDLE_BREAKPOINT),
+ funcall3(StaticSymbolFunction(HANDLE_BREAKPOINT),
compute_offset(context, code),
code,
context_sap);
thread_sigmask(SIG_SETMASK, os_context_sigmask_addr(context), 0);
#endif
- funcall2(SymbolFunction(HANDLE_SINGLE_STEP_TRAP),
+ funcall2(StaticSymbolFunction(HANDLE_SINGLE_STEP_TRAP),
make_fixnum(kind),
make_fixnum(register_offset));
/* SIG_STOP_FOR_GC needs to be enabled before we can call lisp:
* otherwise two threads racing here may deadlock: the other will
* wait on the GC lock, and the other cannot stop the first one... */
- funcall0(SymbolFunction(SUB_GC));
+ funcall0(StaticSymbolFunction(SUB_GC));
undo_fake_foreign_function_call(context);
return 1;
}
else {
/* FIXME: assert free_pages_lock held */
(void)thread_mutex_unlock(&free_pages_lock);
- funcall2(SymbolFunction(HEAP_EXHAUSTED_ERROR),
+ funcall2(StaticSymbolFunction(HEAP_EXHAUSTED_ERROR),
alloc_number(available), alloc_number(requested));
lose("HEAP-EXHAUSTED-ERROR fell through");
}
* confused, we have a chance to determine what's going on. */
describe_internal_error(context);
#endif
- funcall2(SymbolFunction(INTERNAL_ERROR), context_sap,
+ funcall2(StaticSymbolFunction(INTERNAL_ERROR), context_sap,
continuable ? T : NIL);
undo_fake_foreign_function_call(context); /* blocks signals again */
/* let the handler enable interrupts again when it sees fit */
sigaddset_deferrable(os_context_sigmask_addr(context));
- arrange_return_to_lisp_function(context, SymbolFunction(RUN_INTERRUPTION));
+ arrange_return_to_lisp_function(context, StaticSymbolFunction(RUN_INTERRUPTION));
}
#endif
void
undefined_alien_function(void)
{
- funcall0(SymbolFunction(UNDEFINED_ALIEN_FUNCTION_ERROR));
+ funcall0(StaticSymbolFunction(UNDEFINED_ALIEN_FUNCTION_ERROR));
}
boolean
protect_control_stack_return_guard_page(1);
arrange_return_to_lisp_function
- (context, SymbolFunction(CONTROL_STACK_EXHAUSTED_ERROR));
+ (context, StaticSymbolFunction(CONTROL_STACK_EXHAUSTED_ERROR));
return 1;
}
else if(addr >= CONTROL_STACK_RETURN_GUARD_PAGE(th) &&
else if (addr >= undefined_alien_address &&
addr < undefined_alien_address + os_vm_page_size) {
arrange_return_to_lisp_function
- (context, SymbolFunction(UNDEFINED_ALIEN_VARIABLE_ERROR));
+ (context, StaticSymbolFunction(UNDEFINED_ALIEN_VARIABLE_ERROR));
return 1;
}
else return 0;
* now -- some address is better then no address in this case.
*/
current_memory_fault_address = addr;
- arrange_return_to_lisp_function(context, SymbolFunction(MEMORY_FAULT_ERROR));
+ arrange_return_to_lisp_function(context, StaticSymbolFunction(MEMORY_FAULT_ERROR));
}
#endif
#ifndef LISP_FEATURE_WIN32
thread_sigmask(SIG_SETMASK, os_context_sigmask_addr(context), 0);
#endif
- funcall1(SymbolFunction(UNHANDLED_TRAP_ERROR), context_sap);
+ funcall1(StaticSymbolFunction(UNHANDLED_TRAP_ERROR), context_sap);
lose("UNHANDLED-TRAP-ERROR fell through");
}
}
/* inverse operation: create a suitably tagged lispobj from a native
- * pointer or integer. Needs to be a macro due to the tedious C type
- * system */
-#define make_lispobj(o,low_tag) ((lispobj)(LOW_WORD(o)|low_tag))
+ * pointer or integer.*/
+static inline lispobj
+make_lispobj(void *o, int low_tag)
+{
+ return LOW_WORD(o) | low_tag;
+}
+
+static inline lispobj
+make_fixnum(long n)
+{
+ return n << N_FIXNUM_TAG_BITS;
+}
-/* FIXME: There seems to be no reason that make_fixnum and fixnum_value
- * can't be implemented as (possibly inline) functions. */
-#define make_fixnum(n) ((lispobj)((n)<<N_FIXNUM_TAG_BITS))
-#define fixnum_value(n) (((long)n)>>N_FIXNUM_TAG_BITS)
+static inline long
+fixnum_value(lispobj n)
+{
+ return n >> N_FIXNUM_TAG_BITS;
+}
#if defined(LISP_FEATURE_WIN32)
/* KLUDGE: Avoid double definition of boolean by rpcndr.h included via
#endif
typedef int boolean;
-/* This only works for static symbols. */
-/* FIXME: should be called StaticSymbolFunction, right? */
-#define SymbolFunction(sym) \
- (((struct fdefn *)(native_pointer(SymbolValue(sym,0))))->fun)
-
/* KLUDGE: As far as I can tell there's no ANSI C way of saying
* "this function never returns". This is the way that you do it
* in GCC later than version 2.5 or so. */
#include "genesis/symbol.h"
#include "genesis/static-symbols.h"
#include "genesis/thread.h"
+#include "genesis/fdefn.h"
#define STATE_RUNNING (make_fixnum(1))
#define STATE_SUSPENDED (make_fixnum(2))
#endif
}
+/* This only works for static symbols. */
+static inline lispobj
+StaticSymbolFunction(lispobj sym)
+{
+ return ((struct fdefn *)native_pointer(SymbolValue(sym, 0)))->fun;
+}
+
static inline
os_context_t *get_interrupt_context_for_thread(struct thread *th)
{
_clearfp();
/* Call into lisp to handle things. */
- funcall2(SymbolFunction(HANDLE_WIN32_EXCEPTION), context_sap,
+ funcall2(StaticSymbolFunction(HANDLE_WIN32_EXCEPTION), context_sap,
exception_record_sap);
/* If Lisp doesn't nlx, we need to put things back. */
os_context_t *context = arch_os_get_context(&void_context);
arrange_return_to_lisp_function
- (context, SymbolFunction(CONTROL_STACK_EXHAUSTED_ERROR));
+ (context, StaticSymbolFunction(CONTROL_STACK_EXHAUSTED_ERROR));
}
void
os_context_t *context = arch_os_get_context(&void_context);
arrange_return_to_lisp_function
- (context, SymbolFunction(UNDEFINED_ALIEN_VARIABLE_ERROR));
+ (context, StaticSymbolFunction(UNDEFINED_ALIEN_VARIABLE_ERROR));
}
kern_return_t
os_context_t *context = arch_os_get_context(&void_context);
arrange_return_to_lisp_function
- (context, SymbolFunction(CONTROL_STACK_EXHAUSTED_ERROR));
+ (context, StaticSymbolFunction(CONTROL_STACK_EXHAUSTED_ERROR));
}
void
os_context_t *context = arch_os_get_context(&void_context);
arrange_return_to_lisp_function
- (context, SymbolFunction(UNDEFINED_ALIEN_VARIABLE_ERROR));
+ (context, StaticSymbolFunction(UNDEFINED_ALIEN_VARIABLE_ERROR));
}
kern_return_t
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.12.18"
+"1.0.12.19"