55,68c55,69
< if (FullSystem) {
< PCState pcState = tc->pcState();
< Addr pc = pcState.pc();
< DPRINTF(Faults, "RIP %#x: vector %d: %s\n",
< pc, vector, describe());
< using namespace X86ISAInst::RomLabels;
< HandyM5Reg m5reg = tc->readMiscRegNoEffect(MISCREG_M5_REG);
< MicroPC entry;
< if (m5reg.mode == LongMode) {
< if (isSoft()) {
< entry = extern_label_longModeSoftInterrupt;
< } else {
< entry = extern_label_longModeInterrupt;
< }
---
> if (!FullSystem) {
> FaultBase::invoke(tc, inst);
> return;
> }
>
> PCState pcState = tc->pcState();
> Addr pc = pcState.pc();
> DPRINTF(Faults, "RIP %#x: vector %d: %s\n",
> pc, vector, describe());
> using namespace X86ISAInst::RomLabels;
> HandyM5Reg m5reg = tc->readMiscRegNoEffect(MISCREG_M5_REG);
> MicroPC entry;
> if (m5reg.mode == LongMode) {
> if (isSoft()) {
> entry = extern_label_longModeSoftInterrupt;
70c71
< entry = extern_label_legacyModeInterrupt;
---
> entry = extern_label_longModeInterrupt;
72,88d72
< tc->setIntReg(INTREG_MICRO(1), vector);
< tc->setIntReg(INTREG_MICRO(7), pc);
< if (errorCode != (uint64_t)(-1)) {
< if (m5reg.mode == LongMode) {
< entry = extern_label_longModeInterruptWithError;
< } else {
< panic("Legacy mode interrupts with error codes "
< "aren't implementde.\n");
< }
< // Software interrupts shouldn't have error codes. If one
< // does, there would need to be microcode to set it up.
< assert(!isSoft());
< tc->setIntReg(INTREG_MICRO(15), errorCode);
< }
< pcState.upc(romMicroPC(entry));
< pcState.nupc(romMicroPC(entry) + 1);
< tc->pcState(pcState);
90c74
< FaultBase::invoke(tc, inst);
---
> entry = extern_label_legacyModeInterrupt;
91a76,92
> tc->setIntReg(INTREG_MICRO(1), vector);
> tc->setIntReg(INTREG_MICRO(7), pc);
> if (errorCode != (uint64_t)(-1)) {
> if (m5reg.mode == LongMode) {
> entry = extern_label_longModeInterruptWithError;
> } else {
> panic("Legacy mode interrupts with error codes "
> "aren't implementde.\n");
> }
> // Software interrupts shouldn't have error codes. If one
> // does, there would need to be microcode to set it up.
> assert(!isSoft());
> tc->setIntReg(INTREG_MICRO(15), errorCode);
> }
> pcState.upc(romMicroPC(entry));
> pcState.nupc(romMicroPC(entry) + 1);
> tc->pcState(pcState);
109,114c110,116
< if (FullSystem) {
< // This is the same as a fault, but it happens -after- the
< // instruction.
< PCState pc = tc->pcState();
< pc.uEnd();
< }
---
> if (!FullSystem)
> return;
>
> // This is the same as a fault, but it happens -after- the
> // instruction.
> PCState pc = tc->pcState();
> pc.uEnd();