sbcl Log

Commit Date  
[797692] (134.2 kB) by Paul Khuong Paul Khuong

Optional support for zlib-based in-memory deflate/inflate for core files

* As this is based on zlib, only add the dependency when
:SB-CORE-COMPRESSION is enabled as a build-time feature. On x86-64,
compressed cores take about 1/4 the space, but start up in a few
tenths of a second.

Unlike gzexe'd executables, compressed images work without writing
to /tmp.

If :SB-CORE-COMPRESSION is enabled, trigger compression with the

* Also add a NEWS entry for the literal complex-single-float bugfix

2011-08-28 03:23:03 View
[77ae1e] (134.1 kB) by Paul Khuong Paul Khuong


Some architectures have developed ways to help the processor execute
spin loops efficiently; expose them, where applicable, via

Assembles to PAUSE on x86oids, and to nothing on other platforms.

2011-08-14 22:31:52 View
[3254e1] (134.0 kB) by Paul Khuong Paul Khuong


* Does the same thing as only returning the first value of %MULTIPLY,
only better on some platforms.

* Implemented vas VOPs on x86, x86-64 and PPC. The PPC code sequence
is fully untested, and merely looks correct.

* VOPs for fixnum first argument are included, but will only be used
when the result is forcibly marked as fixnum, e.g., with TRULY-THE.
Questionnable, but I'd rather err on the side of straightforwardness
rather than put even more pressure on representation selection.

* Use it in the division-by-multiplication transform for unsigned
TRUNCATE by constant.

2011-08-14 20:49:27 View
[6caf3e] (134.0 kB) by David Lichteblau David Lichteblau

Fix QUERY-FILE-SYSTEM for Windows UNC and device file names

Thanks to Anton Kovalenko.

2011-08-11 19:27:00 View
[ad4b18] (133.7 kB) by Anton Kovalenko Anton Kovalenko , pushed by David Lichteblau David Lichteblau

sb-win32: offer low-level bindings for file mapping functions

Includes functions offered by Windows that are similar in
spirit to mmap.

Currently these are low-level FFI versions only, and no attempt
is made to export them from sb-posix under the name mmap. In
sb-posix, only a wrapper for msync and definitions of several
constants is offered, as needed for sb-simple-streams.

Thanks to Anton Kovalenko.

Also take this opportunity to sort the sb-win32 package
definition as a flat list.

2011-08-10 18:04:33 View
[0b79d8] (133.4 kB) by Nikodemus Siivola Nikodemus Siivola

implement CEILING and FLOOR in terms of %CEILING and %FLOOR

This allows transforms specific to CEILING and FLOOR fire first.

If they fail, the fallback transforms to %CEILING or %FLOOR,

They in turn are inlined, allowing the transforms for TRUNCATE
to pick up the slack.

This allows the new division -> multiplication transforms to fire
for CEILING and FLOOR when SPACE > 1.

2011-08-05 13:11:06 View
[38440d] (133.3 kB) by Nikodemus Siivola Nikodemus Siivola

rename %FLOOR to %BIGFLOOR

2011-08-05 13:10:53 View
[fb15ad] (133.3 kB) by Nikodemus Siivola Nikodemus Siivola


We need it internally anyways, and since we export the WORD type, we
might just as well export the constant too.

2011-08-05 09:13:23 View
[e7b2c5] (133.3 kB) by Nikodemus Siivola Nikodemus Siivola

more robust backtraces for syscalls on x86

* new optimization policy: ALIEN-FUNCALL-SAVES-FP-AND-PC Set to 3 for
self-build on x86 to get reliable more backtraces there, and 0 for
other platforms. (1 matches the old SPEED <= DEBUG behaviour.)

* When using a saved FP, and an interrupt context has a bogus
FP, assume it is an interrupted syscall frame.

2011-08-01 15:30:15 View
[5c0a88] (133.2 kB) by Paul Khuong Paul Khuong

Split GENCGC_PAGE_BYTES in 3 constants

* We still have BACKEND_PAGE_BYTES, which should be a conservative
over-approximation of the OS's page size.

* GENCGC_PAGE_BYTES is mostly replaced by GENCGC_CARD_BYTES, the
byte granularity at which we track writes to old generations.
While we're using mprotect-based write barriers, this should be
a multiple of BACKEND_PAGE_BYTES.

* GENCGC_ALLOC_GRANULARITY is the minimum size we attempt to make
each allocation region. Should be a multiple of GENCGC_CARD_BYTES.
While we have largeish cards, this shouldn't ever be an issue, but
it might if we ever go down to < 1k cards.

* GENCGC_RELEASE_GRANULARITY is the minimum size at which we release
address space to the OS. This should always be a multiple of

* For now, all three new constants are equal to BACKEND_PAGE_BYTES.

2011-07-03 16:45:42 View
[57d30b] (133.2 kB) by Paul Khuong Paul Khuong

Differentiate between object slot initialisation and mutation

INIT-SLOT and SET-SLOT VOPs do the same thing on every platform for

2011-07-03 01:05:31 View
[cc27e3] (133.1 kB) by Christophe Rhodes Christophe Rhodes

restarts for PRINT-NOT-READABLE errors

Two restarts: USE-VALUE, to provide a value to be printed instead
(under the same printer control variable bindings), and
SB-EXT:PRINT-UNDREADABLY, printing the same object but with
*PRINT-READABLY* bound to NIL. Only minimally tested, but should
meet requirements for lp#801255.

2011-06-29 14:53:37 View
[d9479b] (133.1 kB) by Nikodemus Siivola Nikodemus Siivola

export SIZE-T and OFF-T from SB-ALIEN

They're pretty common interface types.

2011-06-26 18:01:48 View
[56a2db] (133.0 kB) by Paul Khuong Paul Khuong

Compiler support for specialised implicit value cells

Enables the use of non-T stack TNs for closed-over dynamic-extent variables.

SB!VM:PRIMITIVE-TYPE-INDIRECT-CELL-TYPE takes a primitive-type and returns
NIL, or a list of 4 values:
- the primitive type of the implicit indirect value cell
- the SC of that cell
- a function that takes the NODE, BLOCK, FP, VALUE and RESULT, and
emits a reference to that cell.
- a function that takes the NODE, BLOCK, FP, NEW-VALUE and VALUE, and
emits a write to that cell.

Some correctness tests to make sure codegen is correct (without verifying

2011-06-21 03:52:45 View
[293488] (132.9 kB) by Paul Khuong Paul Khuong

Inline local call trampolines on x86[-64]

Allow the insertion of code before entry to blocks from
drop0throughs, jumps, and calls. Used on x86oids to insert
the code to move return addresses to the right location
on local calls without trampolines.

2011-06-21 02:07:52 View
[92e62a] (132.9 kB) by Nikodemus Siivola Nikodemus Siivola


I have no idea why I didn't do that in the first place.

2011-06-10 17:19:37 View
[4084b6] (132.7 kB) by Nikodemus Siivola Nikodemus Siivola

armload of DEFINE-HASH-CACHE changes

* To clear a cache, drop the entire vector instead of filling it with
NILs: thread safe, less work, and doesn't add dirty pages to old

Entering a value after the cache has been dropped allocates a new

Caches are now initialized with 0 instead of NIL -- faster to

* Use DEFGLOBAL instead of DEFVAR.

* SAVE-LISP-AND-DIE drops all caches.

* UNSAFE-CLEAR-ROOTS drops caches depending on the depth of the
collection: nursery collection keeps all caches, gen 1 collection
drops the CTYPE-OF cache, gen 2 and deeper collections drop all

2011-06-07 20:18:57 View
[f71d9c] (132.7 kB) by Nikodemus Siivola Nikodemus Siivola SB-EXT:GC-LOGFILE

GENCGC only.

(SETF SB-EXT:GC-LOGFILE) to a pathname starts logging before/after
generation statistics there. Doing the same with NIL stops logging.

2011-05-30 12:00:19 View
[1100ef] (132.7 kB) by Nikodemus Siivola Nikodemus Siivola MAKE-ALIEN-STRING

An easy way to copy lisp strings to malloc'ed memory.

I can't believe we didn't have this before. ...just seems
insane. I keep expecting to find a nice way to do this
squirreled away somewhere in SB-ALIEN. Here's hoping I won't
embarrass myself by finding one.

Also fix the OAOOM in MAKE-ALIEN and FREE-ALIEN documentation: make
the docstrings the canonical versions, and include them in the

2011-05-30 11:59:18 View
[71bc8b] (132.6 kB) by Nikodemus Siivola Nikodemus Siivola WITH-LOCKED-SYSTEM-TABLE

Instead of disabling interrupts in user code that needs
that does so.

Use it instead of WITH-LOCKED-HASH-TABLE for all internals.

2011-05-29 21:49:45 View
[a7a4ca] (132.5 kB) by Nikodemus Siivola Nikodemus Siivola make TRULY-THE macroexpandable


* MACRO-FUNCTION no longer checks :FUNCTION :KIND, allowing us to have
special operators with macro-expansions in the first place.

* Add %MACROEXPAND and %MACROEXPAND which are careful not to expand special
forms, and use them in place of SB!XC:MACROEXPAND.

* Set the :FUNCTION :MACRO-FUNCTION into an expander that just converts
it to THE. This only happens when someone explicitly calls MACROEXPAND
or uses MACRO-FUNCTION directly -- never in the compiler.

* Also add a SETF-expander.

2011-05-28 12:27:36 View
[23e319] (132.4 kB) by Nikodemus Siivola Nikodemus Siivola add deadlock detection to spinlocks and mutexes

Each thread gets a WAITING-FOR slot which holds the lock it is
currently trying to acquire.

After initial try at lock acquisition fails, we check for deadlocks:
we look at the thread that owns the lock we want -> lock it is
waiting for, etc, recursively, until we either bottom out or find
someone waiting for us.

Print thread as having state WAITING if it is waiting for a lock.

Add a PRINT-OBJECT methods for MUTEXes and SPINLOCKs.

SB-THREAD:THREAD-DEADLOCK-CYCLE contains a list of the
threads and locks involved, so that the situation can be
analyzed even afer a handler has broken the deadlock.

2011-05-11 16:48:37 View
[a1a34a] (132.3 kB) by Nikodemus Siivola Nikodemus Siivola better source information for compile-time type errors

Compile-time warning: in addition to the context, also tell exactly
which form produces the value that is not of the expected type.

Run-time error: include both the error context and exact form in the
error message.

Delete VALUES-TYPE-ERROR, and use SIMPLE-TYPE-ERROR for both legs in

2011-05-11 11:15:43 View
[b67c2d] (132.3 kB) by Nikodemus Siivola Nikodemus Siivola add FD-STREAM-FD-TYPE, use it to decide when to poll the fd introduced a regression that caused reads from non-regular files
to potentially block in an uninterruptible state, as WAIT-UNTIL-FD-USABLE
started being called only when there was a timeout or events to serve.

This was a win for regular files, because filling the input buffer then
required one syscall less.

...but since uninterruptible blocking reads aren't fun for anyone, let's
make things a bit smarter:

* When creating an FD-STREAM, use fstat() to get the type of the fd, and
store a keyword describing it in the FD-STREAM.

* REFILL-INPUT-BUFFER now calls SYSREAD-MAY-BLOCK-P always if the file
anything but :REGULAR -- so pipes and sockets and whatnot get their
select() calls, and a read from a stream to one can no longer cause
SBCL to hang.

2011-05-10 20:05:25 View
[d51e3d] (132.3 kB) by Nikodemus Siivola Nikodemus Siivola source locations for init files

Refactor PROCESS-INIT-FILE to share code with LOAD-AS-SOURCE.

Also add in contrib/sb-introspect/load-test.lisp which was
left out from the last commit.

2011-05-09 22:12:27 View
Older >