mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-04 02:18:37 +00:00
Removed the SK_(written_shadow_regs_values)() function. Instead, skins that use shadow regs can track the `post_regs_write_init' event, and set the shadow regs from within it. This is much more flexible, since it allows each shadow register to be set to a separate value if necessary. It also matches the new shadow-reg-change events described below. In the core, there were some places where the shadow regs were changed, and skins had no way of knowing about it, which was a problem for some skins. So I added a bunch of new events to notify skins about these: post_reg_write_syscall_return post_reg_write_deliver_signal post_reg_write_pthread_return post_reg_write_clientreq_return post_reg_write_clientcall_return Any skin that uses shadow regs should almost certainly track these events. The post_reg_write_clientcall_return allows a skin to tailor the shadow reg of the return value of a CLIENTCALL'd function appropriately; this is especially useful when replacing malloc() et al. Defined some macros that should be used *whenever the core changes the value of a shadow register* : SET_SYSCALL_RETVAL SET_SIGNAL_EDX (maybe should be SET_SIGNAL_RETVAL? ... not sure) SET_SIGNAL_ESP SET_CLREQ_RETVAL SET_CLCALL_RETVAL SET_PTHREQ_ESP SET_PTHREQ_RETVAL These replace all the old SET_EAX and SET_EDX macros, and are added in a few places where the shadow-reg update was missing. Added shadow registers to the machine state saved/restored when signal handlers are pushed/popped (they were missing). Added skin-callable functions VG_(set_return_from_syscall_shadow)() and VG_(get_exit_status_shadow)() which are useful and abstract away from which registers the results are in. Also, poll() changes %ebx (it's first argument) sometimes, I don't know why. So we notify skins about that too (with the `post_reg_write_syscall_return' event, which isn't ideal I guess...) git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1642