mem-cache: Add multiple eviction stats
[gem5.git] / src / arch / arm / stacktrace.cc
index 0033876a019bf69d8752911c65e9121ca2dbbd10..8fadb81c347a116b7325936e197135820bf986ae 100644 (file)
 namespace ArmISA
 {
 
-ProcessInfo::ProcessInfo(ThreadContext *_tc)
-    : tc(_tc)
+static int32_t
+readSymbol(ThreadContext *tc, const std::string name)
 {
-    Addr addr = 0;
+    PortProxy &vp = tc->getVirtProxy();
+    SymbolTable *symtab = tc->getSystemPtr()->kernelSymtab;
 
-    FSTranslatingPortProxy &vp = tc->getVirtProxy();
-
-    if (!tc->getSystemPtr()->kernelSymtab->findAddress(
-                "thread_info_size", addr)) {
-        panic("thread info not compiled into kernel\n");
-    }
-    thread_info_size = vp.readGtoH<int32_t>(addr);
-
-    if (!tc->getSystemPtr()->kernelSymtab->findAddress(
-                "task_struct_size", addr)) {
-        panic("thread info not compiled into kernel\n");
-    }
-    task_struct_size = vp.readGtoH<int32_t>(addr);
-
-    if (!tc->getSystemPtr()->kernelSymtab->findAddress(
-                "thread_info_task", addr)) {
+    Addr addr;
+    if (!symtab->findAddress(name, addr))
         panic("thread info not compiled into kernel\n");
-    }
-    task_off = vp.readGtoH<int32_t>(addr);
 
-    if (!tc->getSystemPtr()->kernelSymtab->findAddress(
-                "task_struct_pid", addr)) {
-        panic("thread info not compiled into kernel\n");
-    }
-    pid_off = vp.readGtoH<int32_t>(addr);
+    return vp.read<int32_t>(addr, GuestByteOrder);
+}
 
-    if (!tc->getSystemPtr()->kernelSymtab->findAddress(
-                "task_struct_comm", addr)) {
-        panic("thread info not compiled into kernel\n");
-    }
-    name_off = vp.readGtoH<int32_t>(addr);
+ProcessInfo::ProcessInfo(ThreadContext *_tc) : tc(_tc)
+{
+    thread_info_size = readSymbol(tc, "thread_info_size");
+    task_struct_size = readSymbol(tc, "task_struct_size");
+    task_off = readSymbol(tc, "thread_info_task");
+    pid_off = readSymbol(tc, "task_struct_pid");
+    name_off = readSymbol(tc, "task_struct_comm");
 }
 
 Addr
@@ -91,8 +75,8 @@ ProcessInfo::task(Addr ksp) const
 
     Addr tsk;
 
-    FSTranslatingPortProxy &vp = tc->getVirtProxy();
-    tsk = vp.readGtoH<Addr>(base + task_off);
+    PortProxy &vp = tc->getVirtProxy();
+    tsk = vp.read<Addr>(base + task_off, GuestByteOrder);
 
     return tsk;
 }
@@ -106,8 +90,8 @@ ProcessInfo::pid(Addr ksp) const
 
     uint16_t pd;
 
-    FSTranslatingPortProxy &vp = tc->getVirtProxy();
-    pd = vp.readGtoH<uint16_t>(task + pid_off);
+    PortProxy &vp = tc->getVirtProxy();
+    pd = vp.read<uint16_t>(task + pid_off, GuestByteOrder);
 
     return pd;
 }
@@ -120,7 +104,7 @@ ProcessInfo::name(Addr ksp) const
         return "unknown";
 
     char comm[256];
-    CopyStringOut(tc, comm, task + name_off, sizeof(comm));
+    tc->getVirtProxy().readString(comm, task + name_off, sizeof(comm));
     if (!comm[0])
         return "startup";