First Steps in cleaning up MIPS code - This changeset rearranges the files in the...
authorKorey Sewell <ksewell@umich.edu>
Sun, 7 May 2006 22:50:41 +0000 (18:50 -0400)
committerKorey Sewell <ksewell@umich.edu>
Sun, 7 May 2006 22:50:41 +0000 (18:50 -0400)
arch/mips/SConscript:
arch/mips/isa_traits.cc:
arch/mips/isa_traits.hh:
arch/mips/process.cc:
arch/mips/linux/linux.cc:
arch/mips/utility.hh:
arch/mips/linux/process.cc:
arch/mips/int_regfile.hh:
arch/mips/misc_regfile.hh:
arch/mips/regfile.hh:
arch/mips/types.hh:
    MIPS directory rearranging

--HG--
rename : arch/mips/mips_linux.cc => arch/mips/linux/linux.cc
rename : arch/mips/mips_linux.hh => arch/mips/linux/linux.hh
rename : arch/mips/linux_process.cc => arch/mips/linux/process.cc
rename : arch/mips/linux_process.hh => arch/mips/linux/process.hh
extra : convert_revision : 138eee48c8ed75efcf38572f335a556aaec38fc7

17 files changed:
arch/mips/SConscript
arch/mips/int_regfile.hh [new file with mode: 0644]
arch/mips/isa_traits.cc
arch/mips/isa_traits.hh
arch/mips/linux/linux.cc [new file with mode: 0644]
arch/mips/linux/linux.hh [new file with mode: 0644]
arch/mips/linux/process.cc [new file with mode: 0644]
arch/mips/linux/process.hh [new file with mode: 0644]
arch/mips/linux_process.cc [deleted file]
arch/mips/linux_process.hh [deleted file]
arch/mips/mips_linux.cc [deleted file]
arch/mips/mips_linux.hh [deleted file]
arch/mips/misc_regfile.hh [new file with mode: 0644]
arch/mips/process.cc
arch/mips/regfile.hh [new file with mode: 0644]
arch/mips/types.hh [new file with mode: 0644]
arch/mips/utility.hh

index 06b313203c1995e9067bb8a49cefe9cb6f7bec02..ef1ef25d6d03cf26cb9d14901ddb26ecbb2ea92d 100644 (file)
@@ -57,8 +57,8 @@ full_system_sources = Split('''
 
 # Syscall emulation (non-full-system) sources
 syscall_emulation_sources = Split('''
-        mips_linux.cc
-       linux_process.cc
+        linux/linux.cc
+       linux/process.cc
         process.cc
        ''')
 
diff --git a/arch/mips/int_regfile.hh b/arch/mips/int_regfile.hh
new file mode 100644 (file)
index 0000000..cff9eb0
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __ARCH_MIPS_INT_REGFILE_HH__
+#define __ARCH_MIPS_INT_REGFILE_HH__
+
+#include "arch/mips/types.hh"
+#include "arch/mips/constants.hh"
+#include "sim/faults.hh"
+
+class Checkpoint;
+class ExecContext;
+class Regfile;
+
+namespace MipsISA
+{
+    class IntRegFile
+    {
+      protected:
+        IntReg regs[NumIntRegs];
+        IntReg hi;
+        IntReg lo;
+
+      public:
+        IntReg readReg(int intReg)
+        {
+            return regs[intReg];
+        }
+
+        Fault setReg(int intReg, const IntReg &val)
+        {
+            regs[intReg] = val;
+            return NoFault;
+        }
+
+        IntReg readHi()
+        {
+            return hi;
+        }
+
+        Fault setHi(const IntReg &val)
+        {
+            hi = val;
+            return NoFault;
+        }
+
+        IntReg readLo()
+        {
+            return lo;
+        }
+
+        Fault setLo(const IntReg &val)
+        {
+            lo = val;
+            return NoFault;
+        }
+
+        void serialize(std::ostream &os);
+
+        void unserialize(Checkpoint *cp, const std::string &section);
+
+    };
+} // namespace MipsISA
+
+#endif
index 282bb4a415ad13ad19c9a111a2abb24a6b673877..fcc3007ca31d36671406cd9e45ba5d1b6746befe 100644 (file)
 using namespace MipsISA;
 using namespace std;
 
+
+void
+MipsISA::copyRegs(ExecContext *src, ExecContext *dest)
+{
+    /*fpcr = xc->readMiscReg(MipsISA::Fpcr_DepTag);
+    uniq = xc->readMiscReg(MipsISA::Uniq_DepTag);
+    lock_flag = xc->readMiscReg(MipsISA::Lock_Flag_DepTag);
+    lock_addr = xc->readMiscReg(MipsISA::Lock_Addr_DepTag);
+
+#if FULL_SYSTEM
+    copyIprs(xc);
+    #endif*/
+}
+
+void
+MipsISA::MiscRegFile::copyMiscRegs(ExecContext *xc)
+{
+    /*fpcr = xc->readMiscReg(MipsISA::Fpcr_DepTag);
+    uniq = xc->readMiscReg(MipsISA::Uniq_DepTag);
+    lock_flag = xc->readMiscReg(MipsISA::Lock_Flag_DepTag);
+    lock_addr = xc->readMiscReg(MipsISA::Lock_Addr_DepTag);
+
+    #endif*/
+}
+
 uint64_t
 MipsISA::convert_and_round(uint32_t fp_val, ConvertType cvt_type, int rnd_mode)
 {
@@ -111,237 +136,9 @@ MipsISA::convert_and_round(double fp_val, ConvertType cvt_type, int rnd_mode)
     }
 }
 
-void
-MipsISA::copyRegs(ExecContext *src, ExecContext *dest)
-{
-    /*fpcr = xc->readMiscReg(MipsISA::Fpcr_DepTag);
-    uniq = xc->readMiscReg(MipsISA::Uniq_DepTag);
-    lock_flag = xc->readMiscReg(MipsISA::Lock_Flag_DepTag);
-    lock_addr = xc->readMiscReg(MipsISA::Lock_Addr_DepTag);
-
-#if FULL_SYSTEM
-    copyIprs(xc);
-    #endif*/
-}
-
-void
-MipsISA::MiscRegFile::copyMiscRegs(ExecContext *xc)
-{
-    /*fpcr = xc->readMiscReg(MipsISA::Fpcr_DepTag);
-    uniq = xc->readMiscReg(MipsISA::Uniq_DepTag);
-    lock_flag = xc->readMiscReg(MipsISA::Lock_Flag_DepTag);
-    lock_addr = xc->readMiscReg(MipsISA::Lock_Addr_DepTag);
-
-#if FULL_SYSTEM
-    copyIprs(xc);
-    #endif*/
-}
-
-
-void MipsISA::RegFile::coldReset()
-{
-    //CP0 Random Reg:
-    //Randomly generated index into the TLB array
-    /*miscRegs[Random] = 0x0000003f;
-
-    //CP0 Wired Reg.
-    miscRegs[Wired] = 0x0000000;
-
-   //CP0 HWRENA
-    miscRegs[HWRena] = 0x0000000;
-
-    //CP0 Status Reg.
-    miscRegs[Status] = 0x0400004;
-
-   //CP0 INTCNTL
-    miscRegs[IntCtl] = 0xfc00000;
-
-   //CP0 SRSCNTL
-    miscRegs[SRSCtl] = 0x0c00000;
-
-   //CP0 SRSMAP
-    miscRegs[SRSMap] = 0x0000000;
-
-   //CP0 Cause
-    miscRegs[Cause] = 0x0000000;
-
-    //CP0 Processor ID
-    miscRegs[PrId] = 0x0019300;
-
-    //CP0 EBASE
-    miscRegs[EBase] = 0x8000000;
-
-    //CP0 Config Reg.
-    miscRegs[Config] = 0x80040482;
-
-    //CP0 Config 1 Reg.
-    miscRegs[Config1] = 0xfee3719e;
-
-    //CP0 Config 2 Reg.
-    miscRegs[Config2] = 0x8000000;
-
-    //CP0 Config 3 Reg.
-    miscRegs[Config3] = 0x0000020;
-
-    //CP0 Config 7 Reg.
-    miscRegs[Config7] = 0x0000000;
-
-   //CP0 Debug
-    miscRegs[Debug] = 0x0201800;
-
-   //CP0 PERFCNTL1
-    miscRegs[PerfCnt0] = 0x0000000;
-
-   //CP0 PERFCNTL2
-   miscRegs[PerfCnt1] = 0x0000000;*/
-
-}
-
-void RegFile::createCP0Regs()
-{
-//Resize Coprocessor Register Banks to
-// the number specified in MIPS32K VOL.III
-// Chapter 8
-    /*
-    //Cop-0 Regs. Bank 0: Index,
-    miscRegs[0].resize(4);
-
-    //Cop-0 Regs. Bank 1:
-    miscRegs[1].resize(8);
-
-    //Cop-0 Regs. Bank 2:
-    miscRegs[2].resize(8);
-
-    //Cop-0 Regs. Bank 3:
-    miscRegs[3].resize(1);
-
-    //Cop-0 Regs. Bank 4:
-    miscRegs[4].resize(2);
-
-    //Cop-0 Regs. Bank 5:
-    miscRegs[5].resize(2);
-
-    //Cop-0 Regs. Bank 6:
-    miscRegs[6].resize(6);
-
-    //Cop-0 Regs. Bank 7:
-    miscRegs[7].resize(1);
-
-    //Cop-0 Regs. Bank 8:
-    miscRegs[8].resize(1);
-
-    //Cop-0 Regs. Bank 9:
-    miscRegs[9].resize(1);
-
-    //Cop-0 Regs. Bank 10:
-    miscRegs[10].resize(1);
-
-    //Cop-0 Regs. Bank 11:
-    miscRegs[11].resize(1);
-
-    //Cop-0 Regs. Bank 12:
-    miscRegs[12].resize(4);
-
-    //Cop-0 Regs. Bank 13:
-    miscRegs[13].resize(1);
-
-    //Cop-0 Regs. Bank 14:
-    miscRegs[14].resize(1);
-
-    //Cop-0 Regs. Bank 15:
-    miscRegs[15].resize(2);
-
-    //Cop-0 Regs. Bank 16:
-    miscRegs[16].resize(4);
-
-    //Cop-0 Regs. Bank 17:
-    miscRegs[17].resize(1);
-
-    //Cop-0 Regs. Bank 18:
-    miscRegs[18].resize(8);
-
-    //Cop-0 Regs. Bank 19:
-    miscRegs[19].resize(8);
-
-    //Cop-0 Regs. Bank 20:
-    miscRegs[20].resize(1);
-      case PerfCnt0: panic("Accessing Unimplemented CP0 Register"); break;
-      case PerfCnt1: panic("Accessing Unimplemented CP0 Register"); break;
-      case PerfCnt2: panic("Accessing Unimplemented CP0 Register"); break;
-      case PerfCnt3: panic("Accessing Unimplemented CP0 Register"); break;
-
-    //Cop-0 Regs. Bank 21:
-    //miscRegs[21].resize(1);
-    //Reserved for future extensions
-
-    //Cop-0 Regs. Bank 22:
-    //miscRegs[22].resize(4);
-    //Available for implementation dependent use
-
-    //Cop-0 Regs. Bank 23:
-    miscRegs[23].resize(5);
-
-    //Cop-0 Regs. Bank 24:
-    miscRegs[24].resize(1);
-
-    //Cop-0 Regs. Bank 25:
-    miscRegs[25].resize(8);
-
-    //Cop-0 Regs. Bank 26:
-    miscRegs[26].resize(1);
-
-    //Cop-0 Regs. Bank 27:
-    miscRegs[27].resize(4);
-
-    //Cop-0 Regs. Bank 28:
-    miscRegs[28].resize(8);
-
-    //Cop-0 Regs. Bank 29:
-    miscRegs[29].resize(8);
-
-    //Cop-0 Regs. Bank 30:
-    miscRegs[30].resize(1);
-
-    //Cop-0 Regs. Bank 31:
-    miscRegs[31].resize(1);*/
-
-}
-
-
-const Addr MipsISA::PageShift = 13;
-const Addr MipsISA::PageBytes = ULL(1) << PageShift;
-const Addr MipsISA::PageMask = ~(PageBytes - 1);
-const Addr MipsISA::PageOffset = PageBytes - 1;
 
 #if FULL_SYSTEM
 
-////////////////////////////////////////////////////////////////////////
-//
-//  Translation stuff
-//
-
-const Addr MipsISA::PteShift = 3;
-const Addr MipsISA::NPtePageShift = PageShift - PteShift;
-const Addr MipsISA::NPtePage = ULL(1) << NPtePageShift;
-const Addr MipsISA::PteMask = NPtePage - 1;
-
-// User Virtual
-const Addr MipsISA::USegBase = ULL(0x0);
-const Addr MipsISA::USegEnd = ULL(0x000003ffffffffff);
-
-// Kernel Direct Mapped
-const Addr MipsISA::K0SegBase = ULL(0xfffffc0000000000);
-const Addr MipsISA::K0SegEnd = ULL(0xfffffdffffffffff);
-
-// Kernel Virtual
-const Addr MipsISA::K1SegBase = ULL(0xfffffe0000000000);
-const Addr MipsISA::K1SegEnd = ULL(0xffffffffffffffff);
-
-#endif
-
-// Mips UNOP (sll r0,r0,r0)
-const MachInst MipsISA::NoopMachInst = 0x00000000;
-
 static inline Addr
 TruncPage(Addr addr)
 { return addr & ~(MipsISA::PageBytes - 1); }
@@ -349,6 +146,7 @@ TruncPage(Addr addr)
 static inline Addr
 RoundPage(Addr addr)
 { return (addr + MipsISA::PageBytes - 1) & ~(MipsISA::PageBytes - 1); }
+#endif
 
 void
 IntRegFile::serialize(std::ostream &os)
index 74947c6ddde2a849e57b3a1a0da5c6bad117285f..33c490dcc1d944fa90290f3eaf670bc184bb72cd 100644 (file)
 #ifndef __ARCH_MIPS_ISA_TRAITS_HH__
 #define __ARCH_MIPS_ISA_TRAITS_HH__
 
-//#include "arch/mips/misc_regfile.hh"
+#include "arch/mips/constants.hh"
+#include "arch/mips/types.hh"
+#include "arch/mips/regfile.hh"
 #include "arch/mips/faults.hh"
+#include "arch/mips/utility.hh"
 #include "base/misc.hh"
 #include "config/full_system.hh"
 #include "sim/byteswap.hh"
@@ -95,665 +98,21 @@ namespace MipsISA
 {
     using namespace LittleEndianGuest;
 
-    typedef uint32_t MachInst;
-    typedef uint32_t MachInst;
-    typedef uint64_t ExtMachInst;
-    typedef uint8_t  RegIndex;
-//  typedef uint64_t Addr;
-
-       // Constants Related to the number of registers
-
-    const int NumIntArchRegs = 32;
-    const int NumPALShadowRegs = 8;
-    const int NumFloatArchRegs = 32;
-    // @todo: Figure out what this number really should be.
-    const int NumMiscArchRegs = 265;
-
-    const int NumIntRegs = NumIntArchRegs + NumPALShadowRegs;
-    const int NumFloatRegs = NumFloatArchRegs;
-    const int NumMiscRegs = NumMiscArchRegs;
-
-    const int TotalNumRegs = NumIntRegs + NumFloatRegs +
-    NumMiscRegs + 0/*NumInternalProcRegs*/;
-
-    const int TotalDataRegs = NumIntRegs + NumFloatRegs;
-
-    // Static instruction parameters
-    const int MaxInstSrcRegs = 3;
-    const int MaxInstDestRegs = 2;
-
-    // semantically meaningful register indices
-    const int ZeroReg = 0;
-    const int AssemblerReg = 1;
-    const int ReturnValueReg1 = 2;
-    const int ReturnValueReg2 = 3;
-    const int ArgumentReg0 = 4;
-    const int ArgumentReg1 = 5;
-    const int ArgumentReg2 = 6;
-    const int ArgumentReg3 = 7;
-    const int KernelReg0 = 26;
-    const int KernelReg1 = 27;
-    const int GlobalPointerReg = 28;
-    const int StackPointerReg = 29;
-    const int FramePointerReg = 30;
-    const int ReturnAddressReg = 31;
-
-    const int SyscallNumReg = ReturnValueReg1;
-    const int SyscallPseudoReturnReg = ReturnValueReg1;
-    const int SyscallSuccessReg = ArgumentReg3;
-
-    const int LogVMPageSize = 13;      // 8K bytes
-    const int VMPageSize = (1 << LogVMPageSize);
-
-    const int BranchPredAddrShiftAmt = 2; // instructions are 4-byte aligned
-
-    const int MachineBytes = 4;
-    const int WordBytes = 4;
-    const int HalfwordBytes = 2;
-    const int ByteBytes = 1;
-
-
-    // These enumerate all the registers for dependence tracking.
-    enum DependenceTags {
-        // 0..31 are the integer regs 0..31
-        // 32..63 are the FP regs 0..31, i.e. use (reg + FP_Base_DepTag)
-        FP_Base_DepTag = 32,
-        Ctrl_Base_DepTag = 64,
-        Fpcr_DepTag = 64,              // floating point control register
-        Uniq_DepTag = 65,
-        IPR_Base_DepTag = 66,
-        MiscReg_DepTag = 67
-    };
-
-    typedef uint64_t IntReg;
-    class IntRegFile
-    {
-      protected:
-        IntReg regs[NumIntRegs];
-
-      public:
-        IntReg readReg(int intReg)
-        {
-            return regs[intReg];
-        }
-
-        Fault setReg(int intReg, const IntReg &val)
-        {
-            regs[intReg] = val;
-            return NoFault;
-        }
-
-        void serialize(std::ostream &os);
-
-        void unserialize(Checkpoint *cp, const std::string &section);
-
-    };
-
-    typedef float FloatReg;
-    typedef double FPVal;
-
-    typedef uint32_t FloatReg32;
-    typedef uint64_t FloatReg64;
-    typedef uint64_t FloatRegBits;
-
-//  const uint64_t hi_mask64 = 0xFFFFFFFF00000000;
-//const uint64_t lo_mask64 = 0x00000000FFFFFFFF;
-
-    const int SingleWidth = 32;
-    const int SingleBytes = 4;
-
-    const int DoubleWidth = 64;
-    const int DoubleBytes = 8;
-
-    const int QuadWidth = 128;
-    const int QuadBytes = QuadWidth / 4;
-
-    class FloatRegFile
+    static inline void setSyscallReturn(SyscallReturn return_value, RegFile *regs)
     {
-      protected:
-        FloatReg32 regs[NumFloatRegs];
-
-      public:
-
-        void clear()
-        {
-            bzero(regs, sizeof(regs));
-        }
-
-        double readReg(int floatReg, int width)
-        {
-            using namespace std;
-
-            switch(width)
-            {
-              case SingleWidth:
-                void *float_ptr = &regs[floatReg];
-                return *(float *) float_ptr;
-
-              case DoubleWidth:
-                uint64_t double_val = (FloatReg64)regs[floatReg + 1] << 32 | regs[floatReg];
-                void *double_ptr = &double_val;
-                return *(double *) double_ptr;
-
-              default:
-                panic("Attempted to read a %d bit floating point register!", width);
-            }
-        }
-
-        FloatRegBits readRegBits(int floatReg, int width)
-        {
-            using namespace std;
-
-            switch(width)
-            {
-              case SingleWidth:
-                return regs[floatReg];
-
-              case DoubleWidth:
-                return (FloatReg64)regs[floatReg + 1] << 32 | regs[floatReg];
-
-              default:
-                panic("Attempted to read a %d bit floating point register!", width);
-            }
-        }
-
-        Fault setReg(int floatReg, const FPVal &val, int width)
-        {
-
-            switch(width)
-            {
-              case SingleWidth:
-                float temp = val;
-                void *float_ptr = &temp;
-                regs[floatReg] = *(FloatReg32 *) float_ptr;
-                break;
-
-              case DoubleWidth:
-                const void *double_ptr = &val;
-                FloatReg64 temp_double = *(FloatReg64 *) double_ptr;
-                regs[floatReg + 1] = temp_double >> 32;
-                regs[floatReg] = temp_double;
-                break;
-
-              default:
-                panic("Attempted to read a %d bit floating point register!", width);
-            }
-
-            return NoFault;
-        }
-
-        Fault setRegBits(int floatReg, const FloatRegBits &val, int width)
-        {
-            using namespace std;
-
-            switch(width)
-            {
-              case SingleWidth:
-                regs[floatReg] = val;
-                break;
-
-              case DoubleWidth:
-                regs[floatReg + 1] = val >> 32;
-                regs[floatReg] = val;
-                break;
-
-              default:
-                panic("Attempted to read a %d bit floating point register!", width);
-            }
-            return NoFault;
-        }
-
-        void serialize(std::ostream &os);
-
-        void unserialize(Checkpoint *cp, const std::string &section);
-    };
-
-        enum ConvertType{
-            SINGLE_TO_DOUBLE,
-            SINGLE_TO_WORD,
-            SINGLE_TO_LONG,
-
-            DOUBLE_TO_SINGLE,
-            DOUBLE_TO_WORD,
-            DOUBLE_TO_LONG,
-
-            LONG_TO_SINGLE,
-            LONG_TO_DOUBLE,
-            LONG_TO_WORD,
-
-            WORD_TO_SINGLE,
-            WORD_TO_DOUBLE,
-            WORD_TO_LONG,
-
-            PLOWER_TO_SINGLE,
-            PUPPER_TO_SINGLE
-        };
-
-        enum RoundMode{
-            RND_ZERO,
-            RND_DOWN,
-            RND_UP,
-            RND_NEAREST
-        };
-
-        uint64_t convert_and_round(uint32_t fp_val,ConvertType cvt_type, int rnd_mode = 0);
-        uint64_t convert_and_round(uint64_t fp_val,ConvertType cvt_type, int rnd_mode = 0);
-        uint64_t convert_and_round(double fp_val,ConvertType cvt_type, int rnd_mode = 0);
-
-        void copyRegs(ExecContext *src, ExecContext *dest);
-
-    // cop-0/cop-1 system control register file
-    typedef uint64_t MiscReg;
-//typedef MiscReg MiscRegFile[NumMiscRegs];
-    class MiscRegFile {
-
-      protected:
-        uint64_t       fpcr;           // floating point condition codes
-        uint64_t       uniq;           // process-unique register
-        bool           lock_flag;      // lock flag for LL/SC
-        Addr           lock_addr;      // lock address for LL/SC
-
-        MiscReg miscRegFile[NumMiscRegs];
-
-      public:
-        //These functions should be removed once the simplescalar cpu model
-        //has been replaced.
-        int getInstAsid();
-        int getDataAsid();
-
-        void copyMiscRegs(ExecContext *xc);
-
-        MiscReg readReg(int misc_reg)
-        { return miscRegFile[misc_reg]; }
-
-        MiscReg readRegWithEffect(int misc_reg, Fault &fault, ExecContext *xc)
-        { return miscRegFile[misc_reg];}
-
-        Fault setReg(int misc_reg, const MiscReg &val)
-        { miscRegFile[misc_reg] = val; return NoFault; }
-
-        Fault setRegWithEffect(int misc_reg, const MiscReg &val,
-                               ExecContext *xc)
-        { miscRegFile[misc_reg] = val; return NoFault; }
-
-#if FULL_SYSTEM
-        void clearIprs() { }
-
-      protected:
-        InternalProcReg ipr[NumInternalProcRegs]; // Internal processor regs
-
-      private:
-        MiscReg readIpr(int idx, Fault &fault, ExecContext *xc) { }
-
-        Fault setIpr(int idx, uint64_t val, ExecContext *xc) { }
-#endif
-        friend class RegFile;
-    };
-
-    enum MiscRegTags {
-        //Coprocessor 0 Registers
-        //Reference MIPS32 Arch. for Programmers, Vol. III, Ch.8
-        //(Register Number-Register Select) Summary of Register
-        //------------------------------------------------------
-        Index = 0,       //0-0 Index into the TLB array
-
-        MVPControl = 1,  //0-1 Per-processor register containing global
-                     //MIPS® MT configuration data
-
-        MVPConf0 = 2,    //0-2 Per-processor register containing global
-                     //MIPS® MT configuration data
-
-        MVPConf1 = 3,    //0-3 Per-processor register containing global
-                     //MIPS® MT configuration data
-
-        Random = 8,      //1-0 Randomly generated index into the TLB array
-
-        VPEControl = 9,  //1-1 Per-VPE register containing relatively volatile
-                     //thread configuration data
-
-        VPEConf0 = 10,    //1-2 Per-VPE multi-thread configuration
-                     //information
-
-
-        VPEConf1 = 11,    //1-2 Per-VPE multi-thread configuration
-                     //information
-
-        YQMask = 12,      //Per-VPE register defining which YIELD
-                     //qualifier bits may be used without generating
-                     //an exception
-
-        VPESchedule = 13,
-        VPEScheFBack =  14,
-        VPEOpt = 15,
-        EntryLo0 = 16, // Bank 3: 16 - 23
-        TCStatus = 17,
-        TCBind = 18,
-        TCRestart = 19,
-        TCHalt = 20,
-        TCContext = 21,
-        TCSchedule = 22,
-        TCScheFBack = 23,
-
-        EntryLo1 = 24,// Bank 4: 24 - 31
-
-        Context = 32, // Bank 5: 32 - 39
-        ContextConfig = 33,
-
-        //PageMask = 40, //Bank 6: 40 - 47
-        PageGrain = 41,
-
-        Wired = 48, //Bank 7:48 - 55
-        SRSConf0 = 49,
-        SRSConf1 = 50,
-        SRSConf2 = 51,
-        SRSConf3 = 52,
-        SRSConf4 = 53,
-        BadVAddr = 54,
-
-        HWRena = 56,//Bank 8:56 - 63
-
-        Count = 64, //Bank 9:64 - 71
-
-        EntryHi = 72,//Bank 10:72 - 79
-
-        Compare = 80,//Bank 11:80 - 87
-
-        Status = 88,//Bank 12:88 - 96     //12-0 Processor status and control
-        IntCtl = 89,                      //12-1 Interrupt system status and control
-        SRSCtl = 90,                      //12-2 Shadow register set status and control
-        SRSMap = 91,                      //12-3 Shadow set IPL mapping
-
-        Cause = 97,//97-104      //13-0 Cause of last general exception
-
-        EPC = 105,//105-112        //14-0 Program counter at last exception
-
-        PRId = 113,//113-120,       //15-0 Processor identification and revision
-        EBase = 114,      //15-1 Exception vector base register
-
-        Config = 121,//Bank 16: 121-128
-        Config1 = 122,
-        Config2 = 123,
-        Config3 = 124,
-        Config6 = 127,
-        Config7 = 128,
-
-
-        LLAddr = 129,//Bank 17: 129-136
-
-        WatchLo0 = 137,//Bank 18: 137-144
-        WatchLo1 = 138,
-        WatchLo2 = 139,
-        WatchLo3 = 140,
-        WatchLo4 = 141,
-        WatchLo5 = 142,
-        WatchLo6 = 143,
-        WatchLo7 = 144,
-
-        WatchHi0 = 145,//Bank 19: 145-152
-        WatchHi1 = 146,
-        WatchHi2 = 147,
-        WatchHi3 = 148,
-        WatchHi4 = 149,
-        WatchHi5 = 150,
-        WatchHi6 = 151,
-        WatchHi7 = 152,
-
-        XCContext64 = 153,//Bank 20: 153-160
-
-        //Bank 21: 161-168
-
-        //Bank 22: 169-176
-
-        Debug = 177, //Bank 23: 177-184
-        TraceControl1 = 178,
-        TraceControl2 = 179,
-        UserTraceData = 180,
-        TraceBPC = 181,
-
-        DEPC = 185,//Bank 24: 185-192
-
-        PerfCnt0 = 193,//Bank 25: 193 - 200
-        PerfCnt1 = 194,
-        PerfCnt2 = 195,
-        PerfCnt3 = 196,
-        PerfCnt4 = 197,
-        PerfCnt5 = 198,
-        PerfCnt6 = 199,
-        PerfCnt7 = 200,
-
-        ErrCtl = 201, //Bank 26: 201 - 208
-
-        CacheErr0 = 209, //Bank 27: 209 - 216
-        CacheErr1 = 210,
-        CacheErr2 = 211,
-        CacheErr3 = 212,
-
-        TagLo0 = 217,//Bank 28: 217 - 224
-        DataLo1 = 218,
-        TagLo2 = 219,
-        DataLo3 = 220,
-        TagLo4 = 221,
-        DataLo5 = 222,
-        TagLo6 = 223,
-        DataLo7 = 234,
-
-        TagHi0 = 233,//Bank 29: 233 - 240
-        DataHi1 = 234,
-        TagHi2 = 235,
-        DataHi3 = 236,
-        TagHi4 = 237,
-        DataHi5 = 238,
-        TagHi6 = 239,
-        DataHi7 = 240,
-
-
-        ErrorEPC = 249,//Bank 30: 241 - 248
-
-        DESAVE = 257,//Bank 31: 249-256
-
-        //More Misc. Regs
-        Hi,
-        Lo,
-        FIR,
-        FCSR,
-        FPCR,
-
-        //Alpha Regs, but here now, for
-        //compiling sake
-        UNIQ,
-        LockAddr,
-        LockFlag
-    };
-
-extern const Addr PageShift;
-extern const Addr PageBytes;
-extern const Addr PageMask;
-extern const Addr PageOffset;
-
-#if FULL_SYSTEM
-
-    typedef uint64_t InternalProcReg;
-
-#include "arch/mips/isa_fullsys_traits.hh"
-
-#else
-    enum {
-        NumInternalProcRegs = 0
-    };
-#endif
-
-    typedef union {
-        IntReg  intreg;
-        FloatReg   fpreg;
-        MiscReg ctrlreg;
-    } AnyReg;
-
-    class RegFile {
-      protected:
-        IntRegFile intRegFile;         // (signed) integer register file
-        FloatRegFile floatRegFile;     // floating point register file
-        MiscRegFile miscRegFile;       // control register file
-
-      public:
-
-        void clear()
-        {
-            bzero(&intRegFile, sizeof(intRegFile));
-            bzero(&floatRegFile, sizeof(floatRegFile));
-            bzero(&miscRegFile, sizeof(miscRegFile));
-        }
-
-        MiscReg readMiscReg(int miscReg)
-        {
-            return miscRegFile.readReg(miscReg);
-        }
-
-        MiscReg readMiscRegWithEffect(int miscReg,
-                Fault &fault, ExecContext *xc)
-        {
-            fault = NoFault;
-            return miscRegFile.readRegWithEffect(miscReg, fault, xc);
-        }
-
-        Fault setMiscReg(int miscReg, const MiscReg &val)
-        {
-            return miscRegFile.setReg(miscReg, val);
-        }
-
-        Fault setMiscRegWithEffect(int miscReg, const MiscReg &val,
-                ExecContext * xc)
-        {
-            return miscRegFile.setRegWithEffect(miscReg, val, xc);
-        }
-
-        FloatReg readFloatReg(int floatReg)
-        {
-            return floatRegFile.readReg(floatReg,SingleWidth);
-        }
-
-        FloatReg readFloatReg(int floatReg, int width)
-        {
-            return floatRegFile.readReg(floatReg,width);
-        }
-
-        FloatRegBits readFloatRegBits(int floatReg)
-        {
-            return floatRegFile.readRegBits(floatReg,SingleWidth);
-        }
-
-        FloatRegBits readFloatRegBits(int floatReg, int width)
-        {
-            return floatRegFile.readRegBits(floatReg,width);
-        }
-
-        Fault setFloatReg(int floatReg, const FloatReg &val)
-        {
-            return floatRegFile.setReg(floatReg, val, SingleWidth);
-        }
-
-        Fault setFloatReg(int floatReg, const FloatReg &val, int width)
-        {
-            return floatRegFile.setReg(floatReg, val, width);
-        }
-
-        Fault setFloatRegBits(int floatReg, const FloatRegBits &val)
-        {
-            return floatRegFile.setRegBits(floatReg, val, SingleWidth);
-        }
-
-        Fault setFloatRegBits(int floatReg, const FloatRegBits &val, int width)
-        {
-            return floatRegFile.setRegBits(floatReg, val, width);
-        }
-
-        IntReg readIntReg(int intReg)
-        {
-            return intRegFile.readReg(intReg);
-        }
-
-        Fault setIntReg(int intReg, const IntReg &val)
-        {
-            return intRegFile.setReg(intReg, val);
-        }
-      protected:
-
-        Addr pc;                       // program counter
-        Addr npc;                      // next-cycle program counter
-        Addr nnpc;                     // next-next-cycle program counter
-                                        // used to implement branch delay slot
-                                        // not real register
-      public:
-        Addr readPC()
-        {
-            return pc;
-        }
-
-        void setPC(Addr val)
-        {
-            pc = val;
-        }
-
-        Addr readNextPC()
-        {
-            return npc;
-        }
-
-        void setNextPC(Addr val)
-        {
-            npc = val;
-        }
-
-        Addr readNextNPC()
-        {
-            return nnpc;
-        }
-
-        void setNextNPC(Addr val)
-        {
-            nnpc = val;
-        }
-
-        MiscReg hi;                     // MIPS HI Register
-        MiscReg lo;                     // MIPS LO Register
-
-
-#if FULL_SYSTEM
-        IntReg palregs[NumIntRegs];    // PAL shadow registers
-        InternalProcReg ipr[NumInternalProcRegs]; // internal processor regs
-        int intrflag;                  // interrupt flag
-        bool pal_shadow;               // using pal_shadow registers
-        inline int instAsid() { return MIPS34K::ITB_ASN_ASN(ipr[IPR_ITB_ASN]); }
-        inline int dataAsid() { return MIPS34K::DTB_ASN_ASN(ipr[IPR_DTB_ASN]); }
-#endif // FULL_SYSTEM
-
-        //void initCP0Regs();
-        void serialize(std::ostream &os);
-        void unserialize(Checkpoint *cp, const std::string &section);
-
-        void createCP0Regs();
-        void coldReset();
-
-        typedef int ContextParam;
-        typedef int ContextVal;
-
-        void changeContext(ContextParam param, ContextVal val)
-        {
+        if (return_value.successful()) {
+            // no error
+            regs->setIntReg(SyscallSuccessReg, 0);
+            regs->setIntReg(ReturnValueReg1, return_value.value());
+        } else {
+            // got an error, return details
+            regs->setIntReg(SyscallSuccessReg, (IntReg) -1);
+            regs->setIntReg(ReturnValueReg1, -return_value.value());
         }
-    };
+    }
 
     StaticInstPtr decodeInst(ExtMachInst);
 
-    // return a no-op instruction... used for instruction fetch faults
-    extern const MachInst NoopMachInst;
-
-    enum annotes {
-        ANNOTE_NONE = 0,
-        // An impossible number for instruction annotations
-        ITOUCH_ANNOTE = 0xffffffff,
-    };
-
-//void getMiscRegIdx(int reg_name,int &idx, int &sel);
-
     static inline ExtMachInst
     makeExtMI(MachInst inst, const uint64_t &pc) {
 #if FULL_SYSTEM
@@ -767,25 +126,38 @@ extern const Addr PageOffset;
 #endif
     }
 
-    static inline bool isCallerSaveIntegerRegister(unsigned int reg) {
-        panic("register classification not implemented");
-        return (reg >= 1 && reg <= 8 || reg >= 22 && reg <= 25 || reg == 27);
-    }
+    /**
+     * Function to insure ISA semantics about 0 registers.
+     * @param xc The execution context.
+     */
+    template <class XC>
+    void zeroRegisters(XC *xc);
 
-    static inline bool isCalleeSaveIntegerRegister(unsigned int reg) {
-        panic("register classification not implemented");
-        return (reg >= 9 && reg <= 15);
-    }
+    const Addr MaxAddr = (Addr)-1;
 
-    static inline bool isCallerSaveFloatRegister(unsigned int reg) {
-        panic("register classification not implemented");
-        return false;
-    }
+    void copyRegs(ExecContext *src, ExecContext *dest);
 
-    static inline bool isCalleeSaveFloatRegister(unsigned int reg) {
-        panic("register classification not implemented");
-        return false;
-    }
+    uint64_t convert_and_round(uint32_t fp_val, ConvertType cvt_type, int rnd_mode = 0);
+    uint64_t convert_and_round(uint64_t fp_val, ConvertType cvt_type, int rnd_mode = 0);
+    uint64_t convert_and_round(double fp_val, ConvertType cvt_type, int rnd_mode = 0);
+
+    // Machine operations
+
+    void saveMachineReg(AnyReg &savereg, const RegFile &reg_file,
+                               int regnum);
+
+    void restoreMachineReg(RegFile &regs, const AnyReg &reg,
+                                  int regnum);
+
+#if 0
+    static void serializeSpecialRegs(const Serializable::Proxy &proxy,
+                                     const RegFile &regs);
+
+    static void unserializeSpecialRegs(const IniFile *db,
+                                       const std::string &category,
+                                       ConfigNode *node,
+                                       RegFile &regs);
+#endif
 
     static inline Addr alignAddress(const Addr &addr,
                                          unsigned int nbytes) {
@@ -812,53 +184,12 @@ extern const Addr PageOffset;
         return 0;
     }
 
-    static inline void setSyscallReturn(SyscallReturn return_value, RegFile *regs)
-    {
-        if (return_value.successful()) {
-            // no error
-            regs->setIntReg(SyscallSuccessReg, 0);
-            regs->setIntReg(ReturnValueReg1, return_value.value());
-        } else {
-            // got an error, return details
-            regs->setIntReg(SyscallSuccessReg, (IntReg) -1);
-            regs->setIntReg(ReturnValueReg1, -return_value.value());
-        }
-    }
-
-    // Machine operations
-
-    void saveMachineReg(AnyReg &savereg, const RegFile &reg_file,
-                               int regnum);
-
-    void restoreMachineReg(RegFile &regs, const AnyReg &reg,
-                                  int regnum);
-
-#if 0
-    static void serializeSpecialRegs(const Serializable::Proxy &proxy,
-                                     const RegFile &regs);
-
-    static void unserializeSpecialRegs(const IniFile *db,
-                                       const std::string &category,
-                                       ConfigNode *node,
-                                       RegFile &regs);
-#endif
-
-    /**
-     * Function to insure ISA semantics about 0 registers.
-     * @param xc The execution context.
-     */
-    template <class XC>
-    void zeroRegisters(XC *xc);
-
-    const Addr MaxAddr = (Addr)-1;
 };
 
 #if FULL_SYSTEM
-//typedef TheISA::InternalProcReg InternalProcReg;
-//const int NumInternalProcRegs  = TheISA::NumInternalProcRegs;
-//const int NumInterruptLevels = TheISA::NumInterruptLevels;
 
 #include "arch/mips/mips34k.hh"
+
 #endif
 
 using namespace MipsISA;
diff --git a/arch/mips/linux/linux.cc b/arch/mips/linux/linux.cc
new file mode 100644 (file)
index 0000000..ebff886
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "arch/mips/linux/linux.hh"
+
+// open(2) flags translation table
+OpenFlagTransTable MipsLinux::openFlagTable[] = {
+#ifdef _MSC_VER
+  { MipsLinux::TGT_O_RDONLY,   _O_RDONLY },
+  { MipsLinux::TGT_O_WRONLY,   _O_WRONLY },
+  { MipsLinux::TGT_O_RDWR,     _O_RDWR },
+  { MipsLinux::TGT_O_APPEND,   _O_APPEND },
+  { MipsLinux::TGT_O_CREAT,    _O_CREAT },
+  { MipsLinux::TGT_O_TRUNC,    _O_TRUNC },
+  { MipsLinux::TGT_O_EXCL,     _O_EXCL },
+#ifdef _O_NONBLOCK
+  { MipsLinux::TGT_O_NONBLOCK, _O_NONBLOCK },
+#endif
+#ifdef _O_NOCTTY
+  { MipsLinux::TGT_O_NOCTTY,   _O_NOCTTY },
+#endif
+#ifdef _O_SYNC
+  { MipsLinux::TGT_O_SYNC,     _O_SYNC },
+#endif
+#else /* !_MSC_VER */
+  { MipsLinux::TGT_O_RDONLY,   O_RDONLY },
+  { MipsLinux::TGT_O_WRONLY,   O_WRONLY },
+  { MipsLinux::TGT_O_RDWR,     O_RDWR },
+  { MipsLinux::TGT_O_APPEND,   O_APPEND },
+  { MipsLinux::TGT_O_CREAT,    O_CREAT },
+  { MipsLinux::TGT_O_TRUNC,    O_TRUNC },
+  { MipsLinux::TGT_O_EXCL,     O_EXCL },
+  { MipsLinux::TGT_O_NONBLOCK, O_NONBLOCK },
+  { MipsLinux::TGT_O_NOCTTY,   O_NOCTTY },
+#ifdef O_SYNC
+  { MipsLinux::TGT_O_SYNC,     O_SYNC },
+#endif
+#endif /* _MSC_VER */
+};
+
+const int MipsLinux::NUM_OPEN_FLAGS =
+        (sizeof(MipsLinux::openFlagTable)/sizeof(MipsLinux::openFlagTable[0]));
+
+
+
diff --git a/arch/mips/linux/linux.hh b/arch/mips/linux/linux.hh
new file mode 100644 (file)
index 0000000..fd08e8c
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __MIPS_MIPS_LINUX_HH
+#define __MIPS_MIPS_LINUX_HH
+
+#include "kern/linux/linux.hh"
+
+class MipsLinux : public Linux
+{
+  public:
+
+    /// This table maps the target open() flags to the corresponding
+    /// host open() flags.
+    static OpenFlagTransTable openFlagTable[];
+
+    /// Number of entries in openFlagTable[].
+    static const int NUM_OPEN_FLAGS;
+
+    //@{
+    /// open(2) flag values.
+    static const int TGT_O_RDONLY      = 0x00000000;   //!< O_RDONLY
+    static const int TGT_O_WRONLY      = 0x00000001;   //!< O_WRONLY
+    static const int TGT_O_RDWR                = 0x00000002;   //!< O_RDWR
+    static const int TGT_O_NONBLOCK     = 0x00000080;  //!< O_NONBLOCK
+    static const int TGT_O_APPEND      = 0x00000008;   //!< O_APPEND
+    static const int TGT_O_CREAT       = 0x00000100;   //!< O_CREAT
+    static const int TGT_O_TRUNC       = 0x00000200;   //!< O_TRUNC
+    static const int TGT_O_EXCL                = 0x00000400;   //!< O_EXCL
+    static const int TGT_O_NOCTTY      = 0x00000800;   //!< O_NOCTTY
+    static const int TGT_O_SYNC                = 0x00000010;   //!< O_SYNC
+    static const int TGT_O_DRD         = 0x00010000;   //!< O_DRD
+    static const int TGT_O_DIRECTIO     = 0x00020000;  //!< O_DIRECTIO
+    static const int TGT_O_CACHE       = 0x00002000;   //!< O_CACHE
+    static const int TGT_O_DSYNC       = 0x00008000;   //!< O_DSYNC
+    static const int TGT_O_RSYNC       = 0x00040000;   //!< O_RSYNC
+    //@}
+
+    /// For mmap().
+    static const unsigned TGT_MAP_ANONYMOUS = 0x800;
+
+    //@{
+    /// For getsysinfo().
+    static const unsigned GSI_PLATFORM_NAME = 103;  //!< platform name as string
+    static const unsigned GSI_CPU_INFO = 59;   //!< CPU information
+    static const unsigned GSI_PROC_TYPE = 60;  //!< get proc_type
+    static const unsigned GSI_MAX_CPU = 30;         //!< max # cpu's on this machine
+    static const unsigned GSI_CPUS_IN_BOX = 55;        //!< number of CPUs in system
+    static const unsigned GSI_PHYSMEM = 19;            //!< Physical memory in KB
+    static const unsigned GSI_CLK_TCK = 42;            //!< clock freq in Hz
+    //@}
+
+    //@{
+    /// For getrusage().
+    static const int TGT_RUSAGE_SELF = 0;
+    static const int TGT_RUSAGE_CHILDREN = -1;
+    static const int TGT_RUSAGE_BOTH = -2;
+    //@}
+
+    //@{
+    /// For setsysinfo().
+    static const unsigned SSI_IEEE_FP_CONTROL = 14; //!< ieee_set_fp_control()
+    //@}
+
+    //@{
+    /// ioctl() command codes.
+    static const unsigned TIOCGETP   = 0x7408;
+    static const unsigned TIOCSETP   = 0x7409;
+    static const unsigned TIOCSETN   = 0x740a;
+    static const unsigned TIOCSETC   = 0x7411;
+    static const unsigned TIOCGETC   = 0x7412;
+    static const unsigned FIONREAD   = 0x467f;
+    static const unsigned TIOCISATTY = 0x5480;
+    static const unsigned TIOCGETS   = 0x7413;
+    static const unsigned TIOCGETA   = 0x7417;
+    //@}
+
+    /// For table().
+    static const int TBL_SYSINFO = 12;
+
+    /// Resource enumeration for getrlimit().
+    enum rlimit_resources {
+        TGT_RLIMIT_CPU = 0,
+        TGT_RLIMIT_FSIZE = 1,
+        TGT_RLIMIT_DATA = 2,
+        TGT_RLIMIT_STACK = 3,
+        TGT_RLIMIT_CORE = 4,
+        TGT_RLIMIT_NOFILE = 5,
+        TGT_RLIMIT_AS = 6,
+        TGT_RLIMIT_RSS = 7,
+        TGT_RLIMIT_VMEM = 7,
+        TGT_RLIMIT_NPROC = 8,
+        TGT_RLIMIT_MEMLOCK = 9,
+        TGT_RLIMIT_LOCKS = 10
+    };
+
+};
+
+#endif
diff --git a/arch/mips/linux/process.cc b/arch/mips/linux/process.cc
new file mode 100644 (file)
index 0000000..ffc5da2
--- /dev/null
@@ -0,0 +1,429 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "arch/mips/linux/linux.hh"
+#include "arch/mips/linux/process.hh"
+#include "arch/mips/isa_traits.hh"
+
+#include "base/trace.hh"
+#include "cpu/exec_context.hh"
+#include "kern/linux/linux.hh"
+
+#include "sim/process.hh"
+#include "sim/syscall_emul.hh"
+
+using namespace std;
+using namespace MipsISA;
+
+/// Target uname() handler.
+static SyscallReturn
+unameFunc(SyscallDesc *desc, int callnum, Process *process,
+          ExecContext *xc)
+{
+    TypedBufferArg<Linux::utsname> name(xc->getSyscallArg(0));
+
+    strcpy(name->sysname, "Linux");
+    strcpy(name->nodename, "m5.eecs.umich.edu");
+    strcpy(name->release, "2.4.20");
+    strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
+    strcpy(name->machine, "mips");
+
+    name.copyOut(xc->getMemPort());
+    return 0;
+}
+
+/// Target sys_getsysyinfo() handler.  Even though this call is
+/// borrowed from Tru64, the subcases that get used appear to be
+/// different in practice from those used by Tru64 processes.
+static SyscallReturn
+sys_getsysinfoFunc(SyscallDesc *desc, int callnum, Process *process,
+                   ExecContext *xc)
+{
+    unsigned op = xc->getSyscallArg(0);
+    // unsigned nbytes = xc->getSyscallArg(2);
+
+    switch (op) {
+
+      case 45: { // GSI_IEEE_FP_CONTROL
+          TypedBufferArg<uint64_t> fpcr(xc->getSyscallArg(1));
+          // I don't think this exactly matches the HW FPCR
+          *fpcr = 0;
+          fpcr.copyOut(xc->getMemPort());
+          return 0;
+      }
+
+      default:
+        cerr << "sys_getsysinfo: unknown op " << op << endl;
+        abort();
+        break;
+    }
+
+    return 1;
+}
+
+/// Target sys_setsysinfo() handler.
+static SyscallReturn
+sys_setsysinfoFunc(SyscallDesc *desc, int callnum, Process *process,
+                   ExecContext *xc)
+{
+    unsigned op = xc->getSyscallArg(0);
+    // unsigned nbytes = xc->getSyscallArg(2);
+
+    switch (op) {
+
+      case 14: { // SSI_IEEE_FP_CONTROL
+          TypedBufferArg<uint64_t> fpcr(xc->getSyscallArg(1));
+          // I don't think this exactly matches the HW FPCR
+          fpcr.copyIn(xc->getMemPort());
+          DPRINTFR(SyscallVerbose, "sys_setsysinfo(SSI_IEEE_FP_CONTROL): "
+                   " setting FPCR to 0x%x\n", gtoh(*(uint64_t*)fpcr));
+          return 0;
+      }
+
+      default:
+        cerr << "sys_setsysinfo: unknown op " << op << endl;
+        abort();
+        break;
+    }
+
+    return 1;
+}
+
+
+SyscallDesc MipsLinuxProcess::syscallDescs[] = {
+    /*  0 */ SyscallDesc("syscall", unimplementedFunc),
+    /*  1 */ SyscallDesc("exit", exitFunc),
+    /*  2 */ SyscallDesc("fork", unimplementedFunc),
+    /*  3 */ SyscallDesc("read", readFunc),
+    /*  4 */ SyscallDesc("write", writeFunc),
+    /*  5 */ SyscallDesc("open", openFunc<MipsLinux>),
+    /*  6 */ SyscallDesc("close", closeFunc),
+    /*  7 */ SyscallDesc("waitpid", unimplementedFunc),
+    /*  8 */ SyscallDesc("creat", unimplementedFunc),
+    /*  9 */ SyscallDesc("link", unimplementedFunc),
+    /* 10 */ SyscallDesc("unlink", unlinkFunc),
+    /* 11 */ SyscallDesc("execve", unimplementedFunc),
+    /* 12 */ SyscallDesc("chdir", unimplementedFunc),
+    /* 13 */ SyscallDesc("time", unimplementedFunc),
+    /* 14 */ SyscallDesc("mknod", unimplementedFunc),
+    /* 15 */ SyscallDesc("chmod", chmodFunc<MipsLinux>),
+    /* 16 */ SyscallDesc("lchown", chownFunc),
+    /* 17 */ SyscallDesc("break", obreakFunc), /*obreak*/
+    /* 18 */ SyscallDesc("unused#18", unimplementedFunc),
+    /* 19 */ SyscallDesc("lseek", lseekFunc),
+    /* 20 */ SyscallDesc("getpid", getpidFunc),
+    /* 21 */ SyscallDesc("mount", unimplementedFunc),
+    /* 22 */ SyscallDesc("umount", unimplementedFunc),
+    /* 23 */ SyscallDesc("setuid", setuidFunc),
+    /* 24 */ SyscallDesc("getuid", getuidFunc),
+    /* 25 */ SyscallDesc("stime", unimplementedFunc),
+    /* 26 */ SyscallDesc("ptrace", unimplementedFunc),
+    /* 27 */ SyscallDesc("alarm", unimplementedFunc),
+    /* 28 */ SyscallDesc("unused#28", unimplementedFunc),
+    /* 29 */ SyscallDesc("pause", unimplementedFunc),
+    /* 30 */ SyscallDesc("utime", unimplementedFunc),
+    /* 31 */ SyscallDesc("stty", unimplementedFunc),
+    /* 32 */ SyscallDesc("gtty", unimplementedFunc),
+    /* 33 */ SyscallDesc("access", unimplementedFunc),
+    /* 34 */ SyscallDesc("nice", unimplementedFunc),
+    /* 35 */ SyscallDesc("ftime", unimplementedFunc),
+    /* 36 */ SyscallDesc("sync", unimplementedFunc),
+    /* 37 */ SyscallDesc("kill", ignoreFunc),
+    /* 38 */ SyscallDesc("rename", unimplementedFunc),
+    /* 39 */ SyscallDesc("mkdir", unimplementedFunc),
+    /* 40 */ SyscallDesc("rmdir", unimplementedFunc),
+    /* 41 */ SyscallDesc("dup", unimplementedFunc),
+    /* 42 */ SyscallDesc("pipe", unimplementedFunc),
+    /* 43 */ SyscallDesc("times", unimplementedFunc),
+    /* 44 */ SyscallDesc("prof", unimplementedFunc),
+    /* 45 */ SyscallDesc("brk", obreakFunc),/*openFunc<MipsLinux>*/
+    /* 46 */ SyscallDesc("setgid", unimplementedFunc),
+    /* 47 */ SyscallDesc("getgid", getgidFunc),
+    /* 48 */ SyscallDesc("signal", ignoreFunc),
+    /* 49 */ SyscallDesc("geteuid", geteuidFunc),
+    /* 50 */ SyscallDesc("getegid", getegidFunc),
+    /* 51 */ SyscallDesc("acct", unimplementedFunc),
+    /* 52 */ SyscallDesc("umount2", unimplementedFunc),
+    /* 53 */ SyscallDesc("lock", unimplementedFunc),
+    /* 54 */ SyscallDesc("ioctl", ioctlFunc<MipsLinux>),
+    /* 55 */ SyscallDesc("fcntl", unimplementedFunc),
+    /* 56 */ SyscallDesc("mpx", unimplementedFunc),
+    /* 57 */ SyscallDesc("setpgid", unimplementedFunc),
+    /* 58 */ SyscallDesc("ulimit", unimplementedFunc),
+    /* 59 */ SyscallDesc("unused#59", unimplementedFunc),
+    /* 60 */ SyscallDesc("umask", unimplementedFunc),
+    /* 61 */ SyscallDesc("chroot", unimplementedFunc),
+    /* 62 */ SyscallDesc("ustat", unimplementedFunc),
+    /* 63 */ SyscallDesc("dup2", unimplementedFunc),
+    /* 64 */ SyscallDesc("getppid", getpagesizeFunc),
+    /* 65 */ SyscallDesc("getpgrp", unimplementedFunc),
+    /* 66 */ SyscallDesc("setsid", unimplementedFunc),
+    /* 67 */ SyscallDesc("sigaction",unimplementedFunc),
+    /* 68 */ SyscallDesc("sgetmask", unimplementedFunc),
+    /* 69 */ SyscallDesc("ssetmask", unimplementedFunc),
+    /* 70 */ SyscallDesc("setreuid", unimplementedFunc),
+    /* 71 */ SyscallDesc("setregid", unimplementedFunc),
+    /* 72 */ SyscallDesc("sigsuspend", unimplementedFunc),
+    /* 73 */ SyscallDesc("sigpending", unimplementedFunc),
+    /* 74 */ SyscallDesc("sethostname", ignoreFunc),
+    /* 75 */ SyscallDesc("setrlimit", unimplementedFunc),
+    /* 76 */ SyscallDesc("getrlimit", unimplementedFunc),
+    /* 77 */ SyscallDesc("getrusage", unimplementedFunc),
+    /* 78 */ SyscallDesc("gettimeofday", unimplementedFunc),
+    /* 79 */ SyscallDesc("settimeofday", unimplementedFunc),
+    /* 80 */ SyscallDesc("getgroups", unimplementedFunc),
+    /* 81 */ SyscallDesc("setgroups", unimplementedFunc),
+    /* 82 */ SyscallDesc("reserved#82", unimplementedFunc),
+    /* 83 */ SyscallDesc("symlink", unimplementedFunc),
+    /* 84 */ SyscallDesc("unused#84", unimplementedFunc),
+    /* 85 */ SyscallDesc("readlink", unimplementedFunc),
+    /* 86 */ SyscallDesc("uselib", unimplementedFunc),
+    /* 87 */ SyscallDesc("swapon", gethostnameFunc),
+    /* 88 */ SyscallDesc("reboot", unimplementedFunc),
+    /* 89 */ SyscallDesc("readdir", unimplementedFunc),
+    /* 90 */ SyscallDesc("mmap", mmapFunc<MipsLinux>),
+    /* 91 */ SyscallDesc("munmap",munmapFunc),
+    /* 92 */ SyscallDesc("truncate", fcntlFunc),
+    /* 93 */ SyscallDesc("ftruncate", unimplementedFunc),
+    /* 94 */ SyscallDesc("fchmod", unimplementedFunc),
+    /* 95 */ SyscallDesc("fchown", unimplementedFunc),
+    /* 96 */ SyscallDesc("getpriority", unimplementedFunc),
+    /* 97 */ SyscallDesc("setpriority", unimplementedFunc),
+    /* 98 */ SyscallDesc("profil", unimplementedFunc),
+    /* 99 */ SyscallDesc("statfs", unimplementedFunc),
+    /* 100 */ SyscallDesc("fstatfs", unimplementedFunc),
+    /* 101 */ SyscallDesc("ioperm", unimplementedFunc),
+    /* 102 */ SyscallDesc("socketcall", unimplementedFunc),
+    /* 103 */ SyscallDesc("syslog", unimplementedFunc),
+    /* 104 */ SyscallDesc("setitimer", unimplementedFunc),
+    /* 105 */ SyscallDesc("getitimer", unimplementedFunc),
+    /* 106 */ SyscallDesc("stat",  statFunc<MipsLinux>),
+    /* 107 */ SyscallDesc("lstat", unimplementedFunc),
+    /* 108 */ SyscallDesc("fstat", fstatFunc<MipsLinux>),
+    /* 109 */ SyscallDesc("unused#109", unimplementedFunc),
+    /* 110 */ SyscallDesc("iopl", unimplementedFunc),
+    /* 111 */ SyscallDesc("vhangup", unimplementedFunc),
+    /* 112 */ SyscallDesc("idle", ignoreFunc),
+    /* 113 */ SyscallDesc("vm86", unimplementedFunc),
+    /* 114 */ SyscallDesc("wait4", unimplementedFunc),
+    /* 115 */ SyscallDesc("swapoff", unimplementedFunc),
+    /* 116 */ SyscallDesc("sysinfo", unimplementedFunc),
+    /* 117 */ SyscallDesc("ipc", unimplementedFunc),
+    /* 118 */ SyscallDesc("fsync", unimplementedFunc),
+    /* 119 */ SyscallDesc("sigreturn", unimplementedFunc),
+    /* 120 */ SyscallDesc("clone", unimplementedFunc),
+    /* 121 */ SyscallDesc("setdomainname", unimplementedFunc),
+    /* 122 */ SyscallDesc("uname", unameFunc),
+    /* 123 */ SyscallDesc("modify_ldt", unimplementedFunc),
+    /* 124 */ SyscallDesc("adjtimex", unimplementedFunc),
+    /* 125 */ SyscallDesc("mprotect", ignoreFunc),
+    /* 126 */ SyscallDesc("sigprocmask", unimplementedFunc),
+    /* 127 */ SyscallDesc("create_module", unimplementedFunc),
+    /* 128 */ SyscallDesc("init_module", unimplementedFunc),
+    /* 129 */ SyscallDesc("delete_module", unimplementedFunc),
+    /* 130 */ SyscallDesc("get_kernel_syms", unimplementedFunc),
+    /* 131 */ SyscallDesc("quotactl", unimplementedFunc),
+    /* 132 */ SyscallDesc("getpgid", unimplementedFunc),
+    /* 133 */ SyscallDesc("fchdir", unimplementedFunc),
+    /* 134 */ SyscallDesc("bdflush", unimplementedFunc),
+    /* 135 */ SyscallDesc("sysfs", unimplementedFunc),
+    /* 136 */ SyscallDesc("personality", unimplementedFunc),
+    /* 137 */ SyscallDesc("afs_syscall", unimplementedFunc),
+    /* 138 */ SyscallDesc("setfsuid", unimplementedFunc),
+    /* 139 */ SyscallDesc("setfsgid", unimplementedFunc),
+    /* 140 */ SyscallDesc("llseek", unimplementedFunc),
+    /* 141 */ SyscallDesc("getdents", unimplementedFunc),
+    /* 142 */ SyscallDesc("newselect", unimplementedFunc),
+    /* 143 */ SyscallDesc("flock", unimplementedFunc),
+    /* 144 */ SyscallDesc("msync", unimplementedFunc),/*getrlimitFunc<MipsLinux>*/
+    /* 145 */ SyscallDesc("readv", unimplementedFunc),
+    /* 146 */ SyscallDesc("writev", writevFunc<MipsLinux>),
+    /* 147 */ SyscallDesc("cacheflush", unimplementedFunc),
+    /* 148 */ SyscallDesc("cachectl", unimplementedFunc),
+    /* 149 */ SyscallDesc("sysmips", unimplementedFunc),
+    /* 150 */ SyscallDesc("unused#150", unimplementedFunc),
+    /* 151 */ SyscallDesc("getsid", unimplementedFunc),
+    /* 152 */ SyscallDesc("fdatasync", unimplementedFunc),
+    /* 153 */ SyscallDesc("sysctl", unimplementedFunc),
+    /* 154 */ SyscallDesc("mlock", unimplementedFunc),
+    /* 155 */ SyscallDesc("munlock", unimplementedFunc),
+    /* 156 */ SyscallDesc("mlockall", unimplementedFunc),
+    /* 157 */ SyscallDesc("munlockall", unimplementedFunc),
+    /* 158 */ SyscallDesc("sched_setparam", unimplementedFunc),
+    /* 159 */ SyscallDesc("sched_getparam", unimplementedFunc),
+    /* 160 */ SyscallDesc("sched_setscheduler", unimplementedFunc),
+    /* 161 */ SyscallDesc("sched_getscheduler", unimplementedFunc),
+    /* 162 */ SyscallDesc("sched_yield", unimplementedFunc),
+    /* 163 */ SyscallDesc("sched_get_prioritymax", unimplementedFunc),
+    /* 164 */ SyscallDesc("sched_get_priority_min", unimplementedFunc),
+    /* 165 */ SyscallDesc("sched_rr_get_interval", unimplementedFunc),
+    /* 166 */ SyscallDesc("nanosleep", unimplementedFunc),
+    /* 167 */ SyscallDesc("mremap", unimplementedFunc),
+    /* 168 */ SyscallDesc("accept", unimplementedFunc),
+    /* 169 */ SyscallDesc("bind", unimplementedFunc),
+    /* 170 */ SyscallDesc("connect", unimplementedFunc),
+    /* 171 */ SyscallDesc("getpeername", unimplementedFunc),
+    /* 172 */ SyscallDesc("getsockname", unimplementedFunc),
+    /* 173 */ SyscallDesc("getsockopt", unimplementedFunc),
+    /* 174 */ SyscallDesc("listen", unimplementedFunc),
+    /* 175 */ SyscallDesc("recv", unimplementedFunc),
+    /* 176 */ SyscallDesc("recvmsg", unimplementedFunc),
+    /* 177 */ SyscallDesc("send", unimplementedFunc),
+    /* 178 */ SyscallDesc("sendmsg", ignoreFunc),
+    /* 179 */ SyscallDesc("sendto", unimplementedFunc),
+    /* 180 */ SyscallDesc("setsockopt", unimplementedFunc),
+    /* 181 */ SyscallDesc("shutdown", unimplementedFunc),
+    /* 182 */ SyscallDesc("unknown #182", unimplementedFunc),
+    /* 183 */ SyscallDesc("socket", ignoreFunc),
+    /* 184 */ SyscallDesc("socketpair", unimplementedFunc),
+    /* 185 */ SyscallDesc("setresuid", unimplementedFunc),
+    /* 186 */ SyscallDesc("getresuid", unimplementedFunc),
+    /* 187 */ SyscallDesc("query_module", unimplementedFunc),
+    /* 188 */ SyscallDesc("poll", unimplementedFunc),
+    /* 189 */ SyscallDesc("nfsservctl", unimplementedFunc),
+    /* 190 */ SyscallDesc("setresgid", unimplementedFunc),
+    /* 191 */ SyscallDesc("getresgid", unimplementedFunc),
+    /* 192 */ SyscallDesc("prctl", unimplementedFunc),
+    /* 193 */ SyscallDesc("rt_sigreturn", unimplementedFunc),
+    /* 194 */ SyscallDesc("rt_sigaction", ignoreFunc),
+    /* 195 */ SyscallDesc("rt_sigprocmask", ignoreFunc),
+    /* 196 */ SyscallDesc("rt_sigpending", unimplementedFunc),
+    /* 197 */ SyscallDesc("rt_sigtimedwait", unimplementedFunc),
+    /* 198 */ SyscallDesc("rt_sigqueueinfo", ignoreFunc),
+    /* 199 */ SyscallDesc("rt_sigsuspend", unimplementedFunc),
+    /* 200 */ SyscallDesc("pread64", unimplementedFunc),
+    /* 201 */ SyscallDesc("pwrite64", unimplementedFunc),
+    /* 202 */ SyscallDesc("chown", unimplementedFunc),
+    /* 203 */ SyscallDesc("getcwd", unimplementedFunc),
+    /* 204 */ SyscallDesc("capget", unimplementedFunc),
+    /* 205 */ SyscallDesc("capset", unimplementedFunc),
+    /* 206 */ SyscallDesc("sigalstack", unimplementedFunc),
+    /* 207 */ SyscallDesc("sendfile", unimplementedFunc),
+    /* 208 */ SyscallDesc("getpmsg", unimplementedFunc),
+    /* 209 */ SyscallDesc("putpmsg", unimplementedFunc),
+    /* 210 */ SyscallDesc("mmap2", unimplementedFunc),
+    /* 211 */ SyscallDesc("truncate64", unimplementedFunc),
+    /* 212 */ SyscallDesc("ftruncate64", unimplementedFunc),
+    /* 213 */ SyscallDesc("stat64", unimplementedFunc),
+    /* 214 */ SyscallDesc("lstat64", lstat64Func<MipsLinux>),
+    /* 215 */ SyscallDesc("fstat64", fstat64Func<MipsLinux>),
+    /* 216 */ SyscallDesc("pivot_root", unimplementedFunc),
+    /* 217 */ SyscallDesc("mincore", unimplementedFunc),
+    /* 218 */ SyscallDesc("madvise", unimplementedFunc),
+    /* 219 */ SyscallDesc("getdents64", unimplementedFunc),
+    /* 220 */ SyscallDesc("fcntl64", fcntlFunc),
+    /* 221 */ SyscallDesc("reserved#221", unimplementedFunc),
+    /* 222 */ SyscallDesc("gettid", unimplementedFunc),
+    /* 223 */ SyscallDesc("readahead", unimplementedFunc),
+    /* 224 */ SyscallDesc("setxattr", unimplementedFunc),
+    /* 225 */ SyscallDesc("lsetxattr", unimplementedFunc),
+    /* 226 */ SyscallDesc("fsetxattr", unimplementedFunc),
+    /* 227 */ SyscallDesc("getxattr", unimplementedFunc),
+    /* 228 */ SyscallDesc("lgetxattr", unimplementedFunc),
+    /* 229 */ SyscallDesc("fgetxattr", unimplementedFunc),
+    /* 230 */ SyscallDesc("listxattr", unimplementedFunc),
+    /* 231 */ SyscallDesc("llistxattr", unimplementedFunc),
+    /* 232 */ SyscallDesc("flistxattr", unimplementedFunc),
+    /* 233 */ SyscallDesc("removexattr", unimplementedFunc),
+    /* 234 */ SyscallDesc("lremovexattr", unimplementedFunc),
+    /* 235 */ SyscallDesc("fremovexattr", ignoreFunc),
+    /* 236 */ SyscallDesc("tkill", unimplementedFunc),
+    /* 237 */ SyscallDesc("sendfile64", unimplementedFunc),
+    /* 238 */ SyscallDesc("futex", unimplementedFunc),
+    /* 239 */ SyscallDesc("sched_setaffinity", unimplementedFunc),
+    /* 240 */ SyscallDesc("sched_getaffinity", unimplementedFunc),
+    /* 241 */ SyscallDesc("io_setup", unimplementedFunc),
+    /* 242 */ SyscallDesc("io_destroy", unimplementedFunc),
+    /* 243 */ SyscallDesc("io_getevents", unimplementedFunc),
+    /* 244 */ SyscallDesc("io_submit", unimplementedFunc),
+    /* 245 */ SyscallDesc("io_cancel", unimplementedFunc),
+    /* 246 */ SyscallDesc("exit_group", exitFunc),
+    /* 247 */ SyscallDesc("lookup_dcookie", unimplementedFunc),
+    /* 248 */ SyscallDesc("epoll_create", unimplementedFunc),
+    /* 249 */ SyscallDesc("epoll_ctl", unimplementedFunc),
+    /* 250 */ SyscallDesc("epoll_wait", unimplementedFunc),
+    /* 251 */ SyscallDesc("remap_file_pages", unimplementedFunc),
+    /* 252 */ SyscallDesc("set_tid_address", unimplementedFunc),
+    /* 253 */ SyscallDesc("restart_syscall", unimplementedFunc),
+    /* 254 */ SyscallDesc("fadvise64", unimplementedFunc),
+    /* 255 */ SyscallDesc("statfs64", unimplementedFunc),
+    /* 256 */ SyscallDesc("fstafs64", unimplementedFunc),
+    /* 257 */ SyscallDesc("timer_create", sys_getsysinfoFunc),
+    /* 258 */ SyscallDesc("timer_settime", sys_setsysinfoFunc),
+    /* 259 */ SyscallDesc("timer_gettime", unimplementedFunc),
+    /* 260 */ SyscallDesc("timer_getoverrun", unimplementedFunc),
+    /* 261 */ SyscallDesc("timer_delete", unimplementedFunc),
+    /* 262 */ SyscallDesc("clock_settime", unimplementedFunc),
+    /* 263 */ SyscallDesc("clock_gettime", unimplementedFunc),
+    /* 264 */ SyscallDesc("clock_getres", unimplementedFunc),
+    /* 265 */ SyscallDesc("clock_nanosleep", unimplementedFunc),
+    /* 266 */ SyscallDesc("tgkill", unimplementedFunc),
+    /* 267 */ SyscallDesc("utimes", unimplementedFunc),
+    /* 268 */ SyscallDesc("mbind", unimplementedFunc),
+    /* 269 */ SyscallDesc("get_mempolicy", unimplementedFunc),
+    /* 270 */ SyscallDesc("set_mempolicy", unimplementedFunc),
+    /* 271 */ SyscallDesc("mq_open", unimplementedFunc),
+    /* 272 */ SyscallDesc("mq_unlink", unimplementedFunc),
+    /* 273 */ SyscallDesc("mq_timedsend", unimplementedFunc),
+    /* 274 */ SyscallDesc("mq_timedreceive", unimplementedFunc),
+    /* 275 */ SyscallDesc("mq_notify", unimplementedFunc),
+    /* 276 */ SyscallDesc("mq_getsetattr", unimplementedFunc),
+    /* 277 */ SyscallDesc("vserver", unimplementedFunc),
+    /* 278 */ SyscallDesc("waitid", unimplementedFunc),
+    /* 279 */ SyscallDesc("unknown #279", unimplementedFunc),
+    /* 280 */ SyscallDesc("add_key", unimplementedFunc),
+    /* 281 */ SyscallDesc("request_key", unimplementedFunc),
+    /* 282 */ SyscallDesc("keyctl", unimplementedFunc),
+};
+
+MipsLinuxProcess::MipsLinuxProcess(const std::string &name,
+                                     ObjectFile *objFile,
+                                     System *system,
+                                     int stdin_fd,
+                                     int stdout_fd,
+                                     int stderr_fd,
+                                     std::vector<std::string> &argv,
+                                     std::vector<std::string> &envp)
+    : MipsLiveProcess(name, objFile, system, stdin_fd, stdout_fd, stderr_fd,
+                      argv, envp),
+     Num_Syscall_Descs(sizeof(syscallDescs) / sizeof(SyscallDesc))
+{
+    //init_regs->intRegFile[0] = 0;
+}
+
+SyscallDesc*
+MipsLinuxProcess::getDesc(int callnum)
+{
+    //MIPS32 syscalls are in the range of 4000 - 4999
+    int m5_sys_idx = callnum - 4000;
+
+    if (m5_sys_idx < 0 || m5_sys_idx > Num_Syscall_Descs)
+        return NULL;
+
+    return &syscallDescs[m5_sys_idx];
+}
diff --git a/arch/mips/linux/process.hh b/arch/mips/linux/process.hh
new file mode 100644 (file)
index 0000000..68da322
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2003-2004 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __MIPS_LINUX_PROCESS_HH__
+#define __MIPS_LINUX_PROCESS_HH__
+
+#include "arch/mips/process.hh"
+
+
+/// A process with emulated Mips/Linux syscalls.
+class MipsLinuxProcess : public MipsLiveProcess
+{
+  public:
+    /// Constructor.
+    MipsLinuxProcess(const std::string &name,
+                      ObjectFile *objFile,
+                      System *system,
+                      int stdin_fd, int stdout_fd, int stderr_fd,
+                      std::vector<std::string> &argv,
+                      std::vector<std::string> &envp);
+
+    virtual SyscallDesc* getDesc(int callnum);
+
+    /// The target system's hostname.
+    static const char *hostname;
+
+     /// Array of syscall descriptors, indexed by call number.
+    static SyscallDesc syscallDescs[];
+
+    const int Num_Syscall_Descs;
+};
+
+
+#endif // __MIPS_LINUX_PROCESS_HH__
diff --git a/arch/mips/linux_process.cc b/arch/mips/linux_process.cc
deleted file mode 100644 (file)
index 8940754..0000000
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * Copyright (c) 2003-2005 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "arch/mips/mips_linux.hh"
-#include "arch/mips/linux_process.hh"
-#include "arch/mips/isa_traits.hh"
-
-#include "base/trace.hh"
-#include "cpu/exec_context.hh"
-#include "kern/linux/linux.hh"
-
-#include "sim/process.hh"
-#include "sim/syscall_emul.hh"
-
-using namespace std;
-using namespace MipsISA;
-
-/// Target uname() handler.
-static SyscallReturn
-unameFunc(SyscallDesc *desc, int callnum, Process *process,
-          ExecContext *xc)
-{
-    TypedBufferArg<Linux::utsname> name(xc->getSyscallArg(0));
-
-    strcpy(name->sysname, "Linux");
-    strcpy(name->nodename, "m5.eecs.umich.edu");
-    strcpy(name->release, "2.4.20");
-    strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
-    strcpy(name->machine, "mips");
-
-    name.copyOut(xc->getMemPort());
-    return 0;
-}
-
-/// Target sys_getsysyinfo() handler.  Even though this call is
-/// borrowed from Tru64, the subcases that get used appear to be
-/// different in practice from those used by Tru64 processes.
-static SyscallReturn
-sys_getsysinfoFunc(SyscallDesc *desc, int callnum, Process *process,
-                   ExecContext *xc)
-{
-    unsigned op = xc->getSyscallArg(0);
-    // unsigned nbytes = xc->getSyscallArg(2);
-
-    switch (op) {
-
-      case 45: { // GSI_IEEE_FP_CONTROL
-          TypedBufferArg<uint64_t> fpcr(xc->getSyscallArg(1));
-          // I don't think this exactly matches the HW FPCR
-          *fpcr = 0;
-          fpcr.copyOut(xc->getMemPort());
-          return 0;
-      }
-
-      default:
-        cerr << "sys_getsysinfo: unknown op " << op << endl;
-        abort();
-        break;
-    }
-
-    return 1;
-}
-
-/// Target sys_setsysinfo() handler.
-static SyscallReturn
-sys_setsysinfoFunc(SyscallDesc *desc, int callnum, Process *process,
-                   ExecContext *xc)
-{
-    unsigned op = xc->getSyscallArg(0);
-    // unsigned nbytes = xc->getSyscallArg(2);
-
-    switch (op) {
-
-      case 14: { // SSI_IEEE_FP_CONTROL
-          TypedBufferArg<uint64_t> fpcr(xc->getSyscallArg(1));
-          // I don't think this exactly matches the HW FPCR
-          fpcr.copyIn(xc->getMemPort());
-          DPRINTFR(SyscallVerbose, "sys_setsysinfo(SSI_IEEE_FP_CONTROL): "
-                   " setting FPCR to 0x%x\n", gtoh(*(uint64_t*)fpcr));
-          return 0;
-      }
-
-      default:
-        cerr << "sys_setsysinfo: unknown op " << op << endl;
-        abort();
-        break;
-    }
-
-    return 1;
-}
-
-
-SyscallDesc MipsLinuxProcess::syscallDescs[] = {
-    /*  0 */ SyscallDesc("syscall", unimplementedFunc),
-    /*  1 */ SyscallDesc("exit", exitFunc),
-    /*  2 */ SyscallDesc("fork", unimplementedFunc),
-    /*  3 */ SyscallDesc("read", readFunc),
-    /*  4 */ SyscallDesc("write", writeFunc),
-    /*  5 */ SyscallDesc("open", openFunc<MipsLinux>),
-    /*  6 */ SyscallDesc("close", closeFunc),
-    /*  7 */ SyscallDesc("waitpid", unimplementedFunc),
-    /*  8 */ SyscallDesc("creat", unimplementedFunc),
-    /*  9 */ SyscallDesc("link", unimplementedFunc),
-    /* 10 */ SyscallDesc("unlink", unlinkFunc),
-    /* 11 */ SyscallDesc("execve", unimplementedFunc),
-    /* 12 */ SyscallDesc("chdir", unimplementedFunc),
-    /* 13 */ SyscallDesc("time", unimplementedFunc),
-    /* 14 */ SyscallDesc("mknod", unimplementedFunc),
-    /* 15 */ SyscallDesc("chmod", chmodFunc<MipsLinux>),
-    /* 16 */ SyscallDesc("lchown", chownFunc),
-    /* 17 */ SyscallDesc("break", obreakFunc), /*obreak*/
-    /* 18 */ SyscallDesc("unused#18", unimplementedFunc),
-    /* 19 */ SyscallDesc("lseek", lseekFunc),
-    /* 20 */ SyscallDesc("getpid", getpidFunc),
-    /* 21 */ SyscallDesc("mount", unimplementedFunc),
-    /* 22 */ SyscallDesc("umount", unimplementedFunc),
-    /* 23 */ SyscallDesc("setuid", setuidFunc),
-    /* 24 */ SyscallDesc("getuid", getuidFunc),
-    /* 25 */ SyscallDesc("stime", unimplementedFunc),
-    /* 26 */ SyscallDesc("ptrace", unimplementedFunc),
-    /* 27 */ SyscallDesc("alarm", unimplementedFunc),
-    /* 28 */ SyscallDesc("unused#28", unimplementedFunc),
-    /* 29 */ SyscallDesc("pause", unimplementedFunc),
-    /* 30 */ SyscallDesc("utime", unimplementedFunc),
-    /* 31 */ SyscallDesc("stty", unimplementedFunc),
-    /* 32 */ SyscallDesc("gtty", unimplementedFunc),
-    /* 33 */ SyscallDesc("access", unimplementedFunc),
-    /* 34 */ SyscallDesc("nice", unimplementedFunc),
-    /* 35 */ SyscallDesc("ftime", unimplementedFunc),
-    /* 36 */ SyscallDesc("sync", unimplementedFunc),
-    /* 37 */ SyscallDesc("kill", ignoreFunc),
-    /* 38 */ SyscallDesc("rename", unimplementedFunc),
-    /* 39 */ SyscallDesc("mkdir", unimplementedFunc),
-    /* 40 */ SyscallDesc("rmdir", unimplementedFunc),
-    /* 41 */ SyscallDesc("dup", unimplementedFunc),
-    /* 42 */ SyscallDesc("pipe", unimplementedFunc),
-    /* 43 */ SyscallDesc("times", unimplementedFunc),
-    /* 44 */ SyscallDesc("prof", unimplementedFunc),
-    /* 45 */ SyscallDesc("brk", obreakFunc),/*openFunc<MipsLinux>*/
-    /* 46 */ SyscallDesc("setgid", unimplementedFunc),
-    /* 47 */ SyscallDesc("getgid", getgidFunc),
-    /* 48 */ SyscallDesc("signal", ignoreFunc),
-    /* 49 */ SyscallDesc("geteuid", geteuidFunc),
-    /* 50 */ SyscallDesc("getegid", getegidFunc),
-    /* 51 */ SyscallDesc("acct", unimplementedFunc),
-    /* 52 */ SyscallDesc("umount2", unimplementedFunc),
-    /* 53 */ SyscallDesc("lock", unimplementedFunc),
-    /* 54 */ SyscallDesc("ioctl", ioctlFunc<MipsLinux>),
-    /* 55 */ SyscallDesc("fcntl", unimplementedFunc),
-    /* 56 */ SyscallDesc("mpx", unimplementedFunc),
-    /* 57 */ SyscallDesc("setpgid", unimplementedFunc),
-    /* 58 */ SyscallDesc("ulimit", unimplementedFunc),
-    /* 59 */ SyscallDesc("unused#59", unimplementedFunc),
-    /* 60 */ SyscallDesc("umask", unimplementedFunc),
-    /* 61 */ SyscallDesc("chroot", unimplementedFunc),
-    /* 62 */ SyscallDesc("ustat", unimplementedFunc),
-    /* 63 */ SyscallDesc("dup2", unimplementedFunc),
-    /* 64 */ SyscallDesc("getppid", getpagesizeFunc),
-    /* 65 */ SyscallDesc("getpgrp", unimplementedFunc),
-    /* 66 */ SyscallDesc("setsid", unimplementedFunc),
-    /* 67 */ SyscallDesc("sigaction",unimplementedFunc),
-    /* 68 */ SyscallDesc("sgetmask", unimplementedFunc),
-    /* 69 */ SyscallDesc("ssetmask", unimplementedFunc),
-    /* 70 */ SyscallDesc("setreuid", unimplementedFunc),
-    /* 71 */ SyscallDesc("setregid", unimplementedFunc),
-    /* 72 */ SyscallDesc("sigsuspend", unimplementedFunc),
-    /* 73 */ SyscallDesc("sigpending", unimplementedFunc),
-    /* 74 */ SyscallDesc("sethostname", ignoreFunc),
-    /* 75 */ SyscallDesc("setrlimit", unimplementedFunc),
-    /* 76 */ SyscallDesc("getrlimit", unimplementedFunc),
-    /* 77 */ SyscallDesc("getrusage", unimplementedFunc),
-    /* 78 */ SyscallDesc("gettimeofday", unimplementedFunc),
-    /* 79 */ SyscallDesc("settimeofday", unimplementedFunc),
-    /* 80 */ SyscallDesc("getgroups", unimplementedFunc),
-    /* 81 */ SyscallDesc("setgroups", unimplementedFunc),
-    /* 82 */ SyscallDesc("reserved#82", unimplementedFunc),
-    /* 83 */ SyscallDesc("symlink", unimplementedFunc),
-    /* 84 */ SyscallDesc("unused#84", unimplementedFunc),
-    /* 85 */ SyscallDesc("readlink", unimplementedFunc),
-    /* 86 */ SyscallDesc("uselib", unimplementedFunc),
-    /* 87 */ SyscallDesc("swapon", gethostnameFunc),
-    /* 88 */ SyscallDesc("reboot", unimplementedFunc),
-    /* 89 */ SyscallDesc("readdir", unimplementedFunc),
-    /* 90 */ SyscallDesc("mmap", mmapFunc<MipsLinux>),
-    /* 91 */ SyscallDesc("munmap",munmapFunc),
-    /* 92 */ SyscallDesc("truncate", fcntlFunc),
-    /* 93 */ SyscallDesc("ftruncate", unimplementedFunc),
-    /* 94 */ SyscallDesc("fchmod", unimplementedFunc),
-    /* 95 */ SyscallDesc("fchown", unimplementedFunc),
-    /* 96 */ SyscallDesc("getpriority", unimplementedFunc),
-    /* 97 */ SyscallDesc("setpriority", unimplementedFunc),
-    /* 98 */ SyscallDesc("profil", unimplementedFunc),
-    /* 99 */ SyscallDesc("statfs", unimplementedFunc),
-    /* 100 */ SyscallDesc("fstatfs", unimplementedFunc),
-    /* 101 */ SyscallDesc("ioperm", unimplementedFunc),
-    /* 102 */ SyscallDesc("socketcall", unimplementedFunc),
-    /* 103 */ SyscallDesc("syslog", unimplementedFunc),
-    /* 104 */ SyscallDesc("setitimer", unimplementedFunc),
-    /* 105 */ SyscallDesc("getitimer", unimplementedFunc),
-    /* 106 */ SyscallDesc("stat",  statFunc<MipsLinux>),
-    /* 107 */ SyscallDesc("lstat", unimplementedFunc),
-    /* 108 */ SyscallDesc("fstat", fstatFunc<MipsLinux>),
-    /* 109 */ SyscallDesc("unused#109", unimplementedFunc),
-    /* 110 */ SyscallDesc("iopl", unimplementedFunc),
-    /* 111 */ SyscallDesc("vhangup", unimplementedFunc),
-    /* 112 */ SyscallDesc("idle", ignoreFunc),
-    /* 113 */ SyscallDesc("vm86", unimplementedFunc),
-    /* 114 */ SyscallDesc("wait4", unimplementedFunc),
-    /* 115 */ SyscallDesc("swapoff", unimplementedFunc),
-    /* 116 */ SyscallDesc("sysinfo", unimplementedFunc),
-    /* 117 */ SyscallDesc("ipc", unimplementedFunc),
-    /* 118 */ SyscallDesc("fsync", unimplementedFunc),
-    /* 119 */ SyscallDesc("sigreturn", unimplementedFunc),
-    /* 120 */ SyscallDesc("clone", unimplementedFunc),
-    /* 121 */ SyscallDesc("setdomainname", unimplementedFunc),
-    /* 122 */ SyscallDesc("uname", unameFunc),
-    /* 123 */ SyscallDesc("modify_ldt", unimplementedFunc),
-    /* 124 */ SyscallDesc("adjtimex", unimplementedFunc),
-    /* 125 */ SyscallDesc("mprotect", ignoreFunc),
-    /* 126 */ SyscallDesc("sigprocmask", unimplementedFunc),
-    /* 127 */ SyscallDesc("create_module", unimplementedFunc),
-    /* 128 */ SyscallDesc("init_module", unimplementedFunc),
-    /* 129 */ SyscallDesc("delete_module", unimplementedFunc),
-    /* 130 */ SyscallDesc("get_kernel_syms", unimplementedFunc),
-    /* 131 */ SyscallDesc("quotactl", unimplementedFunc),
-    /* 132 */ SyscallDesc("getpgid", unimplementedFunc),
-    /* 133 */ SyscallDesc("fchdir", unimplementedFunc),
-    /* 134 */ SyscallDesc("bdflush", unimplementedFunc),
-    /* 135 */ SyscallDesc("sysfs", unimplementedFunc),
-    /* 136 */ SyscallDesc("personality", unimplementedFunc),
-    /* 137 */ SyscallDesc("afs_syscall", unimplementedFunc),
-    /* 138 */ SyscallDesc("setfsuid", unimplementedFunc),
-    /* 139 */ SyscallDesc("setfsgid", unimplementedFunc),
-    /* 140 */ SyscallDesc("llseek", unimplementedFunc),
-    /* 141 */ SyscallDesc("getdents", unimplementedFunc),
-    /* 142 */ SyscallDesc("newselect", unimplementedFunc),
-    /* 143 */ SyscallDesc("flock", unimplementedFunc),
-    /* 144 */ SyscallDesc("msync", unimplementedFunc),/*getrlimitFunc<MipsLinux>*/
-    /* 145 */ SyscallDesc("readv", unimplementedFunc),
-    /* 146 */ SyscallDesc("writev", writevFunc<MipsLinux>),
-    /* 147 */ SyscallDesc("cacheflush", unimplementedFunc),
-    /* 148 */ SyscallDesc("cachectl", unimplementedFunc),
-    /* 149 */ SyscallDesc("sysmips", unimplementedFunc),
-    /* 150 */ SyscallDesc("unused#150", unimplementedFunc),
-    /* 151 */ SyscallDesc("getsid", unimplementedFunc),
-    /* 152 */ SyscallDesc("fdatasync", unimplementedFunc),
-    /* 153 */ SyscallDesc("sysctl", unimplementedFunc),
-    /* 154 */ SyscallDesc("mlock", unimplementedFunc),
-    /* 155 */ SyscallDesc("munlock", unimplementedFunc),
-    /* 156 */ SyscallDesc("mlockall", unimplementedFunc),
-    /* 157 */ SyscallDesc("munlockall", unimplementedFunc),
-    /* 158 */ SyscallDesc("sched_setparam", unimplementedFunc),
-    /* 159 */ SyscallDesc("sched_getparam", unimplementedFunc),
-    /* 160 */ SyscallDesc("sched_setscheduler", unimplementedFunc),
-    /* 161 */ SyscallDesc("sched_getscheduler", unimplementedFunc),
-    /* 162 */ SyscallDesc("sched_yield", unimplementedFunc),
-    /* 163 */ SyscallDesc("sched_get_prioritymax", unimplementedFunc),
-    /* 164 */ SyscallDesc("sched_get_priority_min", unimplementedFunc),
-    /* 165 */ SyscallDesc("sched_rr_get_interval", unimplementedFunc),
-    /* 166 */ SyscallDesc("nanosleep", unimplementedFunc),
-    /* 167 */ SyscallDesc("mremap", unimplementedFunc),
-    /* 168 */ SyscallDesc("accept", unimplementedFunc),
-    /* 169 */ SyscallDesc("bind", unimplementedFunc),
-    /* 170 */ SyscallDesc("connect", unimplementedFunc),
-    /* 171 */ SyscallDesc("getpeername", unimplementedFunc),
-    /* 172 */ SyscallDesc("getsockname", unimplementedFunc),
-    /* 173 */ SyscallDesc("getsockopt", unimplementedFunc),
-    /* 174 */ SyscallDesc("listen", unimplementedFunc),
-    /* 175 */ SyscallDesc("recv", unimplementedFunc),
-    /* 176 */ SyscallDesc("recvmsg", unimplementedFunc),
-    /* 177 */ SyscallDesc("send", unimplementedFunc),
-    /* 178 */ SyscallDesc("sendmsg", ignoreFunc),
-    /* 179 */ SyscallDesc("sendto", unimplementedFunc),
-    /* 180 */ SyscallDesc("setsockopt", unimplementedFunc),
-    /* 181 */ SyscallDesc("shutdown", unimplementedFunc),
-    /* 182 */ SyscallDesc("unknown #182", unimplementedFunc),
-    /* 183 */ SyscallDesc("socket", ignoreFunc),
-    /* 184 */ SyscallDesc("socketpair", unimplementedFunc),
-    /* 185 */ SyscallDesc("setresuid", unimplementedFunc),
-    /* 186 */ SyscallDesc("getresuid", unimplementedFunc),
-    /* 187 */ SyscallDesc("query_module", unimplementedFunc),
-    /* 188 */ SyscallDesc("poll", unimplementedFunc),
-    /* 189 */ SyscallDesc("nfsservctl", unimplementedFunc),
-    /* 190 */ SyscallDesc("setresgid", unimplementedFunc),
-    /* 191 */ SyscallDesc("getresgid", unimplementedFunc),
-    /* 192 */ SyscallDesc("prctl", unimplementedFunc),
-    /* 193 */ SyscallDesc("rt_sigreturn", unimplementedFunc),
-    /* 194 */ SyscallDesc("rt_sigaction", ignoreFunc),
-    /* 195 */ SyscallDesc("rt_sigprocmask", ignoreFunc),
-    /* 196 */ SyscallDesc("rt_sigpending", unimplementedFunc),
-    /* 197 */ SyscallDesc("rt_sigtimedwait", unimplementedFunc),
-    /* 198 */ SyscallDesc("rt_sigqueueinfo", ignoreFunc),
-    /* 199 */ SyscallDesc("rt_sigsuspend", unimplementedFunc),
-    /* 200 */ SyscallDesc("pread64", unimplementedFunc),
-    /* 201 */ SyscallDesc("pwrite64", unimplementedFunc),
-    /* 202 */ SyscallDesc("chown", unimplementedFunc),
-    /* 203 */ SyscallDesc("getcwd", unimplementedFunc),
-    /* 204 */ SyscallDesc("capget", unimplementedFunc),
-    /* 205 */ SyscallDesc("capset", unimplementedFunc),
-    /* 206 */ SyscallDesc("sigalstack", unimplementedFunc),
-    /* 207 */ SyscallDesc("sendfile", unimplementedFunc),
-    /* 208 */ SyscallDesc("getpmsg", unimplementedFunc),
-    /* 209 */ SyscallDesc("putpmsg", unimplementedFunc),
-    /* 210 */ SyscallDesc("mmap2", unimplementedFunc),
-    /* 211 */ SyscallDesc("truncate64", unimplementedFunc),
-    /* 212 */ SyscallDesc("ftruncate64", unimplementedFunc),
-    /* 213 */ SyscallDesc("stat64", unimplementedFunc),
-    /* 214 */ SyscallDesc("lstat64", lstat64Func<MipsLinux>),
-    /* 215 */ SyscallDesc("fstat64", fstat64Func<MipsLinux>),
-    /* 216 */ SyscallDesc("pivot_root", unimplementedFunc),
-    /* 217 */ SyscallDesc("mincore", unimplementedFunc),
-    /* 218 */ SyscallDesc("madvise", unimplementedFunc),
-    /* 219 */ SyscallDesc("getdents64", unimplementedFunc),
-    /* 220 */ SyscallDesc("fcntl64", fcntlFunc),
-    /* 221 */ SyscallDesc("reserved#221", unimplementedFunc),
-    /* 222 */ SyscallDesc("gettid", unimplementedFunc),
-    /* 223 */ SyscallDesc("readahead", unimplementedFunc),
-    /* 224 */ SyscallDesc("setxattr", unimplementedFunc),
-    /* 225 */ SyscallDesc("lsetxattr", unimplementedFunc),
-    /* 226 */ SyscallDesc("fsetxattr", unimplementedFunc),
-    /* 227 */ SyscallDesc("getxattr", unimplementedFunc),
-    /* 228 */ SyscallDesc("lgetxattr", unimplementedFunc),
-    /* 229 */ SyscallDesc("fgetxattr", unimplementedFunc),
-    /* 230 */ SyscallDesc("listxattr", unimplementedFunc),
-    /* 231 */ SyscallDesc("llistxattr", unimplementedFunc),
-    /* 232 */ SyscallDesc("flistxattr", unimplementedFunc),
-    /* 233 */ SyscallDesc("removexattr", unimplementedFunc),
-    /* 234 */ SyscallDesc("lremovexattr", unimplementedFunc),
-    /* 235 */ SyscallDesc("fremovexattr", ignoreFunc),
-    /* 236 */ SyscallDesc("tkill", unimplementedFunc),
-    /* 237 */ SyscallDesc("sendfile64", unimplementedFunc),
-    /* 238 */ SyscallDesc("futex", unimplementedFunc),
-    /* 239 */ SyscallDesc("sched_setaffinity", unimplementedFunc),
-    /* 240 */ SyscallDesc("sched_getaffinity", unimplementedFunc),
-    /* 241 */ SyscallDesc("io_setup", unimplementedFunc),
-    /* 242 */ SyscallDesc("io_destroy", unimplementedFunc),
-    /* 243 */ SyscallDesc("io_getevents", unimplementedFunc),
-    /* 244 */ SyscallDesc("io_submit", unimplementedFunc),
-    /* 245 */ SyscallDesc("io_cancel", unimplementedFunc),
-    /* 246 */ SyscallDesc("exit_group", exitFunc),
-    /* 247 */ SyscallDesc("lookup_dcookie", unimplementedFunc),
-    /* 248 */ SyscallDesc("epoll_create", unimplementedFunc),
-    /* 249 */ SyscallDesc("epoll_ctl", unimplementedFunc),
-    /* 250 */ SyscallDesc("epoll_wait", unimplementedFunc),
-    /* 251 */ SyscallDesc("remap_file_pages", unimplementedFunc),
-    /* 252 */ SyscallDesc("set_tid_address", unimplementedFunc),
-    /* 253 */ SyscallDesc("restart_syscall", unimplementedFunc),
-    /* 254 */ SyscallDesc("fadvise64", unimplementedFunc),
-    /* 255 */ SyscallDesc("statfs64", unimplementedFunc),
-    /* 256 */ SyscallDesc("fstafs64", unimplementedFunc),
-    /* 257 */ SyscallDesc("timer_create", sys_getsysinfoFunc),
-    /* 258 */ SyscallDesc("timer_settime", sys_setsysinfoFunc),
-    /* 259 */ SyscallDesc("timer_gettime", unimplementedFunc),
-    /* 260 */ SyscallDesc("timer_getoverrun", unimplementedFunc),
-    /* 261 */ SyscallDesc("timer_delete", unimplementedFunc),
-    /* 262 */ SyscallDesc("clock_settime", unimplementedFunc),
-    /* 263 */ SyscallDesc("clock_gettime", unimplementedFunc),
-    /* 264 */ SyscallDesc("clock_getres", unimplementedFunc),
-    /* 265 */ SyscallDesc("clock_nanosleep", unimplementedFunc),
-    /* 266 */ SyscallDesc("tgkill", unimplementedFunc),
-    /* 267 */ SyscallDesc("utimes", unimplementedFunc),
-    /* 268 */ SyscallDesc("mbind", unimplementedFunc),
-    /* 269 */ SyscallDesc("get_mempolicy", unimplementedFunc),
-    /* 270 */ SyscallDesc("set_mempolicy", unimplementedFunc),
-    /* 271 */ SyscallDesc("mq_open", unimplementedFunc),
-    /* 272 */ SyscallDesc("mq_unlink", unimplementedFunc),
-    /* 273 */ SyscallDesc("mq_timedsend", unimplementedFunc),
-    /* 274 */ SyscallDesc("mq_timedreceive", unimplementedFunc),
-    /* 275 */ SyscallDesc("mq_notify", unimplementedFunc),
-    /* 276 */ SyscallDesc("mq_getsetattr", unimplementedFunc),
-    /* 277 */ SyscallDesc("vserver", unimplementedFunc),
-    /* 278 */ SyscallDesc("waitid", unimplementedFunc),
-    /* 279 */ SyscallDesc("unknown #279", unimplementedFunc),
-    /* 280 */ SyscallDesc("add_key", unimplementedFunc),
-    /* 281 */ SyscallDesc("request_key", unimplementedFunc),
-    /* 282 */ SyscallDesc("keyctl", unimplementedFunc),
-};
-
-MipsLinuxProcess::MipsLinuxProcess(const std::string &name,
-                                     ObjectFile *objFile,
-                                     System *system,
-                                     int stdin_fd,
-                                     int stdout_fd,
-                                     int stderr_fd,
-                                     std::vector<std::string> &argv,
-                                     std::vector<std::string> &envp)
-    : MipsLiveProcess(name, objFile, system, stdin_fd, stdout_fd, stderr_fd,
-                      argv, envp),
-     Num_Syscall_Descs(sizeof(syscallDescs) / sizeof(SyscallDesc))
-{
-    //init_regs->intRegFile[0] = 0;
-}
-
-SyscallDesc*
-MipsLinuxProcess::getDesc(int callnum)
-{
-    //MIPS32 syscalls are in the range of 4000 - 4999
-    int m5_sys_idx = callnum - 4000;
-
-    if (m5_sys_idx < 0 || m5_sys_idx > Num_Syscall_Descs)
-        return NULL;
-
-    return &syscallDescs[m5_sys_idx];
-}
diff --git a/arch/mips/linux_process.hh b/arch/mips/linux_process.hh
deleted file mode 100644 (file)
index 68da322..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2003-2004 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __MIPS_LINUX_PROCESS_HH__
-#define __MIPS_LINUX_PROCESS_HH__
-
-#include "arch/mips/process.hh"
-
-
-/// A process with emulated Mips/Linux syscalls.
-class MipsLinuxProcess : public MipsLiveProcess
-{
-  public:
-    /// Constructor.
-    MipsLinuxProcess(const std::string &name,
-                      ObjectFile *objFile,
-                      System *system,
-                      int stdin_fd, int stdout_fd, int stderr_fd,
-                      std::vector<std::string> &argv,
-                      std::vector<std::string> &envp);
-
-    virtual SyscallDesc* getDesc(int callnum);
-
-    /// The target system's hostname.
-    static const char *hostname;
-
-     /// Array of syscall descriptors, indexed by call number.
-    static SyscallDesc syscallDescs[];
-
-    const int Num_Syscall_Descs;
-};
-
-
-#endif // __MIPS_LINUX_PROCESS_HH__
diff --git a/arch/mips/mips_linux.cc b/arch/mips/mips_linux.cc
deleted file mode 100644 (file)
index 7a9e664..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2003-2005 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "arch/mips/mips_linux.hh"
-
-// open(2) flags translation table
-OpenFlagTransTable MipsLinux::openFlagTable[] = {
-#ifdef _MSC_VER
-  { MipsLinux::TGT_O_RDONLY,   _O_RDONLY },
-  { MipsLinux::TGT_O_WRONLY,   _O_WRONLY },
-  { MipsLinux::TGT_O_RDWR,     _O_RDWR },
-  { MipsLinux::TGT_O_APPEND,   _O_APPEND },
-  { MipsLinux::TGT_O_CREAT,    _O_CREAT },
-  { MipsLinux::TGT_O_TRUNC,    _O_TRUNC },
-  { MipsLinux::TGT_O_EXCL,     _O_EXCL },
-#ifdef _O_NONBLOCK
-  { MipsLinux::TGT_O_NONBLOCK, _O_NONBLOCK },
-#endif
-#ifdef _O_NOCTTY
-  { MipsLinux::TGT_O_NOCTTY,   _O_NOCTTY },
-#endif
-#ifdef _O_SYNC
-  { MipsLinux::TGT_O_SYNC,     _O_SYNC },
-#endif
-#else /* !_MSC_VER */
-  { MipsLinux::TGT_O_RDONLY,   O_RDONLY },
-  { MipsLinux::TGT_O_WRONLY,   O_WRONLY },
-  { MipsLinux::TGT_O_RDWR,     O_RDWR },
-  { MipsLinux::TGT_O_APPEND,   O_APPEND },
-  { MipsLinux::TGT_O_CREAT,    O_CREAT },
-  { MipsLinux::TGT_O_TRUNC,    O_TRUNC },
-  { MipsLinux::TGT_O_EXCL,     O_EXCL },
-  { MipsLinux::TGT_O_NONBLOCK, O_NONBLOCK },
-  { MipsLinux::TGT_O_NOCTTY,   O_NOCTTY },
-#ifdef O_SYNC
-  { MipsLinux::TGT_O_SYNC,     O_SYNC },
-#endif
-#endif /* _MSC_VER */
-};
-
-const int MipsLinux::NUM_OPEN_FLAGS =
-        (sizeof(MipsLinux::openFlagTable)/sizeof(MipsLinux::openFlagTable[0]));
-
-
-
diff --git a/arch/mips/mips_linux.hh b/arch/mips/mips_linux.hh
deleted file mode 100644 (file)
index fd08e8c..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 2003-2005 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __MIPS_MIPS_LINUX_HH
-#define __MIPS_MIPS_LINUX_HH
-
-#include "kern/linux/linux.hh"
-
-class MipsLinux : public Linux
-{
-  public:
-
-    /// This table maps the target open() flags to the corresponding
-    /// host open() flags.
-    static OpenFlagTransTable openFlagTable[];
-
-    /// Number of entries in openFlagTable[].
-    static const int NUM_OPEN_FLAGS;
-
-    //@{
-    /// open(2) flag values.
-    static const int TGT_O_RDONLY      = 0x00000000;   //!< O_RDONLY
-    static const int TGT_O_WRONLY      = 0x00000001;   //!< O_WRONLY
-    static const int TGT_O_RDWR                = 0x00000002;   //!< O_RDWR
-    static const int TGT_O_NONBLOCK     = 0x00000080;  //!< O_NONBLOCK
-    static const int TGT_O_APPEND      = 0x00000008;   //!< O_APPEND
-    static const int TGT_O_CREAT       = 0x00000100;   //!< O_CREAT
-    static const int TGT_O_TRUNC       = 0x00000200;   //!< O_TRUNC
-    static const int TGT_O_EXCL                = 0x00000400;   //!< O_EXCL
-    static const int TGT_O_NOCTTY      = 0x00000800;   //!< O_NOCTTY
-    static const int TGT_O_SYNC                = 0x00000010;   //!< O_SYNC
-    static const int TGT_O_DRD         = 0x00010000;   //!< O_DRD
-    static const int TGT_O_DIRECTIO     = 0x00020000;  //!< O_DIRECTIO
-    static const int TGT_O_CACHE       = 0x00002000;   //!< O_CACHE
-    static const int TGT_O_DSYNC       = 0x00008000;   //!< O_DSYNC
-    static const int TGT_O_RSYNC       = 0x00040000;   //!< O_RSYNC
-    //@}
-
-    /// For mmap().
-    static const unsigned TGT_MAP_ANONYMOUS = 0x800;
-
-    //@{
-    /// For getsysinfo().
-    static const unsigned GSI_PLATFORM_NAME = 103;  //!< platform name as string
-    static const unsigned GSI_CPU_INFO = 59;   //!< CPU information
-    static const unsigned GSI_PROC_TYPE = 60;  //!< get proc_type
-    static const unsigned GSI_MAX_CPU = 30;         //!< max # cpu's on this machine
-    static const unsigned GSI_CPUS_IN_BOX = 55;        //!< number of CPUs in system
-    static const unsigned GSI_PHYSMEM = 19;            //!< Physical memory in KB
-    static const unsigned GSI_CLK_TCK = 42;            //!< clock freq in Hz
-    //@}
-
-    //@{
-    /// For getrusage().
-    static const int TGT_RUSAGE_SELF = 0;
-    static const int TGT_RUSAGE_CHILDREN = -1;
-    static const int TGT_RUSAGE_BOTH = -2;
-    //@}
-
-    //@{
-    /// For setsysinfo().
-    static const unsigned SSI_IEEE_FP_CONTROL = 14; //!< ieee_set_fp_control()
-    //@}
-
-    //@{
-    /// ioctl() command codes.
-    static const unsigned TIOCGETP   = 0x7408;
-    static const unsigned TIOCSETP   = 0x7409;
-    static const unsigned TIOCSETN   = 0x740a;
-    static const unsigned TIOCSETC   = 0x7411;
-    static const unsigned TIOCGETC   = 0x7412;
-    static const unsigned FIONREAD   = 0x467f;
-    static const unsigned TIOCISATTY = 0x5480;
-    static const unsigned TIOCGETS   = 0x7413;
-    static const unsigned TIOCGETA   = 0x7417;
-    //@}
-
-    /// For table().
-    static const int TBL_SYSINFO = 12;
-
-    /// Resource enumeration for getrlimit().
-    enum rlimit_resources {
-        TGT_RLIMIT_CPU = 0,
-        TGT_RLIMIT_FSIZE = 1,
-        TGT_RLIMIT_DATA = 2,
-        TGT_RLIMIT_STACK = 3,
-        TGT_RLIMIT_CORE = 4,
-        TGT_RLIMIT_NOFILE = 5,
-        TGT_RLIMIT_AS = 6,
-        TGT_RLIMIT_RSS = 7,
-        TGT_RLIMIT_VMEM = 7,
-        TGT_RLIMIT_NPROC = 8,
-        TGT_RLIMIT_MEMLOCK = 9,
-        TGT_RLIMIT_LOCKS = 10
-    };
-
-};
-
-#endif
diff --git a/arch/mips/misc_regfile.hh b/arch/mips/misc_regfile.hh
new file mode 100644 (file)
index 0000000..9f054e5
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __ARCH_MIPS_MISC_REGFILE_HH__
+#define __ARCH_MIPS_MISC_REGFILE_HH__
+
+#include "arch/mips/types.hh"
+#include "arch/mips/constants.hh"
+#include "sim/faults.hh"
+
+class Checkpoint;
+class ExecContext;
+class Regfile;
+
+namespace MipsISA
+{
+    class MiscRegFile {
+
+      protected:
+        uint64_t       fpcr;           // floating point condition codes
+        uint64_t       uniq;           // process-unique register
+        bool           lock_flag;      // lock flag for LL/SC
+        Addr           lock_addr;      // lock address for LL/SC
+
+        MiscReg miscRegFile[NumMiscRegs];
+
+      public:
+        //These functions should be removed once the simplescalar cpu model
+        //has been replaced.
+        int getInstAsid();
+        int getDataAsid();
+
+        void copyMiscRegs(ExecContext *xc);
+
+        MiscReg readReg(int misc_reg)
+        {
+            return miscRegFile[misc_reg];
+        }
+
+        MiscReg readRegWithEffect(int misc_reg, Fault &fault, ExecContext *xc)
+        {
+            return miscRegFile[misc_reg];
+        }
+
+        Fault setReg(int misc_reg, const MiscReg &val)
+        {
+            miscRegFile[misc_reg] = val; return NoFault;
+        }
+
+        Fault setRegWithEffect(int misc_reg, const MiscReg &val,
+                               ExecContext *xc)
+        {
+            miscRegFile[misc_reg] = val; return NoFault;
+        }
+
+#if FULL_SYSTEM
+        void clearIprs() { }
+
+      protected:
+        InternalProcReg ipr[NumInternalProcRegs]; // Internal processor regs
+
+      private:
+        MiscReg readIpr(int idx, Fault &fault, ExecContext *xc) { }
+
+        Fault setIpr(int idx, uint64_t val, ExecContext *xc) { }
+#endif
+        friend class RegFile;
+    };
+} // namespace MipsISA
+
+#endif
index 3f24fc68fdcf1c6694a51411d575ad4de4ec8288..7831551be4a0f4d450d011881b54dd9ad1eeff3a 100644 (file)
@@ -28,7 +28,7 @@
 
 #include "arch/mips/isa_traits.hh"
 #include "arch/mips/process.hh"
-#include "arch/mips/linux_process.hh"
+#include "arch/mips/linux/process.hh"
 #include "base/loader/object_file.hh"
 #include "base/misc.hh"
 #include "cpu/exec_context.hh"
diff --git a/arch/mips/regfile.hh b/arch/mips/regfile.hh
new file mode 100644 (file)
index 0000000..3dcf8ef
--- /dev/null
@@ -0,0 +1,247 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __ARCH_MIPS_REGFILE_HH__
+#define __ARCH_MIPS_REGFILE_HH__
+
+#include "arch/mips/types.hh"
+#include "arch/mips/constants.hh"
+#include "arch/mips/int_regfile.hh"
+#include "arch/mips/float_regfile.hh"
+#include "arch/mips/misc_regfile.hh"
+#include "sim/faults.hh"
+
+class Checkpoint;
+class ExecContext;
+
+namespace MipsISA
+{
+    class RegFile {
+      protected:
+        IntRegFile intRegFile;         // (signed) integer register file
+        FloatRegFile floatRegFile;     // floating point register file
+        MiscRegFile miscRegFile;       // control register file
+
+      public:
+
+        void clear()
+        {
+            bzero(&intRegFile, sizeof(intRegFile));
+            bzero(&floatRegFile, sizeof(floatRegFile));
+            bzero(&miscRegFile, sizeof(miscRegFile));
+        }
+
+        MiscReg readMiscReg(int miscReg)
+        {
+            if (miscReg < CtrlReg_DepTag)
+                return miscRegFile.readReg(miscReg);
+            else {
+                switch (miscReg)
+                {
+                  case Hi:
+                    return intRegFile.readHi();
+
+                  case Lo:
+                    return intRegFile.readLo();
+
+                  case FIR:
+                    return floatRegFile.readFIR();
+
+                  case FCSR:
+                    return floatRegFile.readFCSR();
+
+                  case FPCR:
+                    return floatRegFile.readFPCR();
+
+                  default:
+                    panic("Invalid Misc. Reg. Access\n");
+                    return 0;
+                }
+            }
+        }
+
+        MiscReg readMiscRegWithEffect(int miscReg,
+                Fault &fault, ExecContext *xc)
+        {
+            fault = NoFault;
+            return miscRegFile.readRegWithEffect(miscReg, fault, xc);
+        }
+
+        Fault setMiscReg(int miscReg, const MiscReg &val)
+        {
+            if (miscReg < CtrlReg_DepTag)
+                return miscRegFile.setReg(miscReg, val);
+            else {
+                switch (miscReg)
+                {
+                  case Hi:
+                    return intRegFile.setHi(val);
+
+                  case Lo:
+                    return intRegFile.setLo(val);
+
+                  case FIR:
+                    return floatRegFile.setFIR(val);
+
+                  case FCSR:
+                    return floatRegFile.setFCSR(val);
+
+                  case FPCR:
+                    return floatRegFile.setFPCR(val);
+
+                  default:
+                    panic("Invalid Misc. Reg. Access\n");
+                    return 0;
+                }
+            }
+        }
+
+        Fault setMiscRegWithEffect(int miscReg, const MiscReg &val,
+                ExecContext * xc)
+        {
+            return miscRegFile.setRegWithEffect(miscReg, val, xc);
+        }
+
+        FloatReg readFloatReg(int floatReg)
+        {
+            return floatRegFile.readReg(floatReg,SingleWidth);
+        }
+
+        FloatReg readFloatReg(int floatReg, int width)
+        {
+            return floatRegFile.readReg(floatReg,width);
+        }
+
+        FloatRegBits readFloatRegBits(int floatReg)
+        {
+            return floatRegFile.readRegBits(floatReg,SingleWidth);
+        }
+
+        FloatRegBits readFloatRegBits(int floatReg, int width)
+        {
+            return floatRegFile.readRegBits(floatReg,width);
+        }
+
+        Fault setFloatReg(int floatReg, const FloatReg &val)
+        {
+            return floatRegFile.setReg(floatReg, val, SingleWidth);
+        }
+
+        Fault setFloatReg(int floatReg, const FloatReg &val, int width)
+        {
+            return floatRegFile.setReg(floatReg, val, width);
+        }
+
+        Fault setFloatRegBits(int floatReg, const FloatRegBits &val)
+        {
+            return floatRegFile.setRegBits(floatReg, val, SingleWidth);
+        }
+
+        Fault setFloatRegBits(int floatReg, const FloatRegBits &val, int width)
+        {
+            return floatRegFile.setRegBits(floatReg, val, width);
+        }
+
+        IntReg readIntReg(int intReg)
+        {
+            return intRegFile.readReg(intReg);
+        }
+
+        Fault setIntReg(int intReg, const IntReg &val)
+        {
+            return intRegFile.setReg(intReg, val);
+        }
+      protected:
+
+        Addr pc;                       // program counter
+        Addr npc;                      // next-cycle program counter
+        Addr nnpc;                     // next-next-cycle program counter
+                                        // used to implement branch delay slot
+                                        // not real register
+      public:
+        Addr readPC()
+        {
+            return pc;
+        }
+
+        void setPC(Addr val)
+        {
+            pc = val;
+        }
+
+        Addr readNextPC()
+        {
+            return npc;
+        }
+
+        void setNextPC(Addr val)
+        {
+            npc = val;
+        }
+
+        Addr readNextNPC()
+        {
+            return nnpc;
+        }
+
+        void setNextNPC(Addr val)
+        {
+            nnpc = val;
+        }
+
+
+#if FULL_SYSTEM
+        IntReg palregs[NumIntRegs];    // PAL shadow registers
+        InternalProcReg ipr[NumInternalProcRegs]; // internal processor regs
+        int intrflag;                  // interrupt flag
+        bool pal_shadow;               // using pal_shadow registers
+        inline int instAsid() { return MIPS34K::ITB_ASN_ASN(ipr[IPR_ITB_ASN]); }
+        inline int dataAsid() { return MIPS34K::DTB_ASN_ASN(ipr[IPR_DTB_ASN]); }
+#endif // FULL_SYSTEM
+
+        void serialize(std::ostream &os);
+        void unserialize(Checkpoint *cp, const std::string &section);
+
+        typedef int ContextParam;
+        typedef int ContextVal;
+
+        void changeContext(ContextParam param, ContextVal val)
+        {
+        }
+    };
+
+    void copyRegs(ExecContext *src, ExecContext *dest);
+
+    void copyMiscRegs(ExecContext *src, ExecContext *dest);
+
+#if FULL_SYSTEM
+    void copyIprs(ExecContext *src, ExecContext *dest);
+#endif
+} // namespace MipsISA
+
+#endif
diff --git a/arch/mips/types.hh b/arch/mips/types.hh
new file mode 100644 (file)
index 0000000..021ecad
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __ARCH_MIPS_TYPES_HH__
+#define __ARCH_MIPS_TYPES_HH__
+
+#include "sim/host.hh"
+
+namespace MipsISA
+{
+    typedef uint32_t MachInst;
+    typedef uint64_t ExtMachInst;
+    typedef uint8_t  RegIndex;
+
+    typedef uint32_t IntReg;
+
+    // floating point register file entry type
+    typedef double FloatReg;
+    typedef uint32_t FloatReg32;
+    typedef uint64_t FloatReg64;
+    typedef uint64_t FloatRegBits;
+
+    // cop-0/cop-1 system control register
+    typedef uint64_t MiscReg;
+    typedef uint64_t InternalProcReg;
+
+    typedef union {
+        IntReg   intreg;
+        FloatReg fpreg;
+        MiscReg  ctrlreg;
+    } AnyReg;
+
+    //used in FP convert & round function
+    enum ConvertType{
+        SINGLE_TO_DOUBLE,
+        SINGLE_TO_WORD,
+        SINGLE_TO_LONG,
+
+        DOUBLE_TO_SINGLE,
+        DOUBLE_TO_WORD,
+        DOUBLE_TO_LONG,
+
+        LONG_TO_SINGLE,
+        LONG_TO_DOUBLE,
+        LONG_TO_WORD,
+
+        WORD_TO_SINGLE,
+        WORD_TO_DOUBLE,
+        WORD_TO_LONG,
+
+        PLOWER_TO_SINGLE,
+        PUPPER_TO_SINGLE
+    };
+
+    //used in FP convert & round function
+    enum RoundMode{
+        RND_ZERO,
+        RND_DOWN,
+        RND_UP,
+        RND_NEAREST
+   };
+
+} // namespace MipsISA
+
+#endif
index d4ad6cbd8440023da3f4c9313db9c5cea2d37408..b213a9f24934fd33f15a6ed9d1eac633e6c7562c 100644 (file)
 #ifndef __ARCH_MIPS_UTILITY_HH__
 #define __ARCH_MIPS_UTILITY_HH__
 
-//Placeholder file for now
+#include "arch/mips/types.hh"
+#include "arch/mips/constants.hh"
+#include "base/misc.hh"
+#include "sim/host.hh"
+
+namespace MipsISA {
+
+};
 
 #endif