python: Fix issue when Self proxy resolves to a another proxy
authorAndreas Sandberg <andreas.sandberg@arm.com>
Sun, 27 Jan 2019 09:34:54 +0000 (09:34 +0000)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Fri, 1 Mar 2019 17:38:42 +0000 (17:38 +0000)
commitaf9496b1f21021a4b431da665c027b521a2de17d
tree03412dec4f3171e10a635e04a701a88c99ced40e
parent96cc03f90db82fa8f84248ef478362267dba292c
python: Fix issue when Self proxy resolves to a another proxy

The problem occurs when a proxy is being resolved to another proxy
that hasn't been resolved yet. The problematic case that was
triggering this issues in the VGIC. It was caused by parameters
looking a bit like this:

gic = Param.GicV2(Parent.any)
some_param = Param.Int(Self.gic.some_param)

When 'some_param' was resolved, it found the 'gic' parameter in
Self. However, that parameter hadn't been resolved yet, so the
existing code was setting the proxy evaluation context to the
unresolved Parent.any proxy without first unproxying it.

It seems like this bug depends on the graph traversal order and I have
so far only seen it when compiling gem5 with Python 3.

Change-Id: Iea12cc138765e70bfd6bb776b1efa012364db066
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/16004
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
src/python/m5/proxy.py