fix(cpu): preserve executing code during overwrite - #584
Closed
benletchford wants to merge 1 commit into
Closed
Conversation
Owner
Author
|
Closed after review because replaying a saved CODE snapshot only after an illegal instruction is neither faithful instruction-cache emulation nor a loader-placement fix. It can selectively execute stale bytes and mask unrelated self-modifying-code faults. #580 remains open for correct heap/segment placement or CPU cache semantics. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #580.
Self-decompressing launchers can overwrite the backing bytes of the resident CODE segment they are still executing. The loader placement only changed where the failure occurred because the startup loop intentionally expands through its own segment, while a real 68040 continues from its instruction cache.
This snapshots resident CODE at load time and activates the affected 16-byte instruction-cache line only when an illegal fetch differs from the loaded bytes. Normal guest data reads and writes still observe the decompressed memory, while opcode fetches can finish the active startup line. Both the batch and precise execution paths recover consistently.
Verification:
cargo test --lib --quiet(2,950 passed, 3 ignored)cargo check --no-default-features --quietcargo clippy --lib --quietcargo fmt --all -- --check