Fix Heartbleed demo legacy lock-up due to 32-bit mcycle read #75
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.
Note: Ideally merge after #74 to pull in the fixes necessary to get the Heartbleed demo to compile first.
The legacy demo unintentionally aliased a 32-bit
$$\frac{2^{32} - 1}{40 * 1000 * 1000} \approx 1$$ min 47 s.
rdcyclefunction tordcycle64, and used its 32-bit output as a 64-bit value. This caused an overflow in the value ofmcyclethat was read after a short while of running, which left the demo stuck and unable to progress in its legacy component. Specifically,So after around 2 minutes the legacy component of the demo will stop working.
This PR replaces this function with an actual 64-bit mcycle read using the low/high registers appropriately. It will now take >10000 years to overflow, so I've opted not to add additional logic to catch overflows here.