Commit [fab1ba] Maximize Restore History

0.8.8.2:

Merge build patch ("building SBCL with Sun toolchain" Nikodemus
Siivola sbcl-devel 2004-02-05)
... add some assertions to ldso-stubs.lisp
... fix the conditional around dlopen()
... delete ~% pasteo from sparc-funcdef.sh

Christophe Rhodes Christophe Rhodes 2004-02-26

added tools-for-build/sparc-funcdef.sh
changed src/runtime/.cvsignore
changed src/runtime/sparc-assem.S
changed CREDITS
changed NEWS
changed make-config.sh
changed make-target-1.sh
changed version.lisp-expr
copied src/runtime/ldso-stubs.S -> tools-for-build/ldso-stubs.lisp
tools-for-build/sparc-funcdef.sh Diff Switch to side-by-side view
Loading...
src/runtime/.cvsignore Diff Switch to side-by-side view
Loading...
src/runtime/sparc-assem.S Diff Switch to side-by-side view
Loading...
CREDITS Diff Switch to side-by-side view
Loading...
NEWS Diff Switch to side-by-side view
Loading...
make-config.sh Diff Switch to side-by-side view
Loading...
make-target-1.sh Diff Switch to side-by-side view
Loading...
version.lisp-expr Diff Switch to side-by-side view
Loading...
src/runtime/ldso-stubs.S to tools-for-build/ldso-stubs.lisp
--- a/src/runtime/ldso-stubs.S
+++ b/tools-for-build/ldso-stubs.lisp
@@ -1,36 +1,61 @@
-/*
- * stubs for C-linkage library functions which we need to refer to 
- * from Lisp 
- *
- * (But note this is only the Linux version, as per the FIXME
- * note in the BSD version in undefineds.h.)
- *
- * These stubs exist for the benefit of Lisp code that needs to refer 
- * to foreign symbols when dlsym() is not available (i.e. when dumping
- * cold-sbcl.core, when we may be running in a host that's not SBCL,
- * or on platforms that don't have it at all). If the runtime is
- * dynamically linked, library functions won't be linked into it, so
- * the map file won't show them. So, we need a bunch of stubs that
- * nm(1) _can_ see.  
- */
-
-/*
- * 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.
- */
+;;;; Generate stubs for C-linkage library functions which we need to refer to 
+;;;; from Lisp.
+;;;;
+;;;; (But note this is only the Linux version, as per the FIXME
+;;;; note in the BSD version in undefineds.h.)
+;;;;
+;;;; These stubs exist for the benefit of Lisp code that needs to refer 
+;;;; to foreign symbols when dlsym() is not available (i.e. when dumping
+;;;; cold-sbcl.core, when we may be running in a host that's not SBCL,
+;;;; or on platforms that don't have it at all). If the runtime is
+;;;; dynamically linked, library functions won't be linked into it, so
+;;;; the map file won't show them. So, we need a bunch of stubs that
+;;;; nm(1) _can_ see.  
+;;;;
+;;;; 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.
+
+#!-sparc
+(defun ldso-stubify (fct str)
+  (format str "LDSO_STUBIFY(~A)~%" fct))
+
+;;; This is an attempt to follow DB's hint of sbcl-devel
+;;; 2001-09-18. -- CSR
+;;;
+;;; And an attempt to work around the Sun toolchain... --ns
+#!+sparc 
+(defun ldso-stubify (fct str)
+  (apply #'format str "
+.globl ldso_stub__~A ;                          \
+	FUNCDEF(ldso_stub__~A) ;                \
+ldso_stub__~A: ;                                \
+	sethi %hi(~A),%g1	;		\
+	jmpl %g1+%lo(~A),%g0	;		\
+	nop /* delay slot*/	;		\
+.L~Ae1: ;                                       \
+	.size	 ldso_stub__~A,.L~Ae1-ldso_stub__~A ;~%"
+          (make-list 9 :initial-element fct)))
+
+(defvar *preludes* '("
+/* This is an automatically generated file, please do not hand-edit it.
+ * See the program tools-for-build/ldso-stubs.lisp. */
+
 #define LANGUAGE_ASSEMBLY
-#include "sbcl.h"
-
-        .text
-
-#if defined LISP_FEATURE_X86
-	
+#include \"sbcl.h\""
+
+#!+sparc "
+#ifdef LISP_FEATURE_SPARC
+#include \"sparc-funcdef.h\"
+#endif
+        .text"
+
+#!+x86 "
 #define LDSO_STUBIFY(fct)                       \
 	.align 16 ;                             \
 .globl ldso_stub__ ## fct ;                     \
@@ -38,37 +63,36 @@
 ldso_stub__ ## fct: ;                           \
 	jmp fct ;                               \
 .L ## fct ## e1: ;                              \
-	.size	 ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ;
-
-#elif ((defined LISP_FEATURE_OSF1) && (defined LISP_FEATURE_ALPHA))
-/* osf1 has ancient cpp that doesn't do ## */
+	.size	 ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ;"
+
+;;; osf1 has ancient cpp that doesn't do ##
+#!+(and osf1 alpha) "
 #define LDSO_STUBIFY(fct)                       \
 .globl ldso_stub__/**/fct ;                     \
 ldso_stub__/**/fct: ;                           \
 	jmp fct ;                               \
-.L/**/fct/**/e1: ;                              
-
-
-#elif ((defined LISP_FEATURE_LINUX) && (defined LISP_FEATURE_ALPHA))	
-/* but there's no reason we need to put up with that on modern (Linux) OSes */
+.L/**/fct/**/e1: ;"
+
+;;; but there's no reason we need to put up with that on modern (Linux) OSes
+#!+(and linux alpha) "
 #define LDSO_STUBIFY(fct)                       \
 .globl ldso_stub__ ## fct ;                     \
 	.type	 ldso_stub__ ## fct,@function ; \
 ldso_stub__ ## fct: ;                           \
 	jmp fct ;                               \
 .L ## fct ## e1: ;                              \
-	.size	 ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ;
-
-#elif ((defined LISP_FEATURE_PPC) && (defined LISP_FEATURE_LINUX))
+	.size	 ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ;"
+
+#!+(and linux ppc) "
 #define LDSO_STUBIFY(fct)                       \
 .globl ldso_stub__ ## fct ;                     \
 	.type    ldso_stub__ ## fct,@function ; \
 ldso_stub__ ## fct: ;                           \
         b fct ;                                 \
 .L ## fct ## e1: ;                              \
-        .size    ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ;
-
-#elif ((defined LISP_FEATURE_PPC) && (defined LISP_FEATURE_DARWIN))
+        .size    ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ;"
+
+#!+(and darwin ppc) "
 #define LDSO_STUBIFY(fct)			@\
 .text                                           @\
 .globl  ldso_stub___ ## fct			@\
@@ -84,31 +108,15 @@
 .lazy_symbol_pointer				@\
 ldso_stub__ ## fct ## $lazy_ptr:		@\
 	.indirect_symbol _ ## fct		@\
-	.long dyld_stub_binding_helper
+	.long dyld_stub_binding_helper"
 	
-#elif defined LISP_FEATURE_SPARC
-	
-	/* This is an attempt to follow DB's hint of sbcl-devel
-	 * 2001-09-18. -- CSR */
-#define LDSO_STUBIFY(fct)                       \
-.globl ldso_stub__ ## fct ;                     \
-	.type	 ldso_stub__ ## fct,@function ; \
-ldso_stub__ ## fct: ;                           \
-	sethi %hi(fct),%g1	;		\
-	jmpl %g1+%lo(fct),%g0	;		\
-	nop /* delay slot*/	;		\
-.L ## fct ## e1: ;                              \
-	.size	 ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ;
-
-#elif defined LISP_FEATURE_MIPS
-
-/* KLUDGE: set up the vital fifth argument, passed on the 
-   stack.  Do this unconditionally, even if the stub is for a
-   function with few arguments: it can't hurt.  We only do this for
-   the fifth argument, as the first four are passed in registers
-   and we apparently don't ever need to pass six arguments to a
-   libc function.  -- CSR, 2003-10-29 */
-
+;;; KLUDGE: set up the vital fifth argument, passed on the 
+;;; stack.  Do this unconditionally, even if the stub is for a
+;;; function with few arguments: it can't hurt.  We only do this for
+;;; the fifth argument, as the first four are passed in registers
+;;; and we apparently don't ever need to pass six arguments to a
+;;; libc function.  -- CSR, 2003-10-29
+#!+mips "
 #define LDSO_STUBIFY(fct)                       \
 .globl ldso_stub__ ## fct ;                     \
 	.type	 ldso_stub__ ## fct,@function ; \
@@ -125,140 +133,139 @@
 	addiu $29,48  		; \
 	jr $31 			; \
 .L ## fct ## e1: ;                              \
-	.size	 ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ;
-	
-#else
-#error unsupported CPU architecture
-#endif
-	
- LDSO_STUBIFY(accept)
- LDSO_STUBIFY(access)
- LDSO_STUBIFY(acos)
- LDSO_STUBIFY(acosh)
- LDSO_STUBIFY(asin)
- LDSO_STUBIFY(asinh)
- LDSO_STUBIFY(atanh)
- LDSO_STUBIFY(bind)
- LDSO_STUBIFY(cfgetispeed)
- LDSO_STUBIFY(cfgetospeed)
- LDSO_STUBIFY(cfsetispeed)
- LDSO_STUBIFY(cfsetospeed)
- LDSO_STUBIFY(chmod)
- LDSO_STUBIFY(chown)
- LDSO_STUBIFY(close)
- LDSO_STUBIFY(closedir)
- LDSO_STUBIFY(connect)
- LDSO_STUBIFY(cosh)
- LDSO_STUBIFY(creat)
-#ifndef LISP_FEATURE_DARWIN
- LDSO_STUBIFY(dlclose)
- LDSO_STUBIFY(dlerror)
- LDSO_STUBIFY(dlopen)
- LDSO_STUBIFY(dlsym)
-#endif
- LDSO_STUBIFY(dup)
- LDSO_STUBIFY(dup2)
- LDSO_STUBIFY(execve)
- LDSO_STUBIFY(exit)
- LDSO_STUBIFY(fchmod)
- LDSO_STUBIFY(fchown)
- LDSO_STUBIFY(fcntl)
- LDSO_STUBIFY(fork)
- LDSO_STUBIFY(free)
- LDSO_STUBIFY(fstat)
- LDSO_STUBIFY(fsync)
- LDSO_STUBIFY(ftruncate)
- LDSO_STUBIFY(getcwd)
- LDSO_STUBIFY(getdtablesize)
- LDSO_STUBIFY(getegid)
- LDSO_STUBIFY(getenv)
- LDSO_STUBIFY(getgid)
- LDSO_STUBIFY(gethostbyaddr)
- LDSO_STUBIFY(gethostbyname)
- LDSO_STUBIFY(gethostname)
- LDSO_STUBIFY(getitimer)
- LDSO_STUBIFY(getpagesize)
- LDSO_STUBIFY(getpeername)
- LDSO_STUBIFY(getpgrp)
- LDSO_STUBIFY(getpid)
- LDSO_STUBIFY(getppid)
- LDSO_STUBIFY(getrusage)
- LDSO_STUBIFY(getsockname)
- LDSO_STUBIFY(gettimeofday)
- LDSO_STUBIFY(getuid)
- LDSO_STUBIFY(hypot)
- LDSO_STUBIFY(ioctl)
- LDSO_STUBIFY(isatty)
- LDSO_STUBIFY(kill)
- LDSO_STUBIFY(killpg)
- LDSO_STUBIFY(link)
- LDSO_STUBIFY(listen)
- LDSO_STUBIFY(log1p)
- LDSO_STUBIFY(lseek)
- LDSO_STUBIFY(lstat)
- LDSO_STUBIFY(malloc)
- LDSO_STUBIFY(memmove)
- LDSO_STUBIFY(mkdir)
- LDSO_STUBIFY(open)
- LDSO_STUBIFY(opendir)
- LDSO_STUBIFY(pipe)
- LDSO_STUBIFY(pow)
- LDSO_STUBIFY(read)
- LDSO_STUBIFY(readdir)
- LDSO_STUBIFY(readlink)
- LDSO_STUBIFY(recv)
- LDSO_STUBIFY(rename)
- LDSO_STUBIFY(rmdir)
- LDSO_STUBIFY(select)
- LDSO_STUBIFY(send)
- LDSO_STUBIFY(setitimer)
- LDSO_STUBIFY(setpgrp)
- LDSO_STUBIFY(setsid)
-#if !defined(SVR4)
- LDSO_STUBIFY(sigsetmask)
-#endif
- LDSO_STUBIFY(sinh)
- LDSO_STUBIFY(socket)
- LDSO_STUBIFY(stat)
- LDSO_STUBIFY(strerror)
- LDSO_STUBIFY(strlen)
- LDSO_STUBIFY(symlink)
- LDSO_STUBIFY(sync)
- LDSO_STUBIFY(tanh)
- LDSO_STUBIFY(tcdrain)
- LDSO_STUBIFY(tcflow)
- LDSO_STUBIFY(tcflush)
- LDSO_STUBIFY(tcgetattr)
- LDSO_STUBIFY(tcsendbreak)
- LDSO_STUBIFY(tcsetattr)
- LDSO_STUBIFY(truncate)
- LDSO_STUBIFY(ttyname)
- LDSO_STUBIFY(tzname)
- LDSO_STUBIFY(unlink)
- LDSO_STUBIFY(utimes)
- LDSO_STUBIFY(wait3)	
- LDSO_STUBIFY(write)
-
-/*
- * These aren't needed on the X86 because they're microcoded into the
- * FPU, so the Lisp VOPs can implement them directly without having to
- * call C code.
- *
- * Note: There might be some other functions in this category as well.
- * E.g. I notice tanh() and acos() in the list above.. -- WHN 2001-06-07
- */
-#if !defined LISP_FEATURE_X86
- LDSO_STUBIFY(sin)
- LDSO_STUBIFY(cos) 
- LDSO_STUBIFY(tan)      
- LDSO_STUBIFY(atan) 
- LDSO_STUBIFY(atan2) 
- LDSO_STUBIFY(exp)      
- LDSO_STUBIFY(log) 
- LDSO_STUBIFY(log10) 
- LDSO_STUBIFY(sqrt) 
-#endif
-#if defined alpha
- LDSO_STUBIFY(ieee_get_fp_control)
- LDSO_STUBIFY(ieee_set_fp_control)
-#endif
+	.size	 ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ;"))
+
+(defvar *stubs* (append
+                 '("accept"
+                   "access"
+                   "acos"
+                   "acosh"
+                   "asin"
+                   "asinh"
+                   "atanh"
+                   "bind"
+                   "cfgetispeed"
+                   "cfgetospeed"
+                   "cfsetispeed"
+                   "cfsetospeed"
+                   "chmod"
+                   "chown"
+                   "close"
+                   "closedir"
+                   "connect"
+                   "cosh"
+                   "creat"
+                   "dup"
+                   "dup2"
+                   "execve"
+                   "exit"
+                   "fchmod"
+                   "fchown"
+                   "fcntl"
+                   "fork"
+                   "free"
+                   "fstat"
+                   "fsync"
+                   "ftruncate"
+                   "getcwd"
+                   "getdtablesize"
+                   "getegid"
+                   "getenv"
+                   "getgid"
+                   "gethostbyaddr"
+                   "gethostbyname"
+                   "gethostname"
+                   "getitimer"
+                   "getpagesize"
+                   "getpeername"
+                   "getpgrp"
+                   "getpid"
+                   "getppid"
+                   "getrusage"
+                   "getsockname"
+                   "gettimeofday"
+                   "getuid"
+                   "hypot"
+                   "ioctl"
+                   "isatty"
+                   "kill"
+                   "killpg"
+                   "link"
+                   "listen"
+                   "log1p"
+                   "lseek"
+                   "lstat"
+                   "malloc"
+                   "memmove"
+                   "mkdir"
+                   "open"
+                   "opendir"
+                   "pipe"
+                   "pow"
+                   "read"
+                   "readdir"
+                   "readlink"
+                   "recv"
+                   "rename"
+                   "rmdir"
+                   "select"
+                   "send"
+                   "setitimer"
+                   "setpgrp"
+                   "setsid"
+                   "sinh"
+                   "socket"
+                   "stat"
+                   "strerror"
+                   "strlen"
+                   "symlink"
+                   "sync"
+                   "tanh"
+                   "tcdrain"
+                   "tcflow"
+                   "tcflush"
+                   "tcgetattr"
+                   "tcsendbreak"
+                   "tcsetattr"
+                   "truncate"
+                   "ttyname"
+                   "tzname"
+                   "unlink"
+                   "utimes"
+                   "wait3"	
+                   "write")
+                 ;; These aren't needed on the X86 because they're microcoded into the
+                 ;; FPU, so the Lisp VOPs can implement them directly without having to
+                 ;; call C code.
+                 ;;
+                 ;; Note: There might be some other functions in this category as well.
+                 ;; E.g. I notice tanh() and acos() in the list above.. -- WHN 2001-06-07
+                 #!-x86 
+                 '("sin"
+                   "cos" 
+                   "tan"      
+                   "atan" 
+                   "atan2" 
+                   "exp"      
+                   "log" 
+                   "log10" 
+                   "sqrt")
+                 #!+alpha
+                 '("ieee_get_fp_control"
+                   "ieee_set_fp_control")
+                 #!-darwin
+                 '("dlclose"
+                   "dlerror"
+                   "dlopen"
+                   "dlsym")
+                 #!-(and sparc sunos) ;; !defined(SVR4)
+                 '("sigsetmask")))
+
+(with-open-file (f "src/runtime/ldso-stubs.S" :direction :output :if-exists :supersede)
+  (assert (= (length *preludes*) 2))
+  (dolist (pre *preludes*)
+    (write-line pre f))
+  (dolist (stub *stubs*)
+    (check-type stub string)
+    (ldso-stubify stub f)))
+