diff -r 52bd54c907ea -r 80ea5f59f09a src/python/m5/simulate.py --- a/src/python/m5/simulate.py Fri Nov 27 14:41:59 2015 +0000 +++ b/src/python/m5/simulate.py Thu Nov 26 10:03:43 2015 +0000 @@ -308,4 +308,8 @@ for old_cpu, new_cpu in cpuList: new_cpu.takeOverFrom(old_cpu) +def notifyFork(root): + for obj in root.descendants(): + obj.notifyFork() + from internal.core import disableAllListeners diff -r 52bd54c907ea -r 80ea5f59f09a src/sim/drain.hh --- a/src/sim/drain.hh Fri Nov 27 14:41:59 2015 +0000 +++ b/src/sim/drain.hh Thu Nov 26 10:03:43 2015 +0000 @@ -275,6 +275,20 @@ /** Return the current drain state of an object. */ DrainState drainState() const { return _drainState; } + /** + * Notify a child process of a fork. + * + * When calling fork in gem5, we need to ensure that resources + * shared between the parent and the child are consistent. This + * method is intended to be overloaded to handle that. For + * example, an object could use this method to re-open input files + * to get a separate file description with a private file offset. + * + * This method is only called in the child of the fork. The call + * takes place in a drained system. + */ + virtual void notifyFork() {}; + private: /** DrainManager interface to request a drain operation */ DrainState dmDrain();