# Upgrade single-threaded checkpoints to be properly supported with SMT.
# SMT adds per-thread interrupts.  Thus we must move the interrupt status
# from the CPU and into the execution context.
def upgrader(cpt):
    for sec in cpt.sections():
        import re

        re_cpu_match = re.match("^(.*sys.*\.cpu[^._]*)$", sec)
        if re_cpu_match != None:
            interrupts = cpt.get(sec, "interrupts")
            intStatus = cpt.get(sec, "intStatus")

            cpu_name = re_cpu_match.group(1)

            cpt.set(cpu_name + ".xc.0", "interrupts", interrupts)
            cpt.set(cpu_name + ".xc.0", "intStatus", intStatus)

            cpt.remove_option(sec, "interrupts")
            cpt.remove_option(sec, "intStatus")
