summaryrefslogtreecommitdiff
path: root/src/sim
diff options
context:
space:
mode:
Diffstat (limited to 'src/sim')
-rw-r--r--src/sim/faults.cc2
-rw-r--r--src/sim/main.cc6
-rw-r--r--src/sim/pseudo_inst.cc22
-rw-r--r--src/sim/syscall_emul.hh8
4 files changed, 31 insertions, 7 deletions
diff --git a/src/sim/faults.cc b/src/sim/faults.cc
index 650b728f7..cea35482a 100644
--- a/src/sim/faults.cc
+++ b/src/sim/faults.cc
@@ -37,7 +37,7 @@
#if !FULL_SYSTEM
void FaultBase::invoke(ThreadContext * tc)
{
- fatal("fault (%s) detected @ PC 0x%08p", name(), tc->readPC());
+ fatal("fault (%s) detected @ PC %p", name(), tc->readPC());
}
#else
void FaultBase::invoke(ThreadContext * tc)
diff --git a/src/sim/main.cc b/src/sim/main.cc
index 8bb0d7aaa..133141e57 100644
--- a/src/sim/main.cc
+++ b/src/sim/main.cc
@@ -55,6 +55,7 @@
#include "base/statistics.hh"
#include "base/str.hh"
#include "base/time.hh"
+#include "config/pythonhome.hh"
#include "cpu/base.hh"
#include "cpu/smt.hh"
#include "mem/mem_object.hh"
@@ -145,6 +146,11 @@ main(int argc, char **argv)
if (setenv("PYTHONPATH", pythonpath.c_str(), true) == -1)
fatal("setenv: %s\n", strerror(errno));
+ char *python_home = getenv("PYTHONHOME");
+ if (!python_home)
+ python_home = PYTHONHOME;
+ Py_SetPythonHome(python_home);
+
// initialize embedded Python interpreter
Py_Initialize();
PySys_SetArgv(argc, argv);
diff --git a/src/sim/pseudo_inst.cc b/src/sim/pseudo_inst.cc
index addf897c6..d913e159b 100644
--- a/src/sim/pseudo_inst.cc
+++ b/src/sim/pseudo_inst.cc
@@ -74,6 +74,8 @@ namespace AlphaPseudo
if (!doQuiesce)
return;
+ DPRINTF(Quiesce, "%s: quiesce()\n", tc->getCpuPtr()->name());
+
tc->suspend();
if (tc->getKernelStats())
tc->getKernelStats()->quiesce();
@@ -87,10 +89,15 @@ namespace AlphaPseudo
EndQuiesceEvent *quiesceEvent = tc->getQuiesceEvent();
+ Tick resume = curTick + Clock::Int::ns * ns;
+
if (quiesceEvent->scheduled())
- quiesceEvent->reschedule(curTick + Clock::Int::ns * ns);
+ quiesceEvent->reschedule(resume);
else
- quiesceEvent->schedule(curTick + Clock::Int::ns * ns);
+ quiesceEvent->schedule(resume);
+
+ DPRINTF(Quiesce, "%s: quiesceNs(%d) until %d\n",
+ tc->getCpuPtr()->name(), ns, resume);
tc->suspend();
if (tc->getKernelStats())
@@ -105,12 +112,15 @@ namespace AlphaPseudo
EndQuiesceEvent *quiesceEvent = tc->getQuiesceEvent();
+ Tick resume = curTick + tc->getCpuPtr()->cycles(cycles);
+
if (quiesceEvent->scheduled())
- quiesceEvent->reschedule(curTick +
- tc->getCpuPtr()->cycles(cycles));
+ quiesceEvent->reschedule(resume);
else
- quiesceEvent->schedule(curTick +
- tc->getCpuPtr()->cycles(cycles));
+ quiesceEvent->schedule(resume);
+
+ DPRINTF(Quiesce, "%s: quiesceCycles(%d) until %d\n",
+ tc->getCpuPtr()->name(), cycles, resume);
tc->suspend();
if (tc->getKernelStats())
diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
index edd4e331d..e79712a19 100644
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -356,6 +356,14 @@ convertStatBuf(target_stat &tgt, host_stat *host, bool fakeTTY = false)
tgt->st_dev = htog(tgt->st_dev);
tgt->st_ino = host->st_ino;
tgt->st_ino = htog(tgt->st_ino);
+ tgt->st_mode = host->st_mode;
+ tgt->st_mode = htog(tgt->st_mode);
+ tgt->st_nlink = host->st_nlink;
+ tgt->st_nlink = htog(tgt->st_nlink);
+ tgt->st_uid = host->st_uid;
+ tgt->st_uid = htog(tgt->st_uid);
+ tgt->st_gid = host->st_gid;
+ tgt->st_gid = htog(tgt->st_gid);
if (fakeTTY)
tgt->st_rdev = 0x880d;
else