git clone --reference /path/to/your/sbcl.git/incarnation mirror_URLto save bandwidth during cloning.
description | Elliott Slaughter's personal SBCL tree |
homepage URL | http://blackthorncentral.net/ |
owner | elliottslaughter@gmail.com |
last change | Mon, 1 Sep 2008 02:05:41 +0000 (1 02:05 +0000) |
URL | git://repo.or.cz/sbcl/eslaughter.git |
https://repo.or.cz/sbcl/eslaughter.git | |
push URL | ssh://repo.or.cz/sbcl/eslaughter.git |
https://repo.or.cz/sbcl/eslaughter.git (learn more) | |
bundle info | eslaughter.git downloadable bundles |
content tags |
SBCL fork for experimental support of Windows threading, as a part of GSoC 2008.
master | Vanilla SBCL. |
ebx-win32_1.0.3.47 | The entirety of http://www.lisphacker.com/temp/wthread-combined-1a.diff applied to 1.0.3.47. Compiles cleanly on both win32** and linux**. |
ebx-win32_1.0.3.47_1.0.17.39 | The entirety of http://www.lisphacker.com/temp/wthread-combined-1a.diff applied to 1.0.3.47 and forward ported to 1.0.17.39. Fails to compile on win32 in warm init. |
win32_1.0.3.47 | The win32 specific sections of http://www.lisphacker.com/temp/wthread-combined-1a.diff applied to 1.0.3.47. Cannot compile (incomplete without EBX patch). |
win32_1.0.3.47_1.0.18 | The win32 specific sections of http://www.lisphacker.com/temp/wthread-combined-1a.diff applied to 1.0.3.47 and forward ported to 1.0.18. Cannot compile (without EBX patch). |
ebx_1.0.18 | The EBX-only patches from http://www.lisphacker.com/temp/sbcl-ebx-threads-2/ 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.29 | The contents of branch ebx_1.0.18, trivially forward ported to 1.0.19.29. Also applies cleanly to 1.0.20. Compiles on win32* and linux**. |
ebx-win32_1.0.18 | The 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. |
ebx-1 | Deprecated. |
ebx-2 | Deprecated. |
* | 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. |
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 http://paste.lisp.org/display/58376.
At the beginning of GSoC, I obtained the combined EBX/win32 patches provided by Alastair Bridgewater at http://www.lisphacker.com/temp/wthread-combined-1a.diff. I applied these patches to 1.0.3.47, since there had been enough drift in the code to make them incompatible with 1.0.17.39. I then attempted to forward port these patches to HEAD (at the time, 1.0.17.39). 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 1.0.3.47 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 1.0.19.29 to http://blackthorncentral.net/files/1.0.18-x86-ebx-threads-combined.patch and http://blackthorncentral.net/files/1.0.19.29-x86-ebx-threads-combined.patch. 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 http://code.google.com/p/google-summer-of-code-2008-lispnyc/downloads/list as a required code sample for Google.
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 http://paste.lisp.org/display/58376.
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.
See http://google-summer-of-code-2008-lispnyc.googlecode.com/files/Elliott_Slaughter.tar.gz.
16 years ago | master | logtree |
16 years ago | ebx_1.0.18_1.0.19.29 | logtree |
16 years ago | ebx_1.0.18 | logtree |
16 years ago | ebx-win32_1.0.18 | logtree |
16 years ago | win32_1.0.3.47_1.0.18 | logtree |
16 years ago | win32_1.0.3.47 | logtree |
16 years ago | ebx-win32_1.0.3.47_1.0.17.39 | logtree |
16 years ago | ebx-2 | logtree |
16 years ago | ebx-win32_1.0.3.47 | logtree |
16 years ago | ebx-1 | logtree |