From 5383e1ada49b59daf4ff8703076923d4ccb6207d Mon Sep 17 00:00:00 2001 From: Andreas Sandberg Date: Fri, 27 Nov 2015 14:41:59 +0000 Subject: 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 [sascha.bischoff@arm.com: Rebased patches onto a newer gem5 version] Signed-off-by: Sascha Bischoff Signed-off-by: Andreas Sandberg --- src/dev/arm/hdlcd.cc | 4 ++-- src/dev/arm/hdlcd.hh | 3 ++- src/dev/arm/pl111.cc | 7 ++++--- src/dev/arm/pl111.hh | 3 ++- 4 files changed, 10 insertions(+), 7 deletions(-) (limited to 'src/dev/arm') diff --git a/src/dev/arm/hdlcd.cc b/src/dev/arm/hdlcd.cc index 2c402b00a..b04de21bf 100644 --- a/src/dev/arm/hdlcd.cc +++ b/src/dev/arm/hdlcd.cc @@ -544,8 +544,8 @@ HDLcd::pxlFrameDone() } assert(pic); - pic->seekp(0); - bmp.write(*pic); + pic->stream()->seekp(0); + bmp.write(*pic->stream()); } } diff --git a/src/dev/arm/hdlcd.hh b/src/dev/arm/hdlcd.hh index 721935457..acce6f191 100644 --- a/src/dev/arm/hdlcd.hh +++ b/src/dev/arm/hdlcd.hh @@ -81,6 +81,7 @@ #include "base/bitmap.hh" #include "base/framebuffer.hh" +#include "base/output.hh" #include "dev/arm/amba_device.hh" #include "dev/pixelpump.hh" #include "sim/serialize.hh" @@ -347,7 +348,7 @@ class HDLcd: public AmbaDmaDevice Bitmap bmp; /** Picture of what the current frame buffer looks like */ - std::ostream *pic; + OutputStream *pic; /** Cached pixel converter, set when the converter is enabled. */ PixelConverter conv; diff --git a/src/dev/arm/pl111.cc b/src/dev/arm/pl111.cc index 179f1bf2d..23ffe58c9 100644 --- a/src/dev/arm/pl111.cc +++ b/src/dev/arm/pl111.cc @@ -523,11 +523,12 @@ Pl111::dmaDone() DPRINTF(PL111, "-- write out frame buffer into bmp\n"); if (!pic) - pic = simout.create(csprintf("%s.framebuffer.bmp", sys->name()), true); + pic = simout.create(csprintf("%s.framebuffer.bmp", sys->name()), + true); assert(pic); - pic->seekp(0); - bmp.write(*pic); + pic->stream()->seekp(0); + bmp.write(*pic->stream()); } // schedule the next read based on when the last frame started diff --git a/src/dev/arm/pl111.hh b/src/dev/arm/pl111.hh index a55e8b8c3..aea78709c 100644 --- a/src/dev/arm/pl111.hh +++ b/src/dev/arm/pl111.hh @@ -51,6 +51,7 @@ #include "base/bitmap.hh" #include "base/framebuffer.hh" +#include "base/output.hh" #include "dev/arm/amba_device.hh" #include "params/Pl111.hh" #include "sim/serialize.hh" @@ -268,7 +269,7 @@ class Pl111: public AmbaDmaDevice Bitmap bmp; /** Picture of what the current frame buffer looks like */ - std::ostream *pic; + OutputStream *pic; /** Frame buffer width - pixels per line */ uint16_t width; -- cgit v1.2.3