Fix bug: a relatively rare circumstance was causing linked variables
authorChris Hanson <org/chris-hanson/cph>
Sat, 2 Feb 2008 17:26:28 +0000 (17:26 +0000)
committerChris Hanson <org/chris-hanson/cph>
Sat, 2 Feb 2008 17:26:28 +0000 (17:26 +0000)
commitdb75f4c06f2322b35b5dc351a882545e5b02c3cc
tree1938c288f52673f8f4e91b433736a3fa9897caff
parente9e844fa4937f5b17c862b376ea1183150394e9c
Fix bug: a relatively rare circumstance was causing linked variables
to become unlinked.  Specifically:

    1. Load compiled code that creates a cache to variable A.
    2. Link variable B to variable C.
    3. Link variable B to variable A.

After step (3), variable C was no longer linked to variable B,
although B and A were still linked.  The problem is that step (3)
overwrites the cache in B with the cache in A, but C is unchanged.

This has been fixed by leaving a forwarding link in the "old" cache
and snapping the link on reference.  Any outstanding copies of the
"old" cache, such as that in C, are updated to point to the "new"
cache the next time they're referenced.
v7/src/microcode/lookup.c
v7/src/microcode/sdata.h
v7/src/microcode/trap.h