Nikodemus Siivola [Sun, 19 Sep 2010 21:33:31 +0000 (21:33 +0000)]
1.0.42.45: more descriptive errors for exceeding FD_SETSIZE
Instead of a type-error whose meaning is pretty opaque to an average
user, signal an error with a descriptive message.
Add bug numbers to the previous select()/poll() changes in NEWS.
Nikodemus Siivola [Sun, 19 Sep 2010 20:11:58 +0000 (20:11 +0000)]
1.0.42.44: oops, this bit was not supposed to go in...
Nikodemus Siivola [Sun, 19 Sep 2010 20:08:47 +0000 (20:08 +0000)]
1.0.42.43: FD-STREAMS no longer hook into SERVE-EVENT by default
* SOCKET-MAKE-STREAM, and MAKE-FD-STREAM have new keyword
argument :SERVE-EVENTS which requests that blocking IO on the
stream should dispatch to SERVE-EVENT. For SOCKET-MAKE-STREAM the
default is T, for MAKE-FD-STREAM the default it NIL.
* Don't call SYSREAD-MAY-BLOCK-P at all unless we need to to handle
events or check for timeout.
* Make WAIT-UNTIL-FD-USABLE use UNIX-SIMPLE-POLL instead of going
into SUB-SERVE-EVENT when appropriate:
** Explicit requests to not serve events.
** Timeout 0.
** No other handlers and no periodic polling function.
* When FD-STREAM-SERVE-EVENTS is false but write returns EWOULDBLOCK,
don't queue output but wait till poll(2) says we can go.
* UNIX-SIMPLE-POLL uses poll() only on platforms where a build-time
test shows it to exist and work as expected. Elsewhere it is built
on top of good 'ol select().
Nikodemus Siivola [Sun, 19 Sep 2010 19:09:21 +0000 (19:09 +0000)]
1.0.42.42: hack around *AUTO-EVAL-IN-FRAME* issues
When frame doesn't have sufficient debug information and
*AUTO-EVAL-IN-FRAME* is true -- the default -- the debugger REPL
becomes useless in the frame. Oops.
So, in those cases punt to regular EVAL instead -- which is the right
thing most of the time. To avoid confusion by DWIM, tell the user
when punting to global context.
Nikodemus Siivola [Sun, 19 Sep 2010 14:14:15 +0000 (14:14 +0000)]
1.0.42.41: use poll(2) instead of select(2) in SYSREAD-MAY-BLOCK-P
Calling select() with a single FD is just waste.
This also means that we don't use select() outside of serve-event,
paving way to having more fds open than FD_SETSIZE allows.
Nikodemus Siivola [Sun, 19 Sep 2010 13:36:30 +0000 (13:36 +0000)]
1.0.42.40: replace hardcoded FD-SETSIZE with a groveled one
Nikodemus Siivola [Sun, 19 Sep 2010 13:07:37 +0000 (13:07 +0000)]
1.0.42.39: workaround for lp#308914
Detect and escape from endless loops in ORDER-UVL-SETS.
Nikodemus Siivola [Sun, 19 Sep 2010 12:41:58 +0000 (12:41 +0000)]
1.0.42.38: fix SB-INTROSPECT:VALID-FUNCTION-NAME-P docstring
lp#641896
Nikodemus Siivola [Mon, 13 Sep 2010 11:04:00 +0000 (11:04 +0000)]
1.0.42.37: use more NAMED-LAMBDAs in PCL generated code
Previously backtraces and profiles showed eg.
(LAMBDA (.ARG0. .ARG1. .ARG2.))
for effective method functions, and
(LAMBDA (VALUE))
for slot typechecking functions.
Use NAMED-LAMBDA to name these sensibly:
(DFUN <generic-function-name>)
(SLOT-TYPECHECK <class-name> <slot-name>)
Nathan Froyd [Fri, 10 Sep 2010 23:06:09 +0000 (23:06 +0000)]
1.0.42.36: micro-optimize x86 assembly comparison VOPs
No need to load the address of the assembly routine into a temporary
register, as we do on x86-64. We can jump to the address directly
with CALL.
Alastair Bridgewater [Wed, 8 Sep 2010 01:12:16 +0000 (01:12 +0000)]
1.0.42.35: tests: Update :fails-on clause for a test
* Test dynamic-extent.impure.lisp / BUG-586105 expects that both
lists and vectors can be stack-allocated, but not all platforms
support this. Fortunately, the platforms that do support it also
have a feature conditional for it. Added a :fails-on clause to
the test.
Alastair Bridgewater [Wed, 8 Sep 2010 01:04:41 +0000 (01:04 +0000)]
1.0.42.34: threads: Consolidate thread-specific static symbols
* The x86, x86-64 and ppc backends all had the same three static
symbols used for threading. Rather than having each backend add
the same symbols to the static symbol list, add them to the list
of common static symbols. In the unlikely(?) event that we commit
a threaded port to mainline that doesn't use these symbols, we can
revisit this change.
Alastair Bridgewater [Sun, 5 Sep 2010 17:01:01 +0000 (17:01 +0000)]
1.0.42.33: ppc: Improve pseudo-atomic implementation
* The runtime (ppc-assem.S) used a shorter, more concise
sequence of instructions for testing pseudo-atomic than the
compiler (ppc/macros.lisp) did. Altered the compiler to use
the same sequence as the runtime.
* Both the compiler and the runtime used magic numbers in the
pseudo-atomic sequence instead of using named constants.
Fixed, using the existing named constants.
Christophe Rhodes [Sat, 4 Sep 2010 08:01:27 +0000 (08:01 +0000)]
1.0.42.32: fix for lp#611361
Only omit IGNORE declarations for required method parameters, not all
parameters.
Nikodemus Siivola [Fri, 3 Sep 2010 13:28:34 +0000 (13:28 +0000)]
1.0.42.31: fix build with clisp 2.49
Patch by Josh Elsasser, lp#629144.
Previously, if a clisp 2.49 host was used, the build failed during
make-host-1 in src/code/cross-sap.lisp with several "redefining SETF
expander" errors. The same *suppress-check-redefinition* fix used in
make-host-2 is enough to placate clisp and allow the build to finish
successfully.
Nikodemus Siivola [Fri, 3 Sep 2010 13:24:49 +0000 (13:24 +0000)]
1.0.42.30: missing docstring for GET-PROTOCOL-BY-NAME
Patch by Jim Wise, lp#628885.
Nikodemus Siivola [Fri, 3 Sep 2010 13:21:57 +0000 (13:21 +0000)]
1.0.42.29: tweak run-program.impure.lisp
Make READ-LINEISH less bogus.
Fixes lp#628887, I hope.
Nikodemus Siivola [Fri, 3 Sep 2010 13:01:32 +0000 (13:01 +0000)]
1.0.42.28: package locks to guard against DEFMACRO -> DEFUN and vice-versa
* Fixes lp#576637.
* PROCLAIM-AS-FUN-NAME is called quite often at compile time, but actually
does something we care about only rarely -- assert the lock only when
something changes, so that
(WITHOUT-PACKAGE-LOCKS (DEFUN LOCKED:FOO ...))
keeps working for the common case.
* Similar logic in %DEFMACRO.
* Some tests adjusted.
Alastair Bridgewater [Fri, 3 Sep 2010 05:47:27 +0000 (05:47 +0000)]
1.0.42.27: cleanup: My last commit was supposed to be .27
* My export shell script had a bug, introduced during
refactoring, causing it to read the wrong version.lisp-expr
to determine the old version number, thus causing the
version number to not be incremented after the first commit
in the series. What I get for trying to be too clever.
* Updated version.lisp-expr, gave an explanatory comment
in the commit message (this commit message).
Alastair Bridgewater [Fri, 3 Sep 2010 00:32:49 +0000 (00:32 +0000)]
1.0.42.26: git: Add a couple of new patterns to .gitignore
* One or more tests tend to create .so files in the tests/
directory. Ignore "tests/*.so".
* The process of building the manual produces a couple of .html
files in the doc/manual/ directory. Ignore "doc/manual/*.html".
Alastair Bridgewater [Fri, 3 Sep 2010 00:26:50 +0000 (00:26 +0000)]
1.0.42.26: tests: Fix broken :fails-on clause for a dynamic-extent.impure test
* Test case dynamic-extent.impure.lisp / (:NO-CONSING
:HASH-TABLES) fails on threaded PPC targets, but because the
clause was not quoted, it evaluated to all threaded targets,
which was wrong. My mistake, too.
* Added NEWS entry forgotten in 1.0.42.23, also my mistake.
Nikodemus Siivola [Thu, 2 Sep 2010 14:33:05 +0000 (14:33 +0000)]
1.0.42.25: check parent-lambdas in defined-fun-functional
* Fixes lp#308951.
* REFERENCE-LEAF could gain access to a functional in a strange
lexenv using DEFINED-FUN-FUNCTIONAL, messing up access to bindings.
Don't return a functional if the current lexenvs parent-lambda chain
does not hold the parent of the functional.
Also provides a more elegant fix for MISC.320.
Nikodemus Siivola [Thu, 2 Sep 2010 08:14:31 +0000 (08:14 +0000)]
1.0.42.24: print symbols with fully qualified names in critical places
Patch by Attila Lendvai, lp#622789.
Less room for package confusion this way.
Alastair Bridgewater [Thu, 2 Sep 2010 00:34:28 +0000 (00:34 +0000)]
1.0.42.23: x86-64: Fix passing of unboxed complex float arguments.
* This has been broken since 1.0.27.14 (x86oid frame pointer
bias).
* The "move-arg" VOPs for complex floats required a different
adjustment when being placed relative to the normal frame base
pointer, due to the bias, than when being placed relative to
other base pointers. Unfortunately, a new requirement was also
added that restricted the appropriate registers for use as
frame base pointers to one, and one which would not normally be
selected, leading to "Unexpected offset" errors.
* Removed the restriction.
* The logic in EA-FOR-CXF-STACK is still broken: The frame bias
is only applied when the frame pointer is RSP, which will never
happen, and is not applied when the frame pointer is any other
register. At the same time, so far as I can tell, the bias seems
to be unneccessary.
* Bug reported by sykopomp in #lispgames.
Alastair Bridgewater [Thu, 2 Sep 2010 00:34:13 +0000 (00:34 +0000)]
1.0.42.22: x86-64: Add test case for unboxed complex float arguments.
* This has been broken since 1.0.27.14.
Nikodemus Siivola [Wed, 1 Sep 2010 18:11:09 +0000 (18:11 +0000)]
1.0.42.21: grab-bag of Solaris related fixes
Patch by Jim Wise, lp#627581.
* make make-doc.sh work on SunOS (due to old /bin/sh)
* avoid the struct dirent distrust-length build issue in sb-posix
* fix an issue in the run-program.ed test
* add .html to .cvsignore
Nikodemus Siivola [Wed, 1 Sep 2010 17:21:07 +0000 (17:21 +0000)]
1.0.42.20: use platform-dependent CFLAGS consistently in tests
Patch by Josh Elsasser, lp#615499.
In his words:
"Attached is a patch which moves all the duplicated, out-of-sync C
compiler flag selection in the tests into a single wrapper script.
When passed a flag like -sbcl-pic or -sbcl-shared, the script will
decided if -fPIC or -shared/-bundle is needed based on SOFTWARE-TYPE
and MACHINE-TYPE which SBCL has passed in the environment.
I tested this on several x86 OSes and a couple PowerPC, as well as
SunOS on SPARC and OpenBSD on x86-64. For the -sbcl-pic case I have
verified that -fPIC is needed on OpenBSD-PowerPC, OpenBSD-X86-64,
SunOS-SPARC and SunOS-X86; the other cases are guesses based on the
existing reader conditionals. It is not needed on Darwin or Linux on
PowerPC, or on any x86 OSes I tested aside from SunOS.
I haven't verified that -arch x86_64 is actually needed on
Darwin-X86-64, or that something like -m64 isn't needed on other
X86-64 OSes (aside from OpenBSD)."
Nikodemus Siivola [Wed, 1 Sep 2010 16:57:12 +0000 (16:57 +0000)]
1.0.42.19: make SB-CONCURRENCY more GC friendly
* Patch by "3b", lp#628098.
* Break chains of detached nodes, so conservativism won't kill us.
Nikodemus Siivola [Wed, 1 Sep 2010 16:09:24 +0000 (16:09 +0000)]
1.0.42.18: let's take that again
Previous commit was supposed to have this commit message:
"OpenBSD build fix -- signal handlers need to lead FPU control word"
* Patch by Josh Elsasser, lp#615492.
In his words:
OpenBSD/amd64 recently began running signal handlers with a clean
FPU state, making it necessary to load the floating point control
word. The attached patch does exactly this, and works equally well
on OpenBSD systems from both before and after the signal handler
change was made.
This patch is necessary to build SBCL x86-64 on recent -current
snapshots of OpenBSD, and for the upcoming 4.8 release.
* Committing untested, as I don't have OpenBSD handy.
Nikodemus Siivola [Wed, 1 Sep 2010 16:05:17 +0000 (16:05 +0000)]
1.0.42.17: better host lisp fasl-type logic
* Patch by Josh Elsasser, lp#615492.
In his words:
OpenBSD/amd64 recently began running signal handlers with a clean
FPU state, making it necessary to load the floating point control
word. The attached patch does exactly this, and works equally well
on OpenBSD systems from both before and after the signal handler
change was made.
This patch is necessary to build SBCL x86-64 on recent -current
snapshots of OpenBSD, and for the upcoming 4.8 release.
* Committing untested, as I don't have OpenBSD handy.
Nikodemus Siivola [Wed, 1 Sep 2010 15:46:18 +0000 (15:46 +0000)]
1.0.42.17: better host lisp fasl-type logic
* Patch by "nixeagle", lp#592903.
Use COMPILE-FILE-PATHNAME to figure out the right pathname-type.
Nikodemus Siivola [Wed, 1 Sep 2010 15:27:07 +0000 (15:27 +0000)]
1.0.42.16: better RANDOM type-error reporting
* Since RANDOM has an explicit check for the type, use the EXPLICIT-CHECK
flag in the DEFKNOWN...
* Patch by Stas Boukarev, lp#598986.
Nikodemus Siivola [Wed, 1 Sep 2010 14:42:09 +0000 (14:42 +0000)]
1.0.42.15: prevent inline expansion from creating refs to dead lambda-vars
* Fixes lp#454681.
* Patch by Alexey. In his words, in reference to the test-case:
(multiple-value-bind (iterator+977 getter+978)
(does-not-exist-but-does-not-matter)
(flet ((iterator+976 ()
(funcall iterator+977)))
(declare (inline iterator+976))
(let ((iterator+976 #'iterator+976))
(funcall iterator+976)))))
Inline expansion of ITERATOR+976 tries to refer to a dead
LAMBDA-VAR ITERATOR+977 of varargs entry, which was substituted
with ITERATOR+977 of &OPTIONAL processor. Thus the referenced
variable is dead and is not bound anywhere.
The attached patch fixes the problem by giving up on inline
expansion if it tries to make a reference to a dead LAMBDA-VAR,
similar to the way dead BLOCK tags are treated.
Nikodemus Siivola [Wed, 1 Sep 2010 14:14:55 +0000 (14:14 +0000)]
1.0.42.14: socket-connect thread safety, version 2
* Code from 1.0.40.7 to use getprotobyname_r.
* Use grovel-features.sh to check for its and getprotobynumber_r's
existence, and add feature :os-provides-getprotoby-r when so.
If they do not exist, use a lock instead.
Nikodemus Siivola [Wed, 1 Sep 2010 12:26:00 +0000 (12:26 +0000)]
1.0.42.13: update ASDF to 2.004
* Patch by Faré Rideau, lp#605260.
(Not quite as-is: I split the git scripting from the makefile into
pull-asdf.sh for clarity.)
Nikodemus Siivola [Wed, 1 Sep 2010 11:53:16 +0000 (11:53 +0000)]
1.0.42.11: reinline nested LIST and VECTOR calls in MAKE-ARRAY initial-contents
* Fixes lp#586105.
* The source transform for MAKE-ARRAY makes LIST and VECTOR notinline
so that the deftransforms can pick initial-contents and dimensions
apart.
However, when a list or vector in initial-contents is not part of
the initialization structure but an actual initialization value,
then notinline loses both performance in general, and foils nested
DX in particular.
So, walk the initial-contents and restore inlining for the actual
initialization values.
Nikodemus Siivola [Wed, 1 Sep 2010 09:15:14 +0000 (09:15 +0000)]
1.0.42.11: SB-EXT:WORD for use with ATOMIC-INCF &co
(Symbol previously known as SB-VM:WORD.)
* Requiring users to #+ their way to (UNSIGNED-BYTE 32) and 64 is
just mean and brittle.
Nikodemus Siivola [Tue, 31 Aug 2010 15:23:50 +0000 (15:23 +0000)]
1.0.42.10: guard against time travel by getrusage()
* Fixes lp#544421, we hope.
* Apparently sometimes getrusage() returns a smaller value on second
call -- this seems to happen under pretty extreme loads, mostly --
which we want to guard against.
Nikodemus Siivola [Tue, 31 Aug 2010 14:29:15 +0000 (14:29 +0000)]
1.0.42.9: fix defmethod declarations for aliases of builtin classes as specializers
* Fixes lp#618387.
* When we have a :defined class that we want a type declaration for, don't use
the name we used to look up the class, but the CLASS-NAME of the class.
Nikodemus Siivola [Tue, 31 Aug 2010 13:04:54 +0000 (13:04 +0000)]
1.0.42.8: fix build on OpenBSD/i386 -current and upcoming 4.8 release
* Patch by Josh Elsasser, lp#615489.
* On OpenBSD/i386, the structure that stores the FPU state during
signals was recently moved.
Add a script to tools-for-build/ which is run from make-config.sh
to detect where the FPU state is located, and create a
src/runtime/openbsd-sigcontext.h header containing a #define which
src/runtime/x86-bsd-os.c can use.
This is necessary to build SBCL on recent -current snapshots of
OpenBSD, and for the upcoming 4.8 release.
* Missing NEWS entry for last commit.
Nikodemus Siivola [Tue, 31 Aug 2010 12:46:41 +0000 (12:46 +0000)]
1.0.42.7: fix shell scripts on Solaris (and FreeBSD?)
* Patch by Josh Elsasser, lp#615497.
* Fixes for run-sbcl.sh and tests/subr.sh on Solaris, some of which I
believe were also necessary on FreeBSD.
* A missing #include needed on Solaris is also added.
Nikodemus Siivola [Tue, 31 Aug 2010 12:26:44 +0000 (12:26 +0000)]
1.0.42.6: fix os-provides-dladdr-test.c
For dladdr to be present in dlfcn.h, #define _GNU_SOURCE should be
before any includes.
Patch by Stas Boukarev.
Nikodemus Siivola [Tue, 31 Aug 2010 11:27:35 +0000 (11:27 +0000)]
1.0.42.5: revert 1.0.42.2, "correct defknown for data-vector-ref-with-offset"
Adjusting the defknown also requires adjusting the VOPs to accept negative
indexes, and since I don't have time right now to audit the sign handling
in them, I'm reverting for now.
Saga continues on https://bugs.launchpad.net/sbcl/+bug/622958
Nikodemus Siivola [Mon, 30 Aug 2010 15:06:46 +0000 (15:06 +0000)]
1.0.42.4: fix compiler-macros for WRITE and WRITE-TO-STRING
* Based on patch by Stas Boukarev, lp#598374 and lp#581564.
* Handle output-stream designators in WRITE.
* Avoid name capture in WRITE-TO-STRING.
Nikodemus Siivola [Mon, 30 Aug 2010 11:13:18 +0000 (11:13 +0000)]
1.0.42.3: DOTIMES and non-integer counts
* For non-literal non-integer counts we already did the right thing,
but eg. literal floats slipped under the radar.
* Patch by Roman Marynchak, lp#619393.
Nikodemus Siivola [Mon, 30 Aug 2010 10:44:59 +0000 (10:44 +0000)]
1.0.42.2: correct defknown for data-vector-ref-with-offset
* If the offset is positive, the index can be negative and still
correct.
* Fixes lp#622958
Christophe Rhodes [Sun, 29 Aug 2010 14:33:50 +0000 (14:33 +0000)]
1.0.42.1: add release script
The script automates many of the tasks involved in performing the minimum
level of sanity checking that I am comfortable with, and enumerates others
that remain unscriptable despite 10 years of user interface "improvements"
at Sourceforge. It is unlikely to generalise to other release managers'
setups and taste without a little effort.
Christophe Rhodes [Sun, 29 Aug 2010 14:13:26 +0000 (14:13 +0000)]
1.0.42: will be tagged as sbcl_1_0_42
Christophe Rhodes [Tue, 24 Aug 2010 16:27:02 +0000 (16:27 +0000)]
1.0.41.56: Fix for asdf-install (launchpad bug #612998)
Reported by Phil Hargett; patch by Jim Wise from Phil's description
Juho Snellman [Mon, 23 Aug 2010 23:21:27 +0000 (23:21 +0000)]
1.0.41.55: Solaris fixes
* Remove bashisms.
* Conditionalize out some constants and functions that
don't exist on Solaris.
* Patch from Jim Wise.
Nikodemus Siivola [Sat, 21 Aug 2010 09:41:15 +0000 (09:41 +0000)]
1.0.41.54: fix binary-distribution.sh for configurable prefixes
...that is, also include the file prefix.def, which specifies where
the system is configured to install. Now that I think of it, it might
be more elegant to be able to query the runtime about its default
SBCL_HOME, actually...
Thanks to Bruce O'Neel.
Nikodemus Siivola [Wed, 18 Aug 2010 14:56:59 +0000 (14:56 +0000)]
1.0.41.53: more make.sh tweakery, part N
Aka stuff that was supposed to be in .52, but got left out.
* Create output/ if necessary for saving the prefix.
* Put back the semicolon that fell on the floor and rolled into a corner.
Scripting is hard, dammit.
Nikodemus Siivola [Wed, 18 Aug 2010 14:49:27 +0000 (14:49 +0000)]
1.0.41.52: more make.sh tweakery
* Empty string as the value for an option is treated as if the option
wasn't provided at all, which makes scripting builds easier.
* Temporary support for legacy-style xc host specifications for the
benefit of clbuild &co. Add a noisy message to the end of the build
so people will hopefully notice.
Nikodemus Siivola [Tue, 17 Aug 2010 16:06:34 +0000 (16:06 +0000)]
1.0.41.51: eliminate accidental bash-ism from run-sbcl.sh
Thanks to Josh "Eagle Eye" Elsasser.
Nikodemus Siivola [Tue, 17 Aug 2010 12:26:24 +0000 (12:26 +0000)]
1.0.41.50: additional error checking for DEFTYPE &co
Based on patch by Roman Marynchak.
* Make PARSE-DEFMACRO check that the lambda-list is actually a list.
* Define BAD-TYPE as an utility to signal SIMPLE-TYPE-ERRORS, instead
of having to write the keyword calls everywhere.
* Fixes https://bugs.launchpad.net/sbcl/+bug/576594
Nikodemus Siivola [Tue, 17 Aug 2010 12:21:32 +0000 (12:21 +0000)]
1.0.41.49: comment on patch submission formats in STYLE
Also edit the prose from I -> we at least in a few places to
avoid confusion.
Nikodemus Siivola [Tue, 17 Aug 2010 11:35:24 +0000 (11:35 +0000)]
1.0.41.48: make run-sbcl.sh work on Darwin (and presumably other BSD-clones)
* BSD readlink doesn't support -f, fall back on dirname if readlink
didn't work.
Nikodemus Siivola [Mon, 16 Aug 2010 12:53:42 +0000 (12:53 +0000)]
1.0.41.47: (EXPT 0.0 0.0) and (EXPT 0 0.0) to signal an error
https://bugs.launchpad.net/sbcl/+bug/571581
From patch by Roman Marynchack.
Nikodemus Siivola [Mon, 16 Aug 2010 11:44:28 +0000 (11:44 +0000)]
1.0.41.46: further make.sh tweaks
* Remove OpenMCL and Clisp examples from make.sh help
string. Builders who need them should be able to figure them
out. From the SBCL and CMUCL examples, I think -- and this way they
won't go stale...
* Also check for empty arguments to --foo= style command line options.
Nikodemus Siivola [Sun, 15 Aug 2010 13:59:00 +0000 (13:59 +0000)]
1.0.41.45: make.sh command-line parsing
Based on patches by Daniel Herring:
* Simple --option and --option=arg command-line parser in make.sh.
* Supported options:
** --xc-host=<command> to specify XC host option instead of a
positional argument. (Incompatible change!)
** --prefix=<path> to specify a non-standard install location for
both build and install.sh.
Addresses https://bugs.launchpad.net/sbcl/+bug/550889
** --help
Semi-related minor cleanup:
* Use --no-userinit and --no-sysinit instead of version.lisp-expr as
the default inits for self-building: they have been around long
enough now that it should not stop anyone from building, and makes
for a somewhat less magical looking "//Build options: ..." line in
the build log.
Alastair Bridgewater [Wed, 11 Aug 2010 14:59:01 +0000 (14:59 +0000)]
1.0.41.44: runtime: Fix build on non-threaded x86oids.
* In 1.0.41.21, I accidentally broke non-threaded x86oid builds.
* Reported by Josh Elsasser and Bruce O'Neel with patches
provided, and Harald Hanche-Olsen without a patch.
* This fix based on the patch by Josh Elsasser.
Christophe Rhodes [Tue, 10 Aug 2010 10:59:04 +0000 (10:59 +0000)]
1.0.41.43: fix for RENAME-PACKAGE's return value
Patch from Eric Marsden (sbcl-devel 2010-07-26)
Alastair Bridgewater [Sun, 8 Aug 2010 01:14:39 +0000 (01:14 +0000)]
1.0.41.42: ppc: Documentation and NEWS updates for threading.
* Threading now officially experimentally supported on Linux/PPC.
* Added PPC Linux to the list of platforms with experimental
thread support in the INSTALL file and the manual.
* Updated NEWS.
Alastair Bridgewater [Sun, 8 Aug 2010 01:14:23 +0000 (01:14 +0000)]
1.0.41.41: tests: Fix tests for ppc-threading changes.
* The variable current_control_stack_pointer is no longer valid
on threaded targets. Substitute thread_control_stack_size, which
is valid on all targets, fixing alien.impure.lisp.
* Some dynamic-extent tests currently fail on threaded PPC.
Updated :fails-on information in dynamic-extent.impure.lisp.
* Test (:timer :parallel-unschedule) locked up my linux/ppc box
when running. Disabled, fixing timer.impure.lisp. Interestingly,
while the lockup in question killed the keyboard and the mouse,
briefly pressing the power button caused backlogged events to be
processed, and repeatedly pressing the power button eventually
unlocked the system completely.
* Test (:interrupt-thread :interrupt-consing-child :again) uses
sb-kernel:*pseudo-atomic-bits*, which is an x86oid-only symbol
(other ports use various parts of reg_ALLOC instead). Disabled the
test on non-x86oid ports, fixing threads.impure.lisp.
Alastair Bridgewater [Sun, 8 Aug 2010 01:14:04 +0000 (01:14 +0000)]
1.0.41.40: ppc: Shorten the gencgc allocation sequence.
* Rearrange the allocation sequence to avoid all branches,
relying on the runtime to manipulate the point at which
execution resumes from an allocation trap to compensate.
* Update the runtime to match the new allocation sequence.
* There is a further possible optimization here: The runtime
allocation trap handler can also accept an ADDI instruction
where the current sequence uses an ADD. In the case of a
fixed allocation size, this would save loading the temp
register with the size.
* Another optimization, along the same lines as the previous
one: With a fixed allocation size, adjusting the pointer to
point to the beginning of the data block and setting the lowtag
could be done in a single instruction.
* A third optimization, one which would entail modifying the
allocation trap handler slightly, and depends on at least the
first optimization above being in place: Once temp-tn is no
longer being used to hold the allocation size for fixed
allocations, it is available to hold the address of the
alloc region when threading is disabled, thus saving having to
reload it (two instructions).
Alastair Bridgewater [Sun, 8 Aug 2010 01:13:50 +0000 (01:13 +0000)]
1.0.41.39: ppc: Rename reg_L2 to reg_THREAD on threaded builds.
* This is largely to make the disassembly less confusing when it
refers to TLS slots and other per-thread data.
Alastair Bridgewater [Sun, 8 Aug 2010 01:13:36 +0000 (01:13 +0000)]
1.0.41.38: ppc: Runtime damage for threads.
* Call out to pthread_getspecific() from call_into_lisp in
order to obtain the TLS block for lisp operation.
* Tie together the runtime / gencgc version of pseudo-atomic
and the arch-specific / interrupt context version of pseudo-
atomic, to fulfill the requirements of the earlier pseudo-
atomic restructuring.
* Generally use the thread structure instead of global
variables where appropriate.
* Save our TLS block in the pthread per-thread storage area.
* SIG_STOP_FOR_GC appears to default to masked on PPC, so
unblock it in initial_thread_trampoline().
* Link with -lpthread when appropriate.
Alastair Bridgewater [Sun, 8 Aug 2010 01:13:20 +0000 (01:13 +0000)]
1.0.41.37: ppc: allocation fixes for threaded builds.
* Use the alloc region in the thread structure instead of the
global boxed_region.
Alastair Bridgewater [Sun, 8 Aug 2010 01:13:06 +0000 (01:13 +0000)]
1.0.41.36: ppc: Implement atomic-{incf,decf} as atomic operations.
* ATOMIC-INCF and ATOMIC-DECF require a VOP in order to serve as
actual atomic operations. This VOP is also required to serve as a
memory barrier. Implemented.
Alastair Bridgewater [Sun, 8 Aug 2010 01:12:49 +0000 (01:12 +0000)]
1.0.41.35: ppc: Implement compare-and-swap-vops.
* Based roughly on the x86-64 version and the differences
between x86oid define-full-reffer and the PPC use of VOPs
instead (the VOPs seem smart enough, why do x86oids do the
whole define-full-reffer / -c VOP thing?).
* Compare-and-swap VOPs are full memory barriers.
* Left the VOPs conditionally-compiled in based on the
compare-and-swap-vops feature, more as documentation of what
is involved than anything else.
* Enabled compare-and-swap-vops for all PPC targets.
Alastair Bridgewater [Sun, 8 Aug 2010 01:12:28 +0000 (01:12 +0000)]
1.0.41.34: ppc: Implement multithreaded symbol binding / unbinding.
* This is roughly based on the x86-64 version, but with TLS
allocation inline and synchronization made up with a copy of
"The PowerPC Architecture" in front of me.
* This does not have any check for TLS index overflow.
* Also implement the spinlock stuff used by the runtime to
do its TLS index allocation for dynamic binding.
Alastair Bridgewater [Sun, 8 Aug 2010 01:12:10 +0000 (01:12 +0000)]
1.0.41.33: ppc: Implement threaded symbol value accessors.
* Based on the x86-64 versions, again.
* This is just the accessors, not binding.
Alastair Bridgewater [Sun, 8 Aug 2010 01:11:55 +0000 (01:11 +0000)]
1.0.41.32: ppc: Random small threading bits.
* Thread-specific static symbols (these should probably be
moved to the list of common static symbols).
* The reader for random TLS data, current-thread-offset-sap.
* On threaded targets, stepping is controlled by a slot in the
thread structure, not by a static-symbol. Fixed.
* On non-threaded targets, don't hit the static-symbol value with
yet another ad-hoc method of calculating the address, use the
existing load-symbol-value macro.
Alastair Bridgewater [Sun, 8 Aug 2010 01:11:41 +0000 (01:11 +0000)]
1.0.41.31: ppc: Update backend to use TL symbol storage as appropriate.
* This turned out to be all of the uses of the original
-symbol-value access macros... And all to do with NLX, to two
symbols not tied to particular slots in the thread structure.
Alastair Bridgewater [Sun, 8 Aug 2010 01:11:27 +0000 (01:11 +0000)]
1.0.41.30: ppc: Add thread-local symbol-value accessor macros.
* This is basically a straight rip of the x86-64 version.
* These macros can only be used on static-symbols, so why
aren't we pre-allocating their TLS indices and making them
available at cross-compile time? If we did, we could elide
a temp register on stores and a memory read on all accesses.
Alastair Bridgewater [Sun, 8 Aug 2010 01:11:13 +0000 (01:11 +0000)]
1.0.41.29: ppc: Dedicate a register to the TLS-block on threaded builds.
* Swipe L2 for our TLS block.
* Set up a THREAD-BASE-TN while we're at it.
Alastair Bridgewater [Sat, 7 Aug 2010 15:23:10 +0000 (15:23 +0000)]
1.0.41.28: ppc: Fix race conditions in use of pseudo-atomic in ppc-assem.S.
* Originally, ppc-assem.S was saving the pseudo-atomic-interrupted
bit before clearing the pseduo-atomc-atomic bit in reg_ALLOC. This
introduces a single-instruction window wherein an interrupt could
occur, be deferred, and the setting of pseudo-atomic-interrupted be
ignored.
* Fixed, in the four places it occurs, by reordering instructions.
Alastair Bridgewater [Sat, 7 Aug 2010 15:22:58 +0000 (15:22 +0000)]
1.0.41.27: ppc: Calling convention fixes for assembly-routines calling static-funs.
* This is essentially the same as the static-fun VOP fixes from
earlier.
Alastair Bridgewater [Sat, 7 Aug 2010 15:21:54 +0000 (15:21 +0000)]
1.0.41.26: ppc: Calling-convention fixes for static-fun VOPs.
* Instead of having the static-fun VOPs work with the fdefn
raw-addr slot directly, have them first load reg_FDEFN with the
static-fdefinition object and then perform the critical part of
the normal call sequence.
* This covers the usual race condition, etc. involved in dealing
with an fdefn-raw-addr without first loading the function, and
allows (PPC only) the use of funcallable instances and closures as
static-functions (unlikely as that is).
Alastair Bridgewater [Sat, 7 Aug 2010 15:19:51 +0000 (15:19 +0000)]
1.0.41.25: compiler: Create sb!vm::static-fdefn-offset.
* Create sb!vm::static-fdefn-offset to provide the byte offset
from NIL to the tagged form of the fdefinition.
* Reimplement sb!vm:static-fun-offset (a misnomer) in terms of
sb!vm::static-fdefn-offset.
Alastair Bridgewater [Sat, 7 Aug 2010 15:19:41 +0000 (15:19 +0000)]
1.0.41.24: ppc: Calling-convention fixes for entry-point handling during named-call.
* For GC purposes, seven times never load reg_LIP before loading
whatever register points to the object it refers to.
* During named-call, load the function from the fdefn before
loading the raw-addr (which ends up in reg_LIP). For simple-fun
objects, this provides the reference base for reg_LIP. For other
objects this doesn't matter because reg_LIP ends up pointing to
either undefined_tramp or closure_tramp.
* This still leaves a race condition when updating fdefinitions,
but fixes the race condition surrounding function calling.
* To fix the remaining race condition, we would need to alter
the undefined function trampoline to appear to be a simple-fun
object and adjust the fdefn-fun accessors to compensate, then
arrange for "named" calls to load reg_LEXENV and do closure-fun
access in the same manner as the closure_tramp and the "unnamed"
call VOPs. This would add another instruction to the call path,
but not another memory access (as we would trade off loading the
fdefn-raw-addr for loading the closure-fun).
Alastair Bridgewater [Sat, 7 Aug 2010 15:19:29 +0000 (15:19 +0000)]
1.0.41.23: ppc: Calling-convention fixes for LRA handling during return.
* For GC purposes, seven times never clobber reg_CODE while still
within a component.
* During return processing, store the LRA in reg_LRA instead of
reg_CODE (see previous point).
* During fun end breakpoint processing, use reg_LRA instead of
reg_CODE to store the LRA object on ppc.
* The upshot of this is that, during returns, the program counter
and link register can always be found within the body of reg_CODE
or reg_LRA, no matter which side of the blr instruction we check,
thus always allowing the GC to correctly update them.
Alastair Bridgewater [Sat, 7 Aug 2010 13:46:38 +0000 (13:46 +0000)]
1.0.41.22: runtime: Rename backtrace() to lisp_backtrace().
* glibc provides a backtrace() function which can be useful for
debugging runtime problems, but we already have a backtrace()
function. Rename our backtrace() function so that it cannot
collide with the glibc version.
Alastair Bridgewater [Sat, 7 Aug 2010 13:46:26 +0000 (13:46 +0000)]
1.0.41.21: runtime: Current stack and frame pointers are per-thread data.
* Add slots to the thread structure on threaded targets to hold
the control stack and frame pointers.
* Add some macros to thread.h to grab the correct variable or
slot on all builds, and use them everywhere required.
* Conditional-compile out the old global variables for this on
threaded targets (I probably messed this up).
Alastair Bridgewater [Sat, 7 Aug 2010 13:46:12 +0000 (13:46 +0000)]
1.0.41.20: runtime: Straighten out access to binding stack pointers.
* Unify all non-cheneygc access to binding stack pointers under
one common interface.
* Non-threaded targets are unaffected. Threaded targets with a
binding stack pointer register (reg_BSP) must use the pointer in
the thread structure rather than the global variable during call
in / call out when built with LISP_FEATURE_SB_THREAD.
Alastair Bridgewater [Sat, 7 Aug 2010 13:45:56 +0000 (13:45 +0000)]
1.0.41.19: runtime: Fix pseudo-atomic on non-x86oid gencgc.
* Pseudo-atomic is per-thread state, add it to struct thread.
* Pass the correct pointer for accessing p-a in dynbind.c.
* In {undo_,}fake_foreign_function_call(), stash reg_ALLOC as
pseudo-atomic-bits on threaded targets.
* In pseudo-atomic.h, the ppc gencgc code is really non-x86oid
gencgc code.
* Also in pseudo-atomic.h, update the non-x86oid gencgc code
to do the right thing with threaded pseudo-atomic-bits.
* Due to the way dynamic binding works on threaded targets, it
is now a requirement that the arch_* pseudo_atomic functions call
the generic versions if foreign_function_call_active_p() is true
on threaded targets (in short, C code needs to be able to enter
pseudo-atomic, not just lisp code).
Alastair Bridgewater [Sat, 7 Aug 2010 13:45:45 +0000 (13:45 +0000)]
1.0.41.18: threads: stop_for_gc_handler should check for foriegn contexts
* stop_for_gc_handler() was unconditionally calling
fake_foreign_function_call(), even though a thread can legitimately
receive SIG_STOP_FOR_GC while in foreign code (and this is even the
normal situation when waiting for a mutex or waitqueue).
* Use the now-idiomatic was_in_lisp variable fix: Check for an
active foreign-function call, only call fake_foreign_function_call
if the context is in lisp code, only undo the fake call if the
context was in lisp code.
Alastair Bridgewater [Sat, 7 Aug 2010 13:42:40 +0000 (13:42 +0000)]
1.0.41.17: runtime: Make foreign_function_call_active work with threaded targets.
* Add a slot to the thread structure for the active flag.
* Make the existing global variable only show up on
unithread targets.
* Introduce a wrapper macro to portably access the right
slot on both theaded and unithread targets.
* KLUDGE things up to maintain the old behavior on x86oids
until someone gets around to fixing x86{,-64}-assem.S to set
foreign_function_call_active properly.
Nathan Froyd [Sat, 7 Aug 2010 01:01:50 +0000 (01:01 +0000)]
1.0.41.16: non-linux ppc runtime fixes
Patch from Josh Elsasser to make things work on *BSD and Darwin.
Alastair Bridgewater [Fri, 6 Aug 2010 18:49:42 +0000 (18:49 +0000)]
1.0.41.15: gencgc: Implement object pinning for non-x86oids.
* Add a new static symbol for all non-x86oid gencgc targets,
*pinned-objects*.
* Bind *pinned-objects* to NIL during thread creation if it is
defined.
* During garbage collection, where x86oids preserve pointers on
the various thread stacks, use the same mechanism to preserve
pointers linked on *pinned-objects* for each thread.
* Change the PPC version of with-pinned-objects to rebind
*pinned-objects* with the new objects to pin prepended when using
gencgc.
Alastair Bridgewater [Fri, 6 Aug 2010 18:49:23 +0000 (18:49 +0000)]
1.0.41.14: ppc: Treat counter register as an interior pointer during GC.
* The PPC has a "counter" register which is a
previously-unacknowledged interior-pointer... But possibly
shouldn't be.
* This breaks all non-linux PPC targets, due to GC now accessing
the counter register during interrupt context scavenging. Those
who have access to such targets should find it simple to fix.
Alastair Bridgewater [Fri, 6 Aug 2010 18:48:53 +0000 (18:48 +0000)]
1.0.41.13: gc: Fix interrupt context scavenging of interior pointers.
* Some registers, such as reg_LIP and the program counter, posess
the "interior pointer" nature, meaning that they are unboxed
registers that contain untagged pointers into heap space, relative
to some actual boxed ("pair") register.
* The program counter is advertised as always being relative to
reg_CODE, but this is easily disproven. The "npc" register on
platforms with branch-delay slots is the same, as is the link
register on PPC.
* Rather than coming up with clever rules for which interior
pointer registers can refer to which pairs at which times, doing
object length tests for validity, and so on, just deal with all of
the interior pointer registers (plausibly up to five on any given
platform, though in practice three or four) as general interior
pointers.
* Rather than dealing with massive code duplication for the
various interior pointer registers, come up with a clever macro
system to paper over the worst of the repetition.
* Only pair interior-pointers to pointer values, never fixnums
or other-immediates.
* Use the untagged "native pointer" value of a pair register
when computing the interior-pointer offset, preventing failure
to pair when the interior-pointer is to within the first two
words of the object.
Alastair Bridgewater [Fri, 6 Aug 2010 18:48:19 +0000 (18:48 +0000)]
1.0.41.12: gc: Unify gencgc and cheneygc interrupt-context scavenging.
* Both gencgc and cheneygc had separate copies of
scavenge_interrupt_contexts which had drifted out of sync over
time.
* Resynchronized both versions and moved the result into
gc-common.c, which should prevent further desynchronization.
Alastair Bridgewater [Fri, 6 Aug 2010 18:47:50 +0000 (18:47 +0000)]
1.0.41.11: gc: Interrupt contexts and stacks should be scavenged per-thread.
* Pass an explicit thread argument to scavenge_interrupt_contexts()
instead of having it call arch_os_get_current_thread(), saving the
extra call on cheneygc and allowing multiple threads on gencgc.
* On gencgc, the same applies to scavenge_control_stack().
* On gencgc, don't scrub the control stack when scavenging, wait
until after the scavenging is done (it's done by the stop-for-gc
handler on other threads).
* On gencgc, scavenge interrupt contexts and control stacks for
all threads, not just the current thread.
* On a minor note, the code for scavenging interrupt contexts is
largely unchanged between cheneygc and gencgc. Perhaps it should
be re-unified in gc-common.c?
Alastair Bridgewater [Fri, 6 Aug 2010 18:46:51 +0000 (18:46 +0000)]
1.0.41.10: gencgc: preserve context registers is not used on non-x86oids.
* Disable compilation of preserve_context_registers() on
threaded non-x86oid targets to prevent link errors.
Alastair Bridgewater [Fri, 6 Aug 2010 18:45:53 +0000 (18:45 +0000)]
1.0.41.9: threads: Don't set static tls for non-static symbols.
* *binding-stack-pointer* and *alien-stack* are only static
symbols on x86oids. Conditional-compile their static tls init
forms out based on their existence (in case they are removed
from one of the x86oids or introduced to some other target).
Alastair Bridgewater [Thu, 5 Aug 2010 21:24:33 +0000 (21:24 +0000)]
1.0.41.8: x86/x86-64: Weaken read and write barrier operations.
* It turns out that the read-barrier operation is only needed on
Pentium Pro systems for SMP operation. This never worked right,
so there's no need to penalize other systems to support this.
* It turns out that the write-barrier operation is only needed
on OOSTORE systems for SMP operation. Thsi never worked right, so
there's no need to penalize other systems to support this.
* It turns out that x86-64 systems are neither Pentium Pro nor
OOSTORE.
* This breaks down if the barriers were required for device I/O
instead of SMP operation. Should anyone actually need such
barriers, adding them to the existing framework separately should
be simple enough.
Alastair Bridgewater [Wed, 4 Aug 2010 18:04:21 +0000 (18:04 +0000)]
1.0.41.7: threads: Document BARRIER macro and implicit barriers.
* Not much to say, new manual subsection under Threading.
* Also added a NEWS entry for barriers.
Alastair Bridgewater [Wed, 4 Aug 2010 18:03:35 +0000 (18:03 +0000)]
1.0.41.6: threads: Insert barriers as appear to be required.
* This is mainly for mutexes, spinlocks, and sb-concurrency
queues.
* These are probably-necessary and appear to be sufficient.
Alastair Bridgewater [Wed, 4 Aug 2010 18:02:45 +0000 (18:02 +0000)]
1.0.41.5: x86: Implement memory-barrier-vops.
* Add the VOPs for the various memory-barriers.
* Add the memory-barrier-vops feature to local-target-features on
x86 in make-config.sh.