summaryrefslogtreecommitdiff
path: root/src/sim/sim_object.cc
diff options
context:
space:
mode:
authorSteve Reinhardt <steve.reinhardt@amd.com>2011-05-23 14:29:08 -0700
committerSteve Reinhardt <steve.reinhardt@amd.com>2011-05-23 14:29:08 -0700
commit41fc9bbab58a17c5d397e4d1f69db549da415374 (patch)
tree88325c4011c3880c40c2b131a52d530e37aa825b /src/sim/sim_object.cc
parentccbecb9e8f35df55c3a138942eb37aecce899440 (diff)
downloadgem5-41fc9bbab58a17c5d397e4d1f69db549da415374.tar.xz
config: reinstate implicit parenting on parameter assignment
Last summer's big rewrite of the initialization code (in particular cset 6efc3672733b) got rid of the implicit parenting that used to occur when an unparented SimObject was assigned as a parameter value to another SimObject. The idea was that the new adoptOrphanParams() step would catch these anyway so it was unnecessary. Unfortunately it turns out that adoptOrphanParams() has some inherent instability in that the parent that does the adoption depends on the config tree traversal order. Even making this order deterministic (e.g., by traversing children in alphabetical order) can introduce unwanted and unexpected hierarchy changes between similar configs (e.g., when adding a switch_cpu in place of a cpu), causing problems when trying to restore checkpoints across similar configs. The hierarchy created by implicit parenting is more stable and more controllable, so this patch turns that behavior back on. This patch also cleans up some long-standing holes regarding parenting of SimObjects that are created in class definitions (either in the body of the class, or as default parameters). To avoid breaking some existing config files, this necessitated changing the error on reparenting children to a warning. This change fixes another bug where attempting to print the prior error message would fail on reparenting SimObjectVectors because they lack a _parent attribute. Some further issues with SimObjectVectors were cleaned up by getting rid of the get_parent() call (which could cause errors with some SimObjectVectors where there was no single parent to return) with has_parent() (since all the uses of get_parent() were just boolean tests anyway). Finally, since the adoptOrphanParam() step turned out to be so problematic, we now issue a warning when it actually has to do an adoption. Future cleanup of config files will get rid of current warnings.
Diffstat (limited to 'src/sim/sim_object.cc')
0 files changed, 0 insertions, 0 deletions