i#4495: Preserve translated stolen register #4526
Merged
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.
Currently, a stolen register value that is translated by a client is
discarded both in a synchall and a synchronous signal. We fix both
paths here.
Adds a new test client.stolen-reg which tests both a synchronous fault
signal translation path as well as a synchall translation path via a
synchall flush. The test was confirmed to fail without either of the
fixes in place.
Ensures the new test passes on 32-bit ARM. This exercised the
translate_from_synchall_to_dispatch() path and found some ARM bugs:
the reset exit stub is A32 mode, so we need to change the mode for the
suspended sigcontext; yet thread_set_mcontext() did not support that.
That is all fixed now and verified.
Fixes #4495