summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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