summaryrefslogtreecommitdiff
path: root/src/dev/terminal.cc
diff options
context:
space:
mode:
authorAndreas Sandberg <andreas@sandberg.pp.se>2015-11-27 14:41:59 +0000
committerAndreas Sandberg <andreas@sandberg.pp.se>2015-11-27 14:41:59 +0000
commit5383e1ada49b59daf4ff8703076923d4ccb6207d (patch)
tree3a3dd8f95be7cf5546a5c2d1e4e58107ae2c03a0 /src/dev/terminal.cc
parentfed0ea55c476d9843e3f07e4f879254d34d99279 (diff)
downloadgem5-5383e1ada49b59daf4ff8703076923d4ccb6207d.tar.xz
base: Add support for changing output directories
This changeset adds support for changing the simulator output directory. This can be useful when the simulation goes through several stages (e.g., a warming phase, a simulation phase, and a verification phase) since it allows the output from each stage to be located in a different directory. Relocation is done by calling core.setOutputDir() from Python or simout.setOutputDirectory() from C++. This change affects several parts of the design of the gem5's output subsystem. First, files returned by an OutputDirectory instance (e.g., simout) are of the type OutputStream instead of a std::ostream. This allows us to do some more book keeping and control re-opening of files when the output directory is changed. Second, new subdirectories are OutputDirectory instances, which should be used to create files in that sub-directory. Signed-off-by: Andreas Sandberg <andreas@sandberg.pp.se> [sascha.bischoff@arm.com: Rebased patches onto a newer gem5 version] Signed-off-by: Sascha Bischoff <sascha.bischoff@arm.com> Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Diffstat (limited to 'src/dev/terminal.cc')
-rw-r--r--src/dev/terminal.cc14
1 files changed, 5 insertions, 9 deletions
diff --git a/src/dev/terminal.cc b/src/dev/terminal.cc
index 6db43ef88..53e593f85 100644
--- a/src/dev/terminal.cc
+++ b/src/dev/terminal.cc
@@ -108,18 +108,14 @@ Terminal::DataEvent::process(int revent)
*/
Terminal::Terminal(const Params *p)
: SimObject(p), termDataAvail(NULL), listenEvent(NULL), dataEvent(NULL),
- number(p->number), data_fd(-1), txbuf(16384), rxbuf(16384), outfile(NULL)
+ number(p->number), data_fd(-1), txbuf(16384), rxbuf(16384),
+ outfile(p->output ? simout.findOrCreate(p->name) : NULL)
#if TRACING_ON == 1
, linebuf(16384)
#endif
{
- if (p->output) {
- outfile = simout.find(p->name);
- if (!outfile)
- outfile = simout.create(p->name);
-
- outfile->setf(ios::unitbuf);
- }
+ if (outfile)
+ outfile->stream()->setf(ios::unitbuf);
if (p->port)
listen(p->port);
@@ -347,7 +343,7 @@ Terminal::out(char c)
write(c);
if (outfile)
- outfile->write(&c, 1);
+ outfile->stream()->write(&c, 1);
DPRINTF(TerminalVerbose, "out: \'%c\' %#02x\n",
isprint(c) ? c : ' ', (int)c);