[openfirmware] [commit] r2066 - forth/lib

repository service svn at openfirmware.info
Wed Dec 8 00:40:04 CET 2010


Author: wmb
Date: Wed Dec  8 00:40:03 2010
New Revision: 2066
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2066

Log:
Generic - fixed invalid assumption in dispose.fth - it assumed that allocated memory for the transient area was above the dictionary.  Violation of the assumption caused end-module to crash.

Modified:
   forth/lib/dispose.fth

Modified: forth/lib/dispose.fth
==============================================================================
--- forth/lib/dispose.fth	Fri Dec  3 08:10:10 2010	(r2065)
+++ forth/lib/dispose.fth	Wed Dec  8 00:40:03 2010	(r2066)
@@ -63,6 +63,16 @@
 0 value resboundary   \ Lower boundary of region to dispose
 0 value tranboundary
 
+: transient-item?  ( item -- transient? )
+   tranboundary there within
+;
+: resident-item?  ( item -- resident? )
+   origin >link resboundary within
+;
+: safe-transient-item?  ( item -- safe-transient? )
+   transtart tranboundary within
+;
+
 \ relink removes transients from any linked list. It must be called
 \ with a known good first link, as it doesn't know how to reset
 \ the head of the list, which is usually a global variable.
@@ -71,13 +81,13 @@
       \ Skip over all consecutive words in the transient vocabulary
       dup
       begin   ( prev-item this-item )
-         item@  dup tranboundary >=  ( prev-item next-item tran? )
+         item@  dup transient-item? ( prev-item next-item tran? )
          dup if  over showit  then
       0= until       ( prev-item next-kept-item )
       \ Link the next non-transient word to the previous non-transient one
-      dup rot  item!           ( next-kept-item )
-      dup resboundary <        ( next-kept-item <resboundary? )
-      over transtart >=   ( next-kept-item <resboundary? safe-transient? )
+      dup rot  item!             ( next-kept-item )
+      dup resident-item?         ( next-kept-item resident? )
+      over safe-transient-item?  ( next-kept-item resident? safe-transient? )
       or
    until   drop
 ;
@@ -101,7 +111,7 @@
 : relink-buffer:s  ( -- )
    ['] buf-link@ is item@  ['] buf-link! is item!  ['] buffer:. is link.
    buffer-link begin			\ Check for transient at head
-      link@ dup tranboundary >=
+      link@ dup transient-item?
    while
       dup showit  >buffer-link
    repeat  buffer-link link!
@@ -116,7 +126,7 @@
 : relink-voc-list  ( -- )
    ['] voc-link@ is item@  ['] voc-link! is item!  ['] vocab. is link.
    voc-link begin			\ Check for transient at head
-      link@ dup tranboundary >=
+      link@ dup transient-item?
    while
       dup showit  >voc-link
    repeat  voc-link link!



More information about the openfirmware mailing list