From: Daniel B. <da...@us...> - 2004-10-18 22:50:19
|
Update of /cvsroot/sbcl/sbcl/src/runtime In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31154/src/runtime Modified Files: Tag: x86-64-again-branch Config.x86_64-linux backtrace.c dynbind.c gencgc.c interrupt.c monitor.c parse.c purify.c runtime.h thread.c thread.h Log Message: "just a hobby, won't be big and professional like gnu" Bunch of missing files copied across from the previous attempt Hack make-config.sh to understand x86-64 a bit better Break c-call (it was broken anyway) for floats in callout %%NIP-VALUES by renaming register names int he x86 version Random runtime frobs Index: Config.x86_64-linux =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/Config.x86_64-linux,v retrieving revision 1.1 retrieving revision 1.1.24.1 diff -u -d -r1.1 -r1.1.24.1 --- Config.x86_64-linux 18 Sep 2003 21:09:09 -0000 1.1 +++ Config.x86_64-linux 18 Oct 2004 22:50:07 -0000 1.1.24.1 @@ -7,9 +7,24 @@ # provided with absolutely no warranty. See the COPYING and CREDITS # files for more information. -include Config.x86-linux +ASSEM_SRC = x86-64-assem.S ldso-stubs.S +ARCH_SRC = x86-64-arch.c -# Until a 64-bit port is written, tell the compiler to use 32-bit mode +OS_SRC = linux-os.c x86-64-linux-os.c os-common.c +# The "--Wl,--export-dynamic" flags are here to help people +# experimenting with callbacks from C to SBCL, by allowing linkage to +# SBCL src/runtime/*.c symbols from C. Work on this is good, but it's +# definitely bleeding edge and not particularly stable. In particular, +# not only are the workarounds for the GC relocating Lisp code and +# data unstable, but even the basic calling convention might end up +# being unstable. Unless you want to do some masochistic maintenance +# work when new releases of SBCL come out, please don't try to build +# real code on this until a coherent stable interface has been added. +# (You *are* encouraged to design and implement a coherent stable +# interface, though.:-| As far as I (WHN 2002-05-19) know, no one is +# working on one and it would be a nice thing to have.) +OS_LINK_FLAGS = -Wl,--export-dynamic +OS_LIBS = -ldl + +GC_SRC = gencgc.c -CFLAGS += -m32 -OS_LINK_FLAGS += -m32 Index: backtrace.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/backtrace.c,v retrieving revision 1.17 retrieving revision 1.17.4.1 diff -u -d -r1.17 -r1.17.4.1 --- backtrace.c 10 Aug 2004 00:20:46 -0000 1.17 +++ backtrace.c 18 Oct 2004 22:50:07 -0000 1.17.4.1 @@ -28,7 +28,7 @@ #include "genesis/primitive-objects.h" #include "thread.h" -#ifndef LISP_FEATURE_X86 +#if !(defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64)) /* KLUDGE: Sigh ... I know what the call frame looks like and it had * better not change. */ Index: dynbind.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/dynbind.c,v retrieving revision 1.11 retrieving revision 1.11.4.1 diff -u -d -r1.11 -r1.11.4.1 --- dynbind.c 10 Aug 2004 00:20:46 -0000 1.11 +++ dynbind.c 18 Oct 2004 22:50:07 -0000 1.11.4.1 @@ -21,6 +21,7 @@ #include "genesis/symbol.h" #include "genesis/binding.h" #include "genesis/thread.h" +#include "genesis/static-symbols.h" #if defined(BINDING_STACK_POINTER) #define GetBSP() ((struct binding *)SymbolValue(BINDING_STACK_POINTER,thread)) Index: gencgc.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/gencgc.c,v retrieving revision 1.61 retrieving revision 1.61.2.1 diff -u -d -r1.61 -r1.61.2.1 --- gencgc.c 14 Sep 2004 17:25:17 -0000 1.61 +++ gencgc.c 18 Oct 2004 22:50:07 -0000 1.61.2.1 @@ -2168,7 +2168,9 @@ case SIMPLE_ARRAY_UNSIGNED_BYTE_8_WIDETAG: case SIMPLE_ARRAY_UNSIGNED_BYTE_15_WIDETAG: case SIMPLE_ARRAY_UNSIGNED_BYTE_16_WIDETAG: +#ifdef SIMPLE_ARRAY_UNSIGNED_BYTE_29_WIDETAG: case SIMPLE_ARRAY_UNSIGNED_BYTE_29_WIDETAG: +#endif case SIMPLE_ARRAY_UNSIGNED_BYTE_31_WIDETAG: case SIMPLE_ARRAY_UNSIGNED_BYTE_32_WIDETAG: #ifdef SIMPLE_ARRAY_SIGNED_BYTE_8_WIDETAG @@ -2256,7 +2258,9 @@ case SIMPLE_ARRAY_UNSIGNED_BYTE_8_WIDETAG: case SIMPLE_ARRAY_UNSIGNED_BYTE_15_WIDETAG: case SIMPLE_ARRAY_UNSIGNED_BYTE_16_WIDETAG: +#ifdef SIMPLE_ARRAY_UNSIGNED_BYTE_29_WIDETAG case SIMPLE_ARRAY_UNSIGNED_BYTE_29_WIDETAG: +#endif case SIMPLE_ARRAY_UNSIGNED_BYTE_31_WIDETAG: case SIMPLE_ARRAY_UNSIGNED_BYTE_32_WIDETAG: #ifdef SIMPLE_ARRAY_SIGNED_BYTE_8_WIDETAG @@ -3205,7 +3209,9 @@ case SIMPLE_ARRAY_UNSIGNED_BYTE_8_WIDETAG: case SIMPLE_ARRAY_UNSIGNED_BYTE_15_WIDETAG: case SIMPLE_ARRAY_UNSIGNED_BYTE_16_WIDETAG: +#ifdef SIMPLE_ARRAY_UNSIGNED_BYTE_29_WIDETAG case SIMPLE_ARRAY_UNSIGNED_BYTE_29_WIDETAG: +#endif case SIMPLE_ARRAY_UNSIGNED_BYTE_31_WIDETAG: case SIMPLE_ARRAY_UNSIGNED_BYTE_32_WIDETAG: #ifdef SIMPLE_ARRAY_SIGNED_BYTE_8_WIDETAG @@ -4003,10 +4009,11 @@ #endif void *new_obj; void *new_free_pointer; - + gc_assert(nbytes>0); /* Check for alignment allocation problems. */ gc_assert((((unsigned)region->free_pointer & 0x7) == 0) && ((nbytes & 0x7) == 0)); +#if 0 if(all_threads) /* there are a few places in the C code that allocate data in the * heap before Lisp starts. This is before interrupts are enabled, @@ -4024,6 +4031,7 @@ #else gc_assert(SymbolValue(PSEUDO_ATOMIC_ATOMIC,th)); #endif +#endif /* maybe we can do this quickly ... */ new_free_pointer = region->free_pointer + nbytes; Index: interrupt.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/interrupt.c,v retrieving revision 1.64 retrieving revision 1.64.2.1 diff -u -d -r1.64 -r1.64.2.1 --- interrupt.c 3 Oct 2004 00:57:14 -0000 1.64 +++ interrupt.c 18 Oct 2004 22:50:08 -0000 1.64.2.1 @@ -161,7 +161,7 @@ void build_fake_control_stack_frames(struct thread *th,os_context_t *context) { -#ifndef LISP_FEATURE_X86 +#ifndef LISP_FEATURE_C_STACK_IS_CONTROL_STACK lispobj oldcont; @@ -481,7 +481,7 @@ * actually use its argument for anything on x86, so this branch * may succeed even when context is null (gencgc alloc()) */ if ( -#ifndef LISP_FEATURE_X86 +#if !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64) (!foreign_function_call_active) && #endif arch_pseudo_atomic_atomic(context)) { @@ -680,6 +680,8 @@ *os_context_register_addr(context,reg_ECX) = 0; *os_context_register_addr(context,reg_EBP) = sp-2; *os_context_register_addr(context,reg_ESP) = sp-14; +#elif defined(LISP_FEATURE_X86_64) + lose("deferred gubbins still needs to be written"); #else /* this much of the calling convention is common to all non-x86 ports */ Index: monitor.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/monitor.c,v retrieving revision 1.25 retrieving revision 1.25.4.1 diff -u -d -r1.25 -r1.25.4.1 --- monitor.c 10 Aug 2004 00:20:47 -0000 1.25 +++ monitor.c 18 Oct 2004 22:50:08 -0000 1.25.4.1 @@ -176,17 +176,17 @@ { printf("CSP\t=\t0x%08lX\n", (unsigned long)current_control_stack_pointer); printf("FP\t=\t0x%08lX\n", (unsigned long)current_control_frame_pointer); -#if !defined(LISP_FEATURE_X86) +#if !(defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64)) printf("BSP\t=\t0x%08X\n", (unsigned long)current_binding_stack_pointer); #endif #if 0 -#ifdef LISP_FEATURE_X86 +#if (defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64)) printf("BSP\t=\t0x%08lx\n", (unsigned long)SymbolValue(BINDING_STACK_POINTER)); #endif printf("DYNAMIC\t=\t0x%08lx\n", (unsigned long)DYNAMIC_SPACE_START); -#if defined(LISP_FEATURE_X86) +#if (defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64)) printf("ALLOC\t=\t0x%08lx\n", (unsigned long)SymbolValue(ALLOCATION_POINTER)); #else @@ -393,7 +393,7 @@ printf("There are no active catchers!\n"); else { while (catch != NULL) { -#ifndef LISP_FEATURE_X86 +#if !(defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64)) printf("0x%08lX:\n\tuwp: 0x%08lX\n\tfp: 0x%08lX\n\tcode: 0x%08lx\n\tentry: 0x%08lx\n\ttag: ", (unsigned long)catch, (unsigned long)(catch->current_uwp), (unsigned long)(catch->current_cont), Index: parse.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/parse.c,v retrieving revision 1.13 retrieving revision 1.13.4.1 diff -u -d -r1.13 -r1.13.4.1 --- parse.c 10 Aug 2004 00:20:47 -0000 1.13 +++ parse.c 18 Oct 2004 22:50:08 -0000 1.13.4.1 @@ -258,7 +258,7 @@ /* Search dynamic space. */ headerptr = (lispobj *)DYNAMIC_SPACE_START; -#if !defined(LISP_FEATURE_X86) +#if !(defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64)) count = dynamic_space_free_pointer - (lispobj *)DYNAMIC_SPACE_START; Index: purify.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/purify.c,v retrieving revision 1.42 retrieving revision 1.42.2.1 diff -u -d -r1.42 -r1.42.2.1 --- purify.c 14 Sep 2004 17:25:17 -0000 1.42 +++ purify.c 18 Oct 2004 22:50:08 -0000 1.42.2.1 @@ -1404,7 +1404,7 @@ printf(" bindings"); fflush(stdout); #endif -#if !defined(LISP_FEATURE_X86) +#if !(defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64)) pscav( (lispobj *)all_threads->binding_stack_start, (lispobj *)current_binding_stack_pointer - all_threads->binding_stack_start, Index: runtime.h =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/runtime.h,v retrieving revision 1.17 retrieving revision 1.17.2.1 diff -u -d -r1.17 -r1.17.2.1 --- runtime.h 8 Sep 2004 16:05:14 -0000 1.17 +++ runtime.h 18 Oct 2004 22:50:08 -0000 1.17.2.1 @@ -45,13 +45,10 @@ /* even on alpha, int happens to be 4 bytes. long is longer. */ /* FIXME: these names really shouldn't reflect their length and this is not quite right for some of the FFI stuff */ -#if 64 == N_WORD_BITS -typedef unsigned long u32; -typedef signed long s32; -#else +typedef unsigned long u64; +typedef signed long s64; typedef unsigned int u32; typedef signed int s32; -#endif /* this is an integral type the same length as a machine pointer */ typedef unsigned long pointer_sized_uint_t ; Index: thread.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/thread.c,v retrieving revision 1.31 retrieving revision 1.31.4.1 diff -u -d -r1.31 -r1.31.4.1 --- thread.c 16 Aug 2004 18:19:15 -0000 1.31 +++ thread.c 18 Oct 2004 22:50:08 -0000 1.31.4.1 @@ -163,7 +163,7 @@ SetSymbolValue(BINDING_STACK_START,(lispobj)th->binding_stack_start,th); SetSymbolValue(CONTROL_STACK_START,(lispobj)th->control_stack_start,th); SetSymbolValue(CONTROL_STACK_END,(lispobj)th->control_stack_end,th); -#ifdef LISP_FEATURE_X86 +#if defined(LISP_FEATURE_X86) || defined (LISP_FEATURE_X86_64) SetSymbolValue(BINDING_STACK_POINTER,(lispobj)th->binding_stack_pointer,th); SetSymbolValue(ALIEN_STACK,(lispobj)th->alien_stack_pointer,th); SetSymbolValue(PSEUDO_ATOMIC_ATOMIC,(lispobj)th->pseudo_atomic_atomic,th); Index: thread.h =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/thread.h,v retrieving revision 1.12 retrieving revision 1.12.4.1 diff -u -d -r1.12 -r1.12.4.1 --- thread.h 6 Aug 2004 15:37:35 -0000 1.12 +++ thread.h 18 Oct 2004 22:50:08 -0000 1.12.4.1 @@ -43,7 +43,7 @@ #define for_each_thread(th) for(th=all_threads;th;th=0) #endif -static inline lispobj SymbolValue(u32 tagged_symbol_pointer, void *thread) { +static inline lispobj SymbolValue(u64 tagged_symbol_pointer, void *thread) { struct symbol *sym= (struct symbol *) (pointer_sized_uint_t)(tagged_symbol_pointer-OTHER_POINTER_LOWTAG); #ifdef LISP_FEATURE_SB_THREAD @@ -56,7 +56,7 @@ #endif return sym->value; } -static inline lispobj SymbolTlValue(u32 tagged_symbol_pointer, void *thread) { +static inline lispobj SymbolTlValue(u64 tagged_symbol_pointer, void *thread) { struct symbol *sym= (struct symbol *) (pointer_sized_uint_t)(tagged_symbol_pointer-OTHER_POINTER_LOWTAG); #ifdef LISP_FEATURE_SB_THREAD @@ -67,7 +67,7 @@ #endif } -static inline void SetSymbolValue(u32 tagged_symbol_pointer,lispobj val, void *thread) { +static inline void SetSymbolValue(u64 tagged_symbol_pointer,lispobj val, void *thread) { struct symbol *sym= (struct symbol *) (pointer_sized_uint_t)(tagged_symbol_pointer-OTHER_POINTER_LOWTAG); #ifdef LISP_FEATURE_SB_THREAD @@ -82,7 +82,7 @@ #endif sym->value = val; } -static inline void SetTlSymbolValue(u32 tagged_symbol_pointer,lispobj val, void *thread) { +static inline void SetTlSymbolValue(u64 tagged_symbol_pointer,lispobj val, void *thread) { #ifdef LISP_FEATURE_SB_THREAD struct symbol *sym= (struct symbol *) (pointer_sized_uint_t)(tagged_symbol_pointer-OTHER_POINTER_LOWTAG); |