Clean up build process for cross-compiled targets.
* Over time, the process for producing an SBCL build for another
target architecture or OS has become more difficult and less
* Move all make.sh argument processing to make-config.sh.
* Have make-config.sh produce a file, output/build-config,
containing shell commands to set up important build parameters
such as where to find GNUMAKE, what SBCL_XC_HOST is, and so on.
* Source output/build-config in most of the make*.sh scripts.
* The practical upshot of all this is that a cross-compile
build is now a matter of alternating between target and host,
calling make-config.sh, make-host-1.sh, make-target-1.sh,
make-host-2.sh, make-target-2.sh, and following up with a
make-target-contrib.sh on the target, and you wind up with a
usable product. And, as make-config.sh does all of the arg
parsing, you can pass --xc-host= or --dynamic-space-size= or
whatever and it all works out.
- add corruption_warning_and_maybe_lose that prints a warning and
loses depending on lose_on_corruption_p (false by default)
- use corruption_warning_and_maybe_lose when the control stack is
exhausted and on memory faults
- use corruption_warning_and_maybe_lose on the lisp handlers of
SIGILL, SIGBUS and SIGEMT, as invoking them is surely not a good
- add --lose-on-corruption as a runtime option
- add --disable-ldb as a runtime option
- update the man page and the user manual
- HEAP-EXHAUSTED fixes:
- exit pseduo atomic properly and do pending interrupt if needed
- signalling HEAP-EXHAUSTED in a WITHOUT-INTERRUPTS is dangerous
- use --lose-on-corruption in make-target*.sh
Also, block blockable signals on lose() to prevent other threads,
timers and such from interfering. If only all threads could be stopped
18.104.22.168: make-target-2.lisp split into compile and dump phases.
* Split make-target-2.lisp into make-target-2.lisp and
make-target-2-load.lisp, reducing unnecessary state that was kept around.
Not keeping symbols that were interned during the compilation of PCL
saves us 400kB on x86 and between 1MB and 1.5MB on x86_86.
* Unintern symbols that are internal to CL-USER before dumping the core.
This doesn't save any space; just removes confusion.
Beginnings of a Win32 merge.
... rearrange the build scripts to use input from files rather
than <<HERE documents.
... (no other changes; just working to get the meaty changes
isolated from the fluff)
* Disable FORMAT-with-constant-format-string transform in the
cross compiler--eliminates many large LAMBDAs from the core;
* Remove call to PURIFY at the beginning of warm init so that
cold-init-only stuff doesn't get moved to read-only space
before it is uninterned and (not) garbage collected.
More build fixes
... for our non-8859-1 friends, explicitly request the C locale
... running the tests (and indeed starting up the new sbcl)
in unknown locales will fail instantly, but that's probably
less annoying than having the build fail at cold-init time.
... probably stdin/out/err should fall back to ascii external format
if all else fails
0.8.12.7: Merge package locks, AKA "what can go wrong with a 3783 line patch?"
... Controlled by the presence of :sb-package-locks in target
... This builds both with and without package locks on both
x86 Linux and SunOS Sparc, with both CMUCL and SBCL
as host -- so chances are it should build elsewhere as
... Remaining TODO: turn package locking errors from lexical
constructs to program errors in the produced code, fix
the bits in SBCL that hit host's SBCL-tyle package locks
(relevant FIXME is in src/cold/shared.lisp).
deKLUDGE the solution for PACK-BEFORE-GC-HOOK
... well, not completely. PACK remains non-reentrant and
non-threadsafe, but at least now global data structures
don't grow without bounds;
... mostly whitespace changes, but clear the PACK structures
after every call, not once per GC cycle. Marginally
less efficient, I fear :-(
... while we're at it, fix analogously VOP-TN-REFS, and while
we're at it, document that a special is a bit of an
odd way to implement a (non-reentrant non-threadsafe)
... only one BEFORE-GC-HOOK left.
... fix bad behaviour on install.sh on missing directories (reported
Zach Beane sbcl-devel 2004-01-16)
... fix PUSHNEW docstring (patch VJA sbcl-devel 2003-12-30)
... call PACK-BEFORE-GC-HOOK by hand in make-target-2.sh, to get
core sizes down a bit (2Mb on x86, 6Mb on PPC). We're still
awaiting a proper fix, though.
Fix bug 185 (top level forms at the REPL)
... implement a LOCALLY method for EVAL-IN-LEXENV
... factor out MACROLET-DEFINITIONIZE-FUN and
SYMBOL-MACROLET-DEFINITIONIZE-FUN from the IR1
translators for same
... implement SYMBOL-MACROLET and MACROLET for EVAL-IN-LEXENV
in terms of said DEFINITIONIZE-FUN macros and LOCALLY
... set compilation policy in make-target-2 to avoid file scope
... set interaction policy by hard-coding it in
... throw it together and hope it all still works.
..got rid of old SLOT-ACCESSOR-FORM in favor of
%ACCESSOR-PLACE-FORM, so that now information about
the different types of raw slots is more nearly
centralized in *RAW-SLOT-DATA-LIST*
..moved target-only stuff from near %TARGET-DEFSTRUCT call in
%DEFSTRUCT into %TARGET-DEFSTRUCT
..added (SETQ *PRINT-CIRCLE* T) to the before-proper-printing
hacks in make-target-2.sh
fixed stupid *PRINT-CIRCLE*-related bug in OUTPUT-OBJECT
(introduced in the 0.pre7.76 changes)
(flaky5_branch RIP. There are still problems: debugging data
going astray, and new DEFUN of inline FOO being too
wimpy. But it seems better than 0.pre7.37. So..)
merged flaky5_branch back onto the main branch
(Oops: In the previous version, I worked on "reimplemented
ONCE-ONLY so it expands into a single LET, so that
DECLAREs inside work as they should" enough that I
put it into the commit notes, but then I realized
that using an inline function is a nice way to solve
the UNIX-FAST-SELECT problemm, so I undid the ONCE-ONLY
changes, but forgot to clean up the commit notes.)
(This version builds under sbcl-0.6.13 with :SB-SHOW, and
without :SB-INTERPRETER, in target *FEATURES*. Now
maybe I can use the result to figure out why it can't
Maybe we don't need the extra space in DISASSEM-BYTE-COMPONENT
added :IGNORE-FAILURE-P for src/cold/cold-init in order to
build with :SB-SHOW
got rid of various early /SHOWs (before the definition of
UNWIND in assem-rtns.lisp is loaded) so that the system
could cold init
chopped make-target-2.sh *PRINT-LEVEL* back down to 5 so that
/SHOW statements terminate before hell freezes over
(Oops, I was wrong before -- I made a typo when I thought I
was deleting :SB-INTERPRETER from target *FEATURES*,
so I didn't test what I thought I tested, and
0.pre7.13 didn't actually work without
So, now to make things actually work without :SB-INTERPRETER..
..saved a few things
from src/compiler/eval.lisp in early-c.lisp
..SB!EVAL can't be conditional on :SB-INTERPRETER, since it's
the home of stuff like the 'eval stack' (also used
by the byte interpreter).
..made INTERPRETED-FUNCTION-NAME hacking conditional on
..made other SB!EVAL:FOO stuff conditional on :SB-INTERPRETER
..s/#+!sb-show/#!+sb-show/ (Isn't it Perl that Lispers slam
for accepting line noise as valid input?)
..raised make-target-2.sh *PRINT-LENGTH* and *PRINT-LEVEL* to
10 so that
compilation aborted because of input error:
:ACTUAL-INITARGS (STREAM # FORMAT-CONTROL
no dispatch function defined for ~S
would no longer have key information elided
..(This version still doesn't work without :SB-INTERPRETER,
but it does have some progress, and at least it still
works with :SB-INTERPRETER, so I'm checking it in.)
(got confused, thought GENCGC was excessively conservative,
tried to fix it, then backed out)
tweaked a lot of comments and some names in gencgc.c
made GENESIS systematically propagate *SHEBANG-FEATURES*
entries into #define's in sbcl.h. (This isn't currently
used for anything -- I wrote it to support my confused
make-GENCGC-less-conservative effort, which no longer
exists. However, it seems harmless and could be useful
e.g. for making C-level code depend on SB-SHOW, so I
left it in.)