Statetrace: Get rid of explicit register name handling.
authorGabe Black <gblack@eecs.umich.edu>
Thu, 3 Mar 2011 06:53:10 +0000 (22:53 -0800)
committerGabe Black <gblack@eecs.umich.edu>
Thu, 3 Mar 2011 06:53:10 +0000 (22:53 -0800)
util/statetrace/arch/tracechild_amd64.cc
util/statetrace/arch/tracechild_amd64.hh
util/statetrace/arch/tracechild_arm.cc
util/statetrace/arch/tracechild_arm.hh
util/statetrace/arch/tracechild_i386.cc
util/statetrace/arch/tracechild_i386.hh
util/statetrace/arch/tracechild_sparc.cc
util/statetrace/arch/tracechild_sparc.hh
util/statetrace/regstate.hh
util/statetrace/statetrace.cc
util/statetrace/tracechild.hh

index 47bd6aa17070acee7b63507c0d747561bc0cc843..780bb75a50a6f1804dee5a515e67aa668e3010d9 100644 (file)
 
 using namespace std;
 
-const char * AMD64TraceChild::regNames[numregs] = {
-    //GPRs
-    "rax", "rbx", "rcx", "rdx",
-    //Index registers
-    "rsi", "rdi",
-    //Base pointer and stack pointer
-    "rbp", "rsp",
-    //New 64 bit mode registers
-    "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
-    //Segmentation registers
-    "cs", "ds", "es", "fs", "gs", "ss", "fs_base", "gs_base",
-    //PC
-    "rip",
-    //Flags
-    "eflags",
-    //MMX
-    "mmx0_0", "mmx0_1", "mmx1_0", "mmx1_1",
-    "mmx2_0", "mmx2_1", "mmx3_0", "mmx3_1",
-    "mmx4_0", "mmx4_1", "mmx5_0", "mmx5_1",
-    "mmx6_0", "mmx6_1", "mmx7_0", "mmx7_1",
-    //XMM
-    "xmm0_0",  "xmm0_1",  "xmm0_2",  "xmm0_3",
-    "xmm1_0",  "xmm1_1",  "xmm1_2",  "xmm1_3",
-    "xmm2_0",  "xmm2_1",  "xmm2_2",  "xmm2_3",
-    "xmm3_0",  "xmm3_1",  "xmm3_2",  "xmm3_3",
-    "xmm4_0",  "xmm4_1",  "xmm4_2",  "xmm4_3",
-    "xmm5_0",  "xmm5_1",  "xmm5_2",  "xmm5_3",
-    "xmm6_0",  "xmm6_1",  "xmm6_2",  "xmm6_3",
-    "xmm7_0",  "xmm7_1",  "xmm7_2",  "xmm7_3",
-    "xmm8_0",  "xmm8_1",  "xmm8_2",  "xmm8_3",
-    "xmm9_0",  "xmm9_1",  "xmm9_2",  "xmm9_3",
-    "xmm10_0", "xmm10_1", "xmm10_2", "xmm10_3",
-    "xmm11_0", "xmm11_1", "xmm11_2", "xmm11_3",
-    "xmm12_0", "xmm12_1", "xmm12_2", "xmm12_3",
-    "xmm13_0", "xmm13_1", "xmm13_2", "xmm13_3",
-    "xmm14_0", "xmm14_1", "xmm14_2", "xmm14_3",
-    "xmm15_0", "xmm15_1", "xmm15_2", "xmm15_3"};
-
 bool
 AMD64TraceChild::sendState(int socket)
 {
@@ -278,13 +240,6 @@ AMD64TraceChild::getOldRegVal(int num)
     return getRegs(oldregs, oldfpregs, num);
 }
 
-char *
-AMD64TraceChild::printReg(int num)
-{
-    sprintf(printBuffer, "0x%016lX", getRegVal(num));
-    return printBuffer;
-}
-
 ostream &
 AMD64TraceChild::outputStartState(ostream & os)
 {
index 6ed90d292a7aa34b989b3af4883ee0f2c918ff4d..256be57669e172ae39067321b2156a4c465211ba 100644 (file)
@@ -87,8 +87,6 @@ class AMD64TraceChild : public TraceChild
         numregs
     };
   private:
-    char printBuffer [256];
-    static const char * regNames[numregs];
     int64_t getRegs(user_regs_struct & myregs,
             user_fpregs_struct &myfpregs,int num);
     user_regs_struct regs;
@@ -108,34 +106,12 @@ class AMD64TraceChild : public TraceChild
 
     bool sendState(int socket);
 
-    int
-    getNumRegs()
-    {
-        return numregs;
-    }
-
-    bool
-    diffSinceUpdate(int num)
-    {
-        assert(num < numregs && num >= 0);
-        return regDiffSinceUpdate[num];
-    }
-
-    std::string
-    getRegName(int num)
-    {
-        assert(num < numregs && num >= 0);
-        return regNames[num];
-    }
-
     int64_t getRegVal(int num);
     int64_t getOldRegVal(int num);
     uint64_t getPC() {return getRegVal(RIP);}
     uint64_t getSP() {return getRegVal(RSP);}
     std::ostream & outputStartState(std::ostream & output);
 
-    char * printReg(int num);
-
     bool step();
 };
 
index 2d38a9d00c934ae5fc6f50bfaaf82904d824c4b2..bd4f4bd36bea4877300b28f156c1c337249338d6 100644 (file)
 
 using namespace std;
 
-const char* ARMTraceChild::regNames[numregs] = {
-    "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
-    "r8", "r9", "r10", "fp", "r12", "sp", "lr", "pc",
-    "cpsr" };
-
-
 ARMTraceChild::ARMTraceChild()
 {
     foundMvn = false;
@@ -132,13 +126,6 @@ ARMTraceChild::getOldRegVal(int num)
     return getRegs(oldregs,  num);
 }
 
-char *
-ARMTraceChild::printReg(int num)
-{
-    sprintf(printBuffer, "0x%08X", (uint32_t)getRegVal(num));
-    return printBuffer;
-}
-
 ostream &
 ARMTraceChild::outputStartState(ostream & os)
 {
index cd998ddaa7ebeec8979b120423b73e231f0e13eb..0379885f16c80a85d629a65973082769ee5b2c2d 100644 (file)
@@ -69,8 +69,6 @@ class ARMTraceChild : public TraceChild
         numregs
     };
   private:
-    char printBuffer[256];
-    static const char *regNames[numregs];
     uint32_t getRegs(user_regs& myregs, int num);
     user_regs regs;
     user_regs oldregs;
@@ -84,26 +82,6 @@ class ARMTraceChild : public TraceChild
     ARMTraceChild();
     bool sendState(int socket);
 
-    int
-    getNumRegs()
-    {
-        return numregs;
-    }
-
-    bool
-    diffSinceUpdate(int num)
-    {
-        assert(num < numregs && num >= 0);
-        return regDiffSinceUpdate[num];
-    }
-
-    std::string
-    getRegName(int num)
-    {
-        assert(num < numregs && num >= 0);
-        return regNames[num];
-    }
-
     int64_t getRegVal(int num);
     int64_t getOldRegVal(int num);
 
@@ -121,8 +99,6 @@ class ARMTraceChild : public TraceChild
         return getRegVal(SP);
     }
 
-    char * printReg(int num);
-
     std::ostream & outputStartState(std::ostream & os);
 
 };
index 81264483ab19205e3a652a3e24c8116217c8b7c3..2cdeb29fa06f5e56c6325fcc9b607173b5e51a43 100644 (file)
 
 using namespace std;
 
-char * I386TraceChild::regNames[numregs] = {
-    //GPRs
-    "eax", "ebx", "ecx", "edx",
-    //Index registers
-    "esi", "edi",
-    //Base pointer and stack pointer
-    "ebp", "esp",
-    //Segmentation registers
-    "cs", "ds", "es", "fs", "gs", "ss",
-    //PC
-    "eip"};
-
 int64_t
 I386TraceChild::getRegs(user_regs_struct & myregs, int num)
 {
@@ -109,13 +97,6 @@ I386TraceChild::getOldRegVal(int num)
     return getRegs(oldregs, num);
 }
 
-char *
-I386TraceChild::printReg(int num)
-{
-    sprintf(printBuffer, "0x%08X", getRegVal(num));
-    return printBuffer;
-}
-
 TraceChild *
 genTraceChild()
 {
index ccdd87058c5c40688a0cf16e6d4ce4fb7c508044..7f9f7499ef9f49eeb0a21c9ac718158d3e4c38cc 100644 (file)
@@ -57,8 +57,6 @@ class I386TraceChild : public TraceChild
         numregs
     };
   private:
-    char printBuffer [256];
-    static char * regNames[numregs];
     int64_t getRegs(user_regs_struct & myregs, int num);
     user_regs_struct regs;
     user_regs_struct oldregs;
@@ -71,26 +69,6 @@ class I386TraceChild : public TraceChild
 
     I386TraceChild();
 
-    int
-    getNumRegs()
-    {
-        return numregs;
-    }
-
-    bool
-    diffSinceUpdate(int num)
-    {
-        assert(num < numregs && num >= 0);
-        return regDiffSinceUpdate[num];
-    }
-
-    std::string
-    getRegName(int num)
-    {
-        assert(num < numregs && num >= 0);
-        return regNames[num];
-    }
-
     int64_t getRegVal(int num);
     int64_t getOldRegVal(int num);
     uint64_t getPC() {return getRegVal(EIP);}
@@ -102,8 +80,6 @@ class I386TraceChild : public TraceChild
                << std::endl;
         return output;
     }
-
-    char * printReg(int num);
 };
 
 #endif
index 405c36cd7340fcb06bef1fea3670258737b080a7..dba8fa53d243f18e8ee4758647cf13926a8b3ae8 100644 (file)
 
 using namespace std;
 
-string SparcTraceChild::regNames[numregs] = {
-    //Global registers
-    "g0", "g1", "g2", "g3", "g4", "g5", "g6", "g7",
-    //Output registers
-    "o0", "o1", "o2", "o3", "o4", "o5", "o6", "o7",
-    //Local registers
-    "l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7",
-    //Input registers
-    "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7",
-    //Floating point
-    "f0", "f2", "f4", "f6", "f8", "f10", "f12", "f14",
-    "f16", "f18", "f20", "f22", "f24", "f26", "f28", "f30",
-    "f32", "f34", "f36", "f38", "f40", "f42", "f44", "f46",
-    "f48", "f50", "f52", "f54", "f56", "f58", "f60", "f62",
-    //Miscelaneous
-    "fsr", "fprs", "pc", "npc", "y", "cwp", "pstate", "asi", "ccr"};
-
 bool
 SparcTraceChild::sendState(int socket)
 {
@@ -385,13 +368,6 @@ SparcTraceChild::getOldRegVal(int num)
     return getRegs(oldregs, oldfpregs, oldLocals, oldInputs, num);
 }
 
-char *
-SparcTraceChild::printReg(int num)
-{
-    sprintf(printBuffer, "0x%016llx", getRegVal(num));
-    return printBuffer;
-}
-
 ostream &
 SparcTraceChild::outputStartState(ostream & os)
 {
index f88a51b69bbbdab006ad0e90d7ca7d5cf1cfdd37..e479fce55ae1015c7e85418365ddc1f856491d81 100644 (file)
@@ -66,8 +66,6 @@ class SparcTraceChild : public TraceChild
         numregs
     };
   private:
-    char printBuffer[256];
-    static std::string regNames[numregs];
     regs theregs;
     regs oldregs;
     fpu thefpregs;
@@ -92,26 +90,6 @@ class SparcTraceChild : public TraceChild
 
     bool sendState(int socket);
 
-    int
-    getNumRegs()
-    {
-        return numregs;
-    }
-
-    bool
-    diffSinceUpdate(int num)
-    {
-        assert(num < numregs && num >= 0);
-        return regDiffSinceUpdate[num];
-    }
-
-    std::string
-    getRegName(int num)
-    {
-        assert(num < numregs && num >= 0);
-        return regNames[num];
-    }
-
     int64_t getRegVal(int num);
 
     int64_t getOldRegVal(int num);
@@ -130,8 +108,6 @@ class SparcTraceChild : public TraceChild
         return getRegVal(O6);
     }
 
-    char * printReg(int num);
-
     std::ostream & outputStartState(std::ostream & os);
 };
 
index ae23b58ca4624cb472bf5a5bbe86ea1eebd1da67..bab3485c6eb14958ab1894ee7fdf912dfbf61245 100644 (file)
@@ -39,21 +39,8 @@ class RegState
   protected:
     virtual bool update(int pid) = 0;
   public:
-    virtual int getNumRegs() = 0;
-    virtual bool diffSinceUpdate(int num) = 0;
-    virtual std::string getRegName(int num) = 0;
-    virtual int
-    getRegNum(std::string name)
-    {
-        int numregs = getNumRegs();
-        for (unsigned int x = 0; x < numregs; x++)
-            if(getRegName(x) == name)
-                return x;
-        return -1;
-    }
     virtual int64_t getRegVal(int num) = 0;
     virtual int64_t getOldRegVal(int num) = 0;
-    virtual char * printReg(int num) = 0;
 };
 
 #endif
index ff20625a1f9ca6cd1079278a32d34d09d67f3b04..ccc408fa76e39a98de3860db70fd25d17b8e74b8 100644 (file)
@@ -53,7 +53,6 @@ printUsage(const char * execName)
     cout << "options:" << endl;
     cout << "         -h          print this help" << endl;
     cout << "         --host      remote m5 host to connect to" << endl;
-    cout << "         -r          print register names" << endl;
     cout << "         -i          print initial stack state" << endl;
     cout << "         -nt         don't print an instruction trace" << endl;
 }
@@ -87,12 +86,6 @@ main(int argc, char * argv[], char * envp[])
                 return 1;
             }
             host = argv[x];
-        } else if (!strcmp(argv[x], "-r")) {
-            cout << "Legal register names:" << endl;
-            int numRegs = child->getNumRegs();
-            for (unsigned int x = 0; x < numRegs; x++)
-                cout << "\t" << child->getRegName(x) << endl;
-            return 0;
         } else if (!strcmp(argv[x], "-i")) {
             printInitial = true;
         } else if (!strcmp(argv[x], "-nt")) {
index 24771411164f56e3e60a2679a31e9f7c5310bf9b..ad7e60e06c438d37ac87b87edcf385c77357322e 100644 (file)
@@ -46,14 +46,7 @@ class TraceChild : public RegState
     virtual bool startTracing(const char * pathToFile, char * const argv[]);
     virtual bool stopTracing();
     virtual bool step();
-    virtual uint64_t getPC() = 0;
-    virtual uint64_t getSP() = 0;
     virtual std::ostream & outputStartState(std::ostream & os) = 0;
-    int
-    getPid()
-    {
-        return pid;
-    }
     bool
     isTracing()
     {