summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2006-11-03 14:40:35 -0500
committerGabe Black <gblack@eecs.umich.edu>2006-11-03 14:40:35 -0500
commit6ad386f1a8df96c9679dcffb326420b240e98c05 (patch)
treefff5dc44d74b5e4ec8b878ab6032218794f655ac
parent4a5cb3f4250544cd5cdf423405d66471b33c545c (diff)
downloadgem5-6ad386f1a8df96c9679dcffb326420b240e98c05.tar.xz
Calling syscalls from within the trap instruction's invoke method won't work because apparently you need an xc for that and not a tc. Cleaned up the TrapInstruction fault in light of this.
--HG-- extra : convert_revision : 1805c9244cfd62d0ee7862d8fd7c9983e00c5747
-rw-r--r--src/arch/sparc/faults.cc5
-rw-r--r--src/arch/sparc/faults.hh7
-rw-r--r--src/arch/sparc/isa/decoder.isa4
3 files changed, 3 insertions, 13 deletions
diff --git a/src/arch/sparc/faults.cc b/src/arch/sparc/faults.cc
index 6bca6adc5..da7fc730d 100644
--- a/src/arch/sparc/faults.cc
+++ b/src/arch/sparc/faults.cc
@@ -399,11 +399,6 @@ void PowerOnReset::invoke(ThreadContext * tc)
#if !FULL_SYSTEM
-void TrapInstruction::invoke(ThreadContext * tc)
-{
- // Should be handled in ISA.
-}
-
void SpillNNormal::invoke(ThreadContext *tc)
{
doNormalFault(tc, trapType());
diff --git a/src/arch/sparc/faults.hh b/src/arch/sparc/faults.hh
index c087365a2..0c7106707 100644
--- a/src/arch/sparc/faults.hh
+++ b/src/arch/sparc/faults.hh
@@ -604,17 +604,12 @@ class TrapInstruction : public EnumeratedFault
static TrapType _baseTrapType;
static FaultPriority _priority;
static FaultStat _count;
- uint64_t syscall_num;
TrapType baseTrapType() {return _baseTrapType;}
public:
- TrapInstruction(uint32_t n, uint64_t syscall) :
- EnumeratedFault(n), syscall_num(syscall) {;}
+ TrapInstruction(int32_t n) : EnumeratedFault(n) {;}
FaultName name() {return _name;}
FaultPriority priority() {return _priority;}
FaultStat & countStat() {return _count;}
-#if !FULL_SYSTEM
- void invoke(ThreadContext * tc);
-#endif
};
diff --git a/src/arch/sparc/isa/decoder.isa b/src/arch/sparc/isa/decoder.isa
index 33352cb2c..a5f43367d 100644
--- a/src/arch/sparc/isa/decoder.isa
+++ b/src/arch/sparc/isa/decoder.isa
@@ -726,7 +726,7 @@ decode OP default Unknown::unknown()
#if FULL_SYSTEM
int lTrapNum = I ? (Rs1 + SW_TRAP) : (Rs1 + Rs2);
DPRINTF(Sparc, "The trap number is %d\n", lTrapNum);
- fault = new TrapInstruction(lTrapNum, R1);
+ fault = new TrapInstruction(lTrapNum);
#else
DPRINTF(Sparc, "The syscall number is %d\n", R1);
xc->syscall(R1);
@@ -739,7 +739,7 @@ decode OP default Unknown::unknown()
#if FULL_SYSTEM
int lTrapNum = I ? (Rs1 + SW_TRAP) : (Rs1 + Rs2);
DPRINTF(Sparc, "The trap number is %d\n", lTrapNum);
- fault = new TrapInstruction(lTrapNum, R1);
+ fault = new TrapInstruction(lTrapNum);
#else
DPRINTF(Sparc, "The syscall number is %d\n", R1);
xc->syscall(R1);