<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html lang="en">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>
GitLab
</title>

</head>
<body>
<style type="text/css">
img {
max-width: 100%; height: auto;
}
</style>
<div class="content">
<h3>
Raymond Toy pushed to branch master
at <a href="https://gitlab.common-lisp.net/cmucl/cmucl">cmucl / cmucl</a>
</h3>
<h4>
Commits:
</h4>
<ul>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/3ee55ba5b826f2dd944c142625ca7858af54c2ee">3ee55ba5</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-09-28T15:17:37-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Let the OS mmap the binding and control stacks wherever.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/586ca74df2c5289c9154e688e092e1b4a3f7d4cf">586ca74d</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-02T18:50:45-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Merge branch 'master' into rtoy-mmap-anon-control-and-binding-stacks</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/1869d0938e6e09c1a02f0f6f0a8764ee43e2c56e">1869d093</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-03T07:55:34-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Updates to handle random stack locations better.

* Print out some better messages from os_protect
* Add make_hole to actually make a hole
* make_holes only does the read-only and static spaces.
* make_stack_holes handles the binding and control stacks.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/4b838e3f56bbfb80f9d7eee847644cffdf69a7e4">4b838e3f</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-03T07:56:07-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Make holes in the stacks, as before.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/67befdb52a4fabfe4d844e78f852528db94b62b0">67befdb5</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-03T13:55:50-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Fix typo: index -> k.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/1aa6477b678c07fb38929759edb223666dcdf862">1aa6477b</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-03T13:56:20-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">The start of the control stack is control_stack, not
control_stack_start.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/65b5ed7715ded275fd4d360eab85df7c5357769d">65b5ed77</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-03T13:56:47-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">The start of the control stack is control_stack, not
control_stack_start.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/57a7df1370263128a2dc17c914ac4016e632de74">57a7df13</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-03T14:10:24-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Replace CONTROL_STACK_START with control_stack.

Cast to appropriate pointer types too.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/e0ae3367a22d62843408f370160770b66bb38f78">e0ae3367</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-03T14:11:08-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Replace CONTROL_STACK_START with control_stack and BINDING_STACK_START
with binding_stack.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/748991e2930768ddc28e468a647b8dcbdf8f7341">748991e2</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-03T14:11:33-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Cast os_validate to the appropriate type to get rid of warning.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/e4897224933bfcdaf64888f51c0f3e03fd074748">e4897224</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-03T14:11:43-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Declare validate_stacks().</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/bcb73a5e954df5b6003b0ac8cb7e0a9cf29995ab">bcb73a5e</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-03T14:26:17-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Simplify make_hole:  just pass in address and size.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/32ae8b143a2c6caa09d8c97ae6ce6c49623a2978">32ae8b14</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-03T14:30:14-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Fix silly typos.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/cf1990dc7629de805e04d813bebc187e5fddd220">cf1990dc</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-04T12:42:34-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Don't define a SIGNAL_STACK mapped region.  Use altstack, like on
other platforms.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/b2dc0b2cefa5d86f01900fce0c3ad85de51bf510">b2dc0b2c</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-04T12:42:55-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Don't define a SIGNAL_STACK mapped region.  Use altstack, like on
other platforms.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/316d2279f682fd45345ae30fbd13eb2806bfc2d6">316d2279</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-04T12:43:26-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Use control_stack, not CONTROL_STACK_START.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/bdb299d3cd4506c5a882cc4caf7c531e91c33cb9">bdb299d3</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-04T12:44:04-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Put -O2 on it's own line to make switching this off and on slightly
easier.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/9de8cd8839dad91bed0ddb059af7e2521a35e40d">9de8cd88</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-04T12:47:42-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Remove definitions of BINDING_STACK_START and CONTROL_STACK_START.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/e4553e8ac0bda154575cb4e4a60ae274772d27a5">e4553e8a</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-04T12:54:25-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Replace BINDING_STACK_START and CONTROL_STACK_START appropriately.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/ec4c78fb89c45860344d819de5d16a6b8db8abb1">ec4c78fb</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-04T12:58:54-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Define SIGNAL_STACK_SIZE</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/0e258fd926f10b010b0a6d2a423f95ed4bceaac7">0e258fd9</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-04T15:05:08-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Rename local control_stack_size to current_stack_size to prevent
confusion with the global control_stack_size.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/1d8db41a003ab622e274078f0e7878bfc04dfa07">1d8db41a</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-04T15:05:22-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Replace BINDING_STACK_START and CONTROL_STACK_START appropriately.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/43e24775bb283238cd0ced9d4fdac4cb357fb005">43e24775</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-11T15:38:24-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Support asdf's static-image-op.

* src/lisp/GNUMakefile
    * Don't add exec-final.o to lisp.a.  (But still remove exec-init.o
      from it.)
* src/tools/linker.sh
    * When linking the executable, need to link exec-final.o too.
* bin/make-main-dist.sh
    * Need to install exec-init.o and exec-final.o.  exec-init.o is
      needed to link a normal lisp; exec-final.o is used for the
      executable image.
    * Fix modes on some installed files.  exec-init.o, exec-final.o,
      and lisp.a don't need to be executable.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/c49d87c7a044937a8f7f89773fbc85330d5b6741">c49d87c7</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-11T15:38:24-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Exit with the return code from obj_run_linker.

obj_run_linker() returns the return code from the call to system().
Exit lisp with this return code to indicate if running the executable
linker script worked or not.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/c614c4121f67edd89b3bb95c6e350ef1493f27a6">c614c412</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-11T15:38:24-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Include the exit code when printing the process structure.

It's really nice to see the exit code of the process when printing out
the process structure.

Fix a typo too: "tings" -> "things".</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/7c199b2917355c3da40a10864731caccf354c0e0">7c199b29</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-11T15:38:24-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Use correct path for git clone.

Noticed by Joram Schrijver who gave the correct path.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/776f7f63ff11b9417759b9da87739a0b63711757">776f7f63</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-11T15:38:24-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Use PRINT-UNREADABLE-OBJECT to print the process structure.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/c415308a1774bbc844e39abc3f86b456e5285dec">c415308a</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-11T15:38:24-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Give hint on what the last value of the printed process is

Left this out in the previous commit.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/3e5e8ebb7cf3fa6a21469a4ef3ea382e5c9319f8">3e5e8ebb</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-11T15:38:24-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Remove -mmacosx-version-min=10.5

When making an executable on some random machine, we can't depend on
the user having the 10.5 SDK around.  So remove the flag, but add
-Wl,-no_pie to suppress the warning about PIE disabled due to absolute
addressing.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/1a3f83f69c61e02a31241bc3216c125b7fb303d3">1a3f83f6</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-11T15:38:24-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Update version so bootfiles are loaded from the dir</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/de896d6e9ffb563e49336b9d3c287669a7e0ed26">de896d6e</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-11T15:38:24-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Add new release notes file for 21b.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/46d1d014ab9700424d79bd477d835dbcc11e7c38">46d1d014</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-11T15:38:24-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Add some comments.

MIN_VER requires the 10.5 SDK be available.
Add -Wl,-no_pie to turn off warning (and add comment).</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/16fbb323d01f1aefd3af476b436968346f5ceb40">16fbb323</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-11T15:38:24-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Cleanup.

Remove old comment, and remove the min OSX version on ppc too.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/00bb8d4e6c816709b940ac721b1a76886e18b238">00bb8d4e</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-11T15:38:24-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Disassemble BREAK inst as INT3.

The break inst is really the int3 instruction, so disassemble it as
int3.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/33cb8d6cd378f516486c128367dbb257b6de2134">33cb8d6c</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-11T15:38:24-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Change disassembly to use .byte and .word instead of byte and word
when printing random bytes and words.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/5a413e601bb1acc75e1e912fc090f8072e3d8c9f">5a413e60</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-11T16:00:39-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Support stacks at fixed addresses as before.

If CONTROL_STACK_START or BINDING_STACK_START are defined, we take
that as a hint that the system wants the stacks mapped at fixed
addresses.  Otherwise, the stacks are mapped wherever there's room.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/a97bcea0aeb4d6c75baccff24f7dead2ebbde95d">a97bcea0</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-18T22:12:48-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Fix for NetBSD:  Use control_stack/binding_stack instead of
CONTROL_STACK_START and BINDING_STACK_START.

>From Robert Swindells.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/20f530c4388452cf3f9f66ee11b424239f05da8c">20f530c4</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-19T21:13:12-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Fix for FreeBSD:  Use control_stack/binding_stack instead of
CONTROL_STACK_START and BINDING_STACK_START.

Fred Gilham says the same fix is needed for FreeBSD as for NetBSD.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/138310f93edc558e3166c1a134e6ba26fcb1eaa6">138310f9</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-10-31T20:41:30-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Merge branch 'master' into rtoy-mmap-anon-control-and-binding-stacks

Conflicts:
        bin/make-main-dist.sh
        src/general-info/release-21b.txt</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/694331c1a58e327c41f74efd1596c3a3da42cd55">694331c1</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-11-04T19:42:41-08:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Fix merge mistake:  Don't print break as int3.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/0fb5c69944e2218b218a35ed3af023c06eea0eda">0fb5c699</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-11-04T19:44:58-08:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Define CONTROL_STACK_START and BINDING_STACK_START.

ppc currently only supports allocating the control stack and binding
stack at fixed addresses.  (This used to work, but something broke it
recently.  Until the ppc machine comes back, we're going to disable
that feature there.)</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/70f15c09eb7c4cb656ab38026d92d821979449a7">70f15c09</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-11-04T19:49:31-08:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Remove some unused code.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/275011da14a17167d5c039047861253550279fe5">275011da</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2015-12-13T21:35:03-08:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Merge branch 'master' into rtoy-mmap-anon-control-and-binding-stacks</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/583140fcc9e6a46a1256cd5ca030b201117b2262">583140fc</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2016-05-08T09:11:48-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Merge branch 'master' into rtoy-mmap-anon-control-and-binding-stacks</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/951611cf060cc3977db76fb05a252e981a227484">951611cf</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2016-05-09T21:02:47-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Add RELOCATABLE_STACK_START to control stack spaces

When RELOCATABLE_STACK_START is defined, the control stack, binding
stack, and sigalt stack are located wherever mmap finds room for them.

Currently only implemented for Darwin, but should work for linux and
solaris.  We enable this by default on Darwin now.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/603fb6a031a14f9d25c4664fd5ae9543a8e6a8bf">603fb6a0</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2016-05-10T19:13:32-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Add RELOCATABLE_STACK_START to control stack spaces for linux.

When RELOCATABLE_STACK_START is defined, the control stack, binding
stack, and sigalt stack are located wherever mmap finds room for them.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/8b1ba846e64934b696812e005fc4ef635056a428">8b1ba846</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2016-05-10T19:32:43-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Fix typo.

We want #ifndef, not #ifdef to enable the relocatable stacks.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/75d4ea457191cd39b6da88becc5560039fc009ca">75d4ea45</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2016-05-10T20:04:58-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Add RELOCATABLE_STACK_START to control stack spaces for solaris/sparc..

When RELOCATABLE_STACK_START is defined, the control stack, binding
stack, and sigalt stack are located wherever mmap finds room for them.

Only implemented with sparc_sunc config.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/a6339d00b6053c2da0af58097137f05495361afd">a6339d00</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2016-05-10T21:33:43-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Remove #if 0 code.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/67f59a2d4b2c552570cfe337852cebeb5e85d008">67f59a2d</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2016-05-10T21:33:57-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Add some comments.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/38fdea64c854d5f0e13f1b16ea94fa974caeb340">38fdea64</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2016-05-10T21:34:14-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Fix indentation, add some comments.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/f81b1ed05030a3ec82158d3c89af3611b86b160a">f81b1ed0</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2016-05-11T19:19:00-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Add comments.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/c15a3f708a16275a7504ced4f163f102dfbcb287">c15a3f70</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2016-05-11T19:20:40-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Fix up to preserve old behavior without RELOCATABLE_STACK_START.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/e9838801cfb11544d7650adcca40363c84054954">e9838801</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2016-05-11T19:28:39-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Fix compiler warnings.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/f75df5621ded7ba80990fd63116e41420993369b">f75df562</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2016-05-11T19:30:48-07:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Fix compiler warnings.</pre>
</li>
<li>
<strong><a href="https://gitlab.common-lisp.net/cmucl/cmucl/commit/040fbc1d73aef926967a0554265f40c7aaac71ad">040fbc1d</a></strong>
<div>
<span>by Raymond Toy</span>
<i>at 2016-05-21T17:39:06+00:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">Merge branch 'rtoy-mmap-anon-control-and-binding-stacks' into 'master'

Map control and binding stacks wherever the OS wants to put them.



See merge request !3</pre>
</li>
</ul>
<h4>23 changed files:</h4>
<ul>
<li class="file-stats">
<a href="#620f2ecad2bb6f74b2fcd0134963a841" style="text-decoration: none">
src/lisp/Config.sparc_sunc
</a>
</li>
<li class="file-stats">
<a href="#ad29afc395839758d41094872298bd0d" style="text-decoration: none">
src/lisp/Config.x86_common
</a>
</li>
<li class="file-stats">
<a href="#c0b0bf6d71bc5fc7e6d50d69c8aa2413" style="text-decoration: none">
src/lisp/Config.x86_darwin
</a>
</li>
<li class="file-stats">
<a href="#2ace16276b68c7d5aef163bb260bd9f7" style="text-decoration: none">
src/lisp/Config.x86_linux
</a>
</li>
<li class="file-stats">
<a href="#4dfe7e78b540daa005ea4b5f0458c90d" style="text-decoration: none">
src/lisp/Darwin-os.c
</a>
</li>
<li class="file-stats">
<a href="#172f4bf093caeeba24730a1adff8f15a" style="text-decoration: none">
src/lisp/FreeBSD-os.c
</a>
</li>
<li class="file-stats">
<a href="#a453f91a0a4af7575917fad54f4ac1d0" style="text-decoration: none">
src/lisp/Linux-os.c
</a>
</li>
<li class="file-stats">
<a href="#dffc348e63ffc0037c23afd36439222f" style="text-decoration: none">
src/lisp/NetBSD-os.c
</a>
</li>
<li class="file-stats">
<a href="#f82b13d5e971dfa7a0cea839dd9d819c" style="text-decoration: none">
src/lisp/backtrace.c
</a>
</li>
<li class="file-stats">
<a href="#ba4d174bce4109eebf5db0040421eba2" style="text-decoration: none">
src/lisp/gencgc.c
</a>
</li>
<li class="file-stats">
<a href="#bbc2314e774c28d45e241dbe5d218f70" style="text-decoration: none">
src/lisp/globals.c
</a>
</li>
<li class="file-stats">
<a href="#02c44bcb0c30e1642888c0330c8d112c" style="text-decoration: none">
src/lisp/interrupt.c
</a>
</li>
<li class="file-stats">
<a href="#5ddb4a7da6ac3ae899220a2054c79be0" style="text-decoration: none">
src/lisp/lisp.c
</a>
</li>
<li class="file-stats">
<a href="#96c68c4d0376aa9733e6df1aff7dc9f8" style="text-decoration: none">
src/lisp/os-common.c
</a>
</li>
<li class="file-stats">
<a href="#e483fe4e07b9111852a8f4e3e4e61d16" style="text-decoration: none">
src/lisp/ppc-validate.h
</a>
</li>
<li class="file-stats">
<a href="#54071697bdb74afd518e691935ab92ab" style="text-decoration: none">
src/lisp/save.c
</a>
</li>
<li class="file-stats">
<a href="#879ee3b75b3b68112858e3c5a60c5a35" style="text-decoration: none">
src/lisp/solaris-os.c
</a>
</li>
<li class="file-stats">
<a href="#c980cac8551b1b1f8a4a5bb6e26a7f54" style="text-decoration: none">
src/lisp/sparc-validate.h
</a>
</li>
<li class="file-stats">
<a href="#0456dbe6f74a19ea201dea7c0be35e3d" style="text-decoration: none">
src/lisp/validate.c
</a>
</li>
<li class="file-stats">
<a href="#36f20111c8470f8bf0a970af1aa5de94" style="text-decoration: none">
src/lisp/validate.h
</a>
</li>
<li class="file-stats">
<a href="#1c6f4778cb1e5e381e17e502561a0932" style="text-decoration: none">
src/lisp/x86-assem.S
</a>
</li>
<li class="file-stats">
<a href="#eb9ceb07a63a2ccebe3dc5ed6d87d9a7" style="text-decoration: none">
src/lisp/x86-validate-darwin.h
</a>
</li>
<li class="file-stats">
<a href="#b150bb0039b44a462e2526f9f645591e" style="text-decoration: none">
src/lisp/x86-validate-linux.h
</a>
</li>
</ul>
<h4>Changes:</h4>
<li id="620f2ecad2bb6f74b2fcd0134963a841">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-0">
<strong>
src/lisp/Config.sparc_sunc
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/Config.sparc_sunc
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/Config.sparc_sunc
</span><span style="color: #aaaaaa">@@ -24,7 +24,7 @@ CC_V8PLUS = -m32 -xarch=sparc
</span> AS_V8PLUS = -m32 -xarch=sparc
 endif
 
<span style="background: #ffdddd; color: #000000">-CFLAGS += -xlibmieee -O
</span><span style="background: #ddffdd; color: #000000">+CFLAGS += -xlibmieee -O -DRELOCATABLE_STACK_START
</span> DEPEND_FLAGS = -xM
 ASFLAGS = $(AS_V8PLUS)
 OS_LINK_FLAGS = -M /usr/lib/ld/map.noexstk
</code></pre>

<br>
</li>
<li id="ad29afc395839758d41094872298bd0d">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-1">
<strong>
src/lisp/Config.x86_common
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/Config.x86_common
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/Config.x86_common
</span><span style="color: #aaaaaa">@@ -43,7 +43,8 @@ CPP_INCLUDE_OPTIONS := -I. -I$(PATH1) -I-
</span> endif
 
 CPPFLAGS := $(CPP_DEFINE_OPTIONS) $(CPP_INCLUDE_OPTIONS) 
<span style="background: #ffdddd; color: #000000">-CFLAGS += -Wstrict-prototypes -Wall -O2 -g -fno-omit-frame-pointer
</span><span style="background: #ddffdd; color: #000000">+CFLAGS += -Wstrict-prototypes -Wall -g -fno-omit-frame-pointer
+CFLAGS += -O2
</span> ASFLAGS = -g 
 
 ASSEM_SRC = x86-assem.S
</code></pre>

<br>
</li>
<li id="c0b0bf6d71bc5fc7e6d50d69c8aa2413">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-2">
<strong>
src/lisp/Config.x86_darwin
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/Config.x86_darwin
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/Config.x86_darwin
</span><span style="color: #aaaaaa">@@ -6,7 +6,7 @@ include Config.x86_common
</span> # you have the 10.5 SDK available.
 MIN_VER = -mmacosx-version-min=10.5
 
<span style="background: #ffdddd; color: #000000">-CPPFLAGS += -DDARWIN $(MIN_VER) -m32
</span><span style="background: #ddffdd; color: #000000">+CPPFLAGS += -DDARWIN $(MIN_VER) -m32 -DRELOCATABLE_STACK_START
</span> CFLAGS += -g3 -mtune=generic
 ASFLAGS += -g3 $(MIN_VER)
 
</code></pre>

<br>
</li>
<li id="2ace16276b68c7d5aef163bb260bd9f7">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-3">
<strong>
src/lisp/Config.x86_linux
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/Config.x86_linux
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/Config.x86_linux
</span><span style="color: #aaaaaa">@@ -1,7 +1,7 @@
</span> # -*- Mode: makefile -*-
 include Config.x86_common
 
<span style="background: #ffdddd; color: #000000">-CPPFLAGS += -m32 -D__NO_CTYPE -D_GNU_SOURCE
</span><span style="background: #ddffdd; color: #000000">+CPPFLAGS += -m32 -D__NO_CTYPE -D_GNU_SOURCE -DRELOCATABLE_STACK_START
</span> CFLAGS += -rdynamic  -march=pentium4 -mfpmath=sse -mtune=generic
 
 UNDEFSYMPATTERN = -Xlinker -u -Xlinker &
</code></pre>

<br>
</li>
<li id="4dfe7e78b540daa005ea4b5f0458c90d">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-4">
<strong>
src/lisp/Darwin-os.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/Darwin-os.c
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/Darwin-os.c
</span><span style="color: #aaaaaa">@@ -464,8 +464,8 @@ valid_addr(os_vm_address_t addr)
</span> #ifndef GENCGC
        || in_range_p(addr, DYNAMIC_1_SPACE_START, dynamic_space_size)
 #endif
<span style="background: #ffdddd; color: #000000">-     || in_range_p(addr, CONTROL_STACK_START, control_stack_size)
-       || in_range_p(addr, BINDING_STACK_START, binding_stack_size))
</span><span style="background: #ddffdd; color: #000000">+        || in_range_p(addr, (lispobj)control_stack, control_stack_size)
+       || in_range_p(addr, (lispobj)binding_stack, binding_stack_size))
</span>   return TRUE;
     return FALSE;
 }
</code></pre>

<br>
</li>
<li id="172f4bf093caeeba24730a1adff8f15a">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-5">
<strong>
src/lisp/FreeBSD-os.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/FreeBSD-os.c
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/FreeBSD-os.c
</span><span style="color: #aaaaaa">@@ -224,8 +224,8 @@ valid_addr(os_vm_address_t addr)
</span> #ifndef GENCGC
        || in_range_p(addr, DYNAMIC_1_SPACE_START, dynamic_space_size)
 #endif
<span style="background: #ffdddd; color: #000000">-     || in_range_p(addr, CONTROL_STACK_START, control_stack_size)
-       || in_range_p(addr, BINDING_STACK_START, binding_stack_size))
</span><span style="background: #ddffdd; color: #000000">+        || in_range_p(addr, control_stack, control_stack_size)
+       || in_range_p(addr, binding_stack, binding_stack_size))
</span>   return TRUE;
     return FALSE;
 }
</code></pre>

<br>
</li>
<li id="a453f91a0a4af7575917fad54f4ac1d0">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-6">
<strong>
src/lisp/Linux-os.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/Linux-os.c
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/Linux-os.c
</span><span style="color: #aaaaaa">@@ -385,8 +385,8 @@ valid_addr(os_vm_address_t addr)
</span>   || in_range_p(addr, STATIC_SPACE_START, static_space_size)
        || in_range_p(addr, DYNAMIC_0_SPACE_START, dynamic_space_size)
        || in_range_p(addr, DYNAMIC_1_SPACE_START, dynamic_space_size)
<span style="background: #ffdddd; color: #000000">-     || in_range_p(addr, CONTROL_STACK_START, control_stack_size)
-       || in_range_p(addr, BINDING_STACK_START, binding_stack_size))
</span><span style="background: #ddffdd; color: #000000">+        || in_range_p(addr, control_stack, control_stack_size)
+       || in_range_p(addr, binding_stack, binding_stack_size))
</span>   return TRUE;
     return FALSE;
 }
<span style="color: #aaaaaa">@@ -454,17 +454,17 @@ sigsegv_handler(HANDLER_ARGS)
</span> #ifdef i386
     interrupt_handle_now(signal, contextstruct);
 #else
<span style="background: #ffdddd; color: #000000">-#define CONTROL_STACK_TOP (((char*) CONTROL_STACK_START) + control_stack_size)
</span><span style="background: #ddffdd; color: #000000">+#define CONTROL_STACK_TOP (((char*) control_stack) + control_stack_size)
</span> 
     addr = arch_get_bad_addr(signal, code, context);
 
     if (addr != NULL && context->sc_regs[reg_ALLOC] & (1 << 63)) {
        context->sc_regs[reg_ALLOC] -= (1 << 63);
        interrupt_handle_pending(context);
<span style="background: #ffdddd; color: #000000">-    } else if (addr > CONTROL_STACK_TOP && addr < BINDING_STACK_START) {
</span><span style="background: #ddffdd; color: #000000">+    } else if (addr > CONTROL_STACK_TOP && addr < (os_vm_address_t)binding_stack) {
</span>   fprintf(stderr, "Possible stack overflow at 0x%08lX!\n", addr);
        /* try to fix control frame pointer */
<span style="background: #ffdddd; color: #000000">-     while (!(CONTROL_STACK_START <= *current_control_frame_pointer &&
</span><span style="background: #ddffdd; color: #000000">+        while (!((lispobj)control_stack <= *current_control_frame_pointer &&
</span>            *current_control_frame_pointer <= CONTROL_STACK_TOP))
            ((char *) current_control_frame_pointer) -= sizeof(lispobj);
        ldb_monitor();
</code></pre>

<br>
</li>
<li id="dffc348e63ffc0037c23afd36439222f">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-7">
<strong>
src/lisp/NetBSD-os.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/NetBSD-os.c
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/NetBSD-os.c
</span><span style="color: #aaaaaa">@@ -277,8 +277,8 @@ valid_addr(os_vm_address_t addr)
</span> #ifndef GENCGC
        || in_range_p(addr, DYNAMIC_1_SPACE_START, dynamic_space_size)
 #endif
<span style="background: #ffdddd; color: #000000">-     || in_range_p(addr, CONTROL_STACK_START, control_stack_size)
-       || in_range_p(addr, BINDING_STACK_START, binding_stack_size))
</span><span style="background: #ddffdd; color: #000000">+        || in_range_p(addr, control_stack, control_stack_size)
+       || in_range_p(addr, binding_stack, binding_stack_size))
</span>   return TRUE;
     return FALSE;
 }
</code></pre>

<br>
</li>
<li id="f82b13d5e971dfa7a0cea839dd9d819c">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-8">
<strong>
src/lisp/backtrace.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/backtrace.c
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/backtrace.c
</span><span style="color: #aaaaaa">@@ -252,7 +252,7 @@ backtrace(int nframes)
</span> static int
 stack_pointer_p(unsigned long p)
 {
<span style="background: #ffdddd; color: #000000">-    return (p < CONTROL_STACK_START + control_stack_size
</span><span style="background: #ddffdd; color: #000000">+    return ((void *)p < (void *)control_stack + control_stack_size
</span>       && p > (unsigned long) &p && (p & 3) == 0);
 }
 
</code></pre>

<br>
</li>
<li id="ba4d174bce4109eebf5db0040421eba2">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-9">
<strong>
src/lisp/gencgc.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/gencgc.c
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/gencgc.c
</span><span style="color: #aaaaaa">@@ -166,7 +166,7 @@ check_escaped_stack_object(lispobj * where, lispobj obj)
</span> 
     if (Pointerp(obj)
        && (p = (void *) PTR(obj),
<span style="background: #ffdddd; color: #000000">-         (p >= (void *) CONTROL_STACK_START
</span><span style="background: #ddffdd; color: #000000">+            (p >= (void *) control_stack
</span>        && p < (void *) control_stack_end))) {
        char *space;
 
<span style="color: #aaaaaa">@@ -195,7 +195,7 @@ check_escaped_stack_object(lispobj * where, lispobj obj)
</span>       lose("Escaped stack-allocated object 0x%08lx at %p in %s\n",
                 (unsigned long) obj, where, space);
 #ifndef i386
<span style="background: #ffdddd; color: #000000">-     else if ((where >= (lispobj *) CONTROL_STACK_START
</span><span style="background: #ddffdd; color: #000000">+        else if ((where >= (lispobj *) control_stack
</span>             && where < (lispobj *) (control_stack_end))
                 || (space == NULL)) {
            /* Do nothing if it the reference is from the control stack,
<span style="color: #aaaaaa">@@ -2136,17 +2136,19 @@ read_only_space_p(lispobj obj)
</span> static inline boolean
 control_stack_space_p(lispobj obj)
 {
<span style="background: #ffdddd; color: #000000">-    lispobj end = CONTROL_STACK_START + control_stack_size;
</span><span style="background: #ddffdd; color: #000000">+    char *object = (char *) obj;
+    char *end = (char *)control_stack + control_stack_size;
</span> 
<span style="background: #ffdddd; color: #000000">-    return (obj >= CONTROL_STACK_START) && (obj < end);
</span><span style="background: #ddffdd; color: #000000">+    return (object >= (char *) control_stack) && (object < end);
</span> }
 
 static inline boolean
 binding_stack_space_p(lispobj obj)
 {
<span style="background: #ffdddd; color: #000000">-    lispobj end = BINDING_STACK_START + binding_stack_size;
</span><span style="background: #ddffdd; color: #000000">+    char *object = (char *) obj;
+    char *end = (char *)binding_stack + binding_stack_size;
</span> 
<span style="background: #ffdddd; color: #000000">-    return (obj >= BINDING_STACK_START) && (obj < end);
</span><span style="background: #ddffdd; color: #000000">+    return (object >= (char *) binding_stack) && (object < end);
</span> }
     
 static inline boolean
<span style="color: #aaaaaa">@@ -2157,7 +2159,12 @@ signal_space_p(lispobj obj)
</span> 
     return (obj >= SIGNAL_STACK_START) && (obj < end);
 #else
<span style="background: #ffdddd; color: #000000">-    return FALSE;
</span><span style="background: #ddffdd; color: #000000">+    extern char altstack[];
+    
+    char* object = (char*) obj;
+    char* end = altstack + SIGNAL_STACK_SIZE;
+    
+    return (object >= altstack && object < end);
</span> #endif    
 }
 
<span style="color: #aaaaaa">@@ -7322,11 +7329,11 @@ verify_gc(void)
</span>     int static_space_size = (lispobj *) SymbolValue(STATIC_SPACE_FREE_POINTER)
        - (lispobj *) static_space;
     int binding_stack_size = (lispobj *) get_binding_stack_pointer()
<span style="background: #ffdddd; color: #000000">-     - (lispobj *) BINDING_STACK_START;
</span><span style="background: #ddffdd; color: #000000">+        - (lispobj *) binding_stack;
</span> 
     verify_space((lispobj *) READ_ONLY_SPACE_START, read_only_space_size);
     verify_space((lispobj *) static_space, static_space_size);
<span style="background: #ffdddd; color: #000000">-    verify_space((lispobj *) BINDING_STACK_START, binding_stack_size);
</span><span style="background: #ddffdd; color: #000000">+    verify_space((lispobj *) binding_stack, binding_stack_size);
</span>     verify_space((lispobj *) (void *) &scavenger_hooks, 1);
 }
 
<span style="color: #aaaaaa">@@ -7494,16 +7501,16 @@ scavenge_interrupt_handlers(void)
</span> static void
 scavenge_control_stack(void)
 {
<span style="background: #ffdddd; color: #000000">-    unsigned long control_stack_size;
</span><span style="background: #ddffdd; color: #000000">+    unsigned long current_stack_size;
</span> 
<span style="background: #ffdddd; color: #000000">-    control_stack_size = current_control_stack_pointer - control_stack;
</span><span style="background: #ddffdd; color: #000000">+    current_stack_size = current_control_stack_pointer - control_stack;
</span> 
 #ifdef PRINTNOISE
     printf("Scavenging the control stack (%d bytes) ...\n",
<span style="background: #ffdddd; color: #000000">-        control_stack_size * sizeof(lispobj));
</span><span style="background: #ddffdd; color: #000000">+           current_stack_size * sizeof(lispobj));
</span> #endif
 
<span style="background: #ffdddd; color: #000000">-    scavenge(control_stack, control_stack_size);
</span><span style="background: #ddffdd; color: #000000">+    scavenge(control_stack, current_stack_size);
</span> 
 #ifdef PRINTNOISE
     printf("Done scavenging the control stack.\n");
<span style="color: #aaaaaa">@@ -7523,7 +7530,7 @@ garbage_collect_generation(int generation, int raise)
</span> 
 #ifdef GC_ASSERTIONS
 #if defined(i386) || defined(__x86_64)
<span style="background: #ffdddd; color: #000000">-    invalid_stack_start = (void *) CONTROL_STACK_START;
</span><span style="background: #ddffdd; color: #000000">+    invalid_stack_start = (void *) control_stack;
</span>     invalid_stack_end = (void *) &raise;
 #else /* not i386 */
     invalid_stack_start = (void *) &raise;
</code></pre>

<br>
</li>
<li id="bbc2314e774c28d45e241dbe5d218f70">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-10">
<strong>
src/lisp/globals.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/globals.c
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/globals.c
</span><span style="color: #aaaaaa">@@ -28,7 +28,6 @@ lispobj *dynamic_1_space;
</span> unsigned dynamic_space_size;
 lispobj *control_stack;
 
<span style="background: #ffdddd; color: #000000">-
</span> #if (defined(i386) || defined(__x86_64))
 lispobj *control_stack_end;
 #endif
</code></pre>

<br>
</li>
<li id="02c44bcb0c30e1642888c0330c8d112c">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-11">
<strong>
src/lisp/interrupt.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/interrupt.c
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/interrupt.c
</span><span style="color: #aaaaaa">@@ -405,10 +405,7 @@ interrupt_maybe_gc(HANDLER_ARGS)
</span> * Noise to install handlers.                                     *
 \****************************************************************/
 
<span style="background: #ffdddd; color: #000000">-#if !(defined(i386) || defined(__x86_64))
-#define SIGNAL_STACK_SIZE SIGSTKSZ
-static char altstack[SIGNAL_STACK_SIZE];
-#endif
</span><span style="background: #ddffdd; color: #000000">+char altstack[SIGNAL_STACK_SIZE];
</span> 
 void
 interrupt_install_low_level_handler(int signal, void handler(HANDLER_ARGS))
<span style="color: #aaaaaa">@@ -431,7 +428,7 @@ interrupt_install_low_level_handler(int signal, void handler(HANDLER_ARGS))
</span>     if (signal == PROTECTION_VIOLATION_SIGNAL) {
        stack_t sigstack;
 
<span style="background: #ffdddd; color: #000000">-#if (defined( i386 ) || defined(__x86_64))
</span><span style="background: #ddffdd; color: #000000">+#if defined(SIGNAL_STACK_START)
</span>   sigstack.ss_sp = (void *) SIGNAL_STACK_START;
 #else
        sigstack.ss_sp = (void *) altstack;
</code></pre>

<br>
</li>
<li id="5ddb4a7da6ac3ae899220a2054c79be0">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-12">
<strong>
src/lisp/lisp.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/lisp.c
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/lisp.c
</span><span style="color: #aaaaaa">@@ -687,8 +687,16 @@ main(int argc, const char *argv[], const char *envp[])
</span>     if (builtin_image_flag != 0)
        map_core_sections(argv[0]);
 #endif
<span style="background: #ddffdd; color: #000000">+
+    /*
+     * Validate the basic lisp spaces first like the heap and static
+     * and read-only spaces.  Do this so that the stacks (if thy're
+     * relocatable) don't get randomly allocated on top of our desired
+     * lisp spaces.
+     */
</span>     validate();
     gc_init();
<span style="background: #ddffdd; color: #000000">+    validate_stacks();
</span> 
     /* This is the first use of malloc() and must come after the
      * static memory layout is mmapped to avoid conflicts with possible
</code></pre>

<br>
</li>
<li id="96c68c4d0376aa9733e6df1aff7dc9f8">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-13">
<strong>
src/lisp/os-common.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/os-common.c
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/os-common.c
</span><span style="color: #aaaaaa">@@ -413,7 +413,7 @@ guard_zones(char **yellow_start, char **red_start)
</span>     /*
      * All x86's have a control stack (aka C stack) that grows down.
      */
<span style="background: #ffdddd; color: #000000">-    char *end = (char *) CONTROL_STACK_START;
</span><span style="background: #ddffdd; color: #000000">+    char *end = (char *) control_stack;
</span> 
     *red_start = end;
     *yellow_start = *red_start + RED_ZONE_SIZE;
<span style="color: #aaaaaa">@@ -424,7 +424,7 @@ guard_zones(char **yellow_start, char **red_start)
</span>      * control stack area.
      */
 
<span style="background: #ffdddd; color: #000000">-    char *end = (char *) CONTROL_STACK_START + control_stack_size;
</span><span style="background: #ddffdd; color: #000000">+    char *end = (char *) control_stack + control_stack_size;
</span> 
     *red_start = end - RED_ZONE_SIZE;
     *yellow_start = *red_start - YELLOW_ZONE_SIZE;
</code></pre>

<br>
</li>
<li id="e483fe4e07b9111852a8f4e3e4e61d16">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-14">
<strong>
src/lisp/ppc-validate.h
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/ppc-validate.h
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/ppc-validate.h
</span><span style="color: #aaaaaa">@@ -45,6 +45,8 @@
</span> #define CONTROL_STACK_SIZE        (0x07ff8000)    /* 128 MB, almost */
 #define CONTROL_STACK_END       (CONTROL_STACK_START + control_stack_size)
 
<span style="background: #ddffdd; color: #000000">+#define SIGNAL_STACK_SIZE    SIGSTKSZ
+
</span> #define BINDING_STACK_START       (0x38000000)
 #define BINDING_STACK_SIZE     (0x07ff8000)    /* 128 MB, almost */
 
</code></pre>

<br>
</li>
<li id="54071697bdb74afd518e691935ab92ab">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-15">
<strong>
src/lisp/save.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/save.c
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/save.c
</span><span style="color: #aaaaaa">@@ -136,7 +136,9 @@ save(char *filename, lispobj init_function, int sse2_mode)
</span>     }
     printf("[Undoing binding stack... ");
     fflush(stdout);
<span style="background: #ffdddd; color: #000000">-    unbind_to_here((lispobj *) BINDING_STACK_START);
</span><span style="background: #ddffdd; color: #000000">+
+    unbind_to_here((lispobj *) binding_stack);
+
</span>     SetSymbolValue(CURRENT_CATCH_BLOCK, 0);
     SetSymbolValue(CURRENT_UNWIND_PROTECT_BLOCK, 0);
     SetSymbolValue(EVAL_STACK_TOP, 0);
<span style="color: #aaaaaa">@@ -278,7 +280,9 @@ save_executable(char *filename, lispobj init_function)
</span> 
     printf("[Undoing binding stack... ");
     fflush(stdout);
<span style="background: #ffdddd; color: #000000">-    unbind_to_here((lispobj *)BINDING_STACK_START);
</span><span style="background: #ddffdd; color: #000000">+
+    unbind_to_here((lispobj *)binding_stack);
+
</span>     SetSymbolValue(CURRENT_CATCH_BLOCK, 0);
     SetSymbolValue(CURRENT_UNWIND_PROTECT_BLOCK, 0);
     SetSymbolValue(EVAL_STACK_TOP, 0);
</code></pre>

<br>
</li>
<li id="879ee3b75b3b68112858e3c5a60c5a35">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-16">
<strong>
src/lisp/solaris-os.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/solaris-os.c
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/solaris-os.c
</span><span style="color: #aaaaaa">@@ -169,8 +169,14 @@ os_flush_icache(os_vm_address_t address, os_vm_size_t length)
</span> void
 os_protect(os_vm_address_t address, os_vm_size_t length, os_vm_prot_t prot)
 {
<span style="background: #ffdddd; color: #000000">-    if (mprotect((void *) address, length, prot) == -1)
-       perror("mprotect");
</span><span style="background: #ddffdd; color: #000000">+    if (mprotect((void *) address, length, prot) == -1) {
+        char msg[1000];
+
+        snprintf(msg, sizeof(msg), "mprotect: os_protect(0x%p, %u, 0x%x): ",
+                 address, length, prot);
+        
+       perror(msg);
+    }
</span> }
 
 static boolean
<span style="color: #aaaaaa">@@ -193,8 +199,8 @@ boolean valid_addr(os_vm_address_t addr)
</span> #ifndef GENCGC
            || in_range_p(addr, DYNAMIC_1_SPACE_START, dynamic_space_size)
 #endif
<span style="background: #ffdddd; color: #000000">-         || in_range_p(addr, CONTROL_STACK_START, control_stack_size)
-           || in_range_p(addr, BINDING_STACK_START, binding_stack_size));
</span><span style="background: #ddffdd; color: #000000">+            || in_range_p(addr, (lispobj)control_stack, control_stack_size)
+           || in_range_p(addr, (lispobj)binding_stack, binding_stack_size));
</span> }
 
 /* ---------------------------------------------------------------- */
<span style="color: #aaaaaa">@@ -403,11 +409,16 @@ os_vm_address_t round_up_sparse_size(os_vm_address_t addr)
</span> /*
  * An array of the start of the spaces which should have holes placed
  * after them.  Must not include the dynamic spaces because the size
<span style="background: #ffdddd; color: #000000">- * of the dynamic space can be controlled from the command line.
</span><span style="background: #ddffdd; color: #000000">+ * of the dynamic space can be controlled from the command line.  Also
+ * must not include the binding and control stacks.  They're handled
+ * below.
</span>  */
 static os_vm_address_t spaces[] = {
     READ_ONLY_SPACE_START, STATIC_SPACE_START,
<span style="background: #ffdddd; color: #000000">-    BINDING_STACK_START, CONTROL_STACK_START
</span><span style="background: #ddffdd; color: #000000">+#ifndef RELOCATABLE_STACK_START
+    BINDING_STACK_START,
+    CONTROL_STACK_START
+#endif    
</span> };
 
 /*
<span style="color: #aaaaaa">@@ -430,27 +441,41 @@ static unsigned long *space_size[] = {
</span> #define HOLE_SIZE 0x2000
 
 void
<span style="background: #ffdddd; color: #000000">-make_holes(void)
</span><span style="background: #ddffdd; color: #000000">+make_hole(os_vm_address_t space_start, size_t space_size)
</span> {
<span style="background: #ffdddd; color: #000000">-    int k;
</span>     os_vm_address_t hole;
 
     /* Make holes of the appropriate size for desired spaces */
 
<span style="background: #ffdddd; color: #000000">-    for (k = 0; k < sizeof(spaces) / sizeof(spaces[0]); ++k) {
-
-       hole = spaces[k] + *space_size[k];
</span><span style="background: #ddffdd; color: #000000">+    hole = space_start + space_size;
</span> 
<span style="background: #ffdddd; color: #000000">-     if (os_validate(hole, HOLE_SIZE) == NULL) {
-           fprintf(stderr,
-                   "ensure_space: Failed to validate hole of %d bytes at 0x%08lX\n",
-                   HOLE_SIZE, (unsigned long) hole);
-           exit(1);
-       }
-       /* Make it inaccessible */
-       os_protect(hole, HOLE_SIZE, 0);
</span><span style="background: #ddffdd; color: #000000">+    if (os_validate(hole, HOLE_SIZE) == NULL) {
+        fprintf(stderr,
+                "ensure_space: Failed to validate hole of %d bytes at 0x%08lX\n",
+                HOLE_SIZE, (unsigned long) hole);
+        exit(1);
</span>     }
<span style="background: #ddffdd; color: #000000">+    /* Make it inaccessible */
+    os_protect(hole, HOLE_SIZE, 0);
+}
+
+void
+make_holes(void)
+{
+    int k;
+    os_vm_address_t hole;
+
+    /*
+     * Make holes of the appropriate size for desired spaces.  The
+     * stacks are handled in make_stack_holes, if they are
+     * relocatable.
+     */
</span> 
<span style="background: #ddffdd; color: #000000">+    for (k = 0; k < sizeof(spaces) / sizeof(spaces[0]); ++k) {
+        make_hole(spaces[k], *space_size[k]);
+    }
+    
+    
</span>     /* Round up the dynamic_space_size to the nearest SPARSE_BLOCK_SIZE */
     dynamic_space_size = round_up_sparse_size(dynamic_space_size);
 
<span style="color: #aaaaaa">@@ -477,6 +502,15 @@ make_holes(void)
</span> #endif
 }
 
<span style="background: #ddffdd; color: #000000">+void
+make_stack_holes(void)
+{
+#ifdef RELOCATABLE_STACK_START
+    make_hole((os_vm_address_t)control_stack, control_stack_size);
+    make_hole((os_vm_address_t)binding_stack, binding_stack_size);
+#endif
+}
+    
</span> void *
 os_dlsym(const char *sym_name, lispobj lib_list)
 {
</code></pre>

<br>
</li>
<li id="c980cac8551b1b1f8a4a5bb6e26a7f54">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-17">
<strong>
src/lisp/sparc-validate.h
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/sparc-validate.h
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/sparc-validate.h
</span><span style="color: #aaaaaa">@@ -92,15 +92,24 @@
</span> #define READ_ONLY_SPACE_START     (SpaceStart_TargetReadOnly)
 #define READ_ONLY_SPACE_SIZE   ((2*MB_128) - SPARSE_BLOCK_SIZE)        /* 256 MB - 32 KB, 256 MB max */
 
<span style="background: #ddffdd; color: #000000">+#ifndef RELOCATABLE_STACK_START
</span> #define BINDING_STACK_START       (0x20000000)
<span style="background: #ddffdd; color: #000000">+#endif
+
</span> #define BINDING_STACK_SIZE        (MB_128 - SPARSE_BLOCK_SIZE)    /* 128 MB - 32 KB, 128 MB max */
 
 #define STATIC_SPACE_START     (SpaceStart_TargetStatic)
 #define STATIC_SPACE_SIZE      ((2*MB_128) - SPARSE_BLOCK_SIZE)        /* 256 MB - 32 KB, 256 MB max */
 
<span style="background: #ddffdd; color: #000000">+#ifndef RELOCATABLE_STACK_START
</span> #define CONTROL_STACK_START       (0x38000000)
<span style="background: #ddffdd; color: #000000">+#endif
</span> #define CONTROL_STACK_SIZE        (MB_128 - SPARSE_BLOCK_SIZE)    /* 128 MB - 32 KB, 128 MB max */
<span style="background: #ddffdd; color: #000000">+#if 0
</span> #define CONTROL_STACK_END       (CONTROL_STACK_START + control_stack_size)
<span style="background: #ddffdd; color: #000000">+#endif
+
+#define SIGNAL_STACK_SIZE      SIGSTKSZ
</span> 
 #define DYNAMIC_0_SPACE_START  (SpaceStart_TargetDynamic)
 
</code></pre>

<br>
</li>
<li id="0456dbe6f74a19ea201dea7c0be35e3d">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-18">
<strong>
src/lisp/validate.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/validate.c
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/validate.c
</span><span style="color: #aaaaaa">@@ -18,6 +18,7 @@
</span> 
 #ifdef sparc
 extern void make_holes(void);
<span style="background: #ddffdd; color: #000000">+extern void make_stack_holes(void);
</span> #endif
 
 static void
<span style="color: #aaaaaa">@@ -92,20 +93,10 @@ validate(void)
</span>     */
 #endif
 
<span style="background: #ffdddd; color: #000000">-    /* Control Stack */
-    control_stack = (lispobj *) CONTROL_STACK_START;
-#if (defined(i386) || defined(__x86_64))
-    control_stack_end = (lispobj *) (CONTROL_STACK_START + control_stack_size);
-#endif
-    ensure_space(control_stack, control_stack_size);
-
</span> #ifdef SIGNAL_STACK_START
     ensure_space((lispobj *) SIGNAL_STACK_START, SIGNAL_STACK_SIZE);
 #endif
 
<span style="background: #ffdddd; color: #000000">-    /* Binding Stack */
-    binding_stack = (lispobj *) BINDING_STACK_START;
-    ensure_space(binding_stack, binding_stack_size);
</span> #ifdef LINKAGE_TABLE
     ensure_space((lispobj *) FOREIGN_LINKAGE_SPACE_START,
                 FOREIGN_LINKAGE_SPACE_SIZE);
<span style="color: #aaaaaa">@@ -118,6 +109,40 @@ validate(void)
</span>     printf(" done.\n");
 #endif
 
<span style="background: #ddffdd; color: #000000">+}
+
+void
+validate_stacks()
+{
+    /* Control Stack */
+#ifdef CONTROL_STACK_START
+    /* Map the control stack at a fixed location */
+    control_stack = (lispobj *) CONTROL_STACK_START;
+#if (defined(i386) || defined(__x86_64))
+    control_stack_end = (lispobj *) (CONTROL_STACK_START + control_stack_size);
+#endif
+    ensure_space(control_stack, control_stack_size);
+#else
+    /* Map the conrol stack wherever we have space */
+    control_stack = (lispobj*) os_validate(NULL, control_stack_size);
+
+#if (defined(i386) || defined(__x86_64))
+    control_stack_end = (void*)control_stack + control_stack_size;
+#endif
+#endif
+
+    /* Binding Stack */
+#ifdef BINDING_STACK_START
+    binding_stack = (lispobj *) BINDING_STACK_START;
+    ensure_space(binding_stack, binding_stack_size);
+#else
+    /* Map the binding stack wherever we have space */
+    binding_stack = (lispobj*) os_validate(NULL, binding_stack_size);
+#endif
+#ifdef sparc
+    make_stack_holes();
+#endif
+
</span> #ifdef RED_ZONE_HIT
     os_guard_control_stack(0, 1);
 #endif
</code></pre>

<br>
</li>
<li id="36f20111c8470f8bf0a970af1aa5de94">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-19">
<strong>
src/lisp/validate.h
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/validate.h
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/validate.h
</span><span style="color: #aaaaaa">@@ -37,5 +37,6 @@
</span> #endif
 
 extern void validate(void);
<span style="background: #ddffdd; color: #000000">+extern void validate_stacks(void);
</span> 
 #endif /* _VALIDATE_H_ */
</code></pre>

<br>
</li>
<li id="1c6f4778cb1e5e381e17e502561a0932">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-20">
<strong>
src/lisp/x86-assem.S
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/x86-assem.S
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/x86-assem.S
</span><span style="color: #aaaaaa">@@ -143,7 +143,8 @@ FUNCDEF(call_into_lisp)
</span>   movl    %eax, GNAME(foreign_function_call_active)
 
        movl    %esp,%ebx       # remember current stack
<span style="background: #ffdddd; color: #000000">-     cmpl    $CONTROL_STACK_START,%esp
</span><span style="background: #ddffdd; color: #000000">+        cmpl    GNAME(control_stack), %esp
+
</span>   jbe     ChangeToLispStack
        cmpl    GNAME(control_stack_end), %esp
        jbe     OnLispStack
</code></pre>

<br>
</li>
<li id="eb9ceb07a63a2ccebe3dc5ed6d87d9a7">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-21">
<strong>
src/lisp/x86-validate-darwin.h
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/x86-validate-darwin.h
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/x86-validate-darwin.h
</span><span style="color: #aaaaaa">@@ -18,10 +18,14 @@
</span> #define STATIC_SPACE_START        (SpaceStart_TargetStatic)
 #define STATIC_SPACE_SIZE      (0x0ffff000)    /* 256MB - 1 page */
 
<span style="background: #ddffdd; color: #000000">+#ifndef RELOCATABLE_STACK_START
</span> #define BINDING_STACK_START       (0x38000000)
<span style="background: #ddffdd; color: #000000">+#endif
</span> #define BINDING_STACK_SIZE        (0x07fff000)    /* 128MB - 1 page */
 
<span style="background: #ddffdd; color: #000000">+#ifdef RELOCATABLE_STACK_START
</span> #define CONTROL_STACK_START       (0x40000000)
<span style="background: #ddffdd; color: #000000">+#endif
</span> 
 /*
  * According to /usr/include/sys/signal.h, MINSIGSTKSZ is 32K and
<span style="color: #aaaaaa">@@ -29,7 +33,9 @@
</span>  */
 #define CONTROL_STACK_SIZE     (0x07fdf000)    /* 128MB - SIGSTKSZ - 1 page */
 
<span style="background: #ddffdd; color: #000000">+#ifndef RELOCATABLE_STACK_START
</span> #define SIGNAL_STACK_START        (0x47fe0000)    /* One page past the end of the control stack */
<span style="background: #ddffdd; color: #000000">+#endif
</span> #define SIGNAL_STACK_SIZE SIGSTKSZ
 
 #define DYNAMIC_0_SPACE_START  (SpaceStart_TargetDynamic)
</code></pre>

<br>
</li>
<li id="b150bb0039b44a462e2526f9f645591e">
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad#diff-22">
<strong>
src/lisp/x86-validate-linux.h
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/src/lisp/x86-validate-linux.h
</span><span style="background: #ddffdd; color: #000000">+++ b/src/lisp/x86-validate-linux.h
</span><span style="color: #aaaaaa">@@ -45,13 +45,19 @@
</span> #define STATIC_SPACE_START        (SpaceStart_TargetStatic)
 #define STATIC_SPACE_SIZE      (0x0ffff000)    /* 256MB - 1 page */
 
<span style="background: #ddffdd; color: #000000">+#ifndef RELOCATABLE_STACK_START
</span> #define BINDING_STACK_START       (0x20000000)
<span style="background: #ddffdd; color: #000000">+#endif
</span> #define BINDING_STACK_SIZE        (0x07fff000)    /* 128MB - 1 page */
 
<span style="background: #ddffdd; color: #000000">+#ifndef RELOCATABLE_STACK_START
</span> #define CONTROL_STACK_START       0x38000000
<span style="background: #ddffdd; color: #000000">+#endif
</span> #define CONTROL_STACK_SIZE        (0x07fff000 - 8192)
 
<span style="background: #ddffdd; color: #000000">+#ifndef RELOCATABLE_STACK_START
</span> #define SIGNAL_STACK_START        CONTROL_STACK_END
<span style="background: #ddffdd; color: #000000">+#endif
</span> #define SIGNAL_STACK_SIZE SIGSTKSZ
 
 #define DYNAMIC_0_SPACE_START  (SpaceStart_TargetDynamic)
</code></pre>

<br>
</li>

</div>
<div class="footer" style="margin-top: 10px">
<p style="color: #777; font-size: small">

<br>
<a href="https://gitlab.common-lisp.net/cmucl/cmucl/compare/d003a22443cd8325a87817e29c9caf933488975d...040fbc1d73aef926967a0554265f40c7aaac71ad">View it on GitLab</a>.
<br>
You're receiving this email because of your account on gitlab.common-lisp.net.
If you'd like to receive fewer emails, you can
adjust your notification settings.

</p>
</div>
</body>
</html>