diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | HACKING | 4 |
2 files changed, 8 insertions, 1 deletions
@@ -1,5 +1,10 @@ 2012-02-12 Kaz Kylheku <kaz@kylheku.com> + * HACKING: Added note about register save areas, which can contribute + to spurious retention. + +2012-02-12 Kaz Kylheku <kaz@kylheku.com> + * debug.c (breakpoints, last_command): linkage changed to static. (cols): New static variable. (debug): Print context intelligently, fitting into the width of @@ -784,7 +784,9 @@ There are other GC issues that are hard to catch, like spurious retention. This is when the code generated by the C compiler hangs on to an object which, in the source code semantics, should be garbage. It can happen, for example, when a variable has gone out of scope, but the stack location -where that variable was last stored has not been overwritten. +where that variable was last stored has not been overwritten. Register-save +areas in the stack frame can similarly contain stale data, because when a +register value is restored from the save area, the copy remains there. Spurious retention can also happen if a bit pattern is generated which looks ike a reference to an object, by chance. We share this problem with |