summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2012-02-12 22:15:40 -0800
committerKaz Kylheku <kaz@kylheku.com>2012-02-12 22:15:40 -0800
commitf2398ae9ffaf67a653712b222b89ead18e4f1213 (patch)
tree6b60af5f5c372ecc600c6554e101d9f8d1a4ebe7
parentfdb885e3ac75f901e3d51a0bf5bcef9a8969e847 (diff)
downloadtxr-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--ChangeLog5
-rw-r--r--HACKING4
2 files changed, 8 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index fe4be800..f29ed61a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/HACKING b/HACKING
index 17c8deb7..20e4dc4f 100644
--- a/HACKING
+++ b/HACKING
@@ -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