mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-08 21:09:49 +00:00
When unwinding needs to be done because the stack pointer is reset (e.g. by a longjmp), it makes no sense to interprete the control flow change as call, but should be seen as a return. This indirectly fixes bug 246152. Unwinding potentially changes the exec state, which is unique for threads, but also for signal handlers. E.g. this is true for a longjmp out of a signal handler. Exec state changes modify members of struct CLG_(current_state), such as CLG_(current_state).bbcc and CLG_(current_state).jmps_passed, which are backed in CLG_(setup_bbcc)() by last_bbcc and passed, respectivly. On a exec state change, these local vars go out of sync, and lead to invalid data passed to CLG_(push_call_stack)() for handling a call, which triggered data corruption, and the symptoms seen in bug 246152. As in the given situation, there is no call anymore, there is no call into CLG_(push_call_stack)(), and the corruption (or since last commit the failed assertion) is not triggered any more. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11524