diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2012-02-12 22:15:40 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2012-02-12 22:15:40 -0800 |
commit | f2398ae9ffaf67a653712b222b89ead18e4f1213 (patch) | |
tree | 6b60af5f5c372ecc600c6554e101d9f8d1a4ebe7 | |
parent | fdb885e3ac75f901e3d51a0bf5bcef9a8969e847 (diff) | |
download | txr-f2398ae9ffaf67a653712b222b89ead18e4f1213.tar.gz txr-f2398ae9ffaf67a653712b222b89ead18e4f1213.tar.bz2 txr-f2398ae9ffaf67a653712b222b89ead18e4f1213.zip |
* HACKING: Added note about register save areas, which can contribute
to spurious retention.
-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 |