log(" new dststep", dststep)
+class ExitSyscallCalled(Exception):
+ pass
+
+
class SyscallEmulator(openpower.syscalls.Dispatcher):
def __init__(self, isacaller):
self.__isacaller = isacaller
(identifier, *arguments) = map(int, (identifier, *arguments))
return super().__call__(identifier, *arguments)
+ def sys_exit_group(self, status, *rest):
+ self.__isacaller.halted = True
+ raise ExitSyscallCalled(status)
+
class ISACaller(ISACallerHelper, ISAFPHelpers, StepLoop):
# decoder2 - an instance of power_decoder2
from nmutil.formaltest import FHDLTestCase
from nmutil.gtkw import write_gtkw
from openpower.decoder.isa.all import ISA
+from openpower.decoder.isa.caller import ExitSyscallCalled
from openpower.endian import bigendian
from openpower.decoder.power_decoder2 import PowerDecode2
# call simulated operation
log("sim", code)
- yield from sim.execute_one()
+ try:
+ yield from sim.execute_one()
+ except ExitSyscallCalled:
+ break
yield Settle()
index = sim.pc.CIA.value//4
log("sprs", test.sprs, kind=LogType.InstrInOuts)
log("cr", test.cr, kind=LogType.InstrInOuts)
log("mem", test.mem)
- log("msr", test.msr, kind=LogType.InstrInOuts)
+ if test.msr is None:
+ log("msr", "None", kind=LogType.InstrInOuts)
+ else:
+ log("msr", hex(test.msr), kind=LogType.InstrInOuts)
def format_assembly(assembly):
# type: (str) -> str