From 3c36067afdc35afa7d4a6dd381f8cba456c88f34 Mon Sep 17 00:00:00 2001 From: Nikodemus Siivola Date: Thu, 20 Dec 2007 14:24:31 +0000 Subject: [PATCH] 1.0.12.40: NetBSD/Sparc port by Robert Swindells * No NEWS entry yet, until someone can confirm this does what it says on the tin. :) * A random smattering of CREDITS updates. --- CREDITS | 19 ++++++-- src/compiler/sparc/parms.lisp | 17 +++++++ src/runtime/Config.sparc-netbsd | 27 +++++++++++ src/runtime/sparc-bsd.c | 99 +++++++++++++++++++++++++++++++++++++++ src/runtime/sparc-netbsd.h | 12 +++++ version.lisp-expr | 2 +- 6 files changed, 171 insertions(+), 5 deletions(-) create mode 100644 src/runtime/Config.sparc-netbsd create mode 100644 src/runtime/sparc-bsd.c create mode 100644 src/runtime/sparc-netbsd.h diff --git a/CREDITS b/CREDITS index e74f55d..8c015e4 100644 --- a/CREDITS +++ b/CREDITS @@ -524,7 +524,8 @@ Zach Beane: original timer facility on which SBCL's timers are based. James Bielman: - He assisted in work on the port to the Windows operating system. + He assisted in work on the port to the Windows operating system, and + was instrumental in :EXECUTABLE support for SAVE-LISP-AND-DIE. Alastair Bridgewater: He contributed a port of the system to the Windows operating system. @@ -627,6 +628,11 @@ Yaroslav Kavenchuk: the win32 port. He also worked on external-format support for SB-ALIEN. +Richard M Kreyter: + He added documentation support for CLOS slot readers and writers, + provided several SB-POSIX and NetBSD patches, and cleaned up + several of the filesystem/pathname interfaces. + Frederik Kuivinen: He showed how to implement the DEBUG-RETURN functionality. @@ -695,7 +701,9 @@ William ("Bill") Newman: rid of various functionality (e.g. the byte interpreter). NIIMI Satoshi: - He contributed a number of fixes to the FreeBSD port. + He contributed a number of fixes to the FreeBSD port, implemented + some external-formats and JOIN-THREAD, and also worked on + the :EXECUTABLE support. Patrik Nordebo: He contributed to the port of SBCL to MacOS X, finding solutions for @@ -751,8 +759,8 @@ Julian Squires: Nikodemus Siivola: He provided build fixes, in particular to tame the SunOS toolchain, implemented package locks, ported the linkage-table code from CMUCL, - reimplemented STEP, and has fixed many (stream-related and other) bugs - besides. + reimplemented STEP, implemented the compare-and-swap interface, and + has fixed many bugs besides. Juho Snellman: He provided a number of bug fixes and performance enhancements to @@ -767,6 +775,9 @@ Brian Spilsbury: in the system, but did to a large extent influence the support which finally did get merged.) +Robert Swindells: + He ported SBCL to NetBSD/Sparc. + Raymond Toy: He continued to work on CMU CL after the SBCL fork, especially on floating point stuff. Various patches and fixes of his have been diff --git a/src/compiler/sparc/parms.lisp b/src/compiler/sparc/parms.lisp index 11c5b1e..55b5c26 100644 --- a/src/compiler/sparc/parms.lisp +++ b/src/compiler/sparc/parms.lisp @@ -124,6 +124,23 @@ (def!constant dynamic-1-space-start #x40000000) (def!constant dynamic-1-space-end #x48000000)) +#!+netbsd ; Need a gap at 0x4000000 for shared libraries +(progn + (def!constant linkage-table-space-start #x0f800000) + (def!constant linkage-table-space-end #x10000000) + + (def!constant read-only-space-start #x10000000) + (def!constant read-only-space-end #x15000000) + + (def!constant static-space-start #x18000000) + (def!constant static-space-end #x1c000000) + + (def!constant dynamic-0-space-start #x20000000) + (def!constant dynamic-0-space-end #x38000000) + + (def!constant dynamic-1-space-start #x48000000) + (def!constant dynamic-1-space-end #x60000000)) + ;; Size of one linkage-table entry in bytes. See comment in ;; src/runtime/sparc-arch.c (def!constant linkage-table-entry-size 16) diff --git a/src/runtime/Config.sparc-netbsd b/src/runtime/Config.sparc-netbsd new file mode 100644 index 0000000..ec95cf8 --- /dev/null +++ b/src/runtime/Config.sparc-netbsd @@ -0,0 +1,27 @@ +# -*- makefile -*- for the C-level run-time support for SBCL + +# This software is part of the SBCL system. See the README file for +# more information. +# +# This software is derived from the CMU CL system, which was +# written at Carnegie Mellon University and released into the +# public domain. The software is in the public domain and is +# provided with absolutely no warranty. See the COPYING and CREDITS +# files for more information. + +CC = gcc +CFLAGS += -g -Wall -O2 +LINKFLAGS += -v +NM = nm -t x -p + +ASSEM_SRC = sparc-assem.S ldso-stubs.S +ARCH_SRC = sparc-arch.c undefineds.c + +OS_SRC = bsd-os.c sparc-bsd-os.c +OS_LIBS = # -ldl + +GC_SRC = cheneygc.c + +# Nothing to do for after-grovel-headers. +.PHONY: after-grovel-headers +after-grovel-headers: diff --git a/src/runtime/sparc-bsd.c b/src/runtime/sparc-bsd.c new file mode 100644 index 0000000..3d21d9f --- /dev/null +++ b/src/runtime/sparc-bsd.c @@ -0,0 +1,99 @@ +/* + * This is the SPARC BSD incarnation of arch-dependent OS-dependent + * routines. See also "linux-os.c". + */ + +/* + * This software is part of the SBCL system. See the README file for + * more information. + * + * This software is derived from the CMU CL system, which was + * written at Carnegie Mellon University and released into the + * public domain. The software is in the public domain and is + * provided with absolutely no warranty. See the COPYING and CREDITS + * files for more information. + */ + +#include +#include +#include +#include "sbcl.h" +#include "./signal.h" +#include "os.h" +#include "arch.h" +#include "globals.h" +#include "interrupt.h" +#include "interr.h" +#include "lispregs.h" +#include +#include + +#include +#include +#include +#include +#include + +#include "validate.h" + +#ifdef LISP_FEATURE_SB_THREAD +#error "Define threading support functions" +#else +int arch_os_thread_init(struct thread *thread) { + return 1; /* success */ +} +int arch_os_thread_cleanup(struct thread *thread) { + return 1; /* success */ +} +#endif + +os_context_register_t * +os_context_register_addr(os_context_t *context, int offset) +{ + if (offset == 0) { + static int zero; + zero = 0; + return &zero; + } else if (offset < 16) { + return &context->uc_mcontext.__gregs[offset+3]; + } else if (offset < 32) { + /* FIXME: You know, this (int *) stuff looks decidedly + dubious */ + int *sp = (int*) _UC_MACHINE_SP(context); + return &(sp[offset-16]); + } else { + return 0; + } +} + +os_context_register_t * +os_context_pc_addr(os_context_t *context) +{ + return &(context->uc_mcontext.__gregs[_REG_PC]); +} + +os_context_register_t * +os_context_npc_addr(os_context_t *context) +{ + return &(context->uc_mcontext.__gregs[_REG_nPC]); +} + +#ifdef SOLARIS +sigset_t * +os_context_sigmask_addr(os_context_t *context) +{ + return &(context->uc_sigmask); +} +#endif + +unsigned long +os_context_fp_control(os_context_t *context) +{ + return (context->uc_mcontext.__fpregs.__fpu_fsr); +} + +void os_flush_icache(os_vm_address_t address, os_vm_size_t length) +{ + /* see sparc-assem.S */ + sparc_flush_icache(address, length); +} diff --git a/src/runtime/sparc-netbsd.h b/src/runtime/sparc-netbsd.h new file mode 100644 index 0000000..84ac8d3 --- /dev/null +++ b/src/runtime/sparc-netbsd.h @@ -0,0 +1,12 @@ +#ifndef _SPARC_BSD_OS_H +#define _SPARC_BSD_OS_H + +typedef unsigned long os_context_register_t; +#define DARWIN_FIX_CONTEXT(context) + +static inline os_context_t *arch_os_get_context(void **void_context) { + asm volatile ("ta 0x03"); /* ta ST_FLUSH_WINDOWS */ + return (os_context_t *) (*void_context); +} + +#endif /* _SPARC_BSD_OS_H */ diff --git a/version.lisp-expr b/version.lisp-expr index e9a76ce..6a60020 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; 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.39" +"1.0.12.40" -- 1.7.10.4