Go to the documentation of this file.
43 #include "arch/x86/generated/decoder.hh"
49 #include "debug/Faults.hh"
69 using namespace X86ISAInst::rom_labels;
72 if (m5reg.mode == LongMode) {
73 entry =
isSoft() ? extern_label_longModeSoftInterrupt :
74 extern_label_longModeInterrupt;
76 entry = extern_label_legacyModeInterrupt;
81 if (m5reg.mode == LongMode) {
82 entry = extern_label_longModeInterruptWithError;
84 panic(
"Legacy mode interrupts with error codes "
85 "aren't implemented.");
100 std::stringstream
ss;
119 panic(
"Abort exception!");
129 panic(
"Unrecognized/invalid instruction executed:\n %s",
146 if (m5reg.mode == LongMode)
152 const char *modeStr =
"";
162 panic(
"Tried to %s unmapped address %#x.", modeStr,
addr);
164 panic(
"Tried to %s unmapped address %#x.\nPC: %#x, Instr: %s",
175 std::stringstream
ss;
183 DPRINTF(Faults,
"Init interrupt.\n");
202 SegAttr dataAttr = 0;
204 dataAttr.unusable = 0;
205 dataAttr.defaultSize = 0;
206 dataAttr.longMode = 0;
208 dataAttr.granularity = 0;
209 dataAttr.present = 1;
211 dataAttr.writable = 1;
212 dataAttr.readable = 1;
213 dataAttr.expandDown = 0;
224 SegAttr codeAttr = 0;
226 codeAttr.unusable = 0;
227 codeAttr.defaultSize = 0;
228 codeAttr.longMode = 0;
230 codeAttr.granularity = 0;
231 codeAttr.present = 1;
233 codeAttr.writable = 0;
234 codeAttr.readable = 1;
235 codeAttr.expandDown = 0;
240 0x00000000ffff0000ULL);
242 0x00000000ffff0000ULL);
292 MicroPC entry = X86ISAInst::rom_labels::extern_label_initIntHalt;
301 DPRINTF(Faults,
"Startup interrupt with vector %#x.\n",
vector);
303 if (m5Reg.mode != LegacyMode || m5Reg.submode !=
RealMode) {
304 panic(
"Startup IPI recived outside of real mode. "
305 "Don't know what to do. %d, %d", m5Reg.mode, m5Reg.submode);
virtual void setIntReg(RegIndex reg_idx, RegVal val)=0
Addr instAddr() const
Returns the memory address of the instruction this PC points to.
virtual RegVal readMiscReg(RegIndex misc_reg)=0
static MiscRegIndex MISCREG_SEG_SEL(int index)
static MiscRegIndex MISCREG_SEG_LIMIT(int index)
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
virtual BaseMMU * getMMUPtr()=0
virtual const PCStateBase & pcState() const =0
static MiscRegIndex MISCREG_SEG_ATTR(int index)
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
T * get() const
Directly access the pointer itself without taking a reference.
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
void ccprintf(cp::Print &print)
bool fixupFault(Addr vaddr)
Attempt to fix up a fault at vaddr by allocating a page on the stack.
ThreadContext is the external interface to all thread state for anything outside of the CPU.
void demapPage(Addr vaddr, uint64_t asn)
static MiscRegIndex MISCREG_SEG_BASE(int index)
virtual RegVal readMiscRegNoEffect(RegIndex misc_reg) const =0
virtual std::string describe() const
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
virtual void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr)
static IntRegIndex INTREG_MICRO(int index)
virtual Process * getProcessPtr()=0
bool FullSystem
The FullSystem variable can be used to determine the current mode of simulation.
Base class for all X86 static instructions.
virtual const std::string & disassemble(Addr pc, const loader::SymbolTable *symtab=nullptr) const
Return string representation of disassembled instruction.
static MiscRegIndex MISCREG_SEG_EFF_BASE(int index)
virtual void setMiscReg(RegIndex misc_reg, RegVal val)=0
static MicroPC romMicroPC(MicroPC upc)
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
SymbolTable debugSymbolTable
Global unified debugging symbol table (for target).
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
virtual const char * mnemonic() const
virtual std::string describe() const
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr)
#define panic(...)
This implements a cprintf based panic() function.
Generated on Tue Dec 21 2021 11:34:19 for gem5 by doxygen 1.8.17