[Vm-dev] [commit][2999] CogVM source as per VMMaker.oscog-eem.772

commits at squeakvm.org commits at squeakvm.org
Sat Jun 14 02:52:56 UTC 2014


Revision: 2999
Author:   eliot
Date:     2014-06-13 19:52:51 -0700 (Fri, 13 Jun 2014)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.772

Spur:
Fix fillObj: signedness for objects straddling the mid-
point of the address space (quickly affects linux).
Similarly for routines in pigCompact, to get asserts correct.

Fix printOopsFrom:to:. for objects up to endOfMemory.

Nuke unused SpurMemMgr inst var var.

Declare lastFreeChunk and firstFreeChunk correctly.
Fix numberOfForwarders: and printForwarders: for
isForwarded:'s blindness towards freeChunks.
Comment isForwarded: to be clear on the issue.

Have the segment manager pass to sqAllocateMemorySegmentOfSize: the address of
the first large enough gap in the address space, instead of the address of the
end of the first segment.  This allows e.g. linux to use MAP_FIXED and hence
get past a 128Mb limit on mmapping.

Fix bugs in isValidFreeObject: & printFreeTreeChunk: that caused bogus assert
failures.

Cog:
Fix an abort (relocating call to invalid address) ue to an over-zealous check
in relocateCallBeforeReturnPC:by:.  Since we relocate e.g. calls to primitives
there can be no effective range check there-in.

Generate the XDisplayControlPlugin with the Cog conf.  Fix a typo in a selector.

Buildland:
Fix all uses of trap in scripts, all of which lines incorrectly ended with 0.

Add convenience scripts that just make the VMs that are uploaded.

Modified Paths:
--------------
    branches/Cog/build.linux32x86/makeall
    branches/Cog/build.linux32x86/newspeak.cog.spur/makeallclean
    branches/Cog/build.linux32x86/newspeak.cog.spur/makealldirty
    branches/Cog/build.linux32x86/newspeak.cog.v3/makeallclean
    branches/Cog/build.linux32x86/newspeak.cog.v3/makealldirty
    branches/Cog/build.linux32x86/newspeak.sista.spur/makeallclean
    branches/Cog/build.linux32x86/newspeak.sista.spur/makealldirty
    branches/Cog/build.linux32x86/newspeak.sista.v3/makeallclean
    branches/Cog/build.linux32x86/newspeak.sista.v3/makealldirty
    branches/Cog/build.linux32x86/newspeak.stack.spur/makeallclean
    branches/Cog/build.linux32x86/newspeak.stack.spur/makealldirty
    branches/Cog/build.linux32x86/newspeak.stack.v3/makeallclean
    branches/Cog/build.linux32x86/newspeak.stack.v3/makealldirty
    branches/Cog/build.linux32x86/squeak.cog.spur/makeallclean
    branches/Cog/build.linux32x86/squeak.cog.spur/makealldirty
    branches/Cog/build.linux32x86/squeak.cog.v3/makeallclean
    branches/Cog/build.linux32x86/squeak.cog.v3/makealldirty
    branches/Cog/build.linux32x86/squeak.sista.spur/makeallclean
    branches/Cog/build.linux32x86/squeak.sista.spur/makealldirty
    branches/Cog/build.linux32x86/squeak.sista.v3/makeallclean
    branches/Cog/build.linux32x86/squeak.sista.v3/makealldirty
    branches/Cog/build.linux32x86/squeak.stack.spur/makeallclean
    branches/Cog/build.linux32x86/squeak.stack.spur/makealldirty
    branches/Cog/build.linux32x86/squeak.stack.v3/makeallclean
    branches/Cog/build.linux32x86/squeak.stack.v3/makealldirty
    branches/Cog/build.macos32x86/makeall
    branches/Cog/build.macos32x86/makeallinstall
    branches/Cog/build.macos32x86/newspeak.cog.spur/mvm
    branches/Cog/build.macos32x86/newspeak.cog.v3/mvm
    branches/Cog/build.macos32x86/newspeak.stack.spur/mvm
    branches/Cog/build.macos32x86/newspeak.stack.v3/mvm
    branches/Cog/build.macos32x86/squeak.cog.spur/mvm
    branches/Cog/build.macos32x86/squeak.cog.v3/mvm
    branches/Cog/build.macos32x86/squeak.sista.spur/mvm
    branches/Cog/build.macos32x86/squeak.sista.v3/mvm
    branches/Cog/build.win32x86/makeall
    branches/Cog/build.win32x86/makeallinstall
    branches/Cog/macbuild/mvm
    branches/Cog/nscogbuild/macbuild/mvm
    branches/Cog/nsspurcogbuild/macbuild/mvm
    branches/Cog/nsspursrc/vm/cogit.c
    branches/Cog/nsspursrc/vm/cogit.h
    branches/Cog/nsspursrc/vm/cointerp.c
    branches/Cog/nsspursrc/vm/cointerp.h
    branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
    branches/Cog/nsspursrc/vm/interp.h
    branches/Cog/nsspursrc/vm/vmCallback.h
    branches/Cog/nsspurstackbuild/macbuild/mvm
    branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
    branches/Cog/nsspurstacksrc/vm/interp.c
    branches/Cog/nsspurstacksrc/vm/interp.h
    branches/Cog/nsspurstacksrc/vm/vmCallback.h
    branches/Cog/platforms/unix/vm/sqUnixMemory.c
    branches/Cog/platforms/win32/vm/sqWin32Alloc.c
    branches/Cog/sistamacbuild/mvm
    branches/Cog/spurcogbuild/macbuild/mvm
    branches/Cog/spursistasrc/vm/cogit.c
    branches/Cog/spursistasrc/vm/cogit.h
    branches/Cog/spursistasrc/vm/cogmethod.h
    branches/Cog/spursistasrc/vm/cointerp.c
    branches/Cog/spursistasrc/vm/cointerp.h
    branches/Cog/spursistasrc/vm/gcc3x-cointerp.c
    branches/Cog/spursistasrc/vm/interp.h
    branches/Cog/spursistasrc/vm/vmCallback.h
    branches/Cog/spursrc/vm/cogit.c
    branches/Cog/spursrc/vm/cogit.h
    branches/Cog/spursrc/vm/cogmethod.h
    branches/Cog/spursrc/vm/cointerp.c
    branches/Cog/spursrc/vm/cointerp.h
    branches/Cog/spursrc/vm/gcc3x-cointerp.c
    branches/Cog/spursrc/vm/interp.h
    branches/Cog/spursrc/vm/vmCallback.h
    branches/Cog/spurstacksrc/vm/gcc3x-interp.c
    branches/Cog/spurstacksrc/vm/interp.c
    branches/Cog/spurstacksrc/vm/interp.h
    branches/Cog/spurstacksrc/vm/vmCallback.h

Added Paths:
-----------
    branches/Cog/build.linux32x86/makeproduct
    branches/Cog/build.macos32x86/makeproduct
    branches/Cog/build.macos32x86/makeproductinstall
    branches/Cog/build.win32x86/makeproduct
    branches/Cog/build.win32x86/makeproductinstall

Property Changed:
----------------
    branches/Cog/platforms/Cross/vm/sqSCCSVersion.h

Modified: branches/Cog/build.linux32x86/makeall
===================================================================
--- branches/Cog/build.linux32x86/makeall	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/makeall	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/bash
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in newspeak.cog.* newspeak.stack.* squeak.*; do
 	if test -d "$d"; then
 		(cd $d;./makeallclean "$@")

Added: branches/Cog/build.linux32x86/makeproduct
===================================================================
--- branches/Cog/build.linux32x86/makeproduct	                        (rev 0)
+++ branches/Cog/build.linux32x86/makeproduct	2014-06-14 02:52:51 UTC (rev 2999)
@@ -0,0 +1,9 @@
+#!/bin/bash
+trap 'exit 2' HUP INT PIPE TERM
+for d in newspeak.cog.spur newspeak.cog.spur squeak.cog.spur squeak.cog.v3; do
+	if test -d "$d"; then
+		(cd $d;./makeallclean "$@")
+	else
+		echo no $d directory found
+	fi
+done


Property changes on: branches/Cog/build.linux32x86/makeproduct
___________________________________________________________________
Added: svn:executable
   + *

Modified: branches/Cog/build.linux32x86/newspeak.cog.spur/makeallclean
===================================================================
--- branches/Cog/build.linux32x86/newspeak.cog.spur/makeallclean	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/newspeak.cog.spur/makeallclean	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo y | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/newspeak.cog.spur/makealldirty
===================================================================
--- branches/Cog/build.linux32x86/newspeak.cog.spur/makealldirty	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/newspeak.cog.spur/makealldirty	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo n | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/newspeak.cog.v3/makeallclean
===================================================================
--- branches/Cog/build.linux32x86/newspeak.cog.v3/makeallclean	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/newspeak.cog.v3/makeallclean	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo y | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/newspeak.cog.v3/makealldirty
===================================================================
--- branches/Cog/build.linux32x86/newspeak.cog.v3/makealldirty	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/newspeak.cog.v3/makealldirty	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo n | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/newspeak.sista.spur/makeallclean
===================================================================
--- branches/Cog/build.linux32x86/newspeak.sista.spur/makeallclean	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/newspeak.sista.spur/makeallclean	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo y | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/newspeak.sista.spur/makealldirty
===================================================================
--- branches/Cog/build.linux32x86/newspeak.sista.spur/makealldirty	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/newspeak.sista.spur/makealldirty	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo n | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/newspeak.sista.v3/makeallclean
===================================================================
--- branches/Cog/build.linux32x86/newspeak.sista.v3/makeallclean	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/newspeak.sista.v3/makeallclean	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo y | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/newspeak.sista.v3/makealldirty
===================================================================
--- branches/Cog/build.linux32x86/newspeak.sista.v3/makealldirty	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/newspeak.sista.v3/makealldirty	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo n | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/newspeak.stack.spur/makeallclean
===================================================================
--- branches/Cog/build.linux32x86/newspeak.stack.spur/makeallclean	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/newspeak.stack.spur/makeallclean	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo y | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/newspeak.stack.spur/makealldirty
===================================================================
--- branches/Cog/build.linux32x86/newspeak.stack.spur/makealldirty	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/newspeak.stack.spur/makealldirty	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo n | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/newspeak.stack.v3/makeallclean
===================================================================
--- branches/Cog/build.linux32x86/newspeak.stack.v3/makeallclean	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/newspeak.stack.v3/makeallclean	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo y | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/newspeak.stack.v3/makealldirty
===================================================================
--- branches/Cog/build.linux32x86/newspeak.stack.v3/makealldirty	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/newspeak.stack.v3/makealldirty	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo n | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/squeak.cog.spur/makeallclean
===================================================================
--- branches/Cog/build.linux32x86/squeak.cog.spur/makeallclean	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/squeak.cog.spur/makeallclean	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo y | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/squeak.cog.spur/makealldirty
===================================================================
--- branches/Cog/build.linux32x86/squeak.cog.spur/makealldirty	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/squeak.cog.spur/makealldirty	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo n | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/squeak.cog.v3/makeallclean
===================================================================
--- branches/Cog/build.linux32x86/squeak.cog.v3/makeallclean	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/squeak.cog.v3/makeallclean	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo y | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/squeak.cog.v3/makealldirty
===================================================================
--- branches/Cog/build.linux32x86/squeak.cog.v3/makealldirty	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/squeak.cog.v3/makealldirty	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo n | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/squeak.sista.spur/makeallclean
===================================================================
--- branches/Cog/build.linux32x86/squeak.sista.spur/makeallclean	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/squeak.sista.spur/makeallclean	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo y | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/squeak.sista.spur/makealldirty
===================================================================
--- branches/Cog/build.linux32x86/squeak.sista.spur/makealldirty	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/squeak.sista.spur/makealldirty	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo n | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/squeak.sista.v3/makeallclean
===================================================================
--- branches/Cog/build.linux32x86/squeak.sista.v3/makeallclean	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/squeak.sista.v3/makeallclean	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo y | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/squeak.sista.v3/makealldirty
===================================================================
--- branches/Cog/build.linux32x86/squeak.sista.v3/makealldirty	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/squeak.sista.v3/makealldirty	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo n | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/squeak.stack.spur/makeallclean
===================================================================
--- branches/Cog/build.linux32x86/squeak.stack.spur/makeallclean	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/squeak.stack.spur/makeallclean	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo y | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/squeak.stack.spur/makealldirty
===================================================================
--- branches/Cog/build.linux32x86/squeak.stack.spur/makealldirty	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/squeak.stack.spur/makealldirty	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo n | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/squeak.stack.v3/makeallclean
===================================================================
--- branches/Cog/build.linux32x86/squeak.stack.v3/makeallclean	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/squeak.stack.v3/makeallclean	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo y | ./mvm "$@")

Modified: branches/Cog/build.linux32x86/squeak.stack.v3/makealldirty
===================================================================
--- branches/Cog/build.linux32x86/squeak.stack.v3/makealldirty	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.linux32x86/squeak.stack.v3/makealldirty	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/sh
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in `dirname $0`/build*; do
 	(cd $d
 	 echo n | ./mvm "$@")

Modified: branches/Cog/build.macos32x86/makeall
===================================================================
--- branches/Cog/build.macos32x86/makeall	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.macos32x86/makeall	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/bash
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in newspeak.* squeak.*; do
 	if test -d "$d"; then
 		(cd $d;./mvm -A)

Modified: branches/Cog/build.macos32x86/makeallinstall
===================================================================
--- branches/Cog/build.macos32x86/makeallinstall	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.macos32x86/makeallinstall	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,7 +1,7 @@
 #!/bin/bash
 IFS="
 	"
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 REV=`grep 'SvnRawRevisionString.*Rev:' "\`dirname $0\`/../platforms/Cross/vm/sqSCCSVersion.h" \
 	| sed 's/^.*Rev: \([0-9][0-9]*\) $";/\1/'`
 TAG=`date +%g.%U.`$REV

Added: branches/Cog/build.macos32x86/makeproduct
===================================================================
--- branches/Cog/build.macos32x86/makeproduct	                        (rev 0)
+++ branches/Cog/build.macos32x86/makeproduct	2014-06-14 02:52:51 UTC (rev 2999)
@@ -0,0 +1,14 @@
+#!/bin/bash
+trap 'exit 2' HUP INT PIPE TERM
+PRODUCTDIRS="newspeak.cog.spur newspeak.cog.v3 squeak.cog.spur squeak.cog.v3"
+for d in $PRODUCTDIRS; do
+	if test -d "$d"; then
+		(cd $d;./mvm -A)
+	else
+		echo no $d directory found
+	fi
+done
+echo no news is good news...
+for d in $PRODUCTDIRS; do
+	test -d $d && grep 'BUILD FAILED' $d/LOG*
+done


Property changes on: branches/Cog/build.macos32x86/makeproduct
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/Cog/build.macos32x86/makeproductinstall
===================================================================
--- branches/Cog/build.macos32x86/makeproductinstall	                        (rev 0)
+++ branches/Cog/build.macos32x86/makeproductinstall	2014-06-14 02:52:51 UTC (rev 2999)
@@ -0,0 +1,19 @@
+#!/bin/bash
+IFS="
+	"
+trap 'exit 2' HUP INT PIPE TERM
+REV=`grep 'SvnRawRevisionString.*Rev:' "\`dirname $0\`/../platforms/Cross/vm/sqSCCSVersion.h" \
+	| sed 's/^.*Rev: \([0-9][0-9]*\) $";/\1/'`
+TAG=`date +%g.%U.`$REV
+set -- Newspeak\ Virtual\ Machine	Newspeak\ Spur\ Virtual\ Machine
+for td in newspeak.cog.v3 newspeak.cog.spur; do
+	d=$td/installer
+	PRODUCT=$1-$TAG.dmg
+	if test -d "$d"; then
+		(cd $d;make -n)
+		test -f $d/$PRODUCT && mv $d/$PRODUCT ../products
+	else
+		echo no $d directory found
+	fi
+	shift
+done


Property changes on: branches/Cog/build.macos32x86/makeproductinstall
___________________________________________________________________
Added: svn:executable
   + *

Modified: branches/Cog/build.macos32x86/newspeak.cog.spur/mvm
===================================================================
--- branches/Cog/build.macos32x86/newspeak.cog.spur/mvm	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.macos32x86/newspeak.cog.spur/mvm	2014-06-14 02:52:51 UTC (rev 2999)
@@ -17,7 +17,7 @@
 	echo usage: $0 -A \| -AS \| -d -a -f
 	exit 1
 fi
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 test -n "$D" && (makevm -d 2>&1 | tee $D;grep "BUILD .*ED" $D)
 test -n "$A" && (makevm -a 2>&1 | tee $A;grep "BUILD .*ED" $A)
 test -n "$F" && (makevm -s 2>&1 | tee $F;grep "BUILD .*ED" $F)

Modified: branches/Cog/build.macos32x86/newspeak.cog.v3/mvm
===================================================================
--- branches/Cog/build.macos32x86/newspeak.cog.v3/mvm	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.macos32x86/newspeak.cog.v3/mvm	2014-06-14 02:52:51 UTC (rev 2999)
@@ -17,7 +17,7 @@
 	echo usage: $0 -A \| -AS \| -d -a -f
 	exit 1
 fi
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 test -n "$D" && (makevm -d 2>&1 | tee $D;grep "BUILD .*ED" $D)
 test -n "$A" && (makevm -a 2>&1 | tee $A;grep "BUILD .*ED" $A)
 test -n "$F" && (makevm -s 2>&1 | tee $F;grep "BUILD .*ED" $F)

Modified: branches/Cog/build.macos32x86/newspeak.stack.spur/mvm
===================================================================
--- branches/Cog/build.macos32x86/newspeak.stack.spur/mvm	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.macos32x86/newspeak.stack.spur/mvm	2014-06-14 02:52:51 UTC (rev 2999)
@@ -17,7 +17,7 @@
 	echo usage: $0 -A \| -AS \| -d -a -f
 	exit 1
 fi
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 test -n "$D" && (makevm -d 2>&1 | tee $D;grep "BUILD .*ED" $D)
 test -n "$A" && (makevm -a 2>&1 | tee $A;grep "BUILD .*ED" $A)
 test -n "$F" && (makevm -s 2>&1 | tee $F;grep "BUILD .*ED" $F)

Modified: branches/Cog/build.macos32x86/newspeak.stack.v3/mvm
===================================================================
--- branches/Cog/build.macos32x86/newspeak.stack.v3/mvm	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.macos32x86/newspeak.stack.v3/mvm	2014-06-14 02:52:51 UTC (rev 2999)
@@ -17,7 +17,7 @@
 	echo usage: $0 -A \| -AS \| -d -a -f
 	exit 1
 fi
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 test -n "$D" && (makevm -d 2>&1 | tee $D;grep "BUILD .*ED" $D)
 test -n "$A" && (makevm -a 2>&1 | tee $A;grep "BUILD .*ED" $A)
 test -n "$F" && (makevm -s 2>&1 | tee $F;grep "BUILD .*ED" $F)

Modified: branches/Cog/build.macos32x86/squeak.cog.spur/mvm
===================================================================
--- branches/Cog/build.macos32x86/squeak.cog.spur/mvm	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.macos32x86/squeak.cog.spur/mvm	2014-06-14 02:52:51 UTC (rev 2999)
@@ -28,7 +28,7 @@
 	echo usage: $0 -A \| -AS -AT \| -d -a -f -dt -at -ft
 	exit 1
 fi
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 test -n "$D" && (makevm $C -d 2>&1 | tee $D;grep "BUILD .*ED" $D)
 test -n "$A" && (makevm $C -a 2>&1 | tee $A;grep "BUILD .*ED" $A)
 test -n "$F" && (makevm $C -s 2>&1 | tee $F;grep "BUILD .*ED" $F)

Modified: branches/Cog/build.macos32x86/squeak.cog.v3/mvm
===================================================================
--- branches/Cog/build.macos32x86/squeak.cog.v3/mvm	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.macos32x86/squeak.cog.v3/mvm	2014-06-14 02:52:51 UTC (rev 2999)
@@ -27,7 +27,7 @@
 	echo usage: $0 -A \| -AS -AT \| -d -a -f -dt -at -ft
 	exit 1
 fi
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 test -n "$D" && (makevm $C -d 2>&1 | tee $D;grep "BUILD .*ED" $D)
 test -n "$A" && (makevm $C -a 2>&1 | tee $A;grep "BUILD .*ED" $A)
 test -n "$F" && (makevm $C -s 2>&1 | tee $F;grep "BUILD .*ED" $F)

Modified: branches/Cog/build.macos32x86/squeak.sista.spur/mvm
===================================================================
--- branches/Cog/build.macos32x86/squeak.sista.spur/mvm	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.macos32x86/squeak.sista.spur/mvm	2014-06-14 02:52:51 UTC (rev 2999)
@@ -19,7 +19,7 @@
 	echo usage: $0 -A \| -d -a -f
 	exit 1
 fi
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 test -n "$D" && (makevm $C -d 2>&1 | tee $D;grep "BUILD .*ED" $D)
 test -n "$A" && (makevm $C -a 2>&1 | tee $A;grep "BUILD .*ED" $A)
 test -n "$F" && (makevm $C -s 2>&1 | tee $F;grep "BUILD .*ED" $F)

Modified: branches/Cog/build.macos32x86/squeak.sista.v3/mvm
===================================================================
--- branches/Cog/build.macos32x86/squeak.sista.v3/mvm	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.macos32x86/squeak.sista.v3/mvm	2014-06-14 02:52:51 UTC (rev 2999)
@@ -19,7 +19,7 @@
 	echo usage: $0 -A \| -d -a -f
 	exit 1
 fi
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 test -n "$D" && (makevm $C -d 2>&1 | tee $D;grep "BUILD .*ED" $D)
 test -n "$A" && (makevm $C -a 2>&1 | tee $A;grep "BUILD .*ED" $A)
 test -n "$F" && (makevm $C -s 2>&1 | tee $F;grep "BUILD .*ED" $F)

Modified: branches/Cog/build.win32x86/makeall
===================================================================
--- branches/Cog/build.win32x86/makeall	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.win32x86/makeall	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/bash
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in newspeak.* squeak.*; do
 	if test -d "$d"; then
 		(cd $d;./mvm)

Modified: branches/Cog/build.win32x86/makeallinstall
===================================================================
--- branches/Cog/build.win32x86/makeallinstall	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/build.win32x86/makeallinstall	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 #!/bin/bash
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 for d in newspeak.*/installer squeak.*/installer; do
 	if test -d "$d"; then
 		(cd $d;make)

Added: branches/Cog/build.win32x86/makeproduct
===================================================================
--- branches/Cog/build.win32x86/makeproduct	                        (rev 0)
+++ branches/Cog/build.win32x86/makeproduct	2014-06-14 02:52:51 UTC (rev 2999)
@@ -0,0 +1,9 @@
+#!/bin/bash
+trap 'exit 2' HUP INT PIPE TERM
+for d in newspeak.cog.spur newspeak.cog.v3 squeak.cog.spur squeak.cog.v3 do
+	if test -d "$d"; then
+		(cd $d;./mvm)
+	else
+		echo no $d directory found
+	fi
+done


Property changes on: branches/Cog/build.win32x86/makeproduct
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/Cog/build.win32x86/makeproductinstall
===================================================================
--- branches/Cog/build.win32x86/makeproductinstall	                        (rev 0)
+++ branches/Cog/build.win32x86/makeproductinstall	2014-06-14 02:52:51 UTC (rev 2999)
@@ -0,0 +1,9 @@
+#!/bin/bash
+trap 'exit 2' HUP INT PIPE TERM
+for d in newspeak.cog.spur/installer newspeak.cog.v3/installer; do
+	if test -d "$d"; then
+		(cd $d;make)
+	else
+		echo no $d directory found
+	fi
+done


Property changes on: branches/Cog/build.win32x86/makeproductinstall
___________________________________________________________________
Added: svn:executable
   + *

Modified: branches/Cog/macbuild/mvm
===================================================================
--- branches/Cog/macbuild/mvm	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/macbuild/mvm	2014-06-14 02:52:51 UTC (rev 2999)
@@ -27,7 +27,7 @@
 	echo usage: $0 -A \| -AS -AT \| -d -a -f -dt -at -ft
 	exit 1
 fi
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 test -n "$D" && (makevm $C -d 2>&1 | tee $D;grep "BUILD .*ED" $D)
 test -n "$A" && (makevm $C -a 2>&1 | tee $A;grep "BUILD .*ED" $A)
 test -n "$F" && (makevm $C -s 2>&1 | tee $F;grep "BUILD .*ED" $F)

Modified: branches/Cog/nscogbuild/macbuild/mvm
===================================================================
--- branches/Cog/nscogbuild/macbuild/mvm	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/nscogbuild/macbuild/mvm	2014-06-14 02:52:51 UTC (rev 2999)
@@ -17,7 +17,7 @@
 	echo usage: $0 -A \| -AS \| -d -a -f
 	exit 1
 fi
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 test -n "$D" && (makevm -d 2>&1 | tee $D;grep "BUILD .*ED" $D)
 test -n "$A" && (makevm -a 2>&1 | tee $A;grep "BUILD .*ED" $A)
 test -n "$F" && (makevm -s 2>&1 | tee $F;grep "BUILD .*ED" $F)

Modified: branches/Cog/nsspurcogbuild/macbuild/mvm
===================================================================
--- branches/Cog/nsspurcogbuild/macbuild/mvm	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/nsspurcogbuild/macbuild/mvm	2014-06-14 02:52:51 UTC (rev 2999)
@@ -17,7 +17,7 @@
 	echo usage: $0 -A \| -AS \| -d -a -f
 	exit 1
 fi
-trap 'exit 2' HUP INT PIPE TERM 0
+trap 'exit 2' HUP INT PIPE TERM
 test -n "$D" && (makevm -d 2>&1 | tee $D;grep "BUILD .*ED" $D)
 test -n "$A" && (makevm -a 2>&1 | tee $A;grep "BUILD .*ED" $A)
 test -n "$F" && (makevm -s 2>&1 | tee $F;grep "BUILD .*ED" $F)

Modified: branches/Cog/nsspursrc/vm/cogit.c
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.c	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/nsspursrc/vm/cogit.c	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.766 uuid: 3045c341-cfbf-494c-a7b1-fb29c26a7340
+	CCodeGenerator * VMMaker.oscog-eem.771 uuid: aab62250-6fd1-4267-95f5-a270cf86aad7
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.766 uuid: 3045c341-cfbf-494c-a7b1-fb29c26a7340
+	StackToRegisterMappingCogit * VMMaker.oscog-eem.771 uuid: aab62250-6fd1-4267-95f5-a270cf86aad7
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.766 uuid: 3045c341-cfbf-494c-a7b1-fb29c26a7340 " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit * VMMaker.oscog-eem.771 uuid: aab62250-6fd1-4267-95f5-a270cf86aad7 " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -21614,9 +21614,6 @@
 		byteAtput(retpc - 2, (((usqInt) distance) >> 16) & 0xFF);
 		byteAtput(retpc - 3, (((usqInt) distance) >> 8) & 0xFF);
 		byteAtput(retpc - 4, distance & 0xFF);
-		if (!(asserta((callTargetFromReturnAddress(self_in_relocateCallBeforeReturnPCby, retpc)) >= (minCallAddress())))) {
-			error("relocating call to invalid address");
-		}
 	}
 	return self_in_relocateCallBeforeReturnPCby;
 }

Modified: branches/Cog/nsspursrc/vm/cogit.h
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.h	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/nsspursrc/vm/cogit.h	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.766 uuid: 3045c341-cfbf-494c-a7b1-fb29c26a7340
+	CCodeGenerator * VMMaker.oscog-eem.771 uuid: aab62250-6fd1-4267-95f5-a270cf86aad7
  */
 
 

Modified: branches/Cog/nsspursrc/vm/cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.c	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/nsspursrc/vm/cointerp.c	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.769 uuid: 7b5918e2-f856-4eca-975d-0f1e6904ed1d
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.772 uuid: c15ccff3-56a1-484d-af3b-0ee906a7a24b
    from
-	CoInterpreter VMMaker.oscog-eem.769 uuid: 7b5918e2-f856-4eca-975d-0f1e6904ed1d
+	CoInterpreter VMMaker.oscog-eem.772 uuid: c15ccff3-56a1-484d-af3b-0ee906a7a24b
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.769 uuid: 7b5918e2-f856-4eca-975d-0f1e6904ed1d " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.772 uuid: c15ccff3-56a1-484d-af3b-0ee906a7a24b " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -631,6 +631,7 @@
 static sqInt firstCorpse(sqInt headOfCorpseList) NoDbgRegParms;
 static void * firstFixedFieldOfMaybeImmediate(sqInt oop) NoDbgRegParms;
 void * firstFixedField(sqInt objOop);
+static void * firstGapOfSizeAtLeast(sqInt size) NoDbgRegParms;
 void * firstIndexableField(sqInt objOop);
 sqInt firstLongFormat(void);
 sqInt firstShortFormat(void);
@@ -1478,8 +1479,8 @@
 _iss sqInt needGCFlag;
 _iss sqInt totalFreeOldSpace;
 _iss sqInt bytesPerPage;
+_iss sqInt numSegments;
 _iss sqInt traceLogIndex;
-_iss sqInt numSegments;
 _iss usqInt pastSpaceStart;
 _iss char * stackLimit;
 _iss sqInt * freeLists;
@@ -1487,14 +1488,14 @@
 _iss usqInt freeListsMask;
 _iss sqInt rememberedSetSize;
 _iss SpurContiguousObjStack unscannedEphemerons;
-_iss sqInt firstFreeChunk;
+_iss usqInt firstFreeChunk;
 _iss unsigned char primTraceLogIndex;
 _iss StackPage * mostRecentlyUsedPage;
 _iss SpurNewSpaceSpace pastSpace;
 _iss sqInt numStackPages;
 _iss usqInt newSpaceStart;
+_iss usqInt oldSpaceStart;
 _iss sqInt classTableFirstPage;
-_iss usqInt oldSpaceStart;
 _iss sqInt weaklingStack;
 _iss sqInt markStack;
 _iss SpurNewSpaceSpace futureSpace;
@@ -1508,7 +1509,7 @@
 _iss sqInt tempOop;
 _iss char * objStackInvalidBecause;
 _iss SpurNewSpaceSpace eden;
-_iss sqInt lastFreeChunk;
+_iss usqInt lastFreeChunk;
 _iss sqInt profileSemaphore;
 _iss sqInt ephemeronList;
 _iss usqInt freeOldSpaceStart;
@@ -1614,7 +1615,6 @@
 _iss unsigned long byteCount;
 _iss SpurCircularBuffer highestObjects;
 _iss sqInt preferredPinningSegment;
-_iss usqInt sortedFreeChunks;
 _iss char * stackMemory;
 _iss usqLong statFGCDeltaUsecs;
 #undef _iss
@@ -2238,7 +2238,7 @@
 	/* 574 */ (void (*)(void))0,
 	/* 575 */ (void (*)(void))0,
  0 };
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.769";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.772";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -5531,6 +5531,7 @@
 							GIV(framePointer) = localFP;
 							
 							ceEnterCogCodePopReceiverReg();
+							null;
 							goto l290;
 						}
 						localIP = pointerForOop(longAt(localFP + FoxIFSavedIP));
@@ -5548,7 +5549,7 @@
 					/* begin fetchNextBytecode */
 					currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
-					/* return self */
+					null;
 				l290:	/* end baseFrameReturn */;
 					goto l287;
 				}
@@ -15524,7 +15525,7 @@
     sqInt segIndex;
 
 	null;
-	segAddress = sqAllocateMemorySegmentOfSizeAboveAllocatedSizeInto(ammount, ((void *)((((GIV(segments)[0]).segSize)) + (((GIV(segments)[0]).segStart)))), (&allocatedSize));
+	segAddress = sqAllocateMemorySegmentOfSizeAboveAllocatedSizeInto(ammount, firstGapOfSizeAtLeast(ammount), (&allocatedSize));
 	if (!(segAddress == null)) {
 		/* begin insertSegmentFor: */
 		assert((((unsigned long)segAddress)) > (segLimit(&GIV(segments)[0])));
@@ -16690,13 +16691,11 @@
     sqInt f;
     sqInt index;
     sqInt initialIndex;
-    sqInt lastSubdividedFreeChunk;
     sqInt next;
     sqInt node;
     sqInt prev;
 
 	/* begin allocateOldSpaceChunkOfBytes:suchThat: */
-	assert(((lastSubdividedFreeChunk = 0)) == 0);
 
 	/* be optimistic (& don't wait for the write) */
 
@@ -19252,7 +19251,7 @@
     sqInt newObj;
     sqInt numBytes;
     sqInt obj;
-    sqInt p;
+    usqInt p;
 
 	/* begin eeInstantiateSmallClassIndex:format:numSlots: */
 	assert((slotSize >= 0)
@@ -19284,7 +19283,7 @@
 l1:	/* end allocateSmallNewSpaceSlots:format:classIndex: */;
 	/* begin fillObj:numSlots:with: */
 	assert(oopisLessThan(((obj + (BaseHeaderSize)) + (slotSize * (bytesPerSlot()))) - 1, addressAfter(obj)));
-	for (p = (obj + (BaseHeaderSize)); p < ((obj + (BaseHeaderSize)) + (slotSize * 4)); p += 8) {
+	for (p = (((usqInt)(obj + (BaseHeaderSize)))); p <= (((usqInt)(((obj + (BaseHeaderSize)) + (slotSize * 4)) - 1))); p += 8) {
 		longAtput(p, GIV(nilObj));
 		longAtput(p + 4, GIV(nilObj));
 	}
@@ -22772,14 +22771,14 @@
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt cascade0;
     sqInt cascade1;
-    sqInt free;
+    usqInt free;
     sqInt high;
     sqInt i;
     sqInt low;
     usqInt numSlots;
     usqInt numSlots1;
-    sqInt prevFree;
-    sqInt prevPrevFree;
+    usqInt prevFree;
+    usqInt prevPrevFree;
     sqInt scanAddress;
     sqInt slotBytes;
 
@@ -24379,8 +24378,8 @@
     sqInt iLimiT;
     sqInt index;
     sqInt lowest;
-    sqInt lowestForwarder;
-    sqInt lowestForwarder1;
+    usqInt lowestForwarder;
+    usqInt lowestForwarder1;
     usqInt numSlots;
     usqInt numSlots1;
     sqInt o;
@@ -25316,7 +25315,7 @@
     sqInt initialMajorIndex;
     sqInt majorIndex;
     sqInt minorIndex;
-    sqInt p;
+    usqInt p;
     sqInt page;
 
 	majorIndex = ((usqInt) GIV(classTableIndex)) >> 10;
@@ -25339,7 +25338,7 @@
 			}
 			/* begin fillObj:numSlots:with: */
 			assert(oopisLessThan(((page + (BaseHeaderSize)) + ((1 << 10) * (bytesPerSlot()))) - 1, addressAfter(page)));
-			for (p = (page + (BaseHeaderSize)); p < ((page + (BaseHeaderSize)) + ((1 << 10) * 4)); p += 8) {
+			for (p = (((usqInt)(page + (BaseHeaderSize)))); p <= (((usqInt)(((page + (BaseHeaderSize)) + ((1 << 10) * 4)) - 1))); p += 8) {
 				longAtput(p, GIV(nilObj));
 				longAtput(p + 4, GIV(nilObj));
 			}
@@ -27631,6 +27630,33 @@
 }
 
 
+/*	Answer the segment limit of the first segment followed by a gap of at
+	least size bytes.
+ */
+
+static void *
+firstGapOfSizeAtLeast(sqInt size)
+{   DECL_MAYBE_SQ_GLOBAL_STRUCT
+    sqInt address;
+    sqInt bridge;
+    sqInt i;
+    usqInt numSlots;
+
+	for (i = 0; i <= (GIV(numSegments) - 2); i += 1) {
+		/* begin objectStartingAt: */
+		address = (((((&(GIV(segments)[i])))->segSize)) + ((((&(GIV(segments)[i])))->segStart))) - (2 * (BaseHeaderSize));
+		numSlots = byteAt(address + 7);
+		bridge = (numSlots == 0xFF
+			? address + (BaseHeaderSize)
+			: address);
+		if (((bytesInObject(bridge)) - (2 * (BaseHeaderSize))) >= size) {
+			return ((void *)((((GIV(segments)[i]).segSize)) + (((GIV(segments)[i]).segStart))));
+		}
+	}
+	return ((void *)((((GIV(segments)[GIV(numSegments) - 1]).segSize)) + (((GIV(segments)[GIV(numSegments) - 1]).segStart))));
+}
+
+
 /*	NOTE: overridden in various simulator subclasses to add coercion to
 	CArray, so please duplicate any changes.
 	There are only two important cases, both for objects with named inst vars,
@@ -31063,7 +31089,7 @@
     sqInt newObj1;
     sqInt numBytes;
     sqInt numSlots;
-    sqInt p;
+    usqInt p;
 
 	classFormat = ((longAt((classObj + (BaseHeaderSize)) + (InstanceSpecificationIndex << 2))) >> 1);
 	instSpec = (((usqInt) classFormat) >> 16) & 0x1F;
@@ -31173,7 +31199,7 @@
 	if (!(newObj == null)) {
 		/* begin fillObj:numSlots:with: */
 		assert(oopisLessThan(((newObj + (BaseHeaderSize)) + (numSlots * (bytesPerSlot()))) - 1, addressAfter(newObj)));
-		for (p = (newObj + (BaseHeaderSize)); p < ((newObj + (BaseHeaderSize)) + (numSlots * 4)); p += 8) {
+		for (p = (((usqInt)(newObj + (BaseHeaderSize)))); p <= (((usqInt)(((newObj + (BaseHeaderSize)) + (numSlots * 4)) - 1))); p += 8) {
 			longAtput(p, fillValue);
 			longAtput(p + 4, fillValue);
 		}
@@ -31569,7 +31595,10 @@
 	isForwardedObjectClassIndexPun being a power of two to generate a more
 	efficient test than the straight-forward
 	(self classIndexOf: objOop) = self isForwardedObjectClassIndexPun
-	 */
+	at the cost of this being ambiguous with free chunks. So either never
+	apply this to free chunks
+	or guard with (self isFreeObject: foo) not. So far the idiom has been to
+	guard with isFreeObject: */
 
 sqInt
 isForwarded(sqInt objOop)
@@ -32011,12 +32040,14 @@
 
 static sqInt
 isValidFreeObject(sqInt objOop)
-{
+{   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt chunk;
 
-	return (addressCouldBeObj(objOop))
+	return (((objOop & ((BaseHeaderSize) - 1)) == 0)
+	 && (((((usqInt) objOop)) >= (((usqInt) GIV(oldSpaceStart))))
+	 && ((((usqInt) objOop)) < (((usqInt) GIV(endOfMemory))))))
 	 && ((((longAt(objOop)) & 0x3FFFFF) == 0)
-	 && ((isInMemory(addressAfter(objOop)))
+	 && ((oopisLessThanOrEqualTo(addressAfter(objOop), GIV(endOfMemory)))
 	 && (((((chunk = longAt((objOop + (BaseHeaderSize)) + (0 << 2)))) == 0)
 	 || (((longAt(chunk)) & 0x3FFFFF) == 0))
 	 && (((bytesInObject(objOop)) < (32 * 8))
@@ -37045,7 +37076,8 @@
 		assert((objOop % (allocationUnit())) == 0);
 		if (!((((usqInt) objOop)) < (((usqInt) GIV(endOfMemory))))) break;
 		assert((long64At(objOop)) != 0);
-		if (((longAt(objOop)) & (0x3FFFFF - 8)) == 0) {
+		if ((((longAt(objOop)) & (0x3FFFFF - 8)) == 0)
+		 && (!(((longAt(objOop)) & 0x3FFFFF) == 0))) {
 			n += 1;
 		}
 
@@ -37071,7 +37103,8 @@
 		: address);
 	limit = GIV(pastSpaceStart);
 	while ((((usqInt) objOop1)) < (((usqInt) limit))) {
-		if (((longAt(objOop1)) & (0x3FFFFF - 8)) == 0) {
+		if ((((longAt(objOop1)) & (0x3FFFFF - 8)) == 0)
+		 && (!(((longAt(objOop1)) & 0x3FFFFF) == 0))) {
 			n += 1;
 		}
 
@@ -37086,7 +37119,8 @@
 		? address1 + (BaseHeaderSize)
 		: address1);
 	while ((((usqInt) objOop1)) < (((usqInt) GIV(freeStart)))) {
-		if (((longAt(objOop1)) & (0x3FFFFF - 8)) == 0) {
+		if ((((longAt(objOop1)) & (0x3FFFFF - 8)) == 0)
+		 && (!(((longAt(objOop1)) & 0x3FFFFF) == 0))) {
 			n += 1;
 		}
 
@@ -48947,7 +48981,7 @@
     sqInt numSlots;
     sqInt obj;
     sqInt oop;
-    sqInt p;
+    usqInt p;
     char *sp;
     char *sp1;
     sqInt spaceOkay;
@@ -49024,7 +49058,7 @@
 	if (!(newObj == null)) {
 		/* begin fillObj:numSlots:with: */
 		assert(oopisLessThan(((newObj + (BaseHeaderSize)) + (numSlots * (bytesPerSlot()))) - 1, addressAfter(newObj)));
-		for (p = (newObj + (BaseHeaderSize)); p < ((newObj + (BaseHeaderSize)) + (numSlots * 4)); p += 8) {
+		for (p = (((usqInt)(newObj + (BaseHeaderSize)))); p <= (((usqInt)(((newObj + (BaseHeaderSize)) + (numSlots * 4)) - 1))); p += 8) {
 			longAtput(p, GIV(nilObj));
 			longAtput(p + 4, GIV(nilObj));
 		}
@@ -56660,7 +56694,8 @@
 		assert((objOop1 % (allocationUnit())) == 0);
 		if (!((((usqInt) objOop1)) < (((usqInt) GIV(endOfMemory))))) break;
 		assert((long64At(objOop1)) != 0);
-		if (((longAt(objOop1)) & (0x3FFFFF - 8)) == 0) {
+		if ((((longAt(objOop1)) & (0x3FFFFF - 8)) == 0)
+		 && (!(((longAt(objOop1)) & 0x3FFFFF) == 0))) {
 			printHex(objOop1);
 			/* begin cr */
 			printf("\n");
@@ -56688,7 +56723,8 @@
 		: address);
 	limit = GIV(pastSpaceStart);
 	while ((((usqInt) objOop2)) < (((usqInt) limit))) {
-		if (((longAt(objOop2)) & (0x3FFFFF - 8)) == 0) {
+		if ((((longAt(objOop2)) & (0x3FFFFF - 8)) == 0)
+		 && (!(((longAt(objOop2)) & 0x3FFFFF) == 0))) {
 			printHex(objOop2);
 			/* begin cr */
 			printf("\n");
@@ -56705,7 +56741,8 @@
 		? address1 + (BaseHeaderSize)
 		: address1);
 	while ((((usqInt) objOop2)) < (((usqInt) GIV(freeStart)))) {
-		if (((longAt(objOop2)) & (0x3FFFFF - 8)) == 0) {
+		if ((((longAt(objOop2)) & (0x3FFFFF - 8)) == 0)
+		 && (!(((longAt(objOop2)) & 0x3FFFFF) == 0))) {
 			printHex(objOop2);
 			/* begin cr */
 			printf("\n");
@@ -58883,16 +58920,18 @@
 
 void
 printOopsFromto(sqInt startAddress, sqInt endAddress)
-{
+{   DECL_MAYBE_SQ_GLOBAL_STRUCT
+    sqInt limit;
     sqInt oop;
 
 	oop = objectBefore(startAddress);
+	limit = (((((unsigned long)endAddress)) < GIV(endOfMemory)) ? (((unsigned long)endAddress)) : GIV(endOfMemory));
 	oop = (oop == null
 		? startAddress
 		: ((objectAfter(oop)) == startAddress
 				? startAddress
 				: oop));
-	while ((((usqInt) oop)) < (((usqInt) endAddress))) {
+	while ((((usqInt) oop)) < (((usqInt) limit))) {
 		printHex(oop);
 		print("/");
 		printNum(oop);
@@ -60962,11 +61001,11 @@
 rebuildFreeListsForPigCompact(void)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     usqInt bytes;
-    sqInt free;
+    usqInt free;
     sqInt freeObj;
-    sqInt nextFree;
-    sqInt prevFree;
-    sqInt prevPrevFree;
+    usqInt nextFree;
+    usqInt prevFree;
+    usqInt prevPrevFree;
     sqInt start;
 
 	assert(checkTraversableSortedFreeList());

Modified: branches/Cog/nsspursrc/vm/cointerp.h
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.h	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/nsspursrc/vm/cointerp.h	2014-06-14 02:52:51 UTC (rev 2999)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.769 uuid: 7b5918e2-f856-4eca-975d-0f1e6904ed1d
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.772 uuid: c15ccff3-56a1-484d-af3b-0ee906a7a24b
  */
 
 

Modified: branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/gcc3x-cointerp.c	2014-06-13 16:48:22 UTC (rev 2998)
+++ branches/Cog/nsspursrc/vm/gcc3x-cointerp.c	2014-06-14 02:52:51 UTC (rev 2999)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.769 uuid: 7b5918e2-f856-4eca-975d-0f1e6904ed1d
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.772 uuid: c15ccff3-56a1-484d-af3b-0ee906a7a24b
    from
-	CoInterpreter VMMaker.oscog-eem.769 uuid: 7b5918e2-f856-4eca-975d-0f1e6904ed1d
+	CoInterpreter VMMaker.oscog-eem.772 uuid: c15ccff3-56a1-484d-af3b-0ee906a7a24b
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.769 uuid: 7b5918e2-f856-4eca-975d-0f1e6904ed1d " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.772 uuid: c15ccff3-56a1-484d-af3b-0ee906a7a24b " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -634,6 +634,7 @@
 static sqInt firstCorpse(sqInt headOfCorpseList) NoDbgRegParms;
 static void * firstFixedFieldOfMaybeImmediate(sqInt oop) NoDbgRegParms;
 void * firstFixedField(sqInt objOop);
+static void * firstGapOfSizeAtLeast(sqInt size) NoDbgRegParms;
 void * firstIndexableField(sqInt objOop);
 sqInt firstLongFormat(void);
 sqInt firstShortFormat(void);
@@ -1481,8 +1482,8 @@
 _iss sqInt needGCFlag;
 _iss sqInt totalFreeOldSpace;
 _iss sqInt bytesPerPage;
+_iss sqInt numSegments;
 _iss sqInt traceLogIndex;
-_iss sqInt numSegments;
 _iss usqInt pastSpaceStart;
 _iss char * stackLimit;
 _iss sqInt * freeLists;
@@ -1490,14 +1491,14 @@
 _iss usqInt freeListsMask;
 _iss sqInt rememberedSetSize;
 _iss SpurContiguousObjStack unscannedEphemerons;
-_iss sqInt firstFreeChunk;
+_iss usqInt firstFreeChunk;
 _iss unsigned char primTraceLogIndex;
 _iss StackPage * mostRecentlyUsedPage;
 _iss SpurNewSpaceSpace pastSpace;
 _iss sqInt numStackPages;
 _iss usqInt newSpaceStart;
+_iss usqInt oldSpaceStart;
 _iss sqInt classTableFirstPage;
-_iss usqInt oldSpaceStart;
 _iss sqInt weaklingStack;
 _iss sqInt markStack;
 _iss SpurNewSpaceSpace futureSpace;
@@ -1511,7 +1512,7 @@
 _iss sqInt tempOop;
 _iss char * objStackInvalidBecause;
 _iss SpurNewSpaceSpace eden;
-_iss sqInt lastFreeChunk;
+_iss usqInt lastFreeChunk;
 _iss sqInt profileSemaphore;
 _iss sqInt ephemeronList;
 _iss usqInt freeOldSpaceStart;
@@ -1617,7 +1618,6 @@
 _iss unsigned long byteCount;
 _iss SpurCircularBuffer highestObjects;
 _iss sqInt preferredPinningSegment;
-_iss usqInt sortedFreeChunks;
 _iss char * stackMemory;
 _iss usqLong statFGCDeltaUsecs;
 #undef _iss
@@ -2241,7 +2241,7 @@
 	/* 574 */ (void (*)(void))0,
 	/* 575 */ (void (*)(void))0,
  0 };
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.769";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.772";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -5540,6 +5540,7 @@
 							GIV(framePointer) = localFP;
 							
 							ceEnterCogCodePopReceiverReg();
+							null;
 							goto l290;
 						}
 						localIP = pointerForOop(longAt(localFP + FoxIFSavedIP));
@@ -5557,7 +5558,7 @@
 					/* begin fetchNextBytecode */
 					currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
-					/* return self */
+					null;
 				l290:	/* end baseFrameReturn */;
 					goto l287;
 				}
@@ -15533,7 +15534,7 @@
     sqInt segIndex;
 
 	null;
-	segAddress = sqAllocateMemorySegmentOfSizeAboveAllocatedSizeInto(ammount, ((void *)((((GIV(segments)[0]).segSize)) + (((GIV(segments)[0]).segStart)))), (&allocatedSize));
+	segAddress = sqAllocateMemorySegmentOfSizeAboveAllocatedSizeInto(ammount, firstGapOfSizeAtLeast(ammount), (&allocatedSize));
 	if (!(segAddress == null)) {
 		/* begin insertSegmentFor: */
 		assert((((unsigned long)segAddress)) > (segLimit(&GIV(segments)[0])));
@@ -16699,13 +16700,11 @@
     sqInt f;
     sqInt index;
     sqInt initialIndex;
-    sqInt lastSubdividedFreeChunk;
     sqInt next;
     sqInt node;
     sqInt prev;
 
 	/* begin allocateOldSpaceChunkOfBytes:suchThat: */
-	assert(((lastSubdividedFreeChunk = 0)) == 0);
 
 	/* be optimistic (& don't wait for the write) */
 
@@ -19261,7 +19260,7 @@
     sqInt newObj;
     sqInt numBytes;
     sqInt obj;
-    sqInt p;
+    usqInt p;
 
 	/* begin eeInstantiateSmallClassIndex:format:numSlots: */
 	assert((slotSize >= 0)
@@ -19293,7 +19292,7 @@
 l1:	/* end allocateSmallNewSpaceSlots:format:classIndex: */;
 	/* begin fillObj:numSlots:with: */
 	assert(oopisLessThan(((obj + (BaseHeaderSize)) + (slotSize * (bytesPerSlot()))) - 1, addressAfter(obj)));
-	for (p = (obj + (BaseHeaderSize)); p < ((obj + (BaseHeaderSize)) + (slotSize * 4)); p += 8) {
+	for (p = (((usqInt)(obj + (BaseHeaderSize)))); p <= (((usqInt)(((obj + (BaseHeaderSize)) + (slotSize * 4)) - 1))); p += 8) {
 		longAtput(p, GIV(nilObj));
 		longAtput(p + 4, GIV(nilObj));
 	}
@@ -22781,14 +22780,14 @@
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt cascade0;
     sqInt cascade1;
-    sqInt free;
+    usqInt free;
     sqInt high;
     sqInt i;
     sqInt low;
     usqInt numSlots;
     usqInt numSlots1;
-    sqInt prevFree;
-    sqInt prevPrevFree;
+    usqInt prevFree;
+    usqInt prevPrevFree;
     sqInt scanAddress;
     sqInt slotBytes;
 
@@ -24388,8 +24387,8 @@
     sqInt iLimiT;
     sqInt index;
     sqInt lowest;
-    sqInt lowestForwarder;
-    sqInt lowestForwarder1;
+    usqInt lowestForwarder;
+    usqInt lowestForwarder1;
     usqInt numSlots;
     usqInt numSlots1;
     sqInt o;
@@ -25325,7 +25324,7 @@
     sqInt initialMajorIndex;
     sqInt majorIndex;
     sqInt minorIndex;
-    sqInt p;
+    usqInt p;
     sqInt page;
 
 	majorIndex = ((usqInt) GIV(classTableIndex)) >> 10;
@@ -25348,7 +25347,7 @@
 			}
 			/* begin fillObj:numSlots:with: */
 			assert(oopisLessThan(((page + (BaseHeaderSize)) + ((1 << 10) * (bytesPerSlot()))) - 1, addressAfter(page)));
-			for (p = (page + (BaseHeaderSize)); p < ((page + (BaseHeaderSize)) + ((1 << 10) * 4)); p += 8) {
+			for (p = (((usqInt)(page + (BaseHeaderSize)))); p <= (((usqInt)(((page + (BaseHeaderSize)) + ((1 << 10) * 4)) - 1))); p += 8) {
 				longAtput(p, GIV(nilObj));
 				longAtput(p + 4, GIV(nilObj));
 			}
@@ -27640,6 +27639,33 @@
 }
 
 
+/*	Answer the segment limit of the first segment followed by a gap of at
+	least size bytes.
+ */
+
+static void *
+firstGapOfSizeAtLeast(sqInt size)
+{   DECL_MAYBE_SQ_GLOBAL_STRUCT
+    sqInt address;
+    sqInt bridge;
+    sqInt i;
+    usqInt numSlots;
+
+	for (i = 0; i <= (GIV(numSegments) - 2); i += 1) {
+		/* begin objectStartingAt: */
+		address = (((((&(GIV(segments)[i])))->segSize)) + ((((&(GIV(segments)[i])))->segStart))) - (2 * (BaseHeaderSize));
+		numSlots = byteAt(address + 7);
+		bridge = (numSlots == 0xFF
+			? address + (BaseHeaderSize)
+			: address);
+		if (((bytesInObject(bridge)) - (2 * (BaseHeaderSize))) >= size) {
+			return ((void *)((((GIV(segments)[i]).segSize)) + (((GIV(segments)[i]).segStart))));
+		}
+	}
+	return ((void *)((((GIV(segments)[GIV(numSegments) - 1]).segSize)) + (((GIV(segments)[GIV(numSegments) - 1]).segStart))));
+}
+
+
 /*	NOTE: overridden in various simulator subclasses to add coercion to
 	CArray, so please duplicate any changes.
 	There are only two important cases, both for objects with named inst vars,
@@ -31072,7 +31098,7 @@
     sqInt newObj1;
     sqInt numBytes;
     sqInt numSlots;
-    sqInt p;
+    usqInt p;
 
 	classFormat = ((longAt((classObj + (BaseHeaderSize)) + (InstanceSpecificationIndex << 2))) >> 1);
 	instSpec = (((usqInt) classFormat) >> 16) & 0x1F;
@@ -31182,7 +31208,7 @@
 	if (!(newObj == null)) {
 		/* begin fillObj:numSlots:with: */
 		assert(oopisLessThan(((newObj + (BaseHeaderSize)) + (numSlots * (bytesPerSlot()))) - 1, addressAfter(newObj)));
-		for (p = (newObj + (BaseHeaderSize)); p < ((newObj + (BaseHeaderSize)) + (numSlots * 4)); p += 8) {
+		for (p = (((usqInt)(newObj + (BaseHeaderSize)))); p <= (((usqInt)(((newObj + (BaseHeaderSize)) + (numSlots * 4)) - 1))); p += 8) {
 			longAtput(p, fillValue);
 			longAtput(p + 4, fillValue);
 		}
@@ -31578,7 +31604,10 @@
 	isForwardedObjectClassIndexPun being a power of two to generate a more
 	efficient test than the straight-forward
 	(self classIndexOf: objOop) = self isForwardedObjectClassIndexPun
-	 */
+	at the cost of this being ambiguous with free chunks. So either never
+	apply this to free chunks
+	or guard with (self isFreeObject: foo) not. So far the idiom has been to
+	guard with isFreeObject: */
 
 sqInt
 isForwarded(sqInt objOop)
@@ -32020,12 +32049,14 @@
 
 static sqInt
 isValidFreeObject(sqInt objOop)
-{
+{   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt chunk;
 
-	return (addressCouldBeObj(objOop))
+	return (((objOop & ((BaseHeaderSize) - 1)) == 0)
+	 && (((((usqInt) objOop)) >= (((usqInt) GIV(oldSpaceStart))))
+	 && ((((usqInt) objOop)) < (((usqInt) GIV(endOfMemory))))))
 	 && ((((longAt(objOop)) & 0x3FFFFF) == 0)
-	 && ((isInMemory(addressAfter(objOop)))
+	 && ((oopisLessThanOrEqualTo(addressAfter(objOop), GIV(endOfMemory)))
 	 && (((((chunk = longAt((objOop + (BaseHeaderSize)) + (0 << 2)))) == 0)
 	 || (((longAt(chunk)) & 0x3FFFFF) == 0))
 	 && (((bytesInObject(objOop)) < (32 * 8))
@@ -37054,7 +37085,8 @@
 		assert((objOop % (allocationUnit())) == 0);
 		if (!((((usqInt) objOop)) < (((usqInt) GIV(endOfMemory))))) break;
 		assert((long64At(objOop)) != 0);
-		if (((longAt(objOop)) & (0x3FFFFF - 8)) == 0) {
+		if ((((longAt(objOop)) & (0x3FFFFF - 8)) == 0)
+		 && (!(((longAt(objOop)) & 0x3FFFFF) == 0))) {
 			n += 1;
 		}
 
@@ -37080,7 +37112,8 @@
 		: address);
 	limit = GIV(pastSpaceStart);
 	while ((((usqInt) objOop1)) < (((usqInt) limit))) {
-		if (((longAt(objOop1)) & (0x3FFFFF - 8)) == 0) {
+		if ((((longAt(objOop1)) & (0x3FFFFF - 8)) == 0)
+		 && (!(((longAt(objOop1)) & 0x3FFFFF) == 0))) {
 			n += 1;
 		}
 
@@ -37095,7 +37128,8 @@
 		? address1 + (BaseHeaderSize)
 		: address1);
 	while ((((usqInt) objOop1)) < (((usqInt) GIV(freeStart)))) {
-		if (((longAt(objOop1)) & (0x3FFFFF - 8)) == 0) {
+		if ((((longAt(objOop1)) & (0x3FFFFF - 8)) == 0)
+		 && (!(((longAt(objOop1)) & 0x3FFFFF) == 0))) {
 			n += 1;
 		}
 
@@ -48956,7 +48990,7 @@
     sqInt numSlots;
     sqInt obj;
     sqInt oop;
-    sqInt p;
+    usqInt p;
     char *sp;
     char *sp1;
     sqInt spaceOkay;
@@ -49033,7 +49067,7 @@
 	if (!(newObj == null)) {
 		/* begin fillObj:numSlots:with: */
 		assert(oopisLessThan(((newObj + (BaseHeaderSize)) + (numSlots * (bytesPerSlot()))) - 1, addressAfter(newObj)));

@@ Diff output truncated at 50000 characters. @@


More information about the Vm-dev mailing list