1. A method comprising: storing an architectural state of a processor corresponding to a first checkpoint; storing non-deterministic events that occur subsequent to the storage of the first checkpoint; determining whether an processing error has occurred subsequent to the storage of the first checkpoint; and restoring the architectural state of the processor corresponding to the first checkpoint and re-executing the non-deterministic events if a processing error is detected.