Fail* directories reorganized, Code-cleanup (-> coding-style), Typos+comments fixed.
git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1321 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
This commit is contained in:
39
src/core/sal/bochs/Interrupt.ah
Normal file
39
src/core/sal/bochs/Interrupt.ah
Normal file
@ -0,0 +1,39 @@
|
||||
#ifndef __INTERRUPT_AH__
|
||||
#define __INTERRUPT_AH__
|
||||
|
||||
#include "config/FailConfig.hpp"
|
||||
|
||||
#ifdef CONFIG_EVENT_INTERRUPT
|
||||
|
||||
#include "bochs.h"
|
||||
#include "cpu/cpu.h"
|
||||
|
||||
#include "../SALInst.hpp"
|
||||
|
||||
aspect Interrupt {
|
||||
pointcut interrupt_method() = "void bx_cpu_c::interrupt(...)"; // cpu/exception.cc
|
||||
|
||||
advice execution (interrupt_method()) : before ()
|
||||
{
|
||||
// There are six different type-arguments for the interrupt-method
|
||||
// in cpu.h (lines 3867-3872):
|
||||
// - BX_EXTERNAL_INTERRUPT = 0,
|
||||
// - BX_NMI = 2,
|
||||
// - BX_HARDWARE_EXCEPTION = 3,
|
||||
// - BX_SOFTWARE_INTERRUPT = 4,
|
||||
// - BX_PRIVILEGED_SOFTWARE_INTERRUPT = 5,
|
||||
// - BX_SOFTWARE_EXCEPTION = 6
|
||||
// Only the first and the second types are relevant for this aspect.
|
||||
|
||||
unsigned vector = *(tjp->arg<0>());
|
||||
unsigned type = *(tjp->arg<1>());
|
||||
if (type == BX_EXTERNAL_INTERRUPT)
|
||||
fail::simulator.onInterruptEvent(vector, false);
|
||||
else if (type == BX_NMI)
|
||||
fail::simulator.onInterruptEvent(vector, true);
|
||||
}
|
||||
};
|
||||
|
||||
#endif // CONFIG_EVENT_INTERRUPT
|
||||
|
||||
#endif // __INTERRUPT_AH__
|
||||
Reference in New Issue
Block a user