Work at SourceForge, help us to make it a better place! We have an immediate need for a Support Technician in our San Francisco or Denver office.


sbcl-cvs-import Log

Commit Date  
[9e4ba7] by Nikodemus Siivola Nikodemus Siivola command-line parsing

Based on patches by Daniel Herring:

* Simple --option and --option=arg command-line parser in

* 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


** --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.

2010-08-15 13:59:00 Tree
[25b40c] by Alastair Bridgewater Alastair Bridgewater runtime: Fix build on non-threaded x86oids.

* In, 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.

2010-08-11 14:59:01 Tree
[9152e1] by Christophe Rhodes Christophe Rhodes fix for RENAME-PACKAGE's return value

Patch from Eric Marsden (sbcl-devel 2010-07-26)

2010-08-10 10:59:04 Tree
[d84e1d] by Alastair Bridgewater Alastair Bridgewater 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.

2010-08-08 01:14:39 Tree
[ede2e5] by Alastair Bridgewater Alastair Bridgewater 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.

2010-08-08 01:14:23 Tree
[28aaa3] by Alastair Bridgewater Alastair Bridgewater 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).

2010-08-08 01:14:04 Tree
[0af449] by Alastair Bridgewater Alastair Bridgewater 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.

2010-08-08 01:13:50 Tree
[42d824] by Alastair Bridgewater Alastair Bridgewater 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.

2010-08-08 01:13:36 Tree
[dad602] by Alastair Bridgewater Alastair Bridgewater ppc: allocation fixes for threaded builds.

* Use the alloc region in the thread structure instead of the
global boxed_region.

2010-08-08 01:13:20 Tree
[988c0c] by Alastair Bridgewater Alastair Bridgewater 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.

2010-08-08 01:13:06 Tree
[5745b5] by Alastair Bridgewater Alastair Bridgewater 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.

2010-08-08 01:12:49 Tree
[43a3cc] by Alastair Bridgewater Alastair Bridgewater 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.

2010-08-08 01:12:28 Tree
[f5c5f4] by Alastair Bridgewater Alastair Bridgewater ppc: Implement threaded symbol value accessors.

* Based on the x86-64 versions, again.

* This is just the accessors, not binding.

2010-08-08 01:12:10 Tree
[152ba3] by Alastair Bridgewater Alastair Bridgewater 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.

2010-08-08 01:11:55 Tree
[b254f1] by Alastair Bridgewater Alastair Bridgewater 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.

2010-08-08 01:11:41 Tree
[e55399] by Alastair Bridgewater Alastair Bridgewater 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.

2010-08-08 01:11:27 Tree
[a98cb5] by Alastair Bridgewater Alastair Bridgewater 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.

2010-08-08 01:11:13 Tree
[204cfb] by Alastair Bridgewater Alastair Bridgewater 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

* Fixed, in the four places it occurs, by reordering instructions.

2010-08-07 15:23:10 Tree
[1bab7f] by Alastair Bridgewater Alastair Bridgewater ppc: Calling convention fixes for assembly-routines calling static-funs.

* This is essentially the same as the static-fun VOP fixes from

2010-08-07 15:22:58 Tree
[72a1d0] by Alastair Bridgewater Alastair Bridgewater 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).

2010-08-07 15:21:54 Tree
[34ef69] by Alastair Bridgewater Alastair Bridgewater 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

2010-08-07 15:19:51 Tree
[1f8efb] by Alastair Bridgewater Alastair Bridgewater 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).

2010-08-07 15:19:41 Tree
[8974d7] by Alastair Bridgewater Alastair Bridgewater 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.

2010-08-07 15:19:29 Tree
[34b683] by Alastair Bridgewater Alastair Bridgewater 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.

2010-08-07 13:46:38 Tree
[6793d7] by Alastair Bridgewater Alastair Bridgewater 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).

2010-08-07 13:46:26 Tree
Older >