This project is a fork of the sbcl.git project. If you have that one already cloned locally, you can use
git clone --reference /path/to/your/sbcl.git/incarnation mirror_URL
to save bandwidth during cloning.
descriptionElliott Slaughter's personal SBCL tree
homepage URL
last changeMon, 1 Sep 2008 02:05:41 +0000
Content tags:

Elliott Slaughter's personal SBCL tree.

SBCL fork for experimental support of Windows threading, as a part of GSoC 2008.

Table of contents:

Explanation of the various branches in this repository.
Project status as of the end of GSoC.
Goals after GSoC.
Compilation instructions (short version for people who already know how to compile SBCL).
Compilation instructions (longer version for people new to compiling SBCL).

Explanation of the various branches in this repository:

masterVanilla SBCL.
ebx-win32_1.0.3.47The entirety of applied to Compiles cleanly on both win32** and linux**.
ebx-win32_1.0.3.47_1.0.17.39The entirety of applied to and forward ported to Fails to compile on win32 in warm init.
win32_1.0.3.47The win32 specific sections of applied to Cannot compile (incomplete without EBX patch).
win32_1.0.3.47_1.0.18The win32 specific sections of applied to and forward ported to 1.0.18. Cannot compile (without EBX patch).
ebx_1.0.18The EBX-only patches from applied in sequence to 1.0.18, with additional patches to allow compilation on win32. Compiles cleanly on both win32* and linux**.
ebx_1.0.18_1.0.19.29The contents of branch ebx_1.0.18, trivially forward ported to Also applies cleanly to 1.0.20. Compiles on win32* and linux**.
ebx-win32_1.0.18The contents of ebx_1.0.18 plus win32 specific threads changes equivalent to the contents of win32_1.0.3.47_1.0.18.39. Fails to compile on win32 in warm init.
*Compiles with features :x86-two-arg-passing-regs and :x86-reserve-ebx.
**Compiles with features :x86-two-arg-passing-regs, :x86-reserve-ebx, :sb-thread, and :x86-ebx-threads.

Project status as of the end of GSoC (18 August 2008) is as follows:

My goals for GSoC were to hack win32 threads in SBCL. The previous attempt by Alastair Bridgewater (who started the win32 port of SBCL) had stopped by around March 2007, and I was taking over around where Alastair Bridgewater left off. Alastair described the steps needed to complete win32 threads in

At the beginning of GSoC, I obtained the combined EBX/win32 patches provided by Alastair Bridgewater at I applied these patches to, since there had been enough drift in the code to make them incompatible with I then attempted to forward port these patches to HEAD (at the time, I finished my forward port in branch ebx-win32_1.0.3.47_1.0.17.39, but the results were not compilable (due to a crash to ldb during warm init).

On 10 July 2008, Alastair notified the sbcl-devel mailing list and me that he had forward ported only the EBX portion of the patches to 1.0.18, and suggested that forward porting only the win32 section of the patches to HEAD might be easier after making the EBX patches stable. Unfortunately, Alastair's EBX patches did not compile cleanly on linux, or at all on win32, so I spent some time fixing them up. The results, now stored in branch ebx_1.0.18, compile cleanly on both linux and win32. (I am not however confident that all tests pass on linux; there may be a problem with thread interrupts. I have not had the time to check whether this anomaly is new in the forward port, or was present in the original patches.)

After that, I started working on forward porting just the win32 sections of the original combined patch on to 1.0.18, basically following the decisions I had made the first time when forward porting. I first made a branch named win32_1.0.3.47_1.0.18 with the changes, but upon completing the forward port, had trouble integrating the two threads. Thus I just manually patched win32 threads on top of ebx_1.0.18 in a new branch ebx-win32_1.0.18. This branch, unsurprisingly, fails to compile, with a similar error in warm init (although I have a better idea what might be going wrong). This is where I am at the end of GSoC.

I have uploaded patches for the EBX threads changes against 1.0.18 and to and These patches are reasonable stable, and may be integrated into mainstream SBCL. The win32 threads portions, however, are not stable and thus not ready to be integrated into SBCL at this time.

I have also uploaded a tarball including the above mentioned patches and this readme to as a required code sample for Google.

Goals after GSoC:

I'm still learning a lot about SBCL internals and development, so considering I didn't completely my project as I would have liked to, I see no compelling reason to stop work. My immediate goals include integrating the EBX patches into mainstream SBCL (assuming that is what the SBCL community wants), and debugging the win32 threads patch so that it compiles again. Afterwards, if I have time, I may look into trying to get some of the original goals set out in

Compilation instructions (short version for people who already know how to compile SBCL):

If you want to try out my changes, probably the most interesting branches are ebx_1.0.18 and ebx_1.0.19.29, which contain the changes necessary to make SBCL use the EBX register to store thread local information. On linux/x86, compile with features :x86-two-arg-passing-regs, :x86-reserve-ebx, :sb-thread, and :x86-ebx-threads to use EBX threads. On win32, however, the EBX patches alone are not sufficient for even minimal thread support, so compiling with either :sb-thread or :x86-ebx-threads will cause compilation to fail. Therefore, on win32, compile only with :x86-two-arg-passing-regs and :x86-reserve-ebx.

Compilation instructions (longer version for people new to compiling SBCL):


2008-09-01 Juho Snellman1.0.20: release, will be tagged sbcl_1_0_20master
2008-08-22 Richard M Kreuter1.0.19.35: Fix PARSE-, NATIVE-NAMESTRING for logical...
2008-08-21 Richard M Kreuter1.0.19.34: Fix minor bug in TIME.
2008-08-20 Paul Khuong1.0.19.33: Improved interrupt handling on darwin/x86...
2008-08-20 Paul Khuong1.0.19.32: Small bugfixes
2008-08-17 Nikodemus Siivola1.0.19.31: correct shadowing-import of NIL in NAME...
2008-08-17 Nikodemus Siivola1.0.19.30: muffle code deletion note from destructuring...
2008-08-15 Nikodemus Siivola1.0.19.29: new function: page_region_start()
2008-08-15 Nikodemus Siivolanew function: is_lisp_immediate()
2008-08-10 Gabor Melis1.0.19.27: more ir1 transforms for REPLACE
2008-08-07 Nikodemus Siivola1.0.19.26: add THREAD-YIELD to GET-SPINLOCK
2008-08-05 Nikodemus Siivola1.0.19.25: refactor global muffling slightly
2008-08-05 Nikodemus Siivola1.0.19.24: incorrect function type canonicalization
2008-08-05 Nikodemus Siivola1.0.19.23: COMPILER-WARN accepts conditions
2008-08-05 Nikodemus Siivola1.0.19.22: fix bug #425
2008-08-04 Nikodemus Siivola1.0.19.21: delete stale symbol SB-DI:DO-BLOCKS
5 years ago master
5 years ago ebx_1.0.18_1.0.19.29
5 years ago ebx_1.0.18
5 years ago ebx-win32_1.0.18
6 years ago win32_1.0.3.47_1.0.18
6 years ago win32_1.0.3.47
6 years ago ebx-2
6 years ago ebx-win32_1.0.3.47_1.0.17.39
6 years ago ebx-1
6 years ago ebx-win32_1.0.3.47