summaryrefslogtreecommitdiff
path: root/util/statetrace/tracechild.cc
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2007-03-05 20:54:36 -0500
committerGabe Black <gblack@eecs.umich.edu>2007-03-05 20:54:36 -0500
commitf776ec84c1431c89b33364a559af76360532a0e3 (patch)
treef11aa5eed6e15175311d7c69fd67e2bec5066b75 /util/statetrace/tracechild.cc
parent992fda55f91c652b1ced0ac50de9b6d647f1345f (diff)
parent9b72ff82907a1f3b0b740dcbceb462fb0fd7d8c3 (diff)
downloadgem5-f776ec84c1431c89b33364a559af76360532a0e3.tar.xz
Merge zizzer.eecs.umich.edu:/bk/newmem
into zower.eecs.umich.edu:/home/gblack/m5/newmem-statetrace --HG-- extra : convert_revision : 0959fb162253ff1eed8da0a990f58897322f0e1f
Diffstat (limited to 'util/statetrace/tracechild.cc')
-rw-r--r--util/statetrace/tracechild.cc13
1 files changed, 10 insertions, 3 deletions
diff --git a/util/statetrace/tracechild.cc b/util/statetrace/tracechild.cc
index 292c45658..130f9690f 100644
--- a/util/statetrace/tracechild.cc
+++ b/util/statetrace/tracechild.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006 The Regents of The University of Michigan
+ * Copyright (c) 2006-2007 The Regents of The University of Michigan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -36,8 +36,9 @@
using namespace std;
-bool TraceChild::startTracing(const char * pathToFile, const char * arg)
+bool TraceChild::startTracing(const char * pathToFile, char * const argv[])
{
+ instructions = 0;
pid = fork();
if(pid == -1)
{
@@ -53,7 +54,7 @@ bool TraceChild::startTracing(const char * pathToFile, const char * arg)
ptrace(PTRACE_TRACEME, 0, 0, 0);
//Start the program to trace
- execl(pathToFile, arg);
+ execv(pathToFile, argv);
//We should never get here, so this is an error!
return false;
@@ -121,6 +122,8 @@ bool TraceChild::doWait()
{
cerr << "Program exited! Exit status is "
<< WEXITSTATUS(wait_val) << endl;
+ cerr << "Executed " << instructions
+ << " instructions." << endl;
tracing = false;
return false;
}
@@ -132,6 +135,8 @@ bool TraceChild::doWait()
if(WCOREDUMP(wait_val))
cerr << "Program core dumped!" << endl;
tracing = false;
+ cerr << "Executed " << instructions
+ << " instructions." << endl;
return false;
}
if(WIFSTOPPED(wait_val) && WSTOPSIG(wait_val) != SIGTRAP)
@@ -139,6 +144,8 @@ bool TraceChild::doWait()
cerr << "Program stopped by signal "
<< WSTOPSIG(wait_val) << endl;
tracing = false;
+ cerr << "Executed " << instructions
+ << " instructions." << endl;
return false;
}
return true;