|
From: Julian S. <js...@ac...> - 2011-09-19 03:59:58
|
> So, a possible cause for the difference might be in the code generated > byValgrind (e.g. for the client request and the maintenance of the > simulated program counter) : if the code emitted for the client request > does not store back the exact program counter to the VEX state before > doing the client request, then both Valgrind and gdb unwinder will wrongly > show another program counter. > E.g. I do not know how the Valgrind optimiser is informed that a client > request can e.g. read various registers and so that the state of these > must be properly put back to the VEX state before doing the call ? This was my first guess too. But the thing is, AFAIR vex makes all guest registers be up to date before doing a client request, because a client request terminates a superblock, and all guest registers are up to date at the end of a superblock -- at least in this case, when the dispatch-ppc64-linux.S dispatcher returns to m_scheduler in order to carry out the client request. So I am not sure what's going on here. J |