diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2010-09-14 12:27:30 -0700 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2010-09-14 12:27:30 -0700 |
commit | 0bbd88eb40e553deaabd6fbc935a596125701a86 (patch) | |
tree | 32bf7a74c88ad4340111b12cf34cf1203eebd6eb | |
parent | 0dd1f7f01a8a744811aede5814111b8681271a6b (diff) | |
download | gem5-0bbd88eb40e553deaabd6fbc935a596125701a86.tar.xz |
X86: Make unrecognized instructions behave better in x86.
-rw-r--r-- | src/arch/x86/faults.cc | 7 | ||||
-rw-r--r-- | src/arch/x86/faults.hh | 5 | ||||
-rw-r--r-- | src/arch/x86/isa/formats/unknown.isa | 3 |
3 files changed, 13 insertions, 2 deletions
diff --git a/src/arch/x86/faults.cc b/src/arch/x86/faults.cc index 4c8fb33c2..4f2d97f90 100644 --- a/src/arch/x86/faults.cc +++ b/src/arch/x86/faults.cc @@ -270,6 +270,13 @@ namespace X86ISA #else void + InvalidOpcode::invoke(ThreadContext * tc, StaticInstPtr inst) + { + panic("Unrecognized/invalid instruction executed:\n %s", + inst->machInst); + } + + void PageFault::invoke(ThreadContext * tc, StaticInstPtr inst) { PageFaultErrorCode code = errorCode; diff --git a/src/arch/x86/faults.hh b/src/arch/x86/faults.hh index f98ef72e9..cfb654b62 100644 --- a/src/arch/x86/faults.hh +++ b/src/arch/x86/faults.hh @@ -250,6 +250,11 @@ namespace X86ISA InvalidOpcode() : X86Fault("Invalid-Opcode", "#UD", 6) {} + +#if !FULL_SYSTEM + void invoke(ThreadContext * tc, + StaticInstPtr inst = StaticInst::nullStaticInstPtr); +#endif }; class DeviceNotAvailable : public X86Fault diff --git a/src/arch/x86/isa/formats/unknown.isa b/src/arch/x86/isa/formats/unknown.isa index 9b283b5d7..11751e861 100644 --- a/src/arch/x86/isa/formats/unknown.isa +++ b/src/arch/x86/isa/formats/unknown.isa @@ -77,8 +77,7 @@ output exec {{ Fault Unknown::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const { - warn("No instructions are implemented for X86!\n"); - return NoFault; + return new InvalidOpcode(); } }}; |