add symbol opcode
authorAli Saidi <saidi@eecs.umich.edu>
Sat, 19 Nov 2005 06:25:34 +0000 (01:25 -0500)
committerAli Saidi <saidi@eecs.umich.edu>
Sat, 19 Nov 2005 06:25:34 +0000 (01:25 -0500)
--HG--
extra : convert_revision : e050d2c4fec33c41ac21b6f17b3be329b9521429

arch/alpha/isa_desc
arch/alpha/pseudo_inst.cc
arch/alpha/pseudo_inst.hh

index 34e86c3a7d140c29227563f0632e98077847eb73..c998b1a0afbb7a820035a7592327b65fc189c2c9 100644 (file)
@@ -2727,6 +2727,10 @@ decode OPCODE default Unknown::unknown() {
             0x52: m5switchcpu({{
                AlphaPseudo::switchcpu(xc->xcBase());
            }}, IsNonSpeculative);
+            0x53: m5addsymbol({{
+               AlphaPseudo::addsymbol(xc->xcBase());
+           }}, IsNonSpeculative);
+
        }
     }
 #endif
index 123ce44c6264023033cbeca678dd6b56c5ed2ecd..e105b3cc87ffd09666aad5b4ae18ee404ee05ea5 100644 (file)
@@ -46,6 +46,7 @@
 #include "sim/stats.hh"
 #include "sim/system.hh"
 #include "sim/debug.hh"
+#include "targetarch/vptr.hh"
 
 using namespace std;
 
@@ -132,6 +133,19 @@ namespace AlphaPseudo
         SetupEvent(Dump, when, repeat);
     }
 
+    void
+    addsymbol(ExecContext *xc)
+    {
+        Addr addr = xc->regs.intRegFile[16];
+        char symb[100];
+        CopyString(xc, symb, xc->regs.intRegFile[17], 100);
+        std::string symbol(symb);
+
+        DPRINTF(Loader, "Loaded symbol: %s @ %#llx\n", symbol, addr);
+
+        xc->system->kernelSymtab->insert(addr,symbol);
+    }
+
     void
     dumpresetstats(ExecContext *xc)
     {
index 22101b7e2c4f12855de2f9a5af95d87c3dca1cbc..0e7462a5641c658b7f4a33573ded83f5c24ff053 100644 (file)
@@ -50,4 +50,5 @@ namespace AlphaPseudo
     void readfile(ExecContext *xc);
     void debugbreak(ExecContext *xc);
     void switchcpu(ExecContext *xc);
+    void addsymbol(ExecContext *xc);
 }