From: Perry E. M. <pe...@pi...> - 2004-04-13 01:54:37
|
A bunch of stuff that's in my tree still. Some of this is just harmless or aesthetic, some is very needed for the NetBSD port to work right. The difference is pretty obvious on inspection. Perry Index: src/runtime/alloc.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/alloc.c,v retrieving revision 1.17 diff -u -r1.17 alloc.c --- src/runtime/alloc.c 2 Oct 2003 23:13:09 -0000 1.17 +++ src/runtime/alloc.c 13 Apr 2004 01:40:23 -0000 @@ -40,6 +40,7 @@ #define ALIGNED_SIZE(n) (n+LOWTAG_MASK) & ~LOWTAG_MASK #if defined LISP_FEATURE_GENCGC +void do_pending_interrupt(void); extern lispobj *alloc(int bytes); lispobj * pa_alloc(int bytes) Index: src/runtime/bsd-os.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/bsd-os.c,v retrieving revision 1.20 diff -u -r1.20 bsd-os.c --- src/runtime/bsd-os.c 8 Apr 2004 13:26:04 -0000 1.20 +++ src/runtime/bsd-os.c 13 Apr 2004 01:40:23 -0000 @@ -43,6 +43,7 @@ #ifdef __NetBSD__ #include <sys/resource.h> +#include <sys/sysctl.h> #include <string.h> static void netbsd_init(); @@ -232,6 +236,21 @@ static void netbsd_init() { struct rlimit rl; + int mib[2], osrev; + size_t len; + + mib[0] = CTL_KERN; + mib[1] = KERN_OSREV; + + len = sizeof(osrev); + sysctl(mib, 2, &osrev, &len, NULL, 0); + + /* If we're older than 2.0... */ + if (osrev < 200000000) { + fprintf(stderr, "NetBSD kernel too old to run sbcl, sorry\n"); + exit(1); + } + /* NetBSD counts mmap()ed space against the process's data size limit, * so yank it up. This might be a nasty thing to do? */ @@ -250,6 +269,7 @@ } } #endif /* __NetBSD__ */ + /* threads */ Index: src/runtime/gencgc.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/gencgc.c,v retrieving revision 1.54 diff -u -r1.54 gencgc.c --- src/runtime/gencgc.c 8 Apr 2004 13:26:04 -0000 1.54 +++ src/runtime/gencgc.c 13 Apr 2004 01:40:27 -0000 @@ -258,7 +262,9 @@ * seized before all accesses to generations[] or to parts of * page_table[] that other threads may want to see */ +#ifdef LISP_FEATURE_SB_THREAD static lispobj free_pages_lock=0; +#endif /* @@ -947,7 +956,9 @@ int bytes_found; int num_pages; int large_p=(nbytes>=large_object_size); +#ifdef LISP_FEATURE_SB_THREAD gc_assert(free_pages_lock); +#endif /* Search for a contiguous free space of at least nbytes. If it's * a large object then align it on a page boundary by searching @@ -1681,7 +1692,8 @@ return copy_large_object(object, length); } - +/* FIXME: Not obviously used anywhere... */ +#ifdef REMOVEME static lispobj trans_unboxed_large(lispobj object) { @@ -1697,6 +1709,7 @@ return copy_large_unboxed_object(object, length); } +#endif /* Index: src/runtime/purify.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/purify.c,v retrieving revision 1.40 diff -u -r1.40 purify.c --- src/runtime/purify.c 5 Apr 2004 23:16:36 -0000 1.40 +++ src/runtime/purify.c 13 Apr 2004 01:40:33 -0000 @@ -606,7 +606,7 @@ vector = (struct vector *)native_pointer(thing); nwords = 2 + (CEILING((fixnum_value(vector->length)+extra)*bits,32)>>5); - new=newspace_alloc(nwords, (constant || !boxed)); + new = newspace_alloc(nwords, (constant || !boxed)); bcopy(vector, new, nwords * sizeof(lispobj)); result = make_lispobj(new, lowtag_of(thing)); Index: src/runtime/thread.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/thread.c,v retrieving revision 1.25 diff -u -r1.25 thread.c --- src/runtime/thread.c 30 Mar 2004 12:24:53 -0000 1.25 +++ src/runtime/thread.c 13 Apr 2004 01:40:33 -0000 @@ -24,7 +24,7 @@ void get_spinlock(lispobj *word,int value); -int +static int initial_thread_trampoline(struct thread *th) { lispobj function; @@ -35,13 +35,14 @@ if(th->pid < 1) lose("th->pid not set up right"); th->state=STATE_RUNNING; #if defined(LISP_FEATURE_X86) return call_into_lisp_first_time(function,args,0); #else return funcall0(function); #endif } +#ifdef LISP_FEATURE_LINUX /* this is the first thing that clone() runs in the child (which is * why the silly calling convention). Basically it calls the user's * requested lisp function after doing arch_os_thread_init and @@ -62,6 +63,7 @@ th->state=STATE_RUNNING; return funcall0(function); } +#endif /* LISP_FEATURE_LINUX */ /* this is called from any other thread to create the new one, and * initialize all parts of it that can be initialized from another @@ -117,9 +119,9 @@ #ifdef LISP_FEATURE_X86 STATIC_TLS_INIT(PSEUDO_ATOMIC_ATOMIC,pseudo_atomic_atomic); STATIC_TLS_INIT(PSEUDO_ATOMIC_INTERRUPTED,pseudo_atomic_interrupted); -#endif +#endif /* LISP_FEATURE_X86 */ #undef STATIC_TLS_INIT -#endif +#endif /* LISP_FEATURE_SB_THREAD */ } th->control_stack_start = spaces; @@ -191,7 +193,8 @@ return 0; } -void link_thread(struct thread *th,pid_t kid_pid) +static void +link_thread(struct thread *th,pid_t kid_pid) { get_spinlock(&all_threads_lock,kid_pid); th->next=all_threads; @@ -229,7 +232,7 @@ return 0; } } -#endif +#endif /* LISP_FEATURE_LINUX */ void destroy_thread (struct thread *th) { @@ -352,4 +355,4 @@ } release_spinlock(&all_threads_lock); } -#endif +#endif /* LISP_FEATURE_SB_THREAD */ Index: src/runtime/thread.h =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/thread.h,v retrieving revision 1.9 diff -u -r1.9 thread.h --- src/runtime/thread.h 6 Oct 2003 16:48:39 -0000 1.9 +++ src/runtime/thread.h 13 Apr 2004 01:40:34 -0000 @@ -104,7 +104,7 @@ * much stuff like struct thread and all_threads to be defined, which * usually aren't by that time. So, it's here instead. Sorry */ -inline static struct thread *arch_os_get_current_thread() { +static inline struct thread *arch_os_get_current_thread() { #if defined(LISP_FEATURE_SB_THREAD) && defined (LISP_FEATURE_X86) register struct thread *me=0; if(all_threads) Index: src/runtime/x86-arch.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/x86-arch.c,v retrieving revision 1.24 diff -u -r1.24 x86-arch.c --- src/runtime/x86-arch.c 8 Apr 2004 13:26:04 -0000 1.24 +++ src/runtime/x86-arch.c 13 Apr 2004 01:40:34 -0000 @@ -55,7 +55,7 @@ return &context->uc_mcontext.gregs[16]; #elif defined __FreeBSD__ return &context->uc_mcontext.mc_eflags; -#elif defined __OpenBSD__ || defined __NetBSD__ +#elif defined __OpenBSD__ return &context->sc_eflags; #elif defined __NetBSD__ return &(context->uc_mcontext.__gregs[_REG_EFL]); Index: src/runtime/x86-arch.h =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/x86-arch.h,v retrieving revision 1.2 diff -u -r1.2 x86-arch.h --- src/runtime/x86-arch.h 25 Aug 2003 21:00:02 -0000 1.2 +++ src/runtime/x86-arch.h 13 Apr 2004 01:40:34 -0000 @@ -15,6 +15,7 @@ static inline void get_spinlock(lispobj *word,int value) { +#ifdef LISP_FEATURE_SB_THREAD u32 eax=0; do { asm ("xor %0,%0\n\ @@ -23,12 +24,15 @@ : "r" (value), "m" (*word) : "memory", "cc"); } while(eax!=0); +#endif } static inline void release_spinlock(lispobj *word) { +#ifdef LISP_FEATURE_SB_THREAD *word=0; +#endif } #endif /* _X86_ARCH_H */ |