From: Anthony Gutierrez Date: Mon, 11 Jun 2012 15:07:41 +0000 (-0400) Subject: ARM: implement the ProcessInfo methods X-Git-Tag: stable_2012_06_28~4 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9764cde7f2961116ac83f020f9c1598b00587ae0;p=gem5.git ARM: implement the ProcessInfo methods --- diff --git a/src/arch/arm/stacktrace.cc b/src/arch/arm/stacktrace.cc index 99ebcd7c5..8575e1347 100644 --- a/src/arch/arm/stacktrace.cc +++ b/src/arch/arm/stacktrace.cc @@ -74,19 +74,46 @@ namespace ArmISA Addr ProcessInfo::task(Addr ksp) const { - return 0; + Addr base = ksp & ~0x1fff; + if (base == ULL(0xffffffffc0000000)) + return 0; + + Addr tsk; + + FSTranslatingPortProxy &vp = tc->getVirtProxy(); + tsk = vp.readGtoH(base + task_off); + + return tsk; } int ProcessInfo::pid(Addr ksp) const { - return -1; + Addr task = this->task(ksp); + if (!task) + return -1; + + uint16_t pd; + + FSTranslatingPortProxy &vp = tc->getVirtProxy(); + pd = vp.readGtoH(task + pid_off); + + return pd; } string ProcessInfo::name(Addr ksp) const { - return "Implement me"; + Addr task = this->task(ksp); + if (!task) + return "unknown"; + + char comm[256]; + CopyStringOut(tc, comm, task + name_off, sizeof(comm)); + if (!comm[0]) + return "startup"; + + return comm; } StackTrace::StackTrace()